सबसे आसान तरीकों में से एक TensorFlow सेवा का उपयोग कर के साथ है आरंभ करने के लिए डोकर ।
# 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 के लिए डॉकर
- विंडोज के लिए डोकर के लिए Windows 10 प्रो या बाद में
- डोकर टूलबॉक्स Windows 10 प्रो से पहले Windows के संस्करण MacOS के बहुत पुराने संस्करणों, या के लिए
डॉकर के साथ सेवा करना
एक सेवारत छवि खींचना
एक बार जब आप डॉकर स्थापित कर लेते हैं, तो आप नवीनतम TensorFlow सर्विंग डॉकटर छवि को चलाकर खींच सकते हैं:
docker pull tensorflow/serving
यह एक न्यूनतम डॉकर छवि को नीचे खींच लेगा जिसमें TensorFlow सर्विंग स्थापित है।
डोकर हब देखें tensorflow / सेवा करने रेपो छवियों आप खींच सकते हैं के अन्य संस्करणों के लिए।
एक सेवारत छवि चल रहा है
सेवारत छवियों (सीपीयू और जीपीयू दोनों) में निम्नलिखित गुण हैं:
- पोर्ट 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}
डॉकर के साथ सेवा करने के लिए, आपको आवश्यकता होगी:
- परोसने के लिए आपके मेज़बान पर एक खुला बंदरगाह
- सेवा करने के लिए एक सहेजा गया मॉडल
- आपके मॉडल के लिए एक नाम जिसे आपका क्लाइंट संदर्भित करेगा
आप क्या करेंगे है डोकर चलाने कंटेनर, प्रकाशित अपने मेजबान के बंदरगाहों के लिए कंटेनर की बंदरगाहों, और करने के लिए 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 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
इसके बाद, अपने सहेजे गए मॉडल को कंटेनर के मॉडल फ़ोल्डर में कॉपी करें:
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>
है कि आप लागू कर सकते हैं और स्टार्टअप पर की सेवा के लिए अपने मॉडल लोड होगा।
सेवा उदाहरण
आइए एक पूर्ण उदाहरण के माध्यम से चलते हैं जहां हम एक सहेजे गए मॉडल को लोड करते हैं और इसे आरईएसटी एपीआई का उपयोग करके कॉल करते हैं। पहले सर्विंग इमेज को खींचे:
docker pull tensorflow/serving
यह नवीनतम TensorFlow सर्विंग छवि खींचेगा जिसमें ModelServer स्थापित है।
इसके बाद, हम एक खिलौना मॉडल कहा जाता का उपयोग करेगा Half Plus Two
, जो उत्पन्न करता है 0.5 * x + 2
के मूल्यों के लिए x
हम भविष्यवाणी के लिए प्रदान करते हैं।
इस मॉडल को प्राप्त करने के लिए, पहले 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 &
यह डॉकटर कंटेनर चलाएगा और TensorFlow सर्विंग मॉडल सर्वर लॉन्च करेगा, 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 एपीआई का उपयोग कर के बारे में अधिक जानकारी पाया जा सकता है यहाँ ।
अपने GPU का उपयोग करके Docker के साथ सेवा करना
एनवीडिया-डॉकर स्थापित करें
के अलावा, एक GPU के साथ परोसने से पहले डोकर स्थापित करने के लिए, आप की आवश्यकता होगी:
- अप-टू-डेट NVIDIA ड्राइवरों आपके सिस्टम के लिए
-
nvidia-docker
: आप का अनुसरण कर सकते स्थापना के निर्देश यहां
छवि प्रस्तुत करने वाला GPU चला रहा है
एक GPU सर्विंग इमेज चलाना CPU इमेज को चलाने के समान है। अधिक जानकारी के लिए देखें एक सेवारत छवि चल रहा ।
GPU सेवा उदाहरण
आइए एक पूर्ण उदाहरण के माध्यम से चलते हैं जहां हम एक मॉडल को GPU- बाउंड ऑप्स के साथ लोड करते हैं और इसे REST API का उपयोग करके कॉल करते हैं।
सबसे पहले स्थापित nvidia-docker
। आगे आप नवीनतम TensorFlow सर्विंग GPU docker छवि को चलाकर खींच सकते हैं:
docker pull tensorflow/serving:latest-gpu
यह स्थापित GPU पर चलने के लिए बनाए गए ModelServer के साथ एक न्यूनतम डॉकर छवि को नीचे खींच लेगा।
इसके बाद, हम एक खिलौना मॉडल कहा जाता का उपयोग करेगा Half Plus Two
, जो उत्पन्न करता है 0.5 * x + 2
के मूल्यों के लिए x
हम भविष्यवाणी के लिए प्रदान करते हैं। इस मॉडल में GPU डिवाइस से बंधा हुआ ops होगा, और यह CPU पर नहीं चलेगा।
इस मॉडल को प्राप्त करने के लिए, पहले 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 &
यह डॉकटर कंटेनर चलाएगा, 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 ...
भविष्यवाणी एपीआई का उपयोग करके मॉडल को क्वेरी करने के लिए, आप चला सकते हैं
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 एपीआई का उपयोग कर के बारे में अधिक जानकारी पाया जा सकता है यहाँ ।
डॉकर के साथ विकास करना
कैसे निर्माण और Tensorflow प्रस्तुति को विकसित करने के निर्देशों के लिए, देखें डोकर गाइड के साथ विकास करना ।