ত্রুটি কোড: ০১০০

বিভাগ: রানটাইম: বাফার বরাদ্দ ব্যর্থতা

এই ত্রুটিটি ইঙ্গিত করে যে XLA:TPU রানটাইমের মেমরি অ্যালোকেটর অনুরোধকৃত বরাদ্দের জন্য অ্যাক্সিলারেটরের HBM-এ উপযুক্ত মেমরি ব্লক খুঁজে পায়নি।

নমুনা ত্রুটি বার্তা:

ValueError: RESOURCE_EXHAUSTED: Error allocating device buffer: Attempting to allocate 8.00M. That was not possible. There are 6.43M free.; (0x0x1_HBM0)

XLA ব্যাকএন্ড: TPU

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

এই ত্রুটিটি নিক্ষেপ করা হয়েছে

  • jax.device_put এর মাধ্যমে ব্যবহারকারী-প্রবর্তিত বাফার বরাদ্দের ব্যর্থতা অথবা
  • ব্যবহারকারী-নির্ধারিত প্রোগ্রামের আউটপুট বরাদ্দের ব্যর্থতা।

এই ব্যর্থতাগুলি সাধারণত কয়েকটি কারণে ঘটে:

  • মেমোরি শেষ (OOM): ব্যবহারকারী TPU-এর HBM-এ উপলব্ধ মোট ফ্রি মেমোরির চেয়ে বেশি মেমোরি বরাদ্দ করার চেষ্টা করছেন।
  • মেমোরি ফ্র্যাগমেন্টেশন: বরাদ্দ ব্যর্থ হয় কারণ মেমোরি স্পেসে কোনও একক সংলগ্ন মুক্ত ব্লক অনুরোধকৃত আকার পূরণ করার জন্য যথেষ্ট বড় নয়। মোট মুক্ত মেমোরি বরাদ্দের জন্য যথেষ্ট, তবে এটি মেমোরি স্পেসে ছোট, অ-সংলগ্ন ব্লকে ছড়িয়ে ছিটিয়ে থাকে।

TPU রানটাইমে বরাদ্দ ব্যর্থতার পুনরায় চেষ্টা করার জন্য বেশ কয়েকটি প্রক্রিয়া রয়েছে যার মধ্যে রয়েছে:

  • যদি সারিবদ্ধ ডিলোকেশন থাকে, রানটাইম পুনরায় চেষ্টা ব্যর্থ বরাদ্দ,
  • ফ্র্যাগমেন্টেশনের কারণে সৃষ্ট OOM-গুলিতে রানটাইম স্বয়ংক্রিয়ভাবে একটি ডিফ্র্যাগমেন্টেশন এবং পুনরায় চেষ্টা শুরু করতে পারে।
  • TPU রানটাইম প্রোগ্রাম লোড রাখার চেয়ে বাফার বরাদ্দকে অগ্রাধিকার দেয়। অপর্যাপ্ত HBM এর কারণে যদি বাফার বরাদ্দ ব্যর্থ হয়, তাহলে বাফারের জন্য পর্যাপ্ত মেমরি না পাওয়া পর্যন্ত সিস্টেম লোড করা TPU প্রোগ্রামগুলিকে সরিয়ে দেবে।

তাই উপরের প্রশমনের পরে কোনও ত্রুটির সম্মুখীন হলে সাধারণত ব্যবহারকারীর পদক্ষেপের প্রয়োজন হয়।

ডিবাগিং

  • আপনার মডেলের মেমরি ফুটপ্রিন্ট কমিয়ে দিন:
    • ব্যাচের আকার হ্রাস করুন: ব্যাচের আকার হ্রাস করলে মেমোরির ব্যবহার সরাসরি হ্রাস পায়।
    • প্যারামিটার শেয়ারিং: খুব বড় মডেলের জন্য, একাধিক TPU কোর বা হোস্টের HBM জুড়ে প্যারামিটার বিতরণের জন্য মডেল প্যারালিজম বা শার্ডিংয়ের মতো কৌশল ব্যবহার করুন।
    • সিকোয়েন্স/প্রসঙ্গের দৈর্ঘ্য ছোট করুন: যেসব মডেল সিকোয়েন্সে কাজ করে (যেমন ভাষা মডেল), ইনপুট সিকোয়েন্সের দৈর্ঘ্য কমিয়ে দিলে মেমোরি ফুটপ্রিন্ট উল্লেখযোগ্যভাবে কমে যেতে পারে।
    • বাফার দান: XLA-কে সংকেত দিতে ফ্রেমওয়ার্ক বৈশিষ্ট্যগুলি (যেমন: jax.jit(..., donate_argnums=...) ) ব্যবহার করুন যে নির্দিষ্ট ইনপুট বাফারগুলি ওভাররাইট করা যেতে পারে এবং আউটপুটের জন্য পুনরায় ব্যবহার করা যেতে পারে।
    • চেকপয়েন্ট কৌশল অপ্টিমাইজ করুন: একবারে পুরো মডেল অবস্থা সংরক্ষণ করার পরিবর্তে, শুধুমাত্র মডেল ওজন সংরক্ষণ করা বা একটি তীক্ষ্ণ চেকপয়েন্টিং কৌশল ব্যবহার করার কথা বিবেচনা করুন।
  • ঠিকানা মেমরি লেআউট এবং প্যাডিং:
    • TPU মেমোরি খণ্ডে ভাগ করা হয়, এবং প্যাডিং টেনসরের প্রকৃত আকার বাড়াতে পারে।
  • কোনও মেমরি লিক না হওয়া নিশ্চিত করুন:
    • নিশ্চিত করুন যে jax.Array অবজেক্টের রেফারেন্সগুলি নির্ধারিত সময়ের চেয়ে বেশি সময় ধরে রাখা হচ্ছে না। jax.Array অবজেক্টগুলি ধরে রাখলে প্রোগ্রাম সংকলন সম্পন্ন হওয়ার পরেও স্বয়ংক্রিয়ভাবে বরাদ্দ বাতিল হতে পারে।

টুলিং

tpu_log_allocations_on_oom ফ্ল্যাগটি সক্রিয় করুন যার জন্য বরাদ্দকারী OOM ঘটলে সমস্ত বর্তমান বরাদ্দের একটি বিস্তারিত প্রতিবেদন ডাম্প করবে, যা ডিবাগিংয়ের জন্য অমূল্য হতে পারে।