TensorFlow সংস্করণ সামঞ্জস্য

এই নথিটি এমন ব্যবহারকারীদের জন্য যাদের TensorFlow-এর বিভিন্ন সংস্করণে (কোড বা ডেটার জন্য হয়) পিছনের দিকে সামঞ্জস্যের প্রয়োজন, এবং ডেভেলপারদের জন্য যারা সামঞ্জস্য রক্ষা করার সময় TensorFlow পরিবর্তন করতে চান।

শব্দার্থিক সংস্করণ 2.0

TensorFlow তার পাবলিক API-এর জন্য শব্দার্থিক সংস্করণ 2.0 ( semver ) অনুসরণ করে। TensorFlow-এর প্রতিটি রিলিজ সংস্করণের MAJOR.MINOR.PATCH ফর্ম রয়েছে। উদাহরণস্বরূপ, TensorFlow সংস্করণ 1.2.3 এর MAJOR সংস্করণ 1, MINOR সংস্করণ 2 এবং PATCH সংস্করণ 3 রয়েছে। প্রতিটি সংখ্যার পরিবর্তনের নিম্নলিখিত অর্থ রয়েছে:

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

  • MINOR : পিছনের দিকে সামঞ্জস্যপূর্ণ বৈশিষ্ট্য, গতির উন্নতি, ইত্যাদি। কোড এবং ডেটা যা পূর্ববর্তী একটি ছোট রিলিজের সাথে কাজ করেছিল এবং যা শুধুমাত্র অ-পরীক্ষামূলক পাবলিক API-এর উপর নির্ভর করে অপরিবর্তিতভাবে কাজ করতে থাকবে। পাবলিক API কী এবং কী নয় তার বিশদ বিবরণের জন্য, কী কভার করা হয়েছে তা দেখুন।

  • প্যাচ : পিছনের দিকে সামঞ্জস্যপূর্ণ বাগ ফিক্স।

উদাহরণস্বরূপ, রিলিজ 1.0.0 রিলিজ 0.12.1 থেকে পিছনের দিকে বেমানান পরিবর্তন প্রবর্তন করেছে। যাইহোক, রিলিজ 1.1.1 রিলিজ 1.0.0 এর সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ ছিল।

আচ্ছাদিত কি

শুধুমাত্র TensorFlow-এর সর্বজনীন APIগুলি ছোট এবং প্যাচ সংস্করণগুলিতে পিছনের দিকে সামঞ্জস্যপূর্ণ। পাবলিক API গুলি নিয়ে গঠিত

  • tensorflow মডিউল এবং এর সাবমডিউলের সমস্ত নথিভুক্ত পাইথন ফাংশন এবং ক্লাসগুলি ছাড়া

    • ব্যক্তিগত চিহ্ন: যে কোনো ফাংশন, শ্রেণী ইত্যাদি, যার নাম _ দিয়ে শুরু হয়
    • পরীক্ষামূলক এবং tf.contrib চিহ্ন, বিস্তারিত জানার জন্য নিচে দেখুন।

    উল্লেখ্য যে examples/ এবং tools/ ডিরেক্টরির কোডটি tensorflow পাইথন মডিউলের মাধ্যমে পৌঁছানো যায় না এবং এইভাবে সামঞ্জস্যের গ্যারান্টি দ্বারা আচ্ছাদিত হয় না।

    যদি tensorflow পাইথন মডিউল বা এর সাবমডিউলগুলির মাধ্যমে একটি প্রতীক পাওয়া যায়, কিন্তু নথিভুক্ত না হয়, তাহলে এটি সর্বজনীন API-এর অংশ হিসাবে বিবেচিত হয় না

  • সামঞ্জস্য API (পাইথনে, tf.compat মডিউল)। প্রধান সংস্করণগুলিতে, আমরা ব্যবহারকারীদের একটি নতুন প্রধান সংস্করণে রূপান্তরিত করতে সহায়তা করার জন্য ইউটিলিটি এবং অতিরিক্ত শেষ পয়েন্ট প্রকাশ করতে পারি। এই API চিহ্নগুলি অবহেলিত এবং সমর্থিত নয় (অর্থাৎ, আমরা কোনও বৈশিষ্ট্য যোগ করব না, এবং আমরা দুর্বলতাগুলি ঠিক করা ছাড়া অন্য বাগগুলি ঠিক করব না), তবে সেগুলি আমাদের সামঞ্জস্যতার গ্যারান্টিগুলির অধীনে পড়ে৷

  • টেনসরফ্লো সি এপিআই:

  • নিম্নলিখিত প্রোটোকল বাফার ফাইল:

TensorFlow Lite-এর জন্য আলাদা সংস্করণ নম্বর

