تقديم نموذج TensorFlow

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

يوضح لك هذا البرنامج التعليمي كيفية استخدام مكونات خدمة TensorFlow لتصدير نموذج TensorFlow مدرب واستخدام tensorflow_model_server القياسي لخدمته. إذا كنت بالفعل على دراية TensorFlow خدمة، وكنت ترغب في معرفة المزيد عن كيفية عمل الأجزاء الداخلية الخادم، راجع TensorFlow خدمة تعليمي متقدم .

يستخدم هذا البرنامج التعليمي نموذج Softmax Regression البسيط الذي يصنف الأرقام المكتوبة بخط اليد. أنها مشابهة جدا لتلك التي أدخلت في TensorFlow البرنامج التعليمي على تصنيف الصور باستخدام بيانات الأزياء MNIST .

يتكون رمز هذا البرنامج التعليمي من جزأين:

  • ملف بيثون، mnist_saved_model.py ، أن القطارات والصادرات النموذج.

  • A ModelServer ثنائي والتي يمكن إما تثبيتها باستخدام شقة، أو التي تم تجميعها من ملف 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 و ثائق API TensorFlow ذات الصلة .

  • signature_def_map يحدد خريطة مفتاح تزود المستخدمين لتوقيع لtensorflow :: SignatureDef إضافة إلى الرسم البياني الفوقية. يحدد التوقيع نوع النموذج الذي يتم تصديره ، وموترات الإدخال / الإخراج التي يجب الارتباط بها عند تشغيل الاستدلال.

    مفتاح توقيع خاص serving_default يحدد الافتراضي تخدم التوقيع. يتم تعريف مفتاح تعريف توقيع العرض الافتراضي ، إلى جانب الثوابت الأخرى المتعلقة بالتوقيعات ، كجزء من ثوابت التوقيع SavedModel. لمزيد من التفاصيل، انظر signature_constants.py و ثائق API TensorFlow ذات الصلة .

    وعلاوة على ذلك، لمساعدة defs بناء توقيع بسهولة، ويوفر API SavedModel تيلس مواطنه توقيع .. على وجه التحديد، في النص الأصلي mnist_saved_model.py ملف، ونحن نستخدم signature_def_utils.build_signature_def() لبناء predict_signature و classification_signature .

    كمثال لكيفية predict_signature يعرف، وUTIL يأخذ الوسائط التالية:

    • inputs={'images': tensor_info_x} تحدد المعلومات المدخلات الموترة.

    • outputs={'scores': tensor_info_y} تحدد درجات موتر من المعلومات.

    • method_name هي الطريقة المستخدمة في الاستدلال. لطلبات التنبؤ، فإنه يجب تعيين tensorflow/serving/predict . أسماء طريقة أخرى، انظر signature_constants.py و ثائق API TensorFlow ذات الصلة .

علما بأن 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") و ( "عشرات "->" created_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 صورة اختبار. هذا يؤكد أن الخادم يقوم بتحميل وتشغيل النموذج المدرب بنجاح!