این آموزش به شما نشان می دهد که چگونه از اجزای TensorFlow Serving برای صادرات یک مدل TensorFlow آموزش دیده و استفاده از استاندارد tensorflow_model_server برای ارائه آن استفاده کنید. اگر شما در حال حاضر با TensorFlow خدمت آشنا، و شما می خواهید به دانستن بیشتر در مورد چگونه داخلی سرور کار می کنند، را ببینید TensorFlow خدمت آموزش پیشرفته .
این آموزش از یک مدل رگرسیون سافت مکس ساده استفاده می کند که ارقام دست نویس را طبقه بندی می کند. این بسیار شبیه به یک معرفی در است آموزش TensorFlow در طبقه بندی تصویر با استفاده از مجموعه داده مد MNIST .
کد این آموزش شامل دو بخش است:
یک فایل پایتون، mnist_saved_model.py ، که قطار و صادرات مدل.
دودویی یک ModelServer که می تواند یا با استفاده از apt نصب شده است، و یا وارد شده از فایل یک C ++ ( main.cc ). TensorFlow خدمت کشف ModelServer مدل های جدید صادر و اجرا می شود یک gRPC خدمات برای خدمت به آنها.
قبل از شروع، اول کارگر بارانداز نصب .
آموزش و صادرات مدل TensorFlow
برای مرحله آموزش، نمودار TensorFlow است در TensorFlow جلسه راه اندازی sess
با تانسور ورودی (تصویر) را به عنوان، x
و تانسور خروجی (نمره Softmax) به عنوان y
.
سپس با استفاده TensorFlow است ماژول SavedModelBuilder به صادرات مدل. SavedModelBuilder
موجب صرفه جویی در "عکس فوری" از مدل آموزش دیده برای ذخیره سازی قابل اعتماد به طوری که می توان آن را بعدا برای استنتاج لود می شود.
برای جزئیات در مورد فرمت SavedModel، لطفا اسناد و مدارک را در دیدن SavedModel README.md .
از mnist_saved_model.py ، به شرح زیر یک قطعه کد کوتاه برای نشان دادن روند کلی صرفه جویی در یک مدل بر روی دیسک است.
export_path_base = sys.argv[-1]
export_path = os.path.join(
tf.compat.as_bytes(export_path_base),
tf.compat.as_bytes(str(FLAGS.model_version)))
print('Exporting trained model to', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
sess, [tf.compat.v1.saved_model.tag_constants.SERVING],
signature_def_map={
'predict_images':
prediction_signature,
tf.compat.v1.saved_model.signature_constants
.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
classification_signature,
},
main_op=tf.compat.v1.tables_initializer(),
strip_default_attrs=True)
builder.save()
SavedModelBuilder.__init__
طول می کشد به استدلال زیر:
-
export_path
مسیر دایرکتوری صادراتی است.
SavedModelBuilder
دایرکتوری ایجاد کند وجود ندارد. در این مثال، ما الحاق استدلال خط فرمان و FLAGS.model_version
برای به دست آوردن دایرکتوری صادرات. FLAGS.model_version
نسخه از مدل مشخص می کند. هنگام صادرات یک نسخه جدیدتر از همان مدل، باید یک مقدار صحیح بزرگتر را مشخص کنید. هر نسخه در مسیر داده شده به یک زیر شاخه متفاوت صادر می شود.
شما می توانید نمودار های متا و متغیرها را به سازنده با استفاده از اضافه SavedModelBuilder.add_meta_graph_and_variables()
با استدلال زیر است:
sess
جلسه TensorFlow که مدل آموزش دیده که در حال صادرات نگه می دارد.tags
مجموعه ای از برچسب ها را با که برای صرفه جویی نمودار متا است. در این مورد، از آنجایی که ما قصد استفاده از نمودار در خدمت، ما با استفاده ازserve
برچسب از پیش تعریف شده ثابت برچسب SavedModel. برای جزئیات بیشتر، نگاه کنید tag_constants.py و TensorFlow مرتبط مستندات API .signature_def_map
مشخص نقشه کلید به کاربر عرضه شده برای یک امضا به یک tensorflow :: SignatureDef برای اضافه کردن به نمودار متا. امضا مشخص می کند که چه نوع مدلی صادر می شود و تانسورهای ورودی/خروجی که هنگام اجرای استنتاج باید به آن متصل شوند.کلید امضای ویژه
serving_default
مشخص به طور پیش فرض در خدمت امضا. کلید دف امضای سرویس پیشفرض، همراه با سایر ثابتهای مربوط به امضاها، به عنوان بخشی از ثابتهای امضای SavedModel تعریف میشوند. برای جزئیات بیشتر، نگاه کنید signature_constants.py و TensorFlow مرتبط مستندات API .علاوه بر این، به کمک defs امضای ساخت به راحتی، API SavedModel فراهم می کند امضای زدن دف .. به طور خاص، در اصل mnist_saved_model.py فایل، ما با استفاده از
signature_def_utils.build_signature_def()
به ساختpredict_signature
وclassification_signature
.به عنوان مثال برای
predict_signature
تعریف شده است، برنامه زمانی استدلال زیر طول می کشد:inputs={'images': tensor_info_x}
اطلاعات تانسور ورودی مشخص می کند.outputs={'scores': tensor_info_y}
نمرات تانسور اطلاعات مشخص می کند.method_name
روش مورد استفاده برای استنتاج است. برای درخواست پیش بینی، باید آن را به مجموعه ایtensorflow/serving/predict
. سایر نامهای روش، و signature_constants.py و TensorFlow مرتبط مستندات API .
توجه داشته باشید که tensor_info_x
و tensor_info_y
دارای ساختار از tensorflow::TensorInfo
پروتکل بافر تعریف اینجا . به راحتی ساخت تانسور ساعات، از API TensorFlow SavedModel نیز فراهم می کند utils.py ، با اسناد و مدارک TensorFlow API مرتبط .
همچنین، توجه داشته باشید که images
و scores
نام مستعار تانسور است. آنها می توانند هر رشته منحصر به فرد شما می خواهید، و آنها را تبدیل به نام منطقی تانسور x
و y
که شما برای تانسور اتصال هنگام ارسال درخواست پیش بینی بعد مراجعه کنید.
برای مثال، اگر x
اشاره به تانسور با نام «long_tensor_name_foo و y
به تانسور با نام« generated_tensor_name_bar اشاره، builder
خواهد تانسور نام منطقی به نام واقعی ذخیره نقشه برداری ( 'تصاویر' -> 'long_tensor_name_foo') و ( 'نمرات ' -> 'generated_tensor_name_bar'). این به کاربر این امکان را می دهد که هنگام اجرای استنتاج به این تانسورها با نام منطقی آنها اشاره کند.
بیایید آن را اجرا کنیم!
ابتدا، اگر هنوز این کار را نکرده اید، این مخزن را در ماشین محلی خود شبیه سازی کنید:
git clone https://github.com/tensorflow/serving.git
cd serving
اگر دایرکتوری صادرات از قبل وجود دارد پاک کنید:
rm -rf /tmp/mnist
حالا بیایید مدل را آموزش دهیم:
tools/run_in_docker.sh python tensorflow_serving/example/mnist_saved_model.py \
/tmp/mnist
این باید در خروجی به نظر برسد:
Training model...
...
Done training!
Exporting trained model to models/mnist
Done exporting!
حالا بیایید نگاهی به فهرست صادرات بیندازیم.
$ ls /tmp/mnist
1
همانطور که در بالا ذکر شد، یک زیر شاخه برای صادرات هر نسخه از مدل ایجاد می شود. FLAGS.model_version
است مقدار پیش فرض 1 است، بنابراین متناظر زیر دایرکتوری 1
ایجاد می شود.
$ ls /tmp/mnist/1
saved_model.pb variables
هر زیر شاخه نسخه شامل فایل های زیر است:
saved_model.pb
tensorflow سریال SavedModel است ::. این شامل یک یا چند تعریف نمودار از مدل، و همچنین ابرداده مدل مانند امضا است.variables
فایل های که متغیرهای سریال از نمودار نگه دارند.
با این کار، مدل TensorFlow شما صادر شده و آماده بارگیری است!
مدل صادر شده را با استاندارد TensorFlow ModelServer بارگیری کنید
برای بارگذاری آسان مدل برای ارائه، از یک تصویر سرویس Docker استفاده کنید:
docker run -p 8500:8500 \
--mount type=bind,source=/tmp/mnist,target=/models/mnist \
-e MODEL_NAME=mnist -t tensorflow/serving &
سرور را تست کنید
ما می توانیم ارائه شده استفاده mnist_client ابزار برای تست سرور. مشتری داده های آزمایش MNIST را دانلود می کند، آنها را به عنوان درخواست به سرور ارسال می کند و میزان خطای استنتاج را محاسبه می کند.
tools/run_in_docker.sh python tensorflow_serving/example/mnist_client.py \
--num_tests=1000 --server=127.0.0.1:8500
این باید چیزی شبیه به خروجی داشته باشد
...
Inference error rate: 11.13%
ما انتظار داریم حدود 90٪ دقت برای مدل آموزش دیده Softmax و ما 11٪ نرخ خطای استنتاج برای 1000 تصویر آزمایشی اول دریافت می کنیم. این تایید می کند که سرور مدل آموزش دیده را با موفقیت بارگیری و اجرا می کند!