Google-এর Gemma-4 31B মডেলটিকে AWS Inferentia2 inf2.24xlarge-এ পোর্ট করার ফলে CPU রেফারেন্সের সাথে টোকেন-বাই-টোকেন নিখুঁত মিল পাওয়া গেলেও, প্রতিটি জেনারেট করা বাক্য ছিল অর্থহীন। "ম্যাচিং" এবং "কাজ করা"-র মধ্যে এই ব্যবধান এখন অ্যামাজনের কাস্টম ইনফারেন্স চিপে বিশাল LLM চালানোর চেষ্টা করা যে কারো জন্য একটি সতর্কবার্তা হিসেবে কাজ করছে।
কেন টোকেন-বাই-টোকেন মিল যথেষ্ট নয়
ডেভেলপার Inferentia ডিভাইসের প্রতিটি আউটপুট টোকেনকে মডেলের CPU রান থেকে উৎপন্ন টোকেনের সাথে তুলনা করেছেন। স্ট্রিমগুলো হুবহু এক ছিল, তাই দেখে মনে হচ্ছিল হার্ডওয়্যারটি রেফারেন্স ইমপ্লিমেন্টেশনটি সঠিকভাবে পুনরুৎপাদন করেছে। বাস্তবে, উভয় স্ট্রিমই একটি ত্রুটিপূর্ণ প্রম্পট (malformed prompt) মডেলে পাঠিয়েছিল, যেটির চ্যাট টেমপ্লেট বাদ দেওয়া হয়েছিল এবং ভুল টার্ন মার্কার সরবরাহ করা হয়েছিল। টেমপ্লেটটি না থাকায় মডেলটি একটি ইনফিনিট লুপে পড়ে যায় এবং অর্থহীন শব্দ spit out করতে থাকে। হার্ডওয়্যার তার কাজ ঠিকই করেছিল—এটি রেফারেন্স কোডে থাকা একটি বাগকেই (bug) পুনরুৎপাদন করেছিল।
শিক্ষাটি সহজ: SEQ_MATCH (সিকোয়েন্সিয়াল টোকেন সমতা) মানেই সঠিকতা নয়। যদি রেফারেন্স ইমপ্লিমেন্টেশনটি ত্রুটিপূর্ণ হয়, তবে একটি বিশ্বস্ত হার্ডওয়্যার রেপ্লিকাও একই ব্যর্থতা উত্তরাধিকারসূত্রে পায়। ভ্যালিডেশন বা যাচাইকরণ টোকেন-লেভেল প্যারিটির বাইরে হতে হবে; এর জন্য সঠিকভাবে ফরম্যাট করা ইনপুটসহ এন্ড-টু-এন্ড ফাংশনাল চেক প্রয়োজন।
প্যারামিটার হিসেবে ছদ্মবেশধারী বাফার (Buffers masquerading as parameters)
লোড করার সময় মডেল লোডার layer_scalar নামক একটি উপাদান বাদ দিয়েছিল। কোডটি PyTorch মডেল ডেফিনিশনে এই অবজেক্টটিকে একটি প্যারামিটার-এর পরিবর্তে একটি বাফার (buffer) হিসেবে রেজিস্টার করেছিল। বাফার হলো স্ট্যাটিক টেনসর যা ট্রেনিংয়ের সময় আপডেট হয় না, এবং অনেক লোডার Neuron-এর সাথে সামঞ্জস্যপূর্ণ ফরম্যাটে রূপান্তর করার সময় এগুলোকে উপেক্ষা করে। এটি বাদ দেওয়ার ফলে বেশ কিছু লেয়ারের স্কেলিং ফ্যাক্টর ডিফল্ট অবস্থায় থেকে যায়, যা পুরো নেটওয়ার্কের গণিতকে বিকৃত করে দেয়। কোনো এরর (error) দেখা দেয়নি; মডেলটি কম্পাইল হয়েছিল এবং ইনফারেন্স পাইপলাইনও চলেছে, কিন্তু গাণিতিক ফলাফলগুলো ভুল ছিল।
যারা বড় মডেল Inferentia-তে নিয়ে যাচ্ছেন, তাদের প্রতিটি নন-প্যারামিটার টেনসর অডিট করা উচিত। এমনকি যদি একটি টেনসর শেখার (learn) জন্য না হয়, তবুও সঠিক ফরওয়ার্ড-পাস কম্পিউটেশনের জন্য এটি অপরিহার্য হতে পারে। ম্যানুয়ালি বাফার অন্তর্ভুক্ত করা যাচাই করলে এমন নীরব স্কেল ত্রুটি (silent scale errors) এড়ানো সম্ভব যা শনাক্ত করা কঠিন।
স্পট-ইনস্ট্যান্সের অস্থিরতা এবং ৩৯ মিনিটের কম্পাইল
স্পট ইনস্ট্যান্সে একটি ৩১-বিলিয়ন প্যারামিটারের মডেল চালানো সস্তা মনে হলেও, এর সাশ্রয়ের সাথে আসে অপ্রত্যাশিত রিক্লেম ইভেন্ট (reclaim events)। ডেভেলপারের কম্পাইল টাইম—মডেলটিকে Neuron-সামঞ্জস্যপূর্ণ কোডে রূপান্তর করতে প্রায় ৩৯ মিনিট সময় লেগেছিল—AWS যখন ইনস্ট্যান্সটি রিক্লেম করে নেয়, তখন তা নষ্ট হয়ে যায়। বাধাগুলো কাটিয়ে উঠতে তারা একটি তিন-স্তরীয় নিরাপত্তা ব্যবস্থা তৈরি করেছিলেন:
- ModelBuilder মেমরি ব্যবহার ৩৮৪ GB হোস্ট লিমিটের মধ্যে রেখেছিল, যা ক্র্যাশ এড়াতে সাহায্য করেছিল।
- র-ওয়েট ফাইল (raw weight files) এবং কম্পাইল করা “neffs” (Neuron executable files) উভয়টির তাৎক্ষণিক S3 মিররিং নিশ্চিত করেছিল যাতে একটি নতুন ইনস্ট্যান্স ঠিক সেখান থেকেই শুরু করতে পারে যেখানে আগেরটি শেষ হয়েছিল।
- একটি মাল্টি-রিজিয়ন পলার (multi-region poller) AWS রিজিয়নগুলোতে উপলব্ধ স্পট ক্যাপাসিটি স্ক্যান করত এবং একটি নতুন ইনস্ট্যান্স পাওয়া মাত্রই তা চালু করে দিত।
এই পদক্ষেপগুলো একটি ভঙ্গুর, সিঙ্গেল-পয়েন্ট কম্পাইল প্রক্রিয়াকে একটি স্থিতিস্থাপক পাইপলাইনে পরিণত করেছে যা স্পট মার্কেটের অস্থিরতা সহ্য করতে পারে।
মিক্সড অ্যাটেনশন লেআউটসহ শার্ডিংয়ের ফাঁদ (Sharding pitfalls with mixed attention layouts)
Gemma-4 31B দুটি অ্যাটেনশন কনফিগারেশন ব্যবহার করে। কিছু লেয়ার চারটি কী-ভ্যালু (KV) হেড ব্যবহার করে, আবার অন্যগুলোতে ভিন্ন সংখ্যা থাকে। মডেলটিকে আটটি সমান্তরাল র্যাঙ্কে (parallel ranks) সমানভাবে ভাগ করা ব্যর্থ হয় যখন কোনো লেয়ারের KV হেড সংখ্যা সঠিকভাবে বিভাজ্য হয় না। একটি ৪-হেড লেয়ারকে আটটি র্যাঙ্কে শার্ড করার চেষ্টা করলে প্রতিটি র্যাঙ্ককে অর্ধেক হেড হ্যান্ডেল করতে হতো—যা গাণিতিকভাবে অসম্ভব এবং এটি শেপ মিসম্যাচ (shape mismatch) ও রানটাইম এরর তৈরি করে।
সমাধান ছিল গ্লোবালি-শার্ডেড লেয়ারগুলোকে (যেগুলোর হেড সংখ্যা সামঞ্জস্যপূর্ণ) সমস্ত র্যাঙ্কে রেপ্লিকেট করা এবং শুধুমাত্র সেই “স্লাইডিং” লেয়ারগুলোকে শার্ড করা যেগুলোর হেড সংখ্যা সমানভাবে বিভাজ্য। এই হাইব্রিড কৌশলটি টেনসর-প্যারালাল দক্ষতা বজায় রেখেছিল এবং KV হেডের অবৈধ বিভাজন এড়িয়েছিল, যা আগের প্রচেষ্টায় সমস্যা সৃষ্টিকারী টেনসর-প্যারালাইজেশন ত্রুটিগুলো দূর করেছে।
সারসংক্ষেপ
একটি বিশাল LLM-কে Inferentia-তে পোর্ট করা কেবল কম্পাইল-অ্যান্ড-রান করার বিষয় নয়। এর জন্য টোকেন সমতার বাইরে কঠোর ফাংশনাল টেস্টিং, প্রতিটি টেনসর—প্যারামিটার বা বাফার—সঠিকভাবে হ্যান্ডেল করা হচ্ছে কিনা তার সূক্ষ্ম যাচাইকরণ এবং স্পট-ইনস্ট্যান্স রিক্লেমেশনের কথা মাথায় রেখে একটি ডেপ্লয়মেন্ট কৌশল প্রয়োজন। পরিশেষে, শার্ডিং অবশ্যই মডেলের অভ্যন্তরীণ অ্যাটেনশন জ্যামিতির প্রতি শ্রদ্ধাশীল হতে হবে; অন্যথায়, প্যারালেলিজম যা গতি বাড়ানোর প্রতিশ্রুতি দেয়, তা নীরব ব্যর্থতার কারণ হয়ে দাঁড়াতে পারে।
