कस्टम ऑप्स के साथ TensorFlow मॉडल पेश करना

TensorFlow विभिन्न हार्डवेयर प्रकारों (सीपीयू, जीपीयू, आदि) के लिए ऑप और ऑप कर्नेल (कार्यान्वयन) की एक विस्तृत लाइब्रेरी के साथ पूर्व-निर्मित आता है। ये ऑपरेशन स्वचालित रूप से TensorFlow सर्विंग मॉडलसर्वर बाइनरी से जुड़े होते हैं और उपयोगकर्ता को किसी अतिरिक्त कार्य की आवश्यकता नहीं होती है। हालाँकि, ऐसे दो उपयोग मामले हैं जिनके लिए उपयोगकर्ता को स्पष्ट रूप से मॉडलसर्वर में ऑप्स को लिंक करने की आवश्यकता होती है:

  • आपने अपना स्वयं का कस्टम ऑप लिखा है (उदा. इस गाइड का उपयोग करके)
  • आप पहले से लागू ऑप का उपयोग कर रहे हैं जो TensorFlow के साथ शिप नहीं किया गया है

भले ही आपने ऑप लागू किया हो या नहीं, कस्टम ऑप्स के साथ एक मॉडल पेश करने के लिए, आपको ऑप के स्रोत तक पहुंच की आवश्यकता होगी। यह मार्गदर्शिका आपको सेवा के लिए कस्टम ऑप्स उपलब्ध कराने के लिए स्रोत का उपयोग करने के चरणों के बारे में बताती है। कस्टम ऑप्स के कार्यान्वयन पर मार्गदर्शन के लिए, कृपया टेंसरफ़्लो/कस्टम-ऑप रेपो देखें।

पूर्वावश्यकता: डॉकर स्थापित होने के साथ, आपने टेन्सरफ्लो सर्विंग रिपॉजिटरी को क्लोन किया है और आपकी वर्तमान कार्यशील निर्देशिका रेपो की जड़ है।

सर्विंग प्रोजेक्ट में ऑप सोर्स की प्रतिलिपि बनाएँ

अपने कस्टम ऑप्स के साथ टेन्सरफ्लो सर्विंग बनाने के लिए, आपको सबसे पहले अपने सर्विंग प्रोजेक्ट में ऑप स्रोत को कॉपी करना होगा। इस उदाहरण के लिए, आप ऊपर उल्लिखित कस्टम-ऑप रिपॉजिटरी से Tensorflow_zero_out का उपयोग करेंगे।

सर्विंग रेपो के भीतर, एक custom_ops निर्देशिका बनाएं, जिसमें आपके सभी कस्टम ऑप्स होंगे। इस उदाहरण के लिए, आपके पास केवल Tensorflow_zero_out कोड होगा।

mkdir tensorflow_serving/custom_ops
cp -r <custom_ops_repo_root>/tensorflow_zero_out tensorflow_serving/custom_ops

ऑप के लिए स्थिर लाइब्रेरी बनाएं

Tensorflow_zero_out की BUILD फ़ाइल में, आपको एक साझा ऑब्जेक्ट फ़ाइल ( .so ) बनाने वाला लक्ष्य दिखाई देता है, जिसे आप अपने मॉडल को बनाने और प्रशिक्षित करने के लिए पायथन में लोड करेंगे। हालाँकि, TensorFlow सर्विंग, बिल्ड समय पर ऑप्स को स्थिर रूप से लिंक करता है, और एक .a फ़ाइल की आवश्यकता होती है। तो आप एक बिल्ड नियम जोड़ेंगे जो इस फ़ाइल को tensorflow_serving/custom_ops/tensorflow_zero_out/BUILD पर तैयार करेगा:

cc_library(
    name = 'zero_out_ops',
    srcs = [
        "cc/kernels/zero_out_kernels.cc",
        "cc/ops/zero_out_ops.cc",
    ],
    alwayslink = 1,
    deps = [
        "@org_tensorflow//tensorflow/core:framework",
    ]
)

ऑप से जुड़े मॉडलसर्वर का निर्माण करें

एक कस्टम ऑप का उपयोग करने वाले मॉडल की सेवा के लिए, आपको उस ऑप को लिंक करके मॉडलसर्वर बाइनरी का निर्माण करना होगा। विशेष रूप से, आप ऊपर बनाए गए zero_out_ops बिल्ड लक्ष्य को मॉडलसर्वर की BUILD फ़ाइल में जोड़ते हैं।

अपने कस्टम ऑप बिल्ड लक्ष्य को SUPPORTED_TENSORFLOW_OPS में जोड़ने के लिए tensorflow_serving/model_servers/BUILD संपादित करें, जो कि server_lib लक्ष्य में शामिल है:

SUPPORTED_TENSORFLOW_OPS = [
    ...
    "//tensorflow_serving/custom_ops/tensorflow_zero_out:zero_out_ops"
]

फिर मॉडलसर्वर बनाने के लिए डॉकर वातावरण का उपयोग करें:

tools/run_in_docker.sh bazel build tensorflow_serving/model_servers:tensorflow_model_server

अपने कस्टम ऑप वाला एक मॉडल परोसें

अब आप मॉडलसर्वर बाइनरी चला सकते हैं और उस मॉडल की सेवा शुरू कर सकते हैं जिसमें यह कस्टम ऑप शामिल है:

tools/run_in_docker.sh -o "-p 8501:8501" \
bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \
--rest_api_port=8501 --model_name=<model_name> --model_base_path=<model_base_path>

ऑप का मैन्युअल रूप से परीक्षण करने के लिए एक अनुमान अनुरोध भेजें

अब आप अपने कस्टम ऑप का परीक्षण करने के लिए मॉडल सर्वर पर एक अनुमान अनुरोध भेज सकते हैं:

curl http://localhost:8501/v1/models/<model_name>:predict -X POST \
-d '{"inputs": [[1,2], [3,4]]}'

इस पृष्ठ में मॉडल सर्वर पर REST अनुरोध भेजने के लिए एक अधिक संपूर्ण API शामिल है।