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

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

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

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

  • একটি পাইথন ফাইল, mnist_saved_model.py , যা মডেলটিকে প্রশিক্ষণ দেয় এবং রপ্তানি করে।

  • একটি মডেল সার্ভার বাইনারি যা হয় Apt ব্যবহার করে ইনস্টল করা যেতে পারে বা একটি C++ ফাইল ( main.cc ) থেকে কম্পাইল করা যেতে পারে। টেনসরফ্লো সার্ভিং মডেল সার্ভার নতুন এক্সপোর্ট করা মডেল আবিষ্কার করে এবং সেগুলি পরিবেশনের জন্য একটি জিআরপিসি পরিষেবা চালায়।

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

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

প্রশিক্ষণ পর্বের জন্য, টেনসরফ্লো গ্রাফটি টেনসরফ্লো সেশন sess চালু করা হয়েছে, ইনপুট টেনসর (চিত্র) x হিসাবে এবং আউটপুট টেনসর (সফ্টম্যাক্স স্কোর) 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 হল ট্যাগের সেট যা দিয়ে মেটা গ্রাফ সংরক্ষণ করা হয়। এই ক্ষেত্রে, যেহেতু আমরা সার্ভিং-এ গ্রাফ ব্যবহার করতে চাই, তাই আমরা পূর্বনির্ধারিত SavedModel ট্যাগ কনস্ট্যান্ট থেকে serve ট্যাগ ব্যবহার করি। আরও বিশদ বিবরণের জন্য, tag_constants.py এবং সম্পর্কিত TensorFlow API ডকুমেন্টেশন দেখুন।

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

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

    আরও, সহজে স্বাক্ষর ডিফ তৈরি করতে সাহায্য করার জন্য, SavedModel API স্বাক্ষর def utils প্রদান করে.. বিশেষ করে, মূল mnist_saved_model.py ফাইলে, আমরা predict_signature এবং classification_signature তৈরি করতে signature_def_utils.build_signature_def() ব্যবহার করি।

    কিভাবে 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 প্রোটোকল বাফারের গঠন এখানে সংজ্ঞায়িত করা হয়েছে। সহজেই টেনসর ইনফো তৈরি করতে, TensorFlow SavedModel API এছাড়াও TensorFlow API ডকুমেন্টেশন সহ utils.py প্রদান করে।

এছাড়াও, মনে রাখবেন যে images এবং scores হল টেনসর ওরফে নাম। এগুলি আপনি যা চান তা অনন্য স্ট্রিং হতে পারে এবং তারা টেনসর x এবং y এর যৌক্তিক নাম হয়ে যাবে যা আপনি পরে ভবিষ্যদ্বাণী অনুরোধ পাঠানোর সময় টেনসর বাইন্ডিংয়ের জন্য উল্লেখ করেন।

উদাহরণস্বরূপ, যদি x 'long_tensor_name_foo' নাম দিয়ে টেনসরকে নির্দেশ করে এবং y 'generated_tensor_name_bar' নামের টেনসরকে বোঝায়, তাহলে builder টেনসরের লজিক্যাল নামকে আসল নাম ম্যাপিং ('images' -> '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 হল সিরিয়ালাইজড টেনসরফ্লো::SavedModel। এটি মডেলের এক বা একাধিক গ্রাফ সংজ্ঞা, সেইসাথে মডেলের মেটাডেটা যেমন স্বাক্ষর অন্তর্ভুক্ত করে।

  • variables হল ফাইল যা গ্রাফের ক্রমিক ভেরিয়েবল ধারণ করে।

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

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

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

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% অনুমান ত্রুটির হার পাই। এটি নিশ্চিত করে যে সার্ভার সফলভাবে প্রশিক্ষিত মডেলটি লোড করে এবং চালায়!