বর্তমানে TensorFlow Lite TensorFlow এর একটি অংশ হিসাবে বিতরণ করা হয়। যাইহোক, আমরা অন্যান্য TensorFlow এপিআই-এর থেকে ভিন্ন সময়সূচীতে TensorFlow Lite API-তে ভবিষ্যতে প্রকাশের পরিবর্তনের অধিকার সংরক্ষণ করি, অথবা এমনকি TensorFlow Lite-কে একটি পৃথক উৎস বিতরণে এবং/অথবা TensorFlow-এর চেয়ে আলাদা উৎস সংগ্রহস্থলে সরানোর অধিকার রাখি।

এই কারণে, আমরা টেনসরফ্লো লাইটের জন্য একটি ভিন্ন সংস্করণ নম্বর ব্যবহার করি ( tensorflow/lite/version.h তে TFLITE_VERSION_STRING , এবং TfLiteVersion() tensorflow/lite/c/c_api.h এ ) TensorFlow ( tensorflow/core/public/version.hTF_VERSION_STRING ) এর চেয়ে tensorflow/core/public/version.h , এবং TF_Version() tensorflow/c/c_api.h এ)। বর্তমানে, এই দুটি সংস্করণ সংখ্যার একই মান আছে। কিন্তু ভবিষ্যতে, তারা ভিন্ন হতে পারে; উদাহরণস্বরূপ, আমরা TensorFlow Lite-এর জন্য প্রধান সংস্করণ সংখ্যা বৃদ্ধি না করে TensorFlow-এর জন্য প্রধান সংস্করণ নম্বর বৃদ্ধি করতে পারি, অথবা এর বিপরীতে।

টেনসরফ্লো লাইট সংস্করণ নম্বর দ্বারা আচ্ছাদিত API পৃষ্ঠ নিম্নলিখিত সর্বজনীন API গুলি নিয়ে গঠিত:

পরীক্ষামূলক প্রতীকগুলি আচ্ছাদিত নয়; বিস্তারিত জানার জন্য নীচে দেখুন।

TensorFlow Lite Extension API-এর জন্য আলাদা সংস্করণ নম্বর

টেনসরফ্লো লাইট টেনসরফ্লো লাইট ইন্টারপ্রেটারকে "কাস্টম অপস" সহ প্রসারিত করার জন্য C API প্রদান করে, যা একটি গ্রাফে ব্যবহারকারী-সংজ্ঞায়িত ক্রিয়াকলাপ প্রদান করে, বা "প্রতিনিধি" প্রদান করে, যা একটি গ্রাফের (বা একটি গ্রাফের উপসেটের জন্য) গণনা অর্পণ করার অনুমতি দেয়। একটি কাস্টম ব্যাকএন্ড। এই APIগুলি, যাকে আমরা সম্মিলিতভাবে "টেনসরফ্লো লাইট এক্সটেনশন APIs" বলি, টেনসরফ্লো লাইট বাস্তবায়নের কিছু বিবরণের উপর আরও ঘনিষ্ঠ নির্ভরতা প্রয়োজন৷

আমরা অন্যান্য TensorFlow Lite API-এর তুলনায় একটি ভিন্ন সময়সূচীতে এই API গুলিতে সম্ভাব্যভাবে অ-ব্যাকওয়ার্ড-সামঞ্জস্যপূর্ণ পরিবর্তনগুলি সহ ভবিষ্যতে প্রকাশের পরিবর্তনের অধিকার সংরক্ষণ করি। তাই আমরা TensorFlow Lite বা TensorFlow-এর সংস্করণ নম্বরের তুলনায় TensorFlow Lite Extension API-এর জন্য একটি ভিন্ন সংস্করণ নম্বর ব্যবহার করি (যা পূর্ববর্তী বিভাগে বর্ণিত হয়েছে)। আমরা TensorFlow Lite সংস্করণ 2.15-এ টেনসরফ্লো লাইট এক্সটেনশন API-এর সংস্করণ ( TFLITE_EXTENSION_APIS_VERSION_STRINGtensorflow/lite/version.h , এবং TfLiteExtensionApisVersion() tensorflow/lite/c/c_api.h এ) পেতে কিছু নতুন API চালু করছি। TensorFlow Lite Extension API-এর সংস্করণ নম্বর বর্তমানে TensorFlow এবং TensorFlow Lite-এর সংস্করণ নম্বরের মতোই। কিন্তু ভবিষ্যতে, তারা ভিন্ন হতে পারে; উদাহরণস্বরূপ, আমরা টেনসরফ্লো লাইটের প্রধান সংস্করণ নম্বর বৃদ্ধি না করেই টেনসরফ্লো লাইট এক্সটেনশন এপিআই-এর প্রধান সংস্করণ নম্বর বৃদ্ধি করতে পারি, বা এর বিপরীতে।

টেনসরফ্লো লাইট এক্সটেনশন API-এর সংস্করণ নম্বর দ্বারা আচ্ছাদিত API সারফেস নিম্নলিখিত পাবলিক APIগুলির সমন্বয়ে গঠিত:

