این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

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

یکی از ساده ترین راه ها برای شروع استفاده از TensorFlow Servicing با Docker است .

# 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 Client REST مراجعه کنید .

Docker را نصب کنید

دستورالعمل های نصب عمومی در سایت Docker قرار دارد ، اما ما لینک های سریع را در اینجا می دهیم:

خدمت با داکر

در حال کشیدن یک تصویر ارائه دهنده

پس از نصب Docker ، می توانید با اجرای جدیدترین تصویر docker TensorFlow serving docker:

docker pull tensorflow/serving

با نصب TensorFlow Servicing ، یک تصویر Docker به حداقل می رسد.

tensorflow / service repo Docker Hub را برای نسخه های دیگر تصاویر که می توانید بکشید ، مشاهده کنید.

در حال اجرای یک تصویر ارائه دهنده

تصاویر ارائه دهنده (هر دو 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

در این حالت ، یک ظرف داکر را راه اندازی کرده ایم ، پورت REST API 8501 را به درگاه میزبان my_model ما منتشر کردیم و مدلی را با نام my_model و آنرا به مسیر پایه مدل پیش فرض ( ${MODEL_BASE_PATH}/${MODEL_NAME} = /models/my_model ). در آخر ، ما متغیر محیط MODEL_NAME با my_model و MODEL_BASE_PATH به مقدار پیش فرض آن 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 بسیاری از آرگومان های اضافی را که می توانید به ظروف 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 متوقف serving_base

docker kill serving_base

با این کار شما یک تصویر Docker به نام <my container> konten <my container> که می توانید آن را مستقر کنید و مدل خود را برای ارائه در هنگام بارگیری بارگیری می کند ، به شما رها می کند.

نمونه خدمت

بیایید یک مثال کامل را در آن جا اجرا کنیم که یک SavedModel را بارگذاری کنیم و با استفاده از REST API با آن تماس بگیریم. ابتدا تصویر ارائه دهنده را بکشید:

docker pull tensorflow/serving

با استفاده از ModelServer نصب شده ، آخرین تصویر سرویس TensorFlow را می کشید.

در مرحله بعد ، از یک مدل اسباب بازی به نام Half Plus Two که برای مقادیر x برای پیش بینی ، مقدار 0.5 * x + 2 تولید می کند.

برای به دست آوردن این مدل ، ابتدا repo TensorFlow Servo را کلون کنید.

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 &

این کار ظرف docker را راه اندازی می کند و سرور TensorFlow Serving Model Model را راه اندازی می کند ، پورت 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 RESTful را می توان در اینجا یافت.

خدمت با Docker با استفاده از GPU

nvidia-docker را نصب کنید

قبل از خدمت با GPU ، علاوه بر نصب Docker ، به موارد زیر نیز نیاز خواهید داشت:

در حال اجرای یک تصویر سرویس دهنده GPU

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

GPU نمونه خدمت

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

ابتدا nvidia-docker نصب کنید. در مرحله بعد می توانید آخرین اجرای تصویر docker TPSORFlow Servo GPU را با استفاده از زیر بکشید:

docker pull tensorflow/serving:latest-gpu

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

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

برای به دست آوردن این مدل ، ابتدا repo TensorFlow Servo را کلون کنید.

mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving

در مرحله بعد ، ظرف TensorFlow Serving را با اشاره به این مدل و باز کردن پورت REST API (8501) اجرا کنید:

docker run --runtime=nvidia -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 &

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

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

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

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

برای راهنمایی در مورد نحوه ساخت و توسعه سرویس Tensorflow ، لطفاً با راهنمای Docker در حال توسعه باشید .