در حال توسعه با 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 را روی آن میسازید بسازد.
برای ایجاد یک تصویر سرویس که کاملاً برای میزبان شما بهینه شده است، به سادگی:
پروژه TensorFlow Serving را کلون کنید
git clone https://github.com/tensorflow/serving cd serving
با یک 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 .
یک تصویر سرویس با تصویر توسعه به عنوان پایه بسازید
برای 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
از آن استفاده کنید .