আবার, পরীক্ষামূলক প্রতীকগুলি আচ্ছাদিত নয়; বিস্তারিত জানার জন্য নীচে দেখুন।

যা কভার করা হয় না

TensorFlow-এর কিছু অংশ যে কোনো সময়ে পশ্চাৎমুখী বেমানান উপায়ে পরিবর্তিত হতে পারে। এর মধ্যে রয়েছে:

  • পরীক্ষামূলক API : উন্নয়নের সুবিধার্থে, আমরা সামঞ্জস্যের গ্যারান্টি থেকে পরীক্ষামূলক হিসেবে চিহ্নিত কিছু API চিহ্নকে ছাড় দিয়েছি। বিশেষ করে, নিম্নলিখিতগুলি কোনও সামঞ্জস্যতার গ্যারান্টি দ্বারা আচ্ছাদিত নয়:

    • tf.contrib মডিউল বা এর সাবমডিউলের যেকোনো প্রতীক;
    • যেকোনো চিহ্ন (মডিউল, ফাংশন, আর্গুমেন্ট, প্রপার্টি, ক্লাস, কনস্ট্যান্ট, টাইপ, প্যাকেজ, ইত্যাদি) যার নাম experimental বা Experimental রয়েছে; বা
    • যে কোনো চিহ্ন যার সম্পূর্ণ যোগ্য নামের মধ্যে একটি মডিউল বা শ্রেণী বা প্যাকেজ রয়েছে যা নিজেই পরীক্ষামূলক। এর মধ্যে রয়েছে experimental নামক যেকোনো প্রোটোকল বাফারের ক্ষেত্র এবং সাবমেসেজ।
  • অন্যান্য ভাষা : Python এবং C ব্যতীত অন্যান্য ভাষায় TensorFlow API, যেমন:

    এবং বিশেষ করে জাভা/কোটলিন, সি, অবজেক্টিভ-সি এবং সুইফট ছাড়া অন্য ভাষায় টেনসরফ্লো লাইট API

    • C++ ( tensorflow/lite/ এ হেডার ফাইলের মাধ্যমে উন্মুক্ত)
  • কম্পোজিট অপ্সের বিশদ বিবরণ: পাইথনের অনেক পাবলিক ফাংশন গ্রাফের বিভিন্ন আদিম অপ্সে প্রসারিত হয় এবং এই বিবরণগুলি GraphDef s হিসাবে ডিস্কে সংরক্ষিত যেকোনো গ্রাফের অংশ হবে। এই বিবরণ ছোট রিলিজের জন্য পরিবর্তিত হতে পারে. বিশেষ করে, গ্রাফের মধ্যে সঠিক মিলের জন্য পরীক্ষা করা রিগ্রেশন পরীক্ষাগুলি ছোটখাটো রিলিজ জুড়ে ভেঙে যেতে পারে, যদিও গ্রাফের আচরণ অপরিবর্তিত হওয়া উচিত এবং বিদ্যমান চেকপয়েন্টগুলি এখনও কাজ করবে।

  • ফ্লোটিং পয়েন্ট সংখ্যাগত বিবরণ: অপ্স দ্বারা গণনা করা নির্দিষ্ট ফ্লোটিং পয়েন্ট মান যে কোনো সময় পরিবর্তিত হতে পারে। ব্যবহারকারীদের শুধুমাত্র আনুমানিক নির্ভুলতা এবং সংখ্যাগত স্থিতিশীলতার উপর নির্ভর করা উচিত, গণনা করা নির্দিষ্ট বিটের উপর নয়। গৌণ এবং প্যাচ রিলিজে সংখ্যাসূচক সূত্রের পরিবর্তনের ফলে তুলনামূলক বা উন্নত নির্ভুলতা হওয়া উচিত, সতর্কতা সহ যে মেশিন লার্নিংয়ে নির্দিষ্ট সূত্রের উন্নত নির্ভুলতা সামগ্রিক সিস্টেমের জন্য সঠিকতা হ্রাস করতে পারে।

  • এলোমেলো সংখ্যা: গণনা করা নির্দিষ্ট র্যান্ডম সংখ্যা যে কোনো সময় পরিবর্তিত হতে পারে। ব্যবহারকারীদের শুধুমাত্র আনুমানিক সঠিক বিতরণ এবং পরিসংখ্যানগত শক্তির উপর নির্ভর করা উচিত, গণনা করা নির্দিষ্ট বিট নয়। বিশদ বিবরণের জন্য র্যান্ডম সংখ্যা প্রজন্মের নির্দেশিকা দেখুন।

  • ডিস্ট্রিবিউটেড টেনসরফ্লোতে সংস্করণ স্ক্যু: একটি একক ক্লাস্টারে টেনসরফ্লো-এর দুটি ভিন্ন সংস্করণ চালানো অসমর্থিত। তারের প্রোটোকলের পিছনের সামঞ্জস্য সম্পর্কে কোন গ্যারান্টি নেই।

  • বাগ: বর্তমান বাস্তবায়নটি স্পষ্টভাবে ভেঙে গেলে, অর্থাৎ, যদি এটি ডকুমেন্টেশনের সাথে বিরোধিতা করে বা যদি একটি সুপরিচিত এবং সুনির্দিষ্ট উদ্দেশ্যমূলক আচরণ সঠিকভাবে বাস্তবায়িত না হয় তবে আমরা পিছনের বেমানান আচরণ (যদিও API নয়) পরিবর্তন করার অধিকার সংরক্ষণ করি একটি বাগ উদাহরণস্বরূপ, যদি একটি অপ্টিমাইজার একটি সুপরিচিত অপ্টিমাইজেশান অ্যালগরিদম প্রয়োগ করার দাবি করে কিন্তু একটি ত্রুটির কারণে সেই অ্যালগরিদমের সাথে মেলে না, তাহলে আমরা অপ্টিমাইজারটি ঠিক করব৷ আমাদের ফিক্স কনভারজেন্সের জন্য ভুল আচরণের উপর নির্ভর করে কোড ভাঙতে পারে। আমরা রিলিজ নোটগুলিতে এই ধরনের পরিবর্তনগুলি নোট করব।

  • অব্যবহৃত এপিআই: আমরা API-তে পিছনের দিকে বেমানান পরিবর্তন করার অধিকার সংরক্ষণ করি যার জন্য আমরা কোন নথিভুক্ত ব্যবহার খুঁজে পাই না (GitHub অনুসন্ধানের মাধ্যমে TensorFlow ব্যবহারের অডিট সম্পাদন করে)। এই ধরনের কোনো পরিবর্তন করার আগে, আমরা announce@ মেইলিং লিস্টে পরিবর্তন করার জন্য আমাদের অভিপ্রায় ঘোষণা করব, কীভাবে কোনো বিচ্ছেদ (যদি প্রযোজ্য হয়) সমাধান করতে হবে তার নির্দেশনা প্রদান করব এবং আমাদের সম্প্রদায়কে তাদের প্রতিক্রিয়া জানাতে একটি সুযোগ দেওয়ার জন্য দুই সপ্তাহ অপেক্ষা করুন। .

  • ত্রুটি আচরণ: আমরা ত্রুটিহীন আচরণ দিয়ে ত্রুটি প্রতিস্থাপন করতে পারি। উদাহরণস্বরূপ, আমরা একটি ত্রুটি উত্থাপনের পরিবর্তে একটি ফলাফল গণনা করার জন্য একটি ফাংশন পরিবর্তন করতে পারি, এমনকি যদি সেই ত্রুটিটি নথিভুক্ত করা হয়। আমরা ত্রুটি বার্তার পাঠ্য পরিবর্তন করার অধিকারও সংরক্ষণ করি৷ উপরন্তু, একটি ত্রুটির ধরন পরিবর্তন হতে পারে যদি না একটি নির্দিষ্ট ত্রুটি অবস্থার জন্য ব্যতিক্রম প্রকার ডকুমেন্টেশনে নির্দিষ্ট করা হয়।

