एक TensorFlow मॉडल की सेवा

यह ट्यूटोरियल आपको दिखाता है कि प्रशिक्षित TensorFlow मॉडल को निर्यात करने के लिए TensorFlow सर्विंग घटकों का उपयोग कैसे करें और इसे परोसने के लिए मानक tensorflow_model_server का उपयोग करें। आप पहले से ही TensorFlow सेवित से परिचित हैं, और आप के बारे में कैसे सर्वर आंतरिक काम में अधिक जानना चाहते हैं, तो देखने के TensorFlow उन्नत ट्यूटोरियल की सेवा

यह ट्यूटोरियल एक साधारण सॉफ्टमैक्स रिग्रेशन मॉडल का उपयोग करता है जो हस्तलिखित अंकों को वर्गीकृत करता है। यह बहुत ही में शुरू की गई एक के समान है फैशन MNIST डाटासेट का उपयोग कर छवि वर्गीकरण पर TensorFlow ट्यूटोरियल

इस ट्यूटोरियल के कोड में दो भाग होते हैं:

  • एक अजगर फ़ाइल, mnist_saved_model.py , कि ट्रेनों और निर्यात मॉडल।

  • एक ModelServer द्विआधारी जो या तो अपार्टमेंट का उपयोग कर स्थापित किया जा सकता है, या एक सी ++ फ़ाइल (से संकलित main.cc )। TensorFlow सेवित ModelServer पता चलता है नए मॉडल का निर्यात किया है और एक चलाता gRPC उन्हें सेवा के लिए सेवा।

आरंभ करने से पहले, पहले डोकर स्थापित

TensorFlow मॉडल को प्रशिक्षित और निर्यात करें

प्रशिक्षण चरण के लिए, TensorFlow ग्राफ TensorFlow सत्र में शुरू की है sess इनपुट टेन्सर (छवि) के रूप में के साथ, x और आउटपुट टेन्सर (Softmax स्कोर) के रूप में y

फिर हम TensorFlow का उपयोग SavedModelBuilder मॉड्यूल मॉडल निर्यात करने के लिए। SavedModelBuilder इतना है कि यह अनुमान के लिए बाद में लोड किया जा सकता विश्वसनीय भंडारण के लिए एक प्रशिक्षित मॉडल "स्नैपशॉट" बचत होती है।

SavedModel प्रारूप पर जानकारी के लिए कृपया पर दस्तावेज़ देखें SavedModel README.md

से mnist_saved_model.py , निम्नलिखित डिस्क के लिए एक मॉडल की बचत की सामान्य प्रक्रिया का वर्णन करने के लिए एक छोटी कोड स्निपेट है।

export_path_base = sys.argv[-1]
export_path = os.path.join(
    tf.compat.as_bytes(export_path_base),
    tf.compat.as_bytes(str(FLAGS.model_version)))
