টেনসরফ্লো ডকারের সাথে পরিবেশন করছে

টেনসরফ্লো সার্ভিং ব্যবহার শুরু করার সবচেয়ে সহজ উপায়গুলির মধ্যে একটি হল ডকারের সাথে।

# 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] }

অতিরিক্ত সার্ভিং এন্ডপয়েন্টের জন্য, ক্লায়েন্ট REST API দেখুন।

ডকার ইনস্টল করুন

সাধারণ ইনস্টলেশন নির্দেশাবলী ডকার সাইটে রয়েছে, তবে আমরা এখানে কিছু দ্রুত লিঙ্ক দিই:

ডকারের সাথে পরিবেশন করা হচ্ছে

একটি পরিবেশন ইমেজ টানা

একবার আপনার ডকার ইনস্টল হয়ে গেলে, আপনি চালানোর মাধ্যমে সর্বশেষ টেনসরফ্লো সার্ভিং ডকার চিত্রটি টানতে পারেন:

docker pull tensorflow/serving

এটি টেনসরফ্লো সার্ভিং ইনস্টল সহ একটি ন্যূনতম ডকার ইমেজ টানবে।

আপনি টানতে পারেন এমন চিত্রগুলির অন্যান্য সংস্করণগুলির জন্য ডকার হাব টেনসরফ্লো/সার্ভিং রেপো দেখুন।

একটি পরিবেশন ইমেজ চলমান

পরিবেশন করা ছবিগুলির (CPU এবং GPU উভয়ই) নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  • পোর্ট 8500 gRPC-এর জন্য উন্মুক্ত
  • পোর্ট 8501 REST API-এর জন্য উন্মুক্ত
  • ঐচ্ছিক পরিবেশ পরিবর্তনশীল MODEL_NAME ( model ডিফল্ট)
  • ঐচ্ছিক পরিবেশ পরিবর্তনশীল MODEL_BASE_PATH (ডিফল্টে /models )

যখন পরিবেশনকারী চিত্রটি মডেল সার্ভার চালায়, তখন এটি নিম্নরূপ চালায়:

tensorflow_model_server --port=8500 --rest_api_port=8501 \
  --model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}

ডকারের সাথে পরিবেশন করতে আপনার প্রয়োজন হবে:

  • পরিবেশন করার জন্য আপনার হোস্টে একটি খোলা পোর্ট
  • পরিবেশন করার জন্য একটি সংরক্ষিত মডেল
  • আপনার মডেলের একটি নাম যা আপনার ক্লায়েন্ট উল্লেখ করবে

আপনি যা করবেন তা হল ডকার কন্টেইনার চালান , আপনার হোস্টের পোর্টগুলিতে কন্টেইনারের পোর্টগুলি প্রকাশ করুন এবং আপনার হোস্টের পথটিকে সেভডমডেলে মাউন্ট করা যেখানে কন্টেইনারটি মডেলগুলি আশা করে৷

আসুন একটি উদাহরণ দেখি:

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 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> নামে একটি ডকার ইমেজ ছেড়ে দেবে যা আপনি স্থাপন করতে পারেন এবং স্টার্টআপে পরিবেশনের জন্য আপনার মডেল লোড করবেন।

পরিবেশন উদাহরণ

আসুন একটি সম্পূর্ণ উদাহরণের মাধ্যমে চলুন যেখানে আমরা একটি সংরক্ষিত মডেল লোড করি এবং এটিকে REST API ব্যবহার করে কল করি। প্রথমে পরিবেশন চিত্রটি টানুন:

docker pull tensorflow/serving

এটি মডেল সার্ভার ইনস্টল সহ সাম্প্রতিক টেনসরফ্লো সার্ভিং ইমেজ টানবে।

এর পরে, আমরা Half Plus Two নামক একটি খেলনা মডেল ব্যবহার করব, যা আমরা ভবিষ্যদ্বাণী করার জন্য যে x এর মান প্রদান করি তার জন্য 0.5 * x + 2 উৎপন্ন করে।

এই মডেলটি পেতে, প্রথমে টেনসরফ্লো সার্ভিং রেপো ক্লোন করুন।

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

এরপরে, TensorFlow সার্ভিং কন্টেইনারটি চালান যা এই মডেলের দিকে নির্দেশ করে এবং 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 &

এটি ডকার কন্টেইনার চালাবে এবং টেনসরফ্লো সার্ভিং মডেল সার্ভার চালু করবে, 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] }

RESTful API ব্যবহার করার বিষয়ে আরও তথ্য এখানে পাওয়া যাবে।

আপনার জিপিইউ ব্যবহার করে ডকারের সাথে পরিবেশন করা হচ্ছে

এনভিডিয়া-ডকার ইনস্টল করুন

একটি GPU এর সাথে পরিবেশন করার আগে, Docker ইনস্টল করার পাশাপাশি, আপনার প্রয়োজন হবে:

একটি GPU পরিবেশন ইমেজ চলমান

একটি GPU পরিবেশন চিত্র চালানো একটি CPU চিত্র চালানোর অনুরূপ। আরও বিশদ বিবরণের জন্য, একটি পরিবেশন চিত্র চালানো দেখুন।

GPU পরিবেশন উদাহরণ

আসুন একটি সম্পূর্ণ উদাহরণের মাধ্যমে চলুন যেখানে আমরা GPU-বাউন্ড অপ্স সহ একটি মডেল লোড করি এবং REST API ব্যবহার করে এটিকে কল করি।

প্রথমে nvidia-docker ইনস্টল করুন। এরপর আপনি চালানোর মাধ্যমে সর্বশেষ টেনসরফ্লো সার্ভিং জিপিইউ ডকার ইমেজ টানতে পারেন:

docker pull tensorflow/serving:latest-gpu

এটি ইনস্টল করা GPU তে চালানোর জন্য নির্মিত মডেল সার্ভার সহ একটি ন্যূনতম ডকার চিত্রকে টেনে আনবে।

এর পরে, আমরা Half Plus Two নামক একটি খেলনা মডেল ব্যবহার করব, যা আমরা ভবিষ্যদ্বাণী করার জন্য যে x এর মান প্রদান করি তার জন্য 0.5 * x + 2 উৎপন্ন করে। এই মডেলটি GPU ডিভাইসের সাথে আবদ্ধ থাকবে এবং CPU তে চলবে না।

এই মডেলটি পেতে, প্রথমে টেনসরফ্লো সার্ভিং রেপো ক্লোন করুন।

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

এরপরে, TensorFlow সার্ভিং কন্টেইনারটি চালান যা এই মডেলের দিকে নির্দেশ করে এবং 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 &

এটি ডকার কন্টেইনার চালাবে, টেনসরফ্লো সার্ভিং মডেল সার্ভার চালু করবে, 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 ছাড়া বা TensorFlow মডেল সার্ভারের একটি কার্যকর GPU বিল্ড ছাড়াই একটি মেশিনে GPU মডেল চালানোর চেষ্টা করার ফলে এমন একটি ত্রুটি দেখা দেবে:

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

RESTful API ব্যবহার করার বিষয়ে আরও তথ্য এখানে পাওয়া যাবে।

ডকারের সাথে বিকাশ করা হচ্ছে

টেনসরফ্লো সার্ভিং কীভাবে তৈরি এবং বিকাশ করবেন তার নির্দেশাবলীর জন্য, অনুগ্রহ করে ডেভেলপিং উইথ ডকার গাইড দেখুন।