سرویس TensorFlow با داکر

یکی از ساده ترین راه برای استفاده از TensorFlow تعمیر و نگهداری است با آغاز کارگر بارانداز .

# Download the TensorFlow Serving Docker image and repo
docker pull tensorflow/serving
git clone https://github.com/tensorflow/serving # Location of demo models TESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata" # Start TensorFlow Serving container and open the REST API port docker 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 API curl -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

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

هنگامی که Docker را نصب کردید، می توانید آخرین تصویر داکر TensorFlow Serving را با اجرای:

docker pull tensorflow/serving

با این کار یک تصویر حداقل Docker با نصب TensorFlow Serving پایین می‌آید.

کارگر بارانداز توپی مشاهده tensorflow / خدمت مخزن برای نسخه های دیگر از تصاویر شما می توانید بکشید.

اجرای یک تصویر در حال خدمت

تصاویر ارائه شده (هم CPU و هم GPU) دارای ویژگی های زیر هستند:

  • پورت 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 برای خدمت
  • نامی برای مدل شما که مشتری شما به آن اشاره خواهد کرد

آنچه شما انجام دهید این است اجرای کارگر بارانداز ظرف، منتشر پورت ظرف به بنادر خود را میزبان، و نصب مسیر خود را میزبان به 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

در این مورد، ما یک ظرف کارگر بارانداز را شروع کرده، به پورت میزبان ما 8501 منتشر شده پورت REST API 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 خدمت منتقل می کند. به عنوان مثال، اگر بخواهیم یک فایل پیکربندی مدل را به جای تعیین نام مدل ارسال کنیم، می‌توانیم کارهای زیر را انجام دهیم:

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 Serving با نصب 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 را راه‌اندازی می‌کند، پورت 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، علاوه بر نصب کارگر بارانداز ، شما نیاز دارید:

اجرای تصویر ارائه دهنده GPU

اجرای یک تصویر ارائه دهنده GPU با اجرای تصویر CPU یکسان است. برای جزئیات بیشتر، نگاه کنید در حال اجرا یک تصویر در خدمت .

نمونه سرویس GPU

بیایید یک مثال کامل را اجرا کنیم که در آن یک مدل را با عملیات‌های GPU-bound بارگذاری می‌کنیم و آن را با استفاده از REST API فراخوانی می‌کنیم.

اول نصب nvidia-docker . در مرحله بعد، می‌توانید آخرین تصویر Docker GPU TensorFlow Serving را با اجرای:

docker pull tensorflow/serving:latest-gpu

این یک تصویر حداقل Docker را با ModelServer که برای اجرا بر روی GPUهای نصب شده ساخته شده است، پایین می آورد.

بعد، ما یک مدل اسباب بازی به نام استفاده از Half Plus Two ، که تولید 0.5 * x + 2 برای مقادیر x ما برای پیش بینی کند. این مدل دارای عملیات متصل به دستگاه GPU است و روی CPU اجرا نخواهد شد.

برای دریافت این مدل، ابتدا مخزن 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 را راه‌اندازی می‌کند، پورت 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 منجر به خطایی می شود که به نظر می رسد:

Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0

اطلاعات بیشتر در مورد استفاده از API آرام را می توان یافت در اینجا .

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

برای دستورالعمل در مورد نحوه ساخت و توسعه Tensorflow تعمیر و نگهداری، مراجعه شود به در حال توسعه با راهنمای کارگر بارانداز .