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] }
अतिरिक्त सर्विंग एंडपॉइंट के लिए, क्लाइंट REST API देखें।
डॉकर स्थापित करें
सामान्य इंस्टॉलेशन निर्देश डॉकर साइट पर हैं, लेकिन हम यहां कुछ त्वरित लिंक देते हैं:
- MacOS के लिए डॉकर
- विंडोज़ 10 प्रो या बाद के संस्करण के लिए विंडोज़ के लिए डॉकर
- MacOS के बहुत पुराने संस्करणों या Windows 10 Pro से पहले Windows के संस्करणों के लिए डॉकर टूलबॉक्स
डॉकर के साथ सेवा करना
एक सेवारत छवि खींचना
एक बार जब आप डॉकर स्थापित कर लेते हैं, तो आप चलाकर नवीनतम TensorFlow सर्विंग डॉकर छवि खींच सकते हैं:
docker pull tensorflow/serving
यह स्थापित TensorFlow सर्विंग के साथ एक न्यूनतम डॉकर छवि को खींच लेगा।
छवियों के अन्य संस्करणों के लिए डॉकर हब टेंसरफ़्लो/सर्विंग रेपो देखें जिन्हें आप खींच सकते हैं।
एक सेवारत छवि चला रहा है
सेवारत छवियों (सीपीयू और जीपीयू दोनों) में निम्नलिखित गुण हैं:
- पोर्ट 8500 जीआरपीसी के लिए उजागर
- REST API के लिए पोर्ट 8501 प्रदर्शित किया गया
- वैकल्पिक पर्यावरण चर
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
इस मामले में, हमने एक डॉकर कंटेनर शुरू किया है, REST API पोर्ट 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
उपयोग करेंगे। आप एक ही समय में जीआरपीसी और आरईएसटी एपीआई दोनों पोर्ट खोल सकते हैं, या केवल एक या दूसरे को खोलना चुन सकते हैं।
अतिरिक्त तर्क पारित करना
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
इसके बाद, अपने SaveModel को कंटेनर के मॉडल फ़ोल्डर में कॉपी करें:
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
यह स्थापित मॉडलसर्वर के साथ नवीनतम TensorFlow सर्विंग छवि खींच लेगा।
इसके बाद, हम Half Plus Two
नामक एक खिलौना मॉडल का उपयोग करेंगे, जो भविष्यवाणी के लिए हमारे द्वारा प्रदान किए गए x
के मानों के लिए 0.5 * x + 2
उत्पन्न करता है।
इस मॉडल को प्राप्त करने के लिए, पहले TensorFlow सर्विंग रेपो को क्लोन करें।
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 को बांधेगा, और हमारे वांछित मॉडल को हमारे होस्ट से उस स्थान पर मैप करेगा जहां कंटेनर में मॉडल अपेक्षित हैं। हम मॉडल का नाम पर्यावरण चर के रूप में भी पास करते हैं, जो मॉडल से पूछताछ करते समय महत्वपूर्ण होगा।
पूर्वानुमान एपीआई का उपयोग करके मॉडल को क्वेरी करने के लिए, आप चला सकते हैं
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 का उपयोग करके डॉकर के साथ सेवा करना
एनवीडिया-डॉकर स्थापित करें
GPU के साथ सेवा देने से पहले, डॉकर स्थापित करने के अलावा, आपको इसकी आवश्यकता होगी:
- आपके सिस्टम के लिए अद्यतित NVIDIA ड्राइवर
-
nvidia-docker
: आप यहां इंस्टॉलेशन निर्देशों का पालन कर सकते हैं
एक GPU सेवारत छवि चला रहा है
GPU सर्विंग इमेज चलाना CPU इमेज चलाने के समान है। अधिक विवरण के लिए, एक सेवारत छवि चलाना देखें।
जीपीयू सर्विंग उदाहरण
आइए एक पूर्ण उदाहरण देखें जहां हम GPU-बाउंड ऑप्स के साथ एक मॉडल लोड करते हैं और इसे REST API का उपयोग करके कॉल करते हैं।
सबसे पहले nvidia-docker
इंस्टॉल करें। इसके बाद आप नवीनतम TensorFlow सर्विंग GPU डॉकर छवि को चलाकर खींच सकते हैं:
docker pull tensorflow/serving:latest-gpu
यह स्थापित जीपीयू पर चलने के लिए निर्मित मॉडलसर्वर के साथ एक न्यूनतम डॉकर छवि को खींच लेगा।
इसके बाद, हम Half Plus Two
नामक एक खिलौना मॉडल का उपयोग करेंगे, जो भविष्यवाणी के लिए हमारे द्वारा प्रदान किए गए x
के मानों के लिए 0.5 * x + 2
उत्पन्न करता है। इस मॉडल में जीपीयू डिवाइस से जुड़े ऑप्स होंगे, और सीपीयू पर नहीं चलेंगे।
इस मॉडल को प्राप्त करने के लिए, पहले TensorFlow सर्विंग रेपो को क्लोन करें।
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 ...
पूर्वानुमान एपीआई का उपयोग करके मॉडल को क्वेरी करने के लिए, आप चला सकते हैं
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 के या TensorFlow मॉडल सर्वर के कार्यशील GPU बिल्ड के बिना चलाने का प्रयास करने पर एक त्रुटि उत्पन्न होगी जो इस प्रकार दिखाई देगी:
Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0
RESTful API का उपयोग करने के बारे में अधिक जानकारी यहां पाई जा सकती है।
डॉकर के साथ विकास करना
टेन्सरफ़्लो सर्विंग के निर्माण और विकास के निर्देशों के लिए, कृपया डॉकर गाइड के साथ विकास करना देखें।