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

বিভাগ: কম্পাইল সময়: স্কোপড ভিমেম ওওএম

এই ত্রুটিটি নির্দেশ করে যে প্রোগ্রামটির জন্য বরাদ্দকৃত পরিমাণের চেয়ে বেশি স্কোপড ভেক্টর মেমোরি (Vmem) প্রয়োজন।

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

RESOURCE_EXHAUSTED: Ran out of memory in memory space vmem while allocating on stack for %my-custom-kernel = bf16[2048,4096]{1,0:T(8,128)(2,1)} custom-call(...) ...

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

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

TPU গুলিতে ভেক্টর মেমোরি (VMEM) থাকে যা একটি স্থানীয় স্ক্র্যাচপ্যাড মেমোরি যা একচেটিয়াভাবে TensorCore (TC) দ্বারা ব্যবহৃত হয়। কম্পাইলারটি বিভিন্ন ধরণের বরাদ্দের জন্য Vmem পরিচালনা করে:

  • নির্দেশনা-ক্ষেত্র বরাদ্দ: একটি একক HLO নির্দেশনা কার্যকর করার সময় Vmem-এ অস্থায়ী সঞ্চয়স্থান। এর মধ্যে রয়েছে অপারেন্ড স্প্যান বাফার (যেমন ডাবল বাফারিংয়ের জন্য) এবং রেজিস্টার স্পিল।
  • প্রোগ্রাম-স্কোপড অ্যালোকেশন: এমন অ্যালোকেশন যা একটি একক HLO নির্দেশের আওতার বাইরে থাকে। এগুলি সাধারণত HLO অস্থায়ী এবং মধ্যবর্তী ফলাফল যা HLO নির্দেশের ইনপুট এবং/অথবা আউটপুট।

একটি কম্পাইল টাইম স্কোপড Vmem OOM তখন ঘটে যখন নির্দেশ-স্কোপড বরাদ্দকরণ সেই নির্দেশের জন্য বরাদ্দকরণ সীমা অতিক্রম করে। এই সীমা নিয়ন্ত্রিত হয়

এই ত্রুটিগুলি সাধারণত একটি অভ্যন্তরীণ কম্পাইলার বাগ বা একটি কাস্টম কার্নেলের বরাদ্দ সীমা অতিক্রম করার কারণে ঘটে।

ডিবাগিং

ত্রুটিটি কাস্টম কার্নেল থেকে এসেছে নাকি স্ট্যান্ডার্ড HLO থেকে এসেছে তা সনাক্ত করার জন্য ত্রুটি বার্তাটি সাবধানতার সাথে বিশ্লেষণ করুন। একটি কাস্টম কার্নেলের কারণে একটি ত্রুটির নিম্নলিখিত স্বাক্ষর থাকা উচিত:

Ran out of memory in memory space vmem while allocating on stack for %my-custom-call = <output-shape> custom-call(<params>), custom_call_target="tpu_custom_call" ...
  • কাস্টম কার্নেল স্কোপড Vmem OOM : যদি ত্রুটিটি একটি কাস্টম কার্নেলের দিকে নির্দেশ করে → কার্নেলটি পুনঃটিউন করুন এ যান।
  • কার্নেল-বহির্ভূত Vmem সমস্যা : যদি Vmem OOM একটি নন-কাস্টম-কার্নেল অপশনের কারণে ঘটে, তাহলে সম্ভবত এটি একটি অভ্যন্তরীণ কম্পাইলার বাগ। অনুগ্রহ করে একটি HLO ডাম্পের মাধ্যমে XLA-তে একটি বাগ ফাইল করুন।

কার্নেলটি পুনরায় টিউন করুন

যদি ত্রুটিটি একটি কাস্টম কার্নেল থেকে উদ্ভূত হয়, তাহলে কার্নেলের মেমরির প্রয়োজনীয়তা কমাতে নিম্নলিখিত কৌশলগুলি ব্যবহার করুন:

  • ব্লক সাইজ সামঞ্জস্য করুন: Scoped Vmem ব্যবহার কমাতে আপনার কার্নেল কনফিগারেশনে ব্লক সাইজ (টাইল সাইজ) কমিয়ে দিন।
  • প্রতি-কার্নেল স্কোপড Vmem সীমা নির্ধারণ করুন: vmem_limit_bytes প্যারামিটার ব্যবহার করে সেই নির্দিষ্ট কার্নেলের জন্য প্রয়োজনীয় পরিমাণ মেমরি স্পষ্টভাবে অনুরোধ করুন।
  • মেমোরি কালারিং পরিবর্তন করুন: pallas.tpu.with_memory_space_constraint ব্যবহার করে কার্নেলের ইনপুট/আউটপুটগুলিকে VMEM-এ স্পষ্টভাবে রঙ/সীমাবদ্ধ করুন। তবে Vmem-এ খুব বেশি ইনপুট আউটপুট রঙ না করার বিষয়ে সতর্ক থাকুন, কারণ এটি সামগ্রিক VMEM OOM-এর কারণ হতে পারে।
  • যদি কার্নেল নির্দিষ্ট রিটিউনিং কঠিন হয় অথবা সমস্যাটি অনেক কার্নেলকে প্রভাবিত করে, তাহলে আপনি --xla_tpu_scoped_vmem_limit_kib পতাকা ব্যবহার করে গ্লোবাল Vmem সীমা সামঞ্জস্য করতে পারেন।