print('Exporting trained model to', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
builder.add_meta_graph_and_variables(
    sess, [tf.compat.v1.saved_model.tag_constants.SERVING],
    signature_def_map={
        'predict_images':
            prediction_signature,
        tf.compat.v1.saved_model.signature_constants
            .DEFAULT_SERVING_SIGNATURE_DEF_KEY:
            classification_signature,
    },
    main_op=tf.compat.v1.tables_initializer(),
    strip_default_attrs=True)
builder.save()

SavedModelBuilder.__init__ निम्नलिखित तर्क लेता है:

  • export_path निर्यात निर्देशिका का मार्ग है।

SavedModelBuilder अगर यह मौजूद नहीं है निर्देशिका का निर्माण करेगा। उदाहरण में, हम कमांड लाइन तर्क और श्रेणीबद्ध FLAGS.model_version निर्यात निर्देशिका प्राप्त करने के लिए। FLAGS.model_version मॉडल के संस्करण निर्दिष्ट करता है। उसी मॉडल के नए संस्करण को निर्यात करते समय आपको एक बड़ा पूर्णांक मान निर्दिष्ट करना चाहिए। प्रत्येक संस्करण दिए गए पथ के तहत एक अलग उप-निर्देशिका में निर्यात किया जाएगा।

आप निर्माता के उपयोग के मेटा ग्राफ और चर जोड़ सकते हैं SavedModelBuilder.add_meta_graph_and_variables() निम्नलिखित तर्क के साथ:

  • sess TensorFlow सत्र कि प्रशिक्षित मॉडल आप निर्यात कर रहे हैं रखती है।

  • tags जिसके साथ मेटा ग्राफ को बचाने के लिए टैग का सेट है। इस मामले में, के बाद से हम सेवा में ग्राफ का उपयोग करना चाहते हैं, हम का उपयोग serve पूर्वनिर्धारित SavedModel टैग स्थिरांक से टैग। अधिक जानकारी के लिए, देखें tag_constants.py और संबंधित TensorFlow API दस्तावेज़

  • signature_def_map निर्दिष्ट एक tensorflow करने के लिए एक हस्ताक्षर के लिए उपयोगकर्ता के आपूर्ति की कुंजी के नक्शे :: SignatureDef मेटा ग्राफ में जोड़ने के लिए। सिग्नेचर निर्दिष्ट करता है कि किस प्रकार का मॉडल निर्यात किया जा रहा है, और इनपुट/आउटपुट टेंसर को अनुमान लगाते समय बाँधना है।

    विशेष हस्ताक्षर कुंजी serving_default निर्दिष्ट डिफ़ॉल्ट हस्ताक्षर में कार्यरत हैं। हस्ताक्षर से संबंधित अन्य स्थिरांक के साथ डिफ़ॉल्ट सेवारत हस्ताक्षर डीईएफ़ कुंजी को सेव्डमॉडल हस्ताक्षर स्थिरांक के भाग के रूप में परिभाषित किया गया है। अधिक जानकारी के लिए, देखें signature_constants.py और संबंधित TensorFlow API दस्तावेज़

    इसके अलावा, बनाने में मदद हस्ताक्षर defs आसानी से करने के लिए, SavedModel एपीआई प्रदान करता है हस्ताक्षर डीईएफ़ utils .. विशेष रूप से, मूल में mnist_saved_model.py फ़ाइल, हम का उपयोग signature_def_utils.build_signature_def() का निर्माण करने के लिए predict_signature और classification_signature

    कैसे के लिए एक उदाहरण के रूप predict_signature परिभाषित किया गया है, util निम्नलिखित तर्क होते हैं:

    • inputs={'images': tensor_info_x} इनपुट टेन्सर जानकारी निर्दिष्ट करता है।

    • outputs={'scores': tensor_info_y} स्कोर टेन्सर जानकारी निर्दिष्ट करता है।

    • method_name निष्कर्ष के लिए इस्तेमाल किया विधि है। भविष्यवाणी अनुरोधों के लिए, यह करने के लिए सेट किया जाना चाहिए tensorflow/serving/predict । अन्य विधि के नाम के लिए, देखें signature_constants.py और संबंधित TensorFlow API दस्तावेज़

ध्यान दें कि tensor_info_x और tensor_info_y है संरचना tensorflow::TensorInfo प्रोटोकॉल परिभाषित बफर यहाँ । आसानी से टेन्सर infos का निर्माण करने के लिए, TensorFlow SavedModel एपीआई भी प्रदान करता है utils.py , साथ संबंधित TensorFlow API दस्तावेज़

इसके अलावा, कृपया ध्यान दें कि images और scores टेन्सर उर्फ नाम हैं। वे जो कुछ भी अद्वितीय तार आप चाहते हो सकता है, और वे टेन्सर तार्किक नाम हो जाएगा x और y है कि आप टेन्सर जब भविष्यवाणी अनुरोध बाद में भेजने के लिए बाध्य के लिए देखें।

उदाहरण के लिए, यदि x नाम 'long_tensor_name_foo' के साथ टेन्सर को संदर्भित करता है और y नाम के साथ 'generated_tensor_name_bar' टेन्सर को संदर्भित करता है, builder और ( 'स्कोर - टेन्सर तार्किक नाम असली नाम करने के लिए मानचित्रण (>' long_tensor_name_foo '' छवियों ') का संग्रह किया जायेगा ' -> 'generated_tensor_name_bar')। यह उपयोगकर्ता को अनुमान चलाते समय इन टेंसरों को उनके तार्किक नामों से संदर्भित करने की अनुमति देता है।

चलो इसे चलाते हैं!

सबसे पहले, यदि आपने अभी तक ऐसा नहीं किया है, तो इस रिपॉजिटरी को अपनी स्थानीय मशीन पर क्लोन करें:

git clone https://github.com/tensorflow/serving.git
cd serving

निर्यात निर्देशिका साफ़ करें यदि यह पहले से मौजूद है:

rm -rf /tmp/mnist

अब मॉडल को प्रशिक्षित करते हैं:

tools/run_in_docker.sh python tensorflow_serving/example/mnist_saved_model.py \
  /tmp/mnist

इसका परिणाम आउटपुट में होना चाहिए जो दिखता है:

Training model...

...

Done training!
Exporting trained model to models/mnist
Done exporting!

अब निर्यात निर्देशिका पर एक नज़र डालते हैं।

$ ls /tmp/mnist
1

जैसा कि ऊपर उल्लेख किया गया है, मॉडल के प्रत्येक संस्करण को निर्यात करने के लिए एक उप-निर्देशिका बनाई जाएगी। FLAGS.model_version 1 का डिफ़ॉल्ट मान है, इसलिए इसी सब-निर्देशिका है 1 बनाया जाता है।

$ ls /tmp/mnist/1
saved_model.pb variables

प्रत्येक संस्करण उप-निर्देशिका में निम्न फ़ाइलें होती हैं:

  • saved_model.pb धारावाहिक tensorflow है :: SavedModel। इसमें मॉडल की एक या अधिक ग्राफ़ परिभाषाएं, साथ ही मॉडल के मेटाडेटा जैसे हस्ताक्षर शामिल हैं।

  • variables फ़ाइलें जो रेखांकन के धारावाहिक चर पकड़ रहे हैं।

इसके साथ, आपका TensorFlow मॉडल निर्यात हो गया है और लोड होने के लिए तैयार है!

निर्यात किए गए मॉडल को मानक TensorFlow ModelServer के साथ लोड करें

सेवा के लिए मॉडल को आसानी से लोड करने के लिए डॉकर सर्विंग इमेज का उपयोग करें:

docker run -p 8500:8500 \
--mount type=bind,source=/tmp/mnist,target=/models/mnist \
-e MODEL_NAME=mnist -t tensorflow/serving &

सर्वर का परीक्षण करें

हम प्रदान की उपयोग कर सकते हैं mnist_client सर्वर का परीक्षण करने के लिए उपयोगिता। क्लाइंट MNIST परीक्षण डेटा डाउनलोड करता है, उन्हें सर्वर को अनुरोध के रूप में भेजता है, और अनुमान त्रुटि दर की गणना करता है।

tools/run_in_docker.sh python tensorflow_serving/example/mnist_client.py \
  --num_tests=1000 --server=127.0.0.1:8500

यह कुछ इस तरह आउटपुट करना चाहिए

    ...
    Inference error rate: 11.13%

हम प्रशिक्षित सॉफ्टमैक्स मॉडल के लिए लगभग 90% सटीकता की उम्मीद करते हैं और हमें पहले 1000 परीक्षण छवियों के लिए 11% अनुमान त्रुटि दर मिलती है। यह पुष्टि करता है कि सर्वर प्रशिक्षित मॉडल को सफलतापूर्वक लोड और चलाता है!