डोकर के साथ सेवा करने वाला TensorFlow

TensorFlow सर्विंग का उपयोग शुरू करने का सबसे आसान तरीका Docker है।

# 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

यह स्थापित 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 के साथ सेवा देने से पहले, डॉकर स्थापित करने के अलावा, आपको इसकी आवश्यकता होगी:

एक 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 का उपयोग करने के बारे में अधिक जानकारी यहां पाई जा सकती है।

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

टेन्सरफ़्लो सर्विंग के निर्माण और विकास के निर्देशों के लिए, कृपया डॉकर गाइड के साथ विकास करना देखें।