সংরক্ষিত মডেল, গ্রাফ এবং চেকপয়েন্টের সামঞ্জস্য

SavedModel হল TensorFlow প্রোগ্রামে ব্যবহার করার জন্য পছন্দের সিরিয়ালাইজেশন ফরম্যাট। সংরক্ষিত মডেলগুলিতে দুটি অংশ রয়েছে: GraphDefs এবং একটি চেকপয়েন্ট হিসাবে এনকোড করা এক বা একাধিক গ্রাফ। গ্রাফগুলি চালানোর জন্য অপারেটিং সিস্টেমের ডেটা ফ্লো বর্ণনা করে এবং চেকপয়েন্টগুলি একটি গ্রাফে ভেরিয়েবলের সংরক্ষিত টেনসর মান ধারণ করে।

অনেক TensorFlow ব্যবহারকারী SavedModels তৈরি করে এবং TensorFlow-এর পরবর্তী রিলিজের মাধ্যমে সেগুলিকে লোড ও কার্যকর করে। Semver- এর সাথে সম্মতিতে, TensorFlow-এর একটি সংস্করণের সাথে লেখা সংরক্ষিত মডেলগুলি একই প্রধান রিলিজের সাথে TensorFlow-এর পরবর্তী সংস্করণের সাথে লোড এবং মূল্যায়ন করা যেতে পারে।

