সবচেয়ে সহজ পদ্ধিতি হল উপায় হল TensorFlow ভজনা ব্যবহার সাথে আছেন শুরু করতে Docker ।
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker 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 APIcurl -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] }
অতিরিক্ত ভজনা এন্ড পয়েন্ট জন্য, দেখুন ক্লায়েন্ট বিশ্রাম এপিআই ।
ডকার ইনস্টল করুন
সাধারণ ইনস্টলেশন সংক্রান্ত নির্দেশাবলী হয় Docker সাইটে , কিন্তু আমরা এখানে কিছু দ্রুত লিঙ্ক করা উচিত:
- MacOS এর জন্য ডকার
- Windows এর জন্য ডক-শ্রমিক জন্য উইন্ডোজ 10 প্রো বা পরে
- ডক-শ্রমিক টুলবক্স উইন্ডোজ 10 প্রো আগে উইন্ডোজের সংস্করণ MacOS অনেক পুরোনো সংস্করণগুলি, অথবা
ডকারের সাথে পরিবেশন করা হচ্ছে
একটি পরিবেশন ইমেজ টানা
একবার আপনার ডকার ইনস্টল হয়ে গেলে, আপনি চালানোর মাধ্যমে সর্বশেষ টেনসরফ্লো সার্ভিং ডকার চিত্রটি টানতে পারেন:
docker pull tensorflow/serving
এটি টেনসরফ্লো সার্ভিং ইনস্টল সহ একটি ন্যূনতম ডকার ইমেজ টানবে।
Docker হাব দেখুন tensorflow / ভজনা রেপো চিত্রের টান করতে পারেন অন্য সংস্করণের জন্য।
একটি পরিবেশন ইমেজ চলমান
পরিবেশন করা চিত্রগুলির (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 চালানো ধারক, প্রকাশ আপনার হোস্ট এর পোর্ট ধারক এর পোর্ট, এবং 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
এই ক্ষেত্রে, আমরা একটি Docker ধারক শুরু করেছি আমাদের হোস্টের বন্দর 8501 বিশ্রাম এপিআই বন্দর 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
এই Docker ইমেজ নামক সঙ্গে আপনি ছাড়বে <my container>
আপনি স্থাপন করতে এবং প্রারম্ভকালে ভজনা জন্য আপনার মডেল লোড করা হবে।
পরিবেশন উদাহরণ
আসুন একটি সম্পূর্ণ উদাহরণের মাধ্যমে চলুন যেখানে আমরা একটি সংরক্ষিত মডেল লোড করি এবং এটিকে REST API ব্যবহার করে কল করি। প্রথমে পরিবেশন চিত্রটি টানুন:
docker pull tensorflow/serving
এটি মডেল সার্ভার ইনস্টল সহ সাম্প্রতিক টেনসরফ্লো সার্ভিং ইমেজ টানবে।
এর পরে, আমরা একটি খেলনা মডেল নামক ব্যবহার করবে Half Plus Two
, যা উত্পন্ন 0.5 * x + 2
এর মানের জন্য x
আমরা ভবিষ্যদ্বাণী জন্য প্রদান।
এই মডেলটি পেতে, প্রথমে টেনসরফ্লো সার্ভিং রেপো ক্লোন করুন।
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 ব্যবহার করে আরও তথ্য পাওয়া যাবে এখানে ।
আপনার জিপিইউ ব্যবহার করে ডকারের সাথে পরিবেশন করা হচ্ছে
এনভিডিয়া-ডকার ইনস্টল করুন
ছাড়াও, একটি জিপিইউ সঙ্গে ভজনা আগে Docker ইনস্টল , আপনি প্রয়োজন হবে:
- আপ-টু-ডেট এনভিডিয়া ড্রাইভার আপনার সিস্টেমে
-
nvidia-docker
: আপনি অনুসরণ করতে পারেন ইনস্টলেশন সংক্রান্ত নির্দেশাবলী এখানে
একটি GPU পরিবেশন ইমেজ চলমান
একটি GPU পরিবেশন চিত্র চালানো একটি CPU চিত্র চালানোর অনুরূপ। অধিক বিবরণের জন্য, দেখুন একটি ভজনা ইমেজ সঞ্চালন ।
GPU পরিবেশন উদাহরণ
আসুন একটি সম্পূর্ণ উদাহরণের মাধ্যমে চলুন যেখানে আমরা GPU-বাউন্ড অপ্স সহ একটি মডেল লোড করি এবং REST API ব্যবহার করে এটিকে কল করি।
প্রথম ইনস্টলের nvidia-docker
। এরপর আপনি চালানোর মাধ্যমে সর্বশেষ টেনসরফ্লো সার্ভিং জিপিইউ ডকার ইমেজ টানতে পারেন:
docker pull tensorflow/serving:latest-gpu
এটি ইনস্টল করা GPU-তে চালানোর জন্য নির্মিত মডেল সার্ভার সহ একটি ন্যূনতম ডকার ইমেজ টানবে।
এর পরে, আমরা একটি খেলনা মডেল নামক ব্যবহার করবে Half Plus Two
, যা উত্পন্ন 0.5 * x + 2
এর মানের জন্য x
আমরা ভবিষ্যদ্বাণী জন্য প্রদান। এই মডেলটি 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 ব্যবহার করে আরও তথ্য পাওয়া যাবে এখানে ।
ডকারের সাথে বিকাশ করা হচ্ছে
কিভাবে গড়ে তুলতে ও Tensorflow ভজনা বিকাশ নির্দেশাবলীর জন্য, দেখুন Docker গাইড সঙ্গে ডেভেলপিং ।