डोकर के साथ TensorFlow सर्विंग

सबसे आसान तरीकों में से एक TensorFlow सेवा का उपयोग कर के साथ है आरंभ करने के लिए डोकर

# 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

डॉकर स्थापित करें

जनरल स्थापना के निर्देश हैं डोकर साइट पर है, लेकिन हम यहाँ कुछ त्वरित लिंक दे:

डॉकर के साथ सेवा करना

एक सेवारत छवि खींचना

एक बार जब आप डॉकर स्थापित कर लेते हैं, तो आप नवीनतम 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 के साथ परोसने से पहले डोकर स्थापित करने के लिए, आप की आवश्यकता होगी:

छवि प्रस्तुत करने वाला 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 प्रस्तुति को विकसित करने के निर्देशों के लिए, देखें डोकर गाइड के साथ विकास करना