আমরা সমর্থিত SavedModels-এর জন্য অতিরিক্ত গ্যারান্টি দিই। আমরা একটি SavedModel বলি যা TensorFlow প্রধান সংস্করণ Nশুধুমাত্র অ-বঞ্চিত, অ-পরীক্ষামূলক, নন-কম্প্যাটিবিলিটি API ব্যবহার করে তৈরি করা হয়েছিল এবং N সংস্করণে সমর্থিত SavedModel । TensorFlow মেজর ভার্সন N এ সমর্থিত যেকোন SavedModel TensorFlow মেজর ভার্সন N+1 দিয়ে লোড এবং এক্সিকিউট করা যেতে পারে। যাইহোক, এই ধরনের মডেল তৈরি বা সংশোধন করার জন্য প্রয়োজনীয় কার্যকারিতা আর উপলব্ধ নাও হতে পারে, তাই এই গ্যারান্টিটি শুধুমাত্র অপরিবর্তিত সংরক্ষিত মডেলের ক্ষেত্রে প্রযোজ্য।

আমরা যতদিন সম্ভব পিছনের সামঞ্জস্য রক্ষা করার চেষ্টা করব, যাতে সিরিয়াল করা ফাইলগুলি দীর্ঘ সময়ের জন্য ব্যবহারযোগ্য হয়।

GraphDef সামঞ্জস্য

গ্রাফগুলি GraphDef প্রোটোকল বাফারের মাধ্যমে ক্রমিক করা হয়। গ্রাফে পিছনের দিকে বেমানান পরিবর্তনগুলি সহজ করার জন্য, প্রতিটি GraphDef একটি সংস্করণ নম্বর রয়েছে TensorFlow সংস্করণ থেকে আলাদা। উদাহরণ স্বরূপ, GraphDef সংস্করণ 17 reciprocal পক্ষে inv op অবচয় করেছে। শব্দার্থবিদ্যা হল:

  • TensorFlow এর প্রতিটি সংস্করণ GraphDef সংস্করণের একটি বিরতি সমর্থন করে। এই ব্যবধান প্যাচ রিলিজ জুড়ে ধ্রুবক থাকবে, এবং শুধুমাত্র ছোট রিলিজ জুড়ে বৃদ্ধি পাবে। একটি GraphDef সংস্করণের জন্য ড্রপিং সমর্থন শুধুমাত্র TensorFlow এর একটি বড় রিলিজের জন্য ঘটবে (এবং শুধুমাত্র SavedModels-এর জন্য গ্যারান্টিযুক্ত সংস্করণ সমর্থনের সাথে সারিবদ্ধ)।

  • নতুন তৈরি গ্রাফগুলিকে সর্বশেষ GraphDef সংস্করণ নম্বর দেওয়া হয়েছে৷

  • যদি TensorFlow-এর একটি প্রদত্ত সংস্করণ একটি গ্রাফের GraphDef সংস্করণকে সমর্থন করে, তবে এটি তৈরি করতে ব্যবহৃত TensorFlow সংস্করণের মতো একই আচরণের সাথে লোড এবং মূল্যায়ন করবে (উপরে বর্ণিত ফ্লোটিং পয়েন্ট সংখ্যাগত বিবরণ এবং র্যান্ডম সংখ্যা ব্যতীত), প্রধান নির্বিশেষে TensorFlow এর সংস্করণ। বিশেষ করে, একটি গ্রাফডিফ যা টেনসরফ্লো-এর একটি সংস্করণে একটি চেকপয়েন্ট ফাইলের সাথে সামঞ্জস্যপূর্ণ (যেমন একটি সংরক্ষিত মডেলের ক্ষেত্রে) পরবর্তী সংস্করণগুলিতে সেই চেকপয়েন্টের সাথে সামঞ্জস্যপূর্ণ থাকবে, যতক্ষণ না GraphDef সমর্থিত হয়।

    মনে রাখবেন যে এটি শুধুমাত্র GraphDefs (এবং SavedModels) এর সিরিয়ালাইজড গ্রাফের ক্ষেত্রে প্রযোজ্য: যে কোডটি একটি চেকপয়েন্ট পড়ে সে একই কোড দ্বারা তৈরি হওয়া চেকপয়েন্ট টেনসরফ্লো-এর ভিন্ন সংস্করণে পড়তে সক্ষম নাও হতে পারে।

  • যদি GraphDef উপরের সীমাটি একটি (অল্প) রিলিজে X পর্যন্ত বৃদ্ধি করা হয়, তবে নিম্ন সীমাটি X-তে বাড়ানোর অন্তত ছয় মাস আগে থাকবে। উদাহরণস্বরূপ (আমরা এখানে অনুমানমূলক সংস্করণ সংখ্যাগুলি ব্যবহার করছি):

    • TensorFlow 1.2 GraphDef সংস্করণ 4 থেকে 7 সমর্থন করতে পারে।
    • TensorFlow 1.3 GraphDef সংস্করণ 8 এবং সমর্থন সংস্করণ 4 থেকে 8 যোগ করতে পারে।
    • অন্তত ছয় মাস পরে, TensorFlow 2.0.0 4 থেকে 7 সংস্করণের জন্য সমর্থন বাদ দিতে পারে, শুধুমাত্র সংস্করণ 8 রেখে।

    উল্লেখ্য যে TensorFlow-এর প্রধান সংস্করণগুলি সাধারণত 6 মাসেরও বেশি সময়ের ব্যবধানে প্রকাশিত হয়, তাই উপরে বর্ণিত সমর্থিত SavedModels-এর গ্যারান্টিগুলি GraphDefs-এর জন্য 6 মাসের গ্যারান্টির চেয়ে অনেক বেশি শক্তিশালী।

