إحدى أسهل الطرق للبدء في استخدام TensorFlow Serving هي استخدام Docker .
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker run -t --rm -p 8501:8501 \ -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \ -e MODEL_NAME=half_plus_two \ tensorflow/serving &
# Query the model using the predict APIcurl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }
للحصول على نقاط نهاية خدمة إضافية، راجع Client REST API .
قم بتثبيت عامل الميناء
توجد تعليمات التثبيت العامة على موقع Docker ، ولكننا نقدم بعض الروابط السريعة هنا:
- عامل ميناء لنظام التشغيل MacOS
- Docker لنظام التشغيل Windows لنظام التشغيل Windows 10 Pro أو الأحدث
- Docker Toolbox للإصدارات الأقدم من نظام التشغيل macOS، أو إصدارات Windows قبل Windows 10 Pro
يخدم مع دوكر
سحب صورة التقديم
بمجرد تثبيت Docker، يمكنك سحب أحدث صورة لوحدة الإرساء TensorFlow Serving عن طريق تشغيل:
docker pull tensorflow/serving
سيؤدي هذا إلى سحب صورة Docker صغيرة مع تثبيت TensorFlow Serving.
راجع Docker Hub Tensorflow/serving repo للحصول على إصدارات أخرى من الصور التي يمكنك سحبها.
تشغيل صورة التقديم
تتمتع صور العرض (كل من وحدة المعالجة المركزية ووحدة معالجة الرسومات) بالخصائص التالية:
- المنفذ 8500 مكشوف لـ gRPC
- تم الكشف عن المنفذ 8501 لـ REST API
- متغير البيئة الاختياري
MODEL_NAME
(model
الافتراضي) - متغير البيئة الاختياري
MODEL_BASE_PATH
(الافتراضي هو/models
)
عندما تقوم صورة العرض بتشغيل ModelServer، فإنها تقوم بتشغيله على النحو التالي:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}
للخدمة مع Docker، ستحتاج إلى:
- منفذ مفتوح على مضيفك للخدمة عليه
- نموذج محفوظ للخدمة
- اسم لنموذجك الذي سيشير إليه عميلك
ما ستفعله هو تشغيل حاوية Docker ، ونشر منافذ الحاوية على منافذ مضيفك، وتثبيت مسار مضيفك إلى SavedModel حيث تتوقع الحاوية النماذج.
دعونا نلقي نظرة على مثال:
docker run -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
-e MODEL_NAME=my_model -t tensorflow/serving
في هذه الحالة، بدأنا حاوية Docker، ونشرنا منفذ REST API 8501 إلى منفذ مضيفنا 8501، واتخذنا نموذجًا أطلقنا عليه اسم my_model
وربطناه بالمسار الأساسي للنموذج الافتراضي ( ${MODEL_BASE_PATH}/${MODEL_NAME}
= /models/my_model
). أخيرًا، قمنا بملء متغير البيئة MODEL_NAME
بـ my_model
وتركنا MODEL_BASE_PATH
على قيمته الافتراضية.
سيتم تشغيل هذا في الحاوية:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=my_model --model_base_path=/models/my_model
إذا أردنا نشر منفذ gRPC، فسنستخدم -p 8500:8500
. يمكنك فتح كل من منفذي gRPC وREST API في نفس الوقت، أو اختيار فتح أحدهما فقط أو الآخر.
تمرير الحجج الإضافية
يدعم tensorflow_model_server
العديد من الوسائط الإضافية التي يمكنك تمريرها إلى حاويات عامل الإرساء الخاصة بالخدمة. على سبيل المثال، إذا أردنا تمرير ملف تكوين النموذج بدلاً من تحديد اسم النموذج، فيمكننا القيام بما يلي:
docker run -p 8500:8500 -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
--mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
-t tensorflow/serving --model_config_file=/models/models.config
يعمل هذا الأسلوب مع أي من وسيطات سطر الأوامر الأخرى التي يدعمها tensorflow_model_server
.
إنشاء صورة التقديم الخاصة بك
إذا كنت تريد صورة عرض تحتوي على النموذج الخاص بك مدمجًا في الحاوية، فيمكنك إنشاء صورتك الخاصة.
قم أولاً بتشغيل صورة التقديم كبرنامج خفي:
docker run -d --name serving_base tensorflow/serving
بعد ذلك، انسخ SavedModel الخاص بك إلى مجلد نموذج الحاوية:
docker cp models/<my model> serving_base:/models/<my model>
أخيرًا، قم بتخصيص الحاوية التي تخدم نموذجك عن طريق تغيير MODEL_NAME
ليطابق اسم نموذجك `
docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>
يمكنك الآن التوقف serving_base
docker kill serving_base
سيترك لك هذا صورة Docker تسمى <my container>
والتي يمكنك نشرها وتحميل النموذج الخاص بك للعرض عند بدء التشغيل.
مثال للخدمة
دعونا نستعرض مثالًا كاملاً حيث نقوم بتحميل SavedModel ونسميه باستخدام REST API. أولاً اسحب صورة التقديم:
docker pull tensorflow/serving
سيؤدي هذا إلى سحب أحدث صورة لخدمة TensorFlow مع تثبيت ModelServer.
بعد ذلك، سوف نستخدم نموذج لعبة يسمى Half Plus Two
، والذي يولد 0.5 * x + 2
لقيم x
التي نقدمها للتنبؤ.
للحصول على هذا النموذج، قم أولاً باستنساخ مستودع TensorFlow Serving.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
بعد ذلك، قم بتشغيل حاوية TensorFlow Serving وتوجيهها إلى هذا النموذج وفتح منفذ REST API (8501):
docker run -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving &
سيؤدي هذا إلى تشغيل حاوية الإرساء وإطلاق TensorFlow Serving Model Server، وربط منفذ REST API 8501، وتعيين النموذج المطلوب من مضيفنا إلى المكان المتوقع وجود النماذج في الحاوية. نقوم أيضًا بتمرير اسم النموذج كمتغير بيئة، وهو ما سيكون مهمًا عندما نقوم بالاستعلام عن النموذج.
للاستعلام عن النموذج باستخدام واجهة برمجة التطبيقات المتوقعة، يمكنك تشغيله
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
يجب أن يُرجع هذا مجموعة من القيم:
{ "predictions": [2.5, 3.0, 4.5] }
يمكن العثور على مزيد من المعلومات حول استخدام RESTful API هنا .
التقديم مع Docker باستخدام وحدة معالجة الرسومات (GPU) الخاصة بك
قم بتثبيت nvidia-docker
قبل الخدمة باستخدام وحدة معالجة الرسومات، بالإضافة إلى تثبيت Docker ، ستحتاج إلى:
- برامج تشغيل NVIDIA محدثة لنظامك
-
nvidia-docker
: يمكنك اتباع تعليمات التثبيت هنا
تشغيل صورة خدمة GPU
إن تشغيل صورة عرض وحدة معالجة الرسومات (GPU) مماثل لتشغيل صورة وحدة المعالجة المركزية (CPU). لمزيد من التفاصيل، راجع تشغيل صورة العرض .
مثال على خدمة GPU
دعونا نستعرض مثالًا كاملاً حيث نقوم بتحميل نموذج بعمليات مرتبطة بوحدة معالجة الرسومات ونسميه باستخدام REST API.
قم أولاً بتثبيت nvidia-docker
. بعد ذلك، يمكنك سحب أحدث صورة لرسو السفن TensorFlow Serving GPU عن طريق تشغيل:
docker pull tensorflow/serving:latest-gpu
سيؤدي هذا إلى سحب صورة Docker صغيرة مع ModelServer المصممة للتشغيل على وحدات معالجة الرسومات المثبتة.
بعد ذلك، سوف نستخدم نموذج لعبة يسمى Half Plus Two
، والذي يولد 0.5 * x + 2
لقيم x
التي نقدمها للتنبؤ. سيكون لهذا النموذج عمليات مرتبطة بجهاز GPU، ولن يعمل على وحدة المعالجة المركزية.
للحصول على هذا النموذج، قم أولاً باستنساخ مستودع TensorFlow Serving.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
بعد ذلك، قم بتشغيل حاوية TensorFlow Serving وتوجيهها إلى هذا النموذج وفتح منفذ REST API (8501):
docker run --gpus all -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
سيؤدي هذا إلى تشغيل حاوية الإرساء، وإطلاق TensorFlow Serving Model Server، وربط منفذ REST API 8501، وتعيين النموذج المطلوب من مضيفنا إلى المكان المتوقع وجود النماذج في الحاوية. نقوم أيضًا بتمرير اسم النموذج كمتغير بيئة، وهو ما سيكون مهمًا عندما نقوم بالاستعلام عن النموذج.
نصيحة: قبل الاستعلام عن النموذج، تأكد من الانتظار حتى ترى رسالة مثل التالية، تشير إلى أن الخادم جاهز لتلقي الطلبات:
2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...
للاستعلام عن النموذج باستخدام واجهة برمجة التطبيقات المتوقعة، يمكنك تشغيله
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
يجب أن يُرجع هذا مجموعة من القيم:
{ "predictions": [2.5, 3.0, 4.5] }
نصيحة: ستؤدي محاولة تشغيل نموذج GPU على جهاز بدون GPU أو بدون إنشاء GPU عامل لـ TensorFlow Model Server إلى حدوث خطأ يبدو كما يلي:
Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0
يمكن العثور على مزيد من المعلومات حول استخدام RESTful API هنا .
التطوير باستخدام Docker
للحصول على تعليمات حول كيفية إنشاء وتطوير خدمة Tensorflow، يرجى الرجوع إلى دليل التطوير باستخدام Docker .