TF হাব থেকে ক্যাশিং মডেল ডাউনলোড

সংক্ষিপ্ত বিবরণ

tensorflow_hub লাইব্রেরি বর্তমানে মডেল ডাউনলোড করার জন্য দুটি মোড সমর্থন করে। ডিফল্টরূপে, একটি মডেল একটি কম্প্রেসড আর্কাইভ হিসাবে ডাউনলোড হয় এবং ডিস্কে ক্যাশ করা হয়। দ্বিতীয়ত, মডেলগুলি সরাসরি রিমোট স্টোরেজ থেকে TensorFlow-তে রিড করা যেতে পারে। উভয় ক্ষেত্রেই, প্রকৃত পাইথন কোডে tensorflow_hub ফাংশন কল করার জন্য মডেলগুলির ক্যানোনিকাল tfhub.dev URL ব্যবহার করা যেতে পারে এবং করা উচিত, যা বিভিন্ন সিস্টেমে পোর্টেবল এবং ডকুমেন্টেশনের জন্য নেভিগেবল। বিরল ক্ষেত্রে যদি ব্যবহারকারীর কোডের প্রকৃত ফাইলসিস্টেম লোকেশনের প্রয়োজন হয় (ডাউনলোড এবং ডিকম্প্রেস করার পরে, অথবা একটি মডেল হ্যান্ডেলকে ফাইলসিস্টেম পাথে রিজলভ করার পরে), তবে সেটি hub.resolve(handle) ফাংশনের মাধ্যমে পাওয়া যেতে পারে।

সংকুচিত ডাউনলোডের ক্যাশিং

tfhub.dev (বা অন্যান্য হোস্টিং সাইট ) থেকে মডেল ডাউনলোড এবং ডিকম্প্রেস করার পর, tensorflow_hub লাইব্রেরি ডিফল্টরূপে সেগুলোকে ফাইলসিস্টেমে ক্যাশ করে রাখে। বেশিরভাগ পরিবেশের জন্য এই মোডটিই সুপারিশ করা হয়, তবে যদি ডিস্কের জায়গা কম থাকে কিন্তু নেটওয়ার্ক ব্যান্ডউইথ এবং ল্যাটেন্সি চমৎকার হয়, সেক্ষেত্রে এর ব্যতিক্রম হতে পারে।

ডাউনলোডের স্থান ডিফল্টরূপে একটি স্থানীয় অস্থায়ী ডিরেক্টরিতে সেট করা থাকে, কিন্তু TFHUB_CACHE_DIR এনভায়রনমেন্ট ভেরিয়েবল সেট করে (যা সুপারিশ করা হয়) অথবা --tfhub_cache_dir কমান্ড-লাইন ফ্ল্যাগটি পাস করে এটি কাস্টমাইজ করা যেতে পারে। ডিফল্ট ক্যাশে লোকেশন /tmp/tfhub_modules (অথবা os.path.join(tempfile.gettempdir(), "tfhub_modules") এর ফলাফল যা-ই হোক না কেন) বেশিরভাগ ক্ষেত্রেই কাজ করা উচিত।

যেসব ব্যবহারকারী সিস্টেম রিবুটের পরেও স্থায়ী ক্যাশিং চান, তারা এর পরিবর্তে TFHUB_CACHE_DIR তাদের হোম ডিরেক্টরির কোনো একটি অবস্থানে সেট করতে পারেন। উদাহরণস্বরূপ, লিনাক্স সিস্টেমে ব্যাশ শেল ব্যবহারকারী ~/.bashrc ফাইলে নিম্নলিখিত লাইনের মতো একটি লাইন যোগ করতে পারেন:

export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules

...শেলটি পুনরায় চালু করুন, এবং তারপর এই অবস্থানটি ব্যবহৃত হবে। একটি স্থায়ী অবস্থান ব্যবহার করার সময় মনে রাখবেন যে, এর কোনো স্বয়ংক্রিয় পরিষ্করণ হয় না।

রিমোট স্টোরেজ থেকে পড়া হচ্ছে

ব্যবহারকারীরা নিম্নলিখিত উপায়ে tensorflow_hub লাইব্রেরিকে মডেলগুলো স্থানীয়ভাবে ডাউনলোড করার পরিবর্তে সরাসরি রিমোট স্টোরেজ (GCS) থেকে পড়ার নির্দেশ দিতে পারেন:

os.environ["TFHUB_MODEL_LOAD_FORMAT"] = "UNCOMPRESSED"

অথবা কমান্ড-লাইন ফ্ল্যাগ --tfhub_model_load_format কে UNCOMPRESSED এ সেট করে। এই পদ্ধতিতে, কোনো ক্যাশিং ডিরেক্টরির প্রয়োজন হয় না, যা বিশেষ করে সেইসব পরিবেশে সহায়ক যেখানে ডিস্ক স্পেস কম কিন্তু ইন্টারনেট সংযোগ দ্রুতগতির।

কোলাব নোটবুকে টিপিইউ-তে চলছে

colab.research.google.com- এ, কম্প্রেসড মডেল ডাউনলোড করলে TPU রানটাইমের সাথে সংঘাত সৃষ্টি হবে, কারণ কম্পিউটেশনের কাজটি এমন একটি মেশিনে অর্পণ করা হয় যেটির ডিফল্টভাবে ক্যাশে লোকেশনে অ্যাক্সেস নেই। এই পরিস্থিতির জন্য দুটি সমাধান রয়েছে:

১) এমন একটি GCS বাকেট ব্যবহার করুন যা TPU ওয়ার্কার অ্যাক্সেস করতে পারে।

সবচেয়ে সহজ সমাধান হলো, উপরে বর্ণিত পদ্ধতি অনুযায়ী tensorflow_hub লাইব্রেরিকে TF Hub-এর GCS বাকেট থেকে মডেলগুলো পড়ার নির্দেশ দেওয়া। যেসব ব্যবহারকারীর নিজস্ব GCS বাকেট আছে, তারা এর পরিবর্তে নিচের মতো কোড ব্যবহার করে তাদের বাকেটের মধ্যে একটি ডিরেক্টরিকে ক্যাশে লোকেশন হিসেবে নির্দিষ্ট করে দিতে পারেন:

import os
os.environ["TFHUB_CACHE_DIR"] = "gs://my-bucket/tfhub-modules-cache"

... tensorflow_hub লাইব্রেরি কল করার আগে।

২) সমস্ত রিড অপারেশন কোলাব হোস্টের মাধ্যমে রিডাইরেক্ট করুন।

এর আরেকটি সমাধান হলো সমস্ত রিড (এমনকি বড় ভেরিয়েবলেরও) কোলাব হোস্টের মাধ্যমে রিডাইরেক্ট করা:

load_options =
tf.saved_model.LoadOptions(experimental_io_device='/job:localhost')
reloaded_model = hub.load("https://tfhub.dev/...", options=load_options)

দ্রষ্টব্য: বৈধ হ্যান্ডেলগুলো সম্পর্কে আরও তথ্য এখানে দেখুন।