বিভাগ: হোস্ট অফলোড আউটপুট অমিল
এই ত্রুটিটি তখন ঘটে যখন হোস্ট মেমোরিতে স্পষ্টভাবে অফলোড করা একটি টেনসর প্রোগ্রাম আউটপুট হিসাবে ফেরত পাঠানো হয়, কিন্তু প্রোগ্রামের আউটপুট স্বাক্ষর হোস্ট মেমোরি আশা করার জন্য কনফিগার করা হয় না।
নমুনা ত্রুটি বার্তা:
INVALID_ARGUMENT: Tensor which is moved to host (starting from tuple.64) is returned from the entry computation but the layout for this output is not set to host memory.
XLA ব্যাকএন্ড: TPU, GPU
সংক্ষিপ্ত বিবরণ
যখন কম্পাইলার হোস্টে (CPU) একটি টেনসর অফলোড করার জন্য একটি টীকা সম্মুখীন হয়, তখন এটি গণনা গ্রাফের মাধ্যমে সেই টেনসরের অবস্থান ট্র্যাক করে যতক্ষণ না তিনটি ঘটনার মধ্যে একটি ঘটে:
- ডিভাইসে সরান: একটি মিলে যাওয়া টীকা টেনসরকে অ্যাক্সিলারেটরে ফিরিয়ে নিয়ে যায়।
- হোস্ট কম্পিউটেশন: হোস্ট-সাইড অপারেশনের মাধ্যমে টেনসর ব্যবহার করা হয়।
- প্রোগ্রামের সমাপ্তি: টেনসর প্রোগ্রামের শেষে পৌঁছে আউটপুটে পরিণত হয়।
এই ত্রুটিটি দৃশ্যকল্প #3 তে ট্রিগার করা হয়। এক্সিকিউশনের শেষে টেনসরটি হোস্ট মেমোরিতে ভৌতভাবে অবস্থিত থাকে, কিন্তু XLA প্রোগ্রামের এন্ট্রি কম্পিউটেশন সিগনেচার সেই নির্দিষ্ট আউটপুটটিকে ডিভাইস মেমোরিতে থাকা হিসাবে সংজ্ঞায়িত করে। যেহেতু কম্পাইলার এন্ট্রি কম্পিউটেশনের ইন্টারফেসটি পরোক্ষভাবে পরিবর্তন করতে পারে না, এটি একটি ত্রুটি তৈরি করে।
ডিবাগিং
এই ত্রুটিটি সমাধানের জন্য, আপনি কি এই টেনসরটিকে হোস্টে আউটপুট হিসেবে ব্যবহার করার ইচ্ছা করেছিলেন, নাকি এটিকে ডিভাইসে ফিরিয়ে আনা উচিত ছিল, তা নির্ধারণ করুন।
আউটপুট ইন্টেন্ট এবং ট্রেস পাথ যাচাই করুন {#verify_intent}
হোস্টে ফিরে আসার উদ্দেশ্যে: যদি আপনি স্পষ্টভাবে এই টেনসরটিকে হোস্ট মেমোরিতে ফিরিয়ে আনতে চান (ডিভাইসে ফিরে যাওয়ার জন্য ট্রান্সফার এড়িয়ে), তাহলে আপনার এই নির্দিষ্ট আউটপুটের জন্য এন্ট্রি কম্পিউটেশনের আউটপুট মেমোরি স্পেসটি স্পষ্টভাবে হোস্ট মেমোরিতে সেট করা উচিত।
ডিভাইসে ফিরে আসার উদ্দেশ্যে: যদি টেনসরটি ডিভাইসে থাকার জন্য বা প্রোগ্রাম শেষ হওয়ার আগে এটিতে ফিরে আসার জন্য তৈরি করা হয়েছিল, তাহলে সম্ভবত আপনি একটি টীকা মিস করেছেন। টেনসরটিকে ডিভাইসে ফিরিয়ে আনার জন্য একটি মিলিত টীকা সন্নিবেশ করান।
যদি অফলোডেড টেনসরের উৎস অস্পষ্ট থাকে, অথবা "ডিভাইসে সরান" টীকাটি কোথায় অনুপস্থিত তা খুঁজে না পান, তাহলে নির্দেশাবলী ট্রেস করতে XLA লগিং ব্যবহার করুন।
- লগিং সক্ষম করুন: যদি আপনি গুগল ক্লাউড টিপিইউতে থাকেন, তাহলে নিম্নলিখিত ফ্ল্যাগ দিয়ে আপনার প্রোগ্রামটি পুনরায় চালান:
--vmodule=host_offloader=1 - লগ বিশ্লেষণ করুন: লগগুলিতে "ট্রেস" আউটপুটটি সন্ধান করুন। এটি অফলোড নির্দেশ থেকে শুরু করে টেনসরের পথ দেখাবে। ডিভাইসে ফিরে না গিয়ে টেনসরটি প্রোগ্রামের সীমানায় ঠিক কোথায় পৌঁছেছে তা নির্ধারণ করতে এটি ব্যবহার করুন।