অবশেষে, যখন একটি GraphDef সংস্করণের জন্য সমর্থন বাদ দেওয়া হয়, আমরা গ্রাফগুলিকে একটি নতুন সমর্থিত GraphDef সংস্করণে স্বয়ংক্রিয়ভাবে রূপান্তর করার জন্য সরঞ্জাম সরবরাহ করার চেষ্টা করব।

টেনসরফ্লো প্রসারিত করার সময় গ্রাফ এবং চেকপয়েন্ট সামঞ্জস্য

এই বিভাগটি শুধুমাত্র তখনই প্রাসঙ্গিক যখন GraphDef বিন্যাসে বেমানান পরিবর্তন করা হয়, যেমন অপ্স যোগ করার সময়, অপস অপসারণ করা হয়, বা বিদ্যমান অপ্সের কার্যকারিতা পরিবর্তন করা হয়। পূর্ববর্তী বিভাগটি বেশিরভাগ ব্যবহারকারীর জন্য যথেষ্ট।

পশ্চাদপদ এবং আংশিক এগিয়ে সামঞ্জস্য

আমাদের সংস্করণ স্কিমের তিনটি প্রয়োজনীয়তা রয়েছে:

  • টেনসরফ্লো-এর পুরানো সংস্করণগুলির সাথে তৈরি গ্রাফ এবং চেকপয়েন্টগুলিকে লোড করা সমর্থন করার জন্য পশ্চাদমুখী সামঞ্জস্য
  • গ্রাফ বা চেকপয়েন্টের প্রযোজককে ভোক্তার সামনে TensorFlow-এর একটি নতুন সংস্করণে আপগ্রেড করা হয় এমন পরিস্থিতিতে সমর্থন করার জন্য ফরওয়ার্ড সামঞ্জস্যতা
  • বেমানান উপায়ে বিকশিত TensorFlow সক্ষম করুন। উদাহরণস্বরূপ, অপস অপসারণ, বৈশিষ্ট্য যোগ করা এবং বৈশিষ্ট্যগুলি সরানো।

উল্লেখ্য যে GraphDef সংস্করণ প্রক্রিয়াটি TensorFlow সংস্করণ থেকে পৃথক হলেও, GraphDef বিন্যাসে পিছনের দিকে বেমানান পরিবর্তনগুলি এখনও শব্দার্থিক সংস্করণ দ্বারা সীমাবদ্ধ। এর মানে হল কার্যকারিতা শুধুমাত্র TensorFlow এর MAJOR সংস্করণগুলির মধ্যে সরানো বা পরিবর্তন করা যেতে পারে (যেমন 1.7 থেকে 2.0 )। অতিরিক্তভাবে, প্যাচ রিলিজের মধ্যে ফরওয়ার্ড সামঞ্জস্যতা প্রয়োগ করা হয় (উদাহরণস্বরূপ 1.x.1 থেকে 1.x.2 )।

পশ্চাৎপদ এবং এগিয়ে সামঞ্জস্য অর্জন করতে এবং ফরম্যাটের পরিবর্তনগুলি কখন প্রয়োগ করতে হবে তা জানতে, গ্রাফ এবং চেকপয়েন্টগুলিতে মেটাডেটা থাকে যা বর্ণনা করে যে তারা কখন তৈরি হয়েছিল৷ নীচের বিভাগগুলি টেনসরফ্লো বাস্তবায়ন এবং GraphDef সংস্করণগুলির বিকাশের জন্য নির্দেশিকাগুলির বিশদ বিবরণ দেয়।

স্বাধীন ডেটা সংস্করণ স্কিম

গ্রাফ এবং চেকপয়েন্টগুলির জন্য বিভিন্ন ডেটা সংস্করণ রয়েছে। দুটি ডেটা ফরম্যাট একে অপরের থেকে বিভিন্ন হারে এবং টেনসরফ্লো থেকে বিভিন্ন হারে বিবর্তিত হয়। উভয় সংস্করণ সিস্টেম core/public/version.h এ সংজ্ঞায়িত করা হয়েছে। যখনই একটি নতুন সংস্করণ যোগ করা হয়, তখন কী পরিবর্তিত হয়েছে এবং তারিখের বিবরণ দিয়ে শিরোনামে একটি নোট যোগ করা হয়।

ডেটা, প্রযোজক এবং ভোক্তা

