CUDA Graphs, রিজনিং মডেল এবং পৃথকীকৃত সার্ভিং

আধুনিক AI অবকাঠামো CPU ওভারহেড দূর করা, ইনফারেন্স-সময়ের যুক্তি লুপ এবং ধাপ-বিশেষায়িত GPU ক্লাস্টার রাউটিং দিয়ে কর্মক্ষমতাকে সিলিকন ও ক্লাস্টারের ভৌত সীমা পর্যন্ত নিয়ে যায়। এই তিন কৌশল আজকের দ্রুততম ও সবচেয়ে বুদ্ধিমান উৎপাদনপর্যায়ের AI সিস্টেম চালায়।
1. CUDA Graphs এবং কার্নেল ফিউশন: CPU & মেমরি ওভারহেড দূর করা
আধুনিক GPUs (যেমন H100 ও B200) সূচকীয় হারে দ্রুত হওয়ায় একটি হালকা GPU কার্নেল চালাতে মাত্র 2 থেকে 5 মাইক্রোসেকেন্ড লাগতে পারে। কিন্তু PCIe ড্রাইভারের মাধ্যমে সেই কার্নেল প্রস্তুত, যাচাই ও চালু করতেই CPU-র প্রায়ই 10 থেকে 20 মাইক্রোসেকেন্ড লাগে। ফলে বহু মিলিয়ন ডলারের GPU, CPU নির্দেশের অপেক্ষায় পুরোপুরি অলস বসে থাকে।
- কার্নেল ফিউশন (মেমরি & লঞ্চ বাঁচাতে অপারেশন একত্র করা)।
- ফিউশনবিহীন বাধা। একটি সাধারণ Transformer স্তর ডজন ডজন ক্ষুদ্র অপারেশন ক্রমে চালায় (যেমন LayerNorm → Linear → Add Residual → GeLU)। ফিউশন না থাকলে GPU প্রতিটি ধাপের জন্য আলাদা কার্নেল চালু করে, মধ্যবর্তী টেনসর ধীর HBM (VRAM)-এ লেখে এবং পরের ধাপের জন্য সঙ্গে সঙ্গেই তা আবার পড়ে।
- ফিউজড এক্সিকিউশন। torch.compile (TorchInductor) ও TensorRT-LLM-এর মতো কম্পাইলার একাধিক এলিমেন্ট-ওয়াইজ ও রিডাকশন অপারেশনকে একটি কাস্টম CUDA/Triton কার্নেলে একত্র করে। মান HBM থেকে একবার লোড হয়, অতি দ্রুত অন-চিপ রেজিস্টার/SRAM-এ রূপান্তরিত হয় এবং একেবারে শেষে শুধু একবার HBM-এ ফিরে লেখা হয়। এতে মেমরি ব্যান্ডউইডথ ট্রাফিক ও কার্নেল লঞ্চের সংখ্যা দুটিই অনেক কমে।
- CUDA Graphs (সম্পূর্ণ এক্সিকিউশন পাইপলাইন একবারে রিপ্লে করা)।
- রেকর্ড ও রিপ্লে। কার্নেল ফিউশনের পরেও একটি LLM ফরওয়ার্ড পাসে প্রতিটি তৈরি টোকেনের জন্য শত শত কার্নেল লঞ্চ লাগে। CUDA Graphs ওয়ার্মআপ রানে GPU অপারেশনের সম্পূর্ণ ক্রম, অর্থাৎ কার্নেল, মেমরি কপি ও নির্ভরতা ধারণ করে এবং সরাসরি GPU মেমরিতে রাখা একটি স্থির এক্সিকিউশন গ্রাফে কম্পাইল করে এই সমস্যার সমাধান করে।
- CPU-র কোনো হস্তক্ষেপ নেই। রিয়েল-টাইম ইনফারেন্সে CPU একটির পর একটি 300টি আলাদা কার্নেল চালু না করে একটিমাত্র API কল (cudaGraphLaunch) দেয়। সেটি GPU-তে স্বয়ংক্রিয়ভাবে গোটা ফরওয়ার্ড পাস চালু করে।
- পরিবর্তনশীল আকার সামলানো। CUDA Graphs-এর স্থির মেমরি ঠিকানা ও টেনসর আকার প্রয়োজন বলে ইনফারেন্স ইঞ্জিন আসা ব্যাচকে নির্দিষ্ট বাকেট আকার পর্যন্ত প্যাড করে (যেমন ব্যাচ আকার 1, 2, 4, 8, 16) এবং আগে ধারণ করা গ্রাফ রিপ্লে করার আগে ইনপুট পয়েন্টার একই স্থানে আপডেট করে।
2. টেস্ট-টাইম গণনা & রিজনিং মডেল (o1/o3 & DeepSeek-R1)
আগে AI ল্যাবগুলি শুধু প্রাক্-প্রশিক্ষণে বেশি গণনা ব্যয় করেই বুদ্ধিমত্তা বাড়াত (আরও ইন্টারনেট টেক্সটে প্রশিক্ষিত বড় মডেল)। OpenAI-এর o1/o3 ও DeepSeek-R1-এর মতো রিজনিং মডেল স্কেলিংয়ের দ্বিতীয় অক্ষ খুলেছে: Test-Time Compute (ইনফারেন্স-টাইম স্কেলিং)। এতে মডেল উত্তর দেওয়ার আগে আরও দীর্ঘ সময় "ভাবতে" পারে।
- চিন্তাশৃঙ্খলের (CoT) জন্য রিইনফোর্সমেন্ট লার্নিং।
- মানুষের লেখা ধাপে ধাপে যুক্তির উদাহরণের ওপর পুরোপুরি নির্ভর না করে এই মডেলগুলি গণিত, কোডিং ও আনুষ্ঠানিক যুক্তির মতো যাচাইযোগ্য ক্ষেত্রে বৃহৎ-পরিসরের রিইনফোর্সমেন্ট লার্নিং (RL) দিয়ে প্রশিক্ষিত হয় (যেমন DeepSeek-R1-এ GRPO - Group Relative Policy Optimization)।
- মডেল একাধিক সম্ভাব্য যুক্তিপথ তৈরি করে, চূড়ান্ত উত্তর ইউনিট টেস্ট বা গাণিতিক যাচাই পাস করলেই কেবল বস্তুনিষ্ঠ পুরস্কার পায় এবং নিজে থেকে উদীয়মান জ্ঞানীয় আচরণ আবিষ্কার করে। এর মধ্যে আছে নিজের ফল যাচাই করা, অচল পথে পৌঁছালে পেছনে ফেরা এবং জটিল সমস্যাকে উপ-লক্ষ্যে ভাগ করা।
- ইনফারেন্স গণনা যেভাবে বাড়ে।
- কঠিন প্রম্পট পেলে মডেল চূড়ান্ত প্রতিক্রিয়া দেওয়ার আগে লুকানো স্ক্র্যাচপ্যাডে হাজার হাজার অভ্যন্তরীণ "চিন্তার টোকেন" তৈরি করে। অনুমান অনুসন্ধানে মডেল যত বেশি ইনফারেন্স টোকেন ব্যয় করে, নির্ভুলতা তত লগারিদমিক হারে বাড়ে।
- গণনার আপসের পরিবর্তন। প্রচলিত LLMs-এ ইনফারেন্স সস্তা ও দ্রুত (প্রায় ~50টি আউটপুট টোকেন তৈরি)। রিজনিং মডেলে একটি প্রশ্নেই 10,000 থেকে 50,000 চিন্তার টোকেন তৈরি হতে পারে। এতে ইনফারেন্স বিশাল ও অবিরাম ব্যাচ-জেনারেশন কাজ হয়ে ওঠে, যেখানে KV-ক্যাশের বৃদ্ধি এবং দীর্ঘ-কনটেক্সট অ্যাটেনশনের দক্ষতাই মুখ্য।
3. পৃথকীকৃত Prefill ও Decode
একটি LLM-এর সার্ভিং দুটি মৌলিকভাবে বিপরীত গণনামূলক ধাপ নিয়ে গঠিত। ঠিক একই GPU-তে দুটি ধাপ চালালে গুরুতর সময়সূচি-সংঘাত হয় এবং হার্ডওয়্যারের পূর্ণ ব্যবহার হয় না।
| ধাপ | কাজের ধরন | হার্ডওয়্যারের বাধা | বিলম্বের পরিমাপক |
|---|---|---|---|
| Prefill (প্রম্পট প্রক্রিয়াকরণ) | একটি ফরওয়ার্ড পাসে সব প্রম্পট টোকেন (যেমন 10,000 টোকেন) সমান্তরালে প্রক্রিয়া করে। | গণনা-সীমাবদ্ধ (বিশাল ম্যাট্রিক্স গুণে GPU Tensor Cores পুরোপুরি ব্যস্ত থাকে)। | TTFT (প্রথম টোকেন পর্যন্ত সময়) |
| Decode (টোকেন তৈরি) | প্রতি ধাপে সম্পূর্ণ KV ক্যাশ পড়ে একটির পর একটি আউটপুট টোকেন ক্রমে তৈরি করে। | মেমরি-ব্যান্ডউইডথ-সীমাবদ্ধ (VRAM পড়ার অপেক্ষায় Tensor Cores বেশির ভাগ সময় অলস থাকে)। | TPOT (প্রতি আউটপুট টোকেনের সময়) |
- একই স্থানে চালানোর হস্তক্ষেপের সমস্যা।
- প্রচলিত একীভূত সার্ভিংয়ে 50 জন ব্যবহারকারীর Decode টোকেন স্ট্রিম হওয়ার সময় একজন ব্যবহারকারী Prefill-এর জন্য 32,000 টোকেনের বিশাল নথি জমা দিলে, বিশাল প্রিফিল ম্যাট্রিক্স গণনা GPU-র Tensor Cores দখল করে নেয়। ফলে স্ট্রিমিং করা 50 জনেরই চোখে পড়ার মতো থেমে যাওয়া ও বিলম্বের হঠাৎ বৃদ্ধি ("তোতলানো") ঘটে।
- এ ছাড়া Prefill-এর উচ্চ গণনা FLOPs দরকার, আর Decode-এর প্রয়োজন বিশাল HBM মেমরি ব্যান্ডউইডথ ও বড় ব্যাচের KV ক্যাশ রাখার ক্ষমতা।
- ক্লাস্টার ভাগ করা (পৃথকীকৃত আর্কিটেকচার)।
- আধুনিক হাইপারস্কেল ইনফারেন্স সিস্টেম (যেমন Mooncake, DistServe ও NVIDIA Dynamo) GPU ক্লাস্টারকে দুটি নির্দিষ্ট পুলে ভাগ করে:
- 1. Prefill পুল: দীর্ঘ প্রম্পট দ্রুত প্রক্রিয়া করা ও কঠোর Time-To-First-Token (TTFT) লক্ষ্য পূরণে মূল গণনার থ্রুপুটের জন্য অপ্টিমাইজ করা (Tensor Core-এর উচ্চ ব্যবহার, ছোট টেনসর সমান্তরালতা)।
- 2. Decode পুল: প্রতি সেকেন্ডে সর্বোচ্চ টোকেন হারে মসৃণভাবে টোকেন স্ট্রিম করতে উচ্চ মেমরি ব্যান্ডউইডথ ও বড় KV-ক্যাশ ধারণক্ষমতার জন্য অপ্টিমাইজ করা (বিস্তৃত টেনসর/এক্সপার্ট সমান্তরালতা, বড় ব্যাচ আকার)।
- দ্রুতগতির KV Cache স্থানান্তর। Prefill GPU একটি প্রম্পট প্রক্রিয়া করে তার প্রাথমিক KV Cache তৈরি করা শেষ করলেই সেই KV Cache অতি দ্রুত NVLink বা InfiniBand RDMA আন্তঃসংযোগ দিয়ে সরাসরি Decode GPU-র VRAM-এ স্ট্রিম করে। Decode GPU কোনো হস্তক্ষেপ ছাড়াই সঙ্গে সঙ্গে টোকেন তৈরির দায়িত্ব নেয়।