ত্রুটি কোড: E2001

বিভাগ: কম্পাইল সময়: হার্ডওয়্যারে অসমর্থিত RHS ডেটাটাইপ

এই ত্রুটিটি তখন ঘটে যখন একটি ম্যাট্রিক্স গুণনে ডান-হাত দিকের (RHS) অপারেন্ডের জন্য ব্যবহৃত ডেটা টাইপ (যেমন, jax.lax.dot_general , jax.lax.conv , jax.numpy.matmul , অথবা @ অপারেটর) ব্যবহৃত নির্দিষ্ট TPU জেনারেশন দ্বারা স্থানীয়ভাবে সমর্থিত না হয়।

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

INTERNAL: Mosaic failed to compile TPU kernel: Unsupported matmul RHS type on target: 'vector<256x256xi8>'
...

The MLIR operation involved:
%13440 = "tpu.matmul"(%13435, %13437, %13439) <dimension_numbers = #tpu.dot_dimension_numbers<...>

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

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

TPU-এর ম্যাট্রিক্স মাল্টিপ্লাই ইউনিট (MXU) সমস্ত হার্ডওয়্যার প্রজন্মের জন্য Float32 অপারেশনগুলিকে স্থানীয়ভাবে সমর্থন করে।

তবে, BFloat16 এবং অন্যান্য কোয়ান্টাইজড ডেটা টাইপের (যেমন, Int4, Int8, অথবা Float8) জন্য নেটিভ সাপোর্ট হার্ডওয়্যার জেনারেশন অনুসারে পরিবর্তিত হয়। এই ত্রুটিটি তখন ঘটে যখন আপনার কার্নেল MXU-তে একটি ম্যাট্রিক্স গুণন ম্যাপ করার চেষ্টা করে এমন একটি ডেটা টাইপ ব্যবহার করে যা আপনার নির্দিষ্ট TPU জেনারেশনে কার্যকর করার জন্য শারীরিক সার্কিট্রি নেই।

এই ত্রুটিটি সাধারণত ইঙ্গিত করে যে কম্পাইলারের ক্যানোনিকালাইজেশন পাস—যা স্বয়ংক্রিয়ভাবে অসমর্থিত প্রকারগুলিকে সমর্থিত প্রকারগুলিতে রূপান্তর করার চেষ্টা করে (যেমন, সফ্টওয়্যার এমুলেশনের মাধ্যমে)—একটি বৈধ রূপান্তর নিয়ম খুঁজে পায়নি অথবা সামঞ্জস্য মোড অক্ষম থাকার কারণে তা করতে বাধা দেওয়া হয়েছিল।

ডিবাগিং

এই ত্রুটিটি সমাধান করার জন্য, আপনাকে অবশ্যই আপনার হার্ডওয়্যারের ক্ষমতার সাথে আপনার ডেটা টাইপগুলি সারিবদ্ধ করতে হবে। আপনার কাছে নিম্নলিখিত বিকল্পগুলি রয়েছে:

১. নেটিভ টাইপে কাস্ট করুন

সবচেয়ে নির্ভরযোগ্য সমাধান হল matmul অপারেশনের আগে আপনার কার্নেলের ভিতরে একটি হার্ডওয়্যার-সমর্থিত ডেটাটাইপে (যেমন Float32 বা BFloat16 ) আপনার অপারেন্ডগুলিকে ম্যানুয়ালি কাস্ট করা।

  • কেন: Float32 হল সর্বজনীন ডেটা টাইপ যা সমস্ত TPU প্রজন্মের জন্য MXU দ্বারা স্থানীয়ভাবে সমর্থিত।
  • ট্রেড-অফ: এর সাথে একটি VPU (ভেক্টর প্রসেসিং ইউনিট) খরচ আসে - কাস্ট করার জন্য প্রয়োজনীয় চক্র, তবে এটি গ্যারান্টি দেয় যে আপনার কার্নেল বর্তমান হার্ডওয়্যারে চলবে।

2. সামঞ্জস্য মোড পরীক্ষা করুন

সাধারণত কম্পাইলারটি ডিফল্টরূপে সক্রিয় থাকা সামঞ্জস্য মোডে এই ধরণের অমিল সমস্যাগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করতে পারে। --xla_mosaic_compat_mode মিথ্যাতে সেট করা নেই তা নিশ্চিত করতে XLA কনফিগারেশনগুলি দুবার পরীক্ষা করুন।

এটি একটি "পলিফিল" হিসেবে কাজ করে, যা আপনার হার্ডওয়্যার স্থানীয়ভাবে সমর্থন করে না এমন ক্রিয়াকলাপগুলির জন্য সফ্টওয়্যার ইমুলেশন সিকোয়েন্স ইনজেক্ট করে।

সামঞ্জস্যতা মোড কী সক্ষম করে:

  • মিশ্র-নির্ভুল ম্যাটমুলস: স্বয়ংক্রিয়ভাবে কাস্ট অপারেশন সন্নিবেশ করে (যেমন, ম্যাটমুলের আগে পূর্ণসংখ্যা Float32 পর্যন্ত প্রসারিত করে) পূর্ণসংখ্যা অপারেন্ডগুলিকে ফ্লোট অ্যাকিউমুলেটরের সাথে মিশ্রিত করার অনুমতি দেয়।
  • নিম্ন-নির্ভুলতা অনুকরণ: নির্দিষ্ট হার্ডওয়্যার প্রজন্মের ক্ষেত্রে, 4-bit ফ্লোটিং পয়েন্ট ( 4E2M1FN ) বা 8-bit ফ্লোটিং পয়েন্ট ( 8E4M3FN ) এর মতো অসমর্থিত প্রকারগুলিকে কার্যকর করার আগে BFloat16 বা Float32 মতো সমর্থিত প্রকারগুলিতে প্রসারিত করে অনুকরণ করে।

মনে রাখবেন যে এই মোডটি সর্বোচ্চ কর্মক্ষমতার চেয়ে সামঞ্জস্যকে অগ্রাধিকার দেয় কারণ MXU ডেটা ফর্ম্যাটগুলি পরিচালনা করার আগে এমুলেশনের জন্য ডেটা ফর্ম্যাটগুলিকে রূপান্তর করার জন্য অতিরিক্ত নির্দেশাবলীর প্রয়োজন হয়।

৩. হার্ডওয়্যার আপগ্রেড করুন অথবা সহায়তার জন্য অনুরোধ করুন

যদি আপনার অ্যালগরিদম কাস্টিং বা ইমুলেশনের অতিরিক্ত খরচ ছাড়াই Int4 বা Float8 এর মতো ধরণের জন্য নেটিভ পারফরম্যান্সের কঠোর প্রয়োজন করে, তাহলে আপনাকে নেটিভ সাপোর্ট সহ একটি নতুন TPU প্রজন্মের উপর চালাতে হবে।

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