আমরা নিম্নলিখিত ধরণের ডেটা সংস্করণ তথ্যের মধ্যে পার্থক্য করি:

  • প্রযোজক : বাইনারি যা ডেটা তৈরি করে। প্রযোজকদের একটি সংস্করণ ( producer ) এবং একটি সর্বনিম্ন ভোক্তা সংস্করণ রয়েছে যা তারা ( min_consumer ) এর সাথে সামঞ্জস্যপূর্ণ।
  • ভোক্তা : বাইনারি যা ডেটা ব্যবহার করে। ভোক্তাদের একটি সংস্করণ ( consumer ) এবং একটি সর্বনিম্ন প্রযোজক সংস্করণ রয়েছে যা তারা ( min_producer ) এর সাথে সামঞ্জস্যপূর্ণ।

সংস্করণকৃত ডেটার প্রতিটি অংশে একটি VersionDef versions ক্ষেত্র রয়েছে যা ডেটা তৈরিকারী producer , min_consumer যার সাথে এটি সামঞ্জস্যপূর্ণ, এবং অস্বীকৃত bad_consumers সংস্করণগুলির একটি তালিকা রেকর্ড করে।

ডিফল্টরূপে, যখন একজন প্রযোজক কিছু ডেটা তৈরি করে, তখন তথ্যটি প্রযোজকের producer এবং min_consumer সংস্করণগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত করে। bad_consumers সেট করা যেতে পারে যদি নির্দিষ্ট ভোক্তা সংস্করণে বাগ রয়েছে বলে জানা যায় এবং অবশ্যই এড়ানো উচিত। একজন ভোক্তা তথ্যের একটি অংশ গ্রহণ করতে পারে যদি নিম্নলিখিতগুলি সত্য হয়:

  • consumer >= ডেটার min_consumer
  • ডেটার producer >= ভোক্তার min_producer
  • consumer ডেটার bad_consumers মধ্যে নয়

যেহেতু প্রযোজক এবং ভোক্তা উভয়ই একই TensorFlow কোড বেস থেকে এসেছে, core/public/version.h এ একটি প্রধান ডেটা সংস্করণ রয়েছে যা প্রেক্ষাপটের উপর নির্ভর করে এবং min_consumer এবং min_producer (যথাক্রমে প্রযোজক এবং ভোক্তাদের দ্বারা প্রয়োজন) উভয়ই producer বা consumer হিসাবে বিবেচিত হয়। . বিশেষ করে,

  • GraphDef সংস্করণের জন্য, আমাদের কাছে রয়েছে TF_GRAPH_DEF_VERSION , TF_GRAPH_DEF_VERSION_MIN_CONSUMER , এবং TF_GRAPH_DEF_VERSION_MIN_PRODUCER
  • চেকপয়েন্ট সংস্করণের জন্য, আমাদের আছে TF_CHECKPOINT_VERSION , TF_CHECKPOINT_VERSION_MIN_CONSUMER , এবং TF_CHECKPOINT_VERSION_MIN_PRODUCER

একটি বিদ্যমান অপে ডিফল্ট সহ একটি নতুন বৈশিষ্ট্য যোগ করুন

নিচের নির্দেশিকা অনুসরণ করা আপনাকে ফরওয়ার্ড সামঞ্জস্য দেয় শুধুমাত্র যদি অপ্সের সেট পরিবর্তন না হয়:

  1. যদি ফরওয়ার্ড সামঞ্জস্য কামনা করা হয়, tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables এবং tf.saved_model.SavedModelBuilder.add_meta_graph পদ্ধতি ব্যবহার করে মডেলটি রপ্তানি করার সময় strip_default_attrs True সেট করুন, tf.estimator.Estimator.export_saved_model SavedModelBuilder
  2. এটি মডেলগুলি উত্পাদন/রপ্তানি করার সময় ডিফল্ট মূল্যবান বৈশিষ্ট্যগুলি বন্ধ করে দেয়। এটি নিশ্চিত করে যে ডিফল্ট মান ব্যবহার করার সময় এক্সপোর্ট করা tf.MetaGraphDef নতুন অপ-অ্যাট্রিবিউট থাকবে না।
  3. এই নিয়ন্ত্রণ থাকার ফলে পুরানো ভোক্তাদের (উদাহরণস্বরূপ, বাইনারি পরিবেশন করা যা প্রশিক্ষণ বাইনারি থেকে পিছিয়ে) মডেলগুলি লোড করা চালিয়ে যেতে এবং মডেল পরিবেশনে বাধা রোধ করতে পারে।

ক্রমবর্ধমান গ্রাফডিফ সংস্করণ

GraphDef ফরম্যাটে বিভিন্ন ধরনের পরিবর্তন করতে এই ভার্সনিং মেকানিজমটি কীভাবে ব্যবহার করতে হয় তা এই বিভাগটি ব্যাখ্যা করে।

একটি অপশন যোগ করুন

