واحدة من أسهل الطرق للبدء باستخدام TensorFlow التي تخدم هو مع عامل الميناء .
# 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] }
بالنسبة لنهايات خدمة إضافية، راجع API العميل REST .
تثبيت Docker
إرشادات التثبيت العام هي في موقع عامل الميناء ، ولكن نعطي بعض روابط سريعة هنا:
- Docker لنظام التشغيل macOS
- عامل الميناء ويندوز ويندوز 10 برو أو في وقت لاحق
- أدوات عامل الميناء لإصدارات أقدم بكثير من ماك، أو إصدارات من ويندوز قبل ويندوز 10 برو
يخدم مع عامل ميناء
سحب صورة التقديم
بمجرد تثبيت Docker ، يمكنك سحب أحدث صورة لـ TensorFlow Serving docker عن طريق تشغيل:
docker pull tensorflow/serving
سيؤدي هذا إلى سحب الحد الأدنى من صورة Docker مع تثبيت TensorFlow Serving.
رؤية عامل الميناء محور tensorflow / خدمة الريبو لإصدارات أخرى من الصور التي يمكن سحب.
تشغيل صورة التقديم
تحتوي صور العرض (كلاً من وحدة المعالجة المركزية ووحدة معالجة الرسومات) على الخصائص التالية:
- المنفذ 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 ، ستحتاج إلى:
- منفذ مفتوح على مضيفك للعمل عليه
- نموذج محفوظ للخدمة
- اسم لنموذجك سيشير إليه عميلك
ما عليك القيام به هو تشغيل عامل الميناء الحاويات، و نشر موانئ الحاويات في الموانئ المضيف الخاص بك، وتصاعد مسار المضيف إلى 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
في هذه الحالة، فإننا قد بدأت حاوية عامل الميناء، نشرت ميناء 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
هذا وسوف أترككم مع صورة عامل الميناء يسمى <my container>
التي يمكنك نشر وسيتم تحميل النموذج الخاص بك لخدمة عند بدء التشغيل.
خدمة المثال
دعنا نمر بمثال كامل حيث نقوم بتحميل SavedModel وندعوه باستخدام REST API. أولاً اسحب صورة التقديم:
docker pull tensorflow/serving
سيؤدي هذا إلى سحب أحدث صورة لخدمة TensorFlow مع تثبيت ModelServer.
بعد ذلك، سوف نستخدم نموذج لعبة تسمى Half Plus Two
، والذي يولد 0.5 * x + 2
لقيم x
التي نقدمها للتنبؤ.
للحصول على هذا النموذج ، قم أولاً باستنساخ مستودع خدمة TensorFlow.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
بعد ذلك ، قم بتشغيل حاوية خدمة TensorFlow مع توجيهها إلى هذا النموذج وفتح منفذ 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 ، وتعيين نموذجنا المطلوب من مضيفنا إلى حيث من المتوقع وجود النماذج في الحاوية. نقوم أيضًا بتمرير اسم النموذج كمتغير بيئة ، والذي سيكون مهمًا عند الاستعلام عن النموذج.
للاستعلام عن النموذج باستخدام التنبؤ API ، يمكنك تشغيل
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] }
ويمكن الاطلاع على مزيد من المعلومات حول استخدام API مريحة هنا .
الخدمة مع Docker باستخدام GPU الخاص بك
قم بتثبيت nvidia-docker
قبل التقديم مع GPU، بالإضافة إلى تركيب عامل الميناء ، وسوف تحتاج:
- ما يصل إلى تاريخ السائقين NVIDIA للنظام الخاص بك
-
nvidia-docker
: يمكنك اتباع تعليمات التثبيت هنا
تشغيل صورة خدمة GPU
تشغيل صورة خدمة GPU مماثل لتشغيل صورة وحدة المعالجة المركزية. لمزيد من المعلومات، راجع تشغيل صورة خدمة .
مثال على خدمة GPU
دعنا نمر بمثال كامل حيث نقوم بتحميل نموذج مع عمليات مرتبطة بوحدة معالجة الرسومات ونسميه باستخدام واجهة برمجة تطبيقات REST.
أولا تثبيت nvidia-docker
. بعد ذلك ، يمكنك سحب أحدث صورة عامل إرساء GPU لخدمة TensorFlow عن طريق تشغيل:
docker pull tensorflow/serving:latest-gpu
سيؤدي ذلك إلى سحب الحد الأدنى من صورة Docker مع ModelServer المصمم للتشغيل على وحدات معالجة الرسومات المثبتة.
بعد ذلك، سوف نستخدم نموذج لعبة تسمى Half Plus Two
، والذي يولد 0.5 * x + 2
لقيم x
التي نقدمها للتنبؤ. سيكون لهذا النموذج عمليات مرتبطة بجهاز GPU ، ولن يتم تشغيله على وحدة المعالجة المركزية.
للحصول على هذا النموذج ، قم أولاً باستنساخ مستودع خدمة TensorFlow.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
بعد ذلك ، قم بتشغيل حاوية خدمة TensorFlow مع توجيهها إلى هذا النموذج وفتح منفذ 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 ...
للاستعلام عن النموذج باستخدام التنبؤ API ، يمكنك تشغيل
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
ويمكن الاطلاع على مزيد من المعلومات حول استخدام API مريحة هنا .
التطوير باستخدام Docker
للحصول على إرشادات حول كيفية بناء وتطوير Tensorflow خدمة، يرجى الرجوع إلى تطوير مع دليل عامل الميناء .