در حال توسعه با Docker

کشیدن تصویر توسعه

برای یک محیط توسعه که در آن می توانید سرویس TensorFlow بسازید، می توانید امتحان کنید:

docker pull tensorflow/serving:latest-devel

برای یک محیط توسعه که در آن می‌توانید سرویس TensorFlow را با پشتیبانی GPU بسازید، از موارد زیر استفاده کنید:

docker pull tensorflow/serving:latest-devel-gpu

برای نسخه‌های دیگر تصاویری که می‌توانید بکشید، به مخزن تنسورفلو/سرویس Docker Hub مراجعه کنید.

نمونه توسعه

پس از کشیدن یکی از تصاویر 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

ما در حال حاضر Dockerfiles زیر را نگهداری می کنیم:

  • Dockerfile ، که یک VM مینیمال با سرویس TensorFlow نصب شده است.

  • Dockerfile.gpu ، که یک VM حداقل با سرویس TensorFlow با پشتیبانی از GPU است که با nvidia-docker استفاده می شود.

  • Dockerfile.devel ، که یک VM حداقل با تمام وابستگی های مورد نیاز برای ساخت TensorFlow Serving است.

  • Dockerfile.devel-gpu ، که یک VM حداقل با تمام وابستگی های مورد نیاز برای ساخت TensorFlow Serving با پشتیبانی از GPU است.

ساخت کانتینر از Dockerfile

اگر می خواهید تصویر Docker خود را از یک Dockerfile بسازید، می توانید این کار را با اجرای دستور ساخت Docker انجام دهید:

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 را بررسی کنید تا مطمئن شوید تصویری که نیازهای شما را برآورده می‌کند از قبل وجود ندارد.

ساختن از منابع رم زیادی مصرف می کند. اگر RAM در سیستم شما مشکل دارد، می‌توانید هنگام فراخوانی Bazel، استفاده از RAM را با تعیین --local_ram_resources=2048 محدود کنید. برای اطلاعات بیشتر به اسناد 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 اجرا کنید.

از اینجا، می‌توانید دستورالعمل‌های آزمایش یک محیط توسعه را دنبال کنید.

ساخت باینری سرویس دهی بهینه

هنگام اجرای TensorFlow Serving's ModelServer، ممکن است متوجه یک پیام گزارش شوید که به شکل زیر است:

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 شما به طور کامل برای CPU که روی آن اجرا می شود بهینه نشده است. بسته به مدلی که ارائه می کنید، ممکن است بهینه سازی های بیشتری لازم نباشد. با این حال، ساختن یک باینری بهینه شده ساده است.

هنگام ساختن یک تصویر Docker از فایل های Dockerfile.devel یا Dockerfile.devel-gpu ارائه شده، باینری ModelServer با flag -march=native ساخته می شود. این باعث می‌شود که Bazel یک باینری ModelServer با تمام بهینه‌سازی‌های CPU میزبانی که تصویر Docker را روی آن می‌سازید بسازد.

برای ایجاد یک تصویر سرویس که کاملاً برای میزبان شما بهینه شده است، به سادگی:

  1. پروژه TensorFlow Serving را کلون کنید

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. با یک ModelServer بهینه شده یک تصویر بسازید

    • برای CPU:

      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. یک تصویر سرویس با تصویر توسعه به عنوان پایه بسازید

    • برای CPU:

      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 استفاده کنید .

    • برای پردازنده گرافیکی:

      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 از آن استفاده کنید .