একই সময়ে ভোক্তা এবং প্রযোজক উভয়ের জন্য নতুন বিকল্প যোগ করুন, এবং কোনো GraphDef সংস্করণ পরিবর্তন করবেন না। এই ধরনের পরিবর্তন স্বয়ংক্রিয়ভাবে পশ্চাদমুখী সামঞ্জস্যপূর্ণ, এবং বিদ্যমান প্রযোজক স্ক্রিপ্টগুলি হঠাৎ করে নতুন কার্যকারিতা ব্যবহার করবে না বলে ফরওয়ার্ড সামঞ্জস্যতার পরিকল্পনাকে প্রভাবিত করে না।

একটি অপ যোগ করুন এবং এটি ব্যবহার করতে বিদ্যমান পাইথন র‍্যাপারগুলি স্যুইচ করুন৷

  1. নতুন ভোক্তা কার্যকারিতা প্রয়োগ করুন এবং GraphDef সংস্করণ বৃদ্ধি করুন।
  2. যদি র‍্যাপারগুলিকে শুধুমাত্র সেই ক্ষেত্রে নতুন কার্যকারিতা ব্যবহার করা সম্ভব হয় যেগুলি আগে কাজ করেনি, তাহলে র‍্যাপারগুলি এখন আপডেট করা যেতে পারে৷
  3. নতুন কার্যকারিতা ব্যবহার করতে Python wrappers পরিবর্তন করুন। min_consumer বাড়াবেন না, যেহেতু যে মডেলগুলি এই বিকল্পটি ব্যবহার করে না তাদের ভাঙা উচিত নয়৷

অপসারণ বা একটি অপের কার্যকারিতা সীমাবদ্ধ

  1. নিষিদ্ধ অপশন বা কার্যকারিতা ব্যবহার না করার জন্য সমস্ত প্রযোজক স্ক্রিপ্ট (টেনসরফ্লো নিজে নয়) ঠিক করুন।
  2. GraphDef সংস্করণ বৃদ্ধি করুন এবং নতুন ভোক্তা কার্যকারিতা প্রয়োগ করুন যা নতুন সংস্করণে এবং উপরে GraphDefs-এর জন্য অপসারণ অপশন বা কার্যকারিতা নিষিদ্ধ করে৷ যদি সম্ভব হয়, TensorFlow-কে নিষিদ্ধ কার্যকারিতা সহ GraphDefs তৈরি করা বন্ধ করুন। এটি করতে, REGISTER_OP(...).Deprecated(deprecated_at_version, message) যোগ করুন।
  3. পশ্চাদপদ সামঞ্জস্যের উদ্দেশ্যে একটি বড় রিলিজের জন্য অপেক্ষা করুন।
  4. (2) থেকে GraphDef সংস্করণে min_producer বাড়ান এবং কার্যকারিতা সম্পূর্ণরূপে সরিয়ে দিন।

একটি অপ এর কার্যকারিতা পরিবর্তন করুন

  1. SomethingV2 বা অনুরূপ নামে একটি নতুন অনুরূপ অপ যোগ করুন এবং এটিকে যুক্ত করার এবং বিদ্যমান পাইথন র‍্যাপারগুলিকে ব্যবহার করার জন্য স্যুইচ করার প্রক্রিয়ার মধ্য দিয়ে যান। ফরওয়ার্ড সামঞ্জস্য নিশ্চিত করতে Python র্যাপার পরিবর্তন করার সময় compat.py- এ প্রস্তাবিত চেকগুলি ব্যবহার করুন।
  2. পুরানো অপটি সরান (পশ্চাদগামী সামঞ্জস্যের কারণে শুধুমাত্র একটি বড় সংস্করণ পরিবর্তনের সাথে হতে পারে)।
  3. পুরানো অপের সাথে ভোক্তাদের বাদ দিতে min_consumer বাড়ান, SomethingV2 এর উপনাম হিসাবে পুরানো অপটিকে আবার যুক্ত করুন এবং এটি ব্যবহার করার জন্য বিদ্যমান পাইথন র‍্যাপারগুলিকে স্যুইচ করার প্রক্রিয়াটির মধ্য দিয়ে যান৷
  4. SomethingV2 মুছে ফেলার প্রক্রিয়ার মধ্য দিয়ে যান।

একটি একক অনিরাপদ ভোক্তা সংস্করণ নিষিদ্ধ করুন

  1. GraphDef সংস্করণটি বাম্প করুন এবং সমস্ত নতুন GraphDef-এর জন্য bad_consumers এ খারাপ সংস্করণ যোগ করুন। যদি সম্ভব হয়, শুধুমাত্র গ্রাফডিফের জন্য bad_consumers যোগ করুন যাতে একটি নির্দিষ্ট অপ বা অনুরূপ থাকে।
  2. বিদ্যমান ভোক্তাদের খারাপ সংস্করণ থাকলে, যত তাড়াতাড়ি সম্ভব তাদের সরিয়ে দিন।