التطوير باستخدام Docker

سحب صورة التنمية

بالنسبة لبيئة تطوير حيث يمكنك إنشاء خدمة TensorFlow، يمكنك تجربة ما يلي:

docker pull tensorflow/serving:latest-devel

للحصول على بيئة تطوير حيث يمكنك إنشاء خدمة TensorFlow بدعم GPU، استخدم:

docker pull tensorflow/serving:latest-devel-gpu

راجع Docker Hub Tensorflow/serving repo للحصول على إصدارات أخرى من الصور التي يمكنك سحبها.

مثال التطوير

بعد سحب إحدى صور Docker التطويرية، يمكنك تشغيلها أثناء فتح منفذ gRPC (8500):

docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel

اختبار بيئة التطوير

لاختبار نموذج، حاول من داخل الحاوية:

# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500

ملفات الإرساء

نحتفظ حاليًا بملفات Dockerfiles التالية:

  • Dockerfile ، وهو عبارة عن جهاز افتراضي صغير مع تثبيت TensorFlow Serving.

  • Dockerfile.gpu ، وهو عبارة عن جهاز افتراضي صغير مزود بخدمة TensorFlow مع دعم GPU لاستخدامه مع nvidia-docker .

  • Dockerfile.devel ، وهو عبارة عن جهاز افتراضي صغير يحتوي على جميع التبعيات اللازمة لإنشاء خدمة TensorFlow.

  • Dockerfile.devel-gpu ، وهو عبارة عن جهاز افتراضي صغير يحتوي على جميع التبعيات اللازمة لإنشاء خدمة TensorFlow مع دعم وحدة معالجة الرسومات.

بناء حاوية من ملف Dockerfile

إذا كنت ترغب في إنشاء صورة Docker الخاصة بك من ملف Dockerfile، فيمكنك القيام بذلك عن طريق تشغيل أمر Docker build:

Dockerfile :

docker build --pull -t $USER/tensorflow-serving .

Dockerfile.gpu :

docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .

Dockerfile.devel :

docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .

Dockerfile.devel-gpu :

docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .

نصيحة: قبل محاولة إنشاء صورة، تحقق من مستودع Docker Hub Tensorflow/serving للتأكد من عدم وجود صورة تلبي احتياجاتك بالفعل.

البناء من المصادر يستهلك الكثير من ذاكرة الوصول العشوائي. إذا كانت ذاكرة الوصول العشوائي تمثل مشكلة في نظامك، فيمكنك تقييد استخدام ذاكرة الوصول العشوائي عن طريق تحديد --local_ram_resources=2048 أثناء استدعاء Bazel. راجع مستندات Bazel لمزيد من المعلومات. يمكنك استخدام هذه الآلية نفسها لتعديل التحسينات التي تستخدمها في إنشاء خدمة TensorFlow. على سبيل المثال:

docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
  --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
  $USER/tensorflow-serving-devel -f Dockerfile.devel .

تشغيل حاوية

يفترض هذا أنك قمت ببناء حاوية Dockerfile.devel .

لتشغيل الحاوية بفتح منفذ gRPC (8500):

docker run -it -p 8500:8500 $USER/tensorflow-serving-devel

نصيحة: إذا كنت تقوم بتشغيل صورة GPU، فتأكد من تشغيلها باستخدام NVIDIA runtime --runtime=nvidia .

من هنا، يمكنك اتباع التعليمات الخاصة باختبار بيئة التطوير .

بناء خدمة ثنائية الأمثل

عند تشغيل ModelServer الخاص بـ TensorFlow Serving، قد تلاحظ رسالة سجل تبدو كما يلي:

I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA

يشير هذا إلى أن الملف الثنائي ModelServer الخاص بك لم يتم تحسينه بشكل كامل لوحدة المعالجة المركزية التي يعمل عليها. اعتمادًا على النموذج الذي تخدمه، قد لا تكون هناك حاجة إلى إجراء مزيد من التحسينات. ومع ذلك، فإن بناء ثنائي محسّن هو أمر سهل ومباشر.

عند إنشاء صورة Docker من ملفات Dockerfile.devel أو Dockerfile.devel-gpu المتوفرة، سيتم إنشاء ثنائي ModelServer بالعلامة -march=native . سيؤدي هذا إلى قيام Bazel بإنشاء نموذج ثنائي ModelServer مع جميع تحسينات وحدة المعالجة المركزية التي يدعمها المضيف الذي تقوم ببناء صورة Docker عليه.

لإنشاء صورة عرض مُحسّنة بالكامل لمضيفك، ما عليك سوى:

  1. استنساخ مشروع خدمة TensorFlow

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. قم ببناء صورة باستخدام ModelServer الأمثل

    • لوحدة المعالجة المركزية:

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • بالنسبة لوحدة معالجة الرسومات: `

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. قم ببناء صورة التقديم مع صورة التطوير كقاعدة

    • لوحدة المعالجة المركزية:

      docker build -t $USER/tensorflow-serving \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile .
      

      أصبحت صورة Docker المحسنة الجديدة الخاصة بك الآن $USER/tensorflow-serving ، والتي يمكنك استخدامها تمامًا كما تفعل مع tensorflow/serving:latest image القياسي.

    • بالنسبة لوحدة معالجة الرسومات:

      docker build -t $USER/tensorflow-serving-gpu \
        --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.gpu .
      

      أصبحت صورة Docker المحسنة الجديدة الآن $USER/tensorflow-serving-gpu ، والتي يمكنك استخدامها تمامًا كما تفعل مع صورة tensorflow/serving:latest-gpu القياسية.