একটি টেনসরফ্লো মডেল পরিবেশন করা হচ্ছে

এই টিউটোরিয়ালটি আপনাকে দেখায় যে কীভাবে একটি প্রশিক্ষিত টেনসরফ্লো মডেল রপ্তানি করতে টেনসরফ্লো সার্ভিং উপাদান ব্যবহার করতে হয় এবং এটি পরিবেশন করতে স্ট্যান্ডার্ড টেনসরফ্লো_মডেল_সার্ভার ব্যবহার করতে হয়। যদি আপনি ইতিমধ্যে TensorFlow পরিবেশন করছে সাথে পরিচিত, এবং আপনি কিভাবে সার্ভার অভ্যন্তরীণ কাজ আরো জানতে চান, তাহলে দেখুন TensorFlow উন্নত টিউটোরিয়াল পরিবেশন করছে

এই টিউটোরিয়ালটি একটি সাধারণ সফটম্যাক্স রিগ্রেশন মডেল ব্যবহার করে যা হাতে লেখা অঙ্কগুলিকে শ্রেণীবদ্ধ করে। এটা খুবই চালু এক অনুরূপ ফ্যাশন MNIST ডেটা সেটটি ব্যবহার ইমেজ শ্রেণীবিন্যাস উপর TensorFlow টিউটোরিয়াল

এই টিউটোরিয়ালের কোড দুটি অংশ নিয়ে গঠিত:

  • একটি পাইথন ফাইল, mnist_saved_model.py , যে ট্রেন ও রপ্তানি মডেল।

  • একজন ModelServer বাইনারি যা পারেন Apt, ব্যবহার ইনস্টল করা যাবে, অথবা একটি সি ++ ফাইল (থেকে সংকলিত main.cc )। TensorFlow পরিবেশন করছে ModelServer আবিষ্কার নতুন মডেলের রপ্তানি এবং একটি রান gRPC তাদের ভজনা জন্য সেবা।

শুরু করার আগে, প্রথম Docker ইনস্টল

ট্রেন এবং রপ্তানি টেনসরফ্লো মডেল

প্রশিক্ষণ পর্ব জন্য, 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 এপিআই ডকুমেন্টেশন

  • signature_def_map নির্দিষ্ট করে একটি tensorflow করার জন্য একটি স্বাক্ষরের জন্য ব্যবহারকারী-সরবরাহকৃত কী মানচিত্র :: SignatureDef মেটা গ্রাফ যোগ করতে। স্বাক্ষর সুনির্দিষ্ট করে যে কোন ধরণের মডেল রপ্তানি করা হচ্ছে এবং ইনপুট/আউটপুট টেনসরগুলি অনুমান চালানোর সময় আবদ্ধ হবে৷

    বিশেষ স্বাক্ষর কী serving_default নির্দিষ্ট করে ডিফল্ট স্বাক্ষর পরিবেশন করছে। স্বাক্ষর সম্পর্কিত অন্যান্য ধ্রুবক সহ ডিফল্ট পরিবেশন স্বাক্ষর ডিফ কী, সংরক্ষিত মডেল স্বাক্ষর ধ্রুবকের অংশ হিসাবে সংজ্ঞায়িত করা হয়। অধিক বিবরণের জন্য, দেখুন signature_constants.py এবং সংশ্লিষ্ট TensorFlow এপিআই ডকুমেন্টেশন

    উপরন্তু, সাহায্যের বিল্ড স্বাক্ষর defs সহজেই, SavedModel API উপলব্ধকারী স্বাক্ষর Def 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 এপিআই ডকুমেন্টেশন

লক্ষ্য করুন tensor_info_x এবং tensor_info_y আছে গঠন tensorflow::TensorInfo প্রোটোকল সংজ্ঞায়িত বাফার এখানে । সহজে টেন্সর infos নির্মাণ করতে, TensorFlow SavedModel এপিআই এছাড়াও উপলব্ধ utils.py সঙ্গে সংশ্লিষ্ট TensorFlow এপিআই ডকুমেন্টেশন

এছাড়াও, মনে রাখবেন 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 যে ফাইল গ্রাফ এর ধারাবাহিকভাবে ভেরিয়েবল রাখা হয়।

এর সাথে, আপনার টেনসরফ্লো মডেল রপ্তানি করা হয়েছে এবং লোড করার জন্য প্রস্তুত!

স্ট্যান্ডার্ড টেনসরফ্লো মডেল সার্ভারের সাথে এক্সপোর্ট করা মডেল লোড করুন

পরিবেশনের জন্য মডেলটিকে সহজেই লোড করতে একটি ডকার পরিবেশন চিত্র ব্যবহার করুন:

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%

আমরা প্রশিক্ষিত Softmax মডেলের জন্য প্রায় 90% নির্ভুলতা আশা করি এবং আমরা প্রথম 1000টি পরীক্ষার চিত্রের জন্য 11% অনুমান ত্রুটির হার পাই। এটি নিশ্চিত করে যে সার্ভার সফলভাবে প্রশিক্ষিত মডেলটি লোড করে এবং চালায়!