AWS EFA-তে ট্রিলিয়ন-প্যারামিটার মডেল সক্ষম করা

ক্লাউড প্ল্যাটফর্ম পোর্টেবিলিটি সহ ট্রিলিয়ন প্যারামিটারের মডেলগুলি উপলব্ধ করুন

লেখকগণPerplexity Research

Perplexity-এ, আমরা আমাদের পণ্য, আমাদের এপিআই এবং আমাদের গবেষণা দলগুলির জন্য সেরা মডেলগুলি ব্যবহার করি। Kimi-K2-এর মতো বড় ওপেন-সোর্স মিক্সচার-অফ-এক্সপার্টস (Mixture-of-Experts) মডেলগুলি বিশেষ চ্যালেঞ্জ তৈরি করে, কারণ 8x NVIDIA H200 GPU-সহ বৃহত্তম ইনফারেন্স নোডগুলি দক্ষতার সাথে সেগুলোকে মিটমাট করতে পারে না, যার ফলে মাল্টি-নোড ডিপ্লয়মেন্টের প্রয়োজন হয়। আমরা বিশেষজ্ঞ সমান্তরালতার জন্য কার্নেলের একটি সেট উপস্থাপন করি যা ConnectX-7-এ অত্যাধুনিক ল্যাটেন্সি অর্জন করে, যা DeepEP-এর কার্যক্ষমতাকে ছাড়িয়ে যায়। একই কার্নেলগুলি AWS ইলাস্টিক ফ্যাব্রিক অ্যাডাপ্টার (EFA)-তেও কার্যকর ল্যাটেন্সি অর্জনকারী প্রথম, যা ট্রিলিয়ন প্যারামিটার বিশিষ্ট মডেল ডিপ্লয়মেন্টকে সম্ভব করে তোলে।

GitHub-এ আমাদের কার্নেলগুলি ব্যবহার করে দেখুন এবং arXiv-এ সম্পূর্ণ গবেষণা পত্রটি পড়ুন।

ভূমিকা

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

টেন্সর প্যারালালিজম (TP) এবং ডেটা প্যারালালিজম (DP)-এর মতো অন্যান্য ধরনের সমান্তরালতার বিপরীতে যা torch.distributed এবং NCCL-এর মতো যৌথ যোগাযোগ লাইব্রেরি ব্যবহার করে সহজেই প্রয়োগ করা যেতে পারে, MoE রাউটিংয়ে স্পার্স পিয়ার-টু-পিয়ার যোগাযোগ জড়িত। একটি ডিসপ্যাচ কার্নেলকে অবশ্যই входя আসা টোকেনগুলির সেটকে বিভক্ত করতে হবে এবং বিশেষজ্ঞদের হোস্ট করা র‍্যাঙ্কগুলিতে পাঠাতে হবে, যখন এর দ্বৈত সমস্যা, কম্বাইন কার্নেলকে, অবশ্যই তাদের প্রক্রিয়াজাত সমকক্ষগুলি গ্রহণ করতে হবে এবং তাদের ওজনযুক্ত গড় গণনা করতে হবে। এই স্থানান্তরগুলি যৌথগুলির সাথে ম্যাপ করে না এবং কম ল্যাটেন্সি অর্জনের জন্য কাস্টমাইজড কার্নেলের প্রয়োজন হয়।

Perplexity-এ, আমরা পোর্টেবল ইন্টার-নোড কার্নেল এবং বিশেষায়িত ইন্ট্রা-নোড কার্নেল উভয়ই বিকাশ করে আসছি, MoE যোগাযোগ-এর উপর আগের একটি নিবন্ধে আমাদের কাজটিকে আরও গভীরতার সাথে উপস্থাপন করছি। আমরা অন্য একটি ব্লগপোস্টে এটিও দেখিয়েছি যে মাল্টি-নোড ডিপ্লয়মেন্ট বড় MoE মডেলগুলির জন্য কম ল্যাটেন্সি এবং উচ্চ থ্রুপুট নিয়ে আসতে পারে।

এই নিবন্ধে, আমরা আমাদের নতুন ইন্টার-নোড কার্নেলগুলির বাস্তবায়নের গভীরে প্রবেশ করি যা আমাদের NVSHMEM-ভিত্তিক পূর্ববর্তী কাজের কার্যক্ষমতাকে ব্যাপকভাবে উন্নত করে। ConnectX-7-এ অত্যাধুনিক ফলাফল প্রদর্শনের পাশাপাশি, আমরা এটিও প্রদর্শন করি যে আমাদের ইনফারেন্স রানটাইমের মধ্যে, বৃহত্তম ওপেন-সোর্স মডেলগুলিকে কার্যকরভাবে পরিবেশন করতে কার্নেলগুলি ব্যবহার করা যেতে পারে।

ইনফাইনাড (InfiniBand)-এর মাধ্যমে ইনফারেন্স

টেন্সর প্যারালালিজম এবং এক্সপার্ট প্যারালালিজম একটি একক নোডের মধ্যে কার্যকরভাবে স্কেল করতে পারে, কারণ NVLink মাইক্রোসেকেন্ড ল্যাটেন্সিতে উচ্চ থ্রুপুট (900GB/s) অফার করে। যদিও NVIDIA GB200 এবং GB300 সিস্টেমগুলি ট্রিলিয়ন-প্যারামিটার মডেলগুলির ওজন এবং KV ক্যাশ ধারণ করার জন্য পর্যাপ্ত মেমরিতে সজ্জিত, AWS p5en ইন্সটান্সে 8টি পর্যন্ত H200 GPU সহ ডিপ্লয়মেন্টগুলি 1120GB HBM-এর মধ্যে সীমাবদ্ধ, যা অবশ্যই মডেলের ওজন এবং KV ক্যাশ উভয় জুড়ে বিভক্ত করতে হবে। ফলস্বরূপ, নির্দিষ্ট মডেলগুলির ইনফাইনাড (InfiniBand)-এর মাধ্যমে ইন্টার-নোড ডিপ্লয়মেন্টের প্রয়োজন হয়। 

যদিও ইনফাইনাড এখনও অত্যন্ত দ্রুত, এটি শুধুমাত্র 400Gbps (50GB/s) থ্রুপুট অফার করে, যা MoE রাউটিংয়ের জন্য ল্যাটেন্সির সাথে আরও দশ থেকে শত মাইক্রোসেকেন্ড যোগ করে। ভাগ্যক্রমে, প্রতিযোগিতামূলক খরচে কার্যকর থ্রুপুট সরবরাহ করার জন্য শেয়ার্ড এক্সপার্ট, মাইক্রো-ব্যাচিং এবং কম্পিউটেশন-কমিউনিকেশন ওভারল্যাপিং ব্যবহার করে অতিরিক্ত ল্যাটেন্সিগুলি লুকিয়ে রাখা যেতে পারে। DeepSeek H800 GPU এবং NVIDIA ConnectX-7 ইনফাইনাড অ্যাডাপ্টারের ক্লাস্টারে ডিপ্লয় করা DeepSeek-R1-এর মাধ্যমে এই কৌশলগুলির সূচনা করেছিল।

AWS ক্লাস্টারগুলিতে, তাদের কাস্টম ইলাস্টিক ফ্যাব্রিক অ্যাডাপ্টার (EFA) ব্যবহারের কারণে পরিস্থিতি আলাদা। যদিও এগুলি সাধারণত প্রশিক্ষণ ওয়ার্কলোডে ব্যবহৃত যৌথগুলিতে শিখর 400Gbps থ্রুপুট প্রদান করে, তবে MoE ডিসপ্যাচ এবং কম্বাইনের সময় বিনিময় করা বার্তার আকারের ক্ষেত্রে এগুলি ConnectX-7-এর থেকে সামান্য কম পড়ে। উপরন্তু, EFA GPUDirect Async সমর্থন করে না, যার ফলে স্থানান্তর শুরু করার জন্য GPU-কে NIC-এর সাথে সংযুক্ত করে এমন একটি CPU প্রক্সি থ্রেডের প্রয়োজন হয়। অতিরিক্ত জটিলতা ছাড়াও, অতিরিক্ত PCIe ট্রানজাকশন সমস্ত স্থানান্তরে মাইক্রোসেকেন্ডের ওভারহেড যোগ করে। NVSHMEM-এর মতো ফ্রেমওয়ার্কগুলি কার্নেল লেখকদের ডিভাইস-স্বাধীন বাস্তবায়ন প্রদান করার অনুমতি দেয়, তবে সাধারণ API গুলি এমন ওভারহেড নিয়ে আসে যা খরচ এবং ল্যাটেন্সি উভয় ক্ষেত্রেই ডিপ্লয়মেন্টকে অকার্যকর করে তোলে।

NVSHMEM-ভিত্তিক pplx-kernels

আমাদের পূর্ববর্তী কার্নেলগুলি NVSHMEM-এর মাধ্যমে অন্তর্নিহিত পরিবহন বাস্তবায়নকে বিমূর্ত করেছিল। তারা সমকক্ষদের সিঙ্ক্রোনাইজ করার জন্য পারমাণবিক কাউন্টার ব্যবহার করে একে একে টোকেন স্থানান্তর করতে nvshmemx_putmem_signal_nbi_warp -এর উপর নির্ভর করেছিল। IBGDA সহ ConnectX-7 NIC-গুলিতে এটি যুক্তিসঙ্গত কার্যক্ষমতা অফার করলেও, প্রক্সি-ভিত্তিক ConnectX-7 IBRC বাস্তবায়ন উল্লেখযোগ্যভাবে ধীর ছিল, অন্যদিকে EFA বাস্তবায়ন এক মিলিসেকেন্ডের নিচে ল্যাটেন্সি সরবরাহ করতে ব্যর্থ হয়েছিল।

আমরা আমাদের মডেলগুলিতে প্রকাশ করার জন্য সবচেয়ে উপযুক্ত ইন্টারফেস পিন ডাউন করার সাথে সাথে অন্তর্নিহিত হার্ডওয়্যারের জন্য একটি টেস্টবেড হিসাবে কার্নেলগুলি ব্যবহার করেছি। আমরা অনুমান করেছি যে কার্নেল এবং NIC বা প্রক্সি থ্রেডগুলির মধ্যে ঘন ঘন স্থানান্তর এবং মিথস্ক্রিয়া কার্যক্ষমতাকে বাধাগ্রস্ত করেছে। উপরন্তু, আমাদের বাস্তবায়ন নির্ভরযোগ্যতা ব্যতীত হার্ডওয়্যারের অন্য কোনো গ্যারান্টিগুলির উপর নির্ভর করেনি, যা ইঙ্গিত করে যে আমরা সিঙ্ক্রোনাইজেশন আদিমগুলির ওভারহেড হ্রাস করে জিনিসগুলিকে দ্রুততর করতে পারি।

এই পর্যবেক্ষণগুলি অনুসরণ করে, আমরা শীর্ষ কর্মক্ষমতার জন্য হুডের নিচে ডিভাইস কার্নেল - হোস্ট প্রক্সি মিথস্ক্রিয়াকে অপ্টিমাইজ করে একই ইন্টারফেস প্রকাশ করে আমাদের EFA-ভিত্তিক কার্নেলগুলি তৈরি করেছি।

EFA-এর উপর MoE অল-টু-অল

RDMA এবং NVLink হাইব্রিড যোগাযোগ, যেখানে হোস্ট প্রোক্সি, প্রেরণকারী ও গ্রহণকারী র‍্যাঙ্ক, প্রোক্সি ওয়ার্কার এবং NIC দেখানো হয়েছে.

নতুন কার্নেলগুলি একটি হাইব্রিড CPU-GPU আর্কিটেকচার অনুসরণ করে, যেখানে GPU কার্নেলগুলি ডিভাইসে মডেলের সাথে ইন্টারঅ্যাক্ট করে এবং হোস্ট CPU-তে চলমান একটি প্রক্সি থ্রেড NIC-এর সাথে মিথস্ক্রিয়া পরিচালনা করে। নতুন কার্নেলগুলি একই TransferEngine পুনরায় ব্যবহার করে যা আমরা KV ক্যাশ স্থানান্তরের জন্য তৈরি করেছি। 

MoE রাউটিং একটি ডিসপ্যাচ কার্নেল দ্বারা সঞ্চালিত হয়, যা মডেল থেকে টোকেন এবং প্রতি-টোকেন বিশেষজ্ঞদের রুট করার জন্য গ্রহণ করে, বিশেষজ্ঞদের হোস্ট করে এমন র‍্যাঙ্কগুলিতে নেটওয়ার্ক জুড়ে তাদের পাঠায়। গ্রুপ করা GEMM কার্নেলগুলি বিশেষজ্ঞের ওজনের সাথে টোকেনগুলিকে গুণ করার পরে, কম্বাইন কার্নেলটি টোকেনগুলিকে তাদের উৎস র‍্যাঙ্কে স্থানান্তর করে এবং মডেলে ফেরত দেওয়ার আগে তাদের ওজনযুক্ত গড় গণনা করে।

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

কার্নেলগুলি হোস্টের সাথে শক্তভাবে সংযুক্ত থাকে, ইউনিফাইড মেমরি এবং GDRCopy উভয়ের মাধ্যমেই একে অপরের সাথে যোগাযোগ করে। CUDA ইউনিফাইড মেমরি ডিভাইস মেমরি বা হোস্ট মেমরিকে উভয়ের ঠিকানা স্পেসগুলিতে ম্যাপ করার অনুমতি দেয়, স্বচ্ছভাবে PCIe-এর মাধ্যমে যোগাযোগ পরিচালনা করে।

যদিও ইউনিফাইড মেমরি বাল্ক স্থানান্তরের জন্য উপযুক্ত, তবে মাইক্রোসেকেন্ড ল্যাটেন্সিতে কম-ল্যাটেন্সি পোলিং GDRCopy-এর মাধ্যমে করা হয়। GDRCopy মাইক্রোসেকেন্ড ল্যাটেন্সিতে GPU মেমরি থেকে পড়তে এবং লিখতে GPUDirect RDMA ব্যবহার করে।

RDMA ছাড়াও, একটি নোডের মধ্যে কার্নেলগুলি টোকেন বিনিময় করতে NVLink-ও ব্যবহার করে। এটি ট্রাফিকের একটি উল্লেখযোগ্য ভগ্নাংশ অফলোড করতে পারে, EP32-এর জন্য এক চতুর্থাংশ পর্যন্ত এবং EP64-এর জন্য এক অষ্টমাংশ পর্যন্ত, যা সামগ্রিকভাবে কম ল্যাটেন্সি অর্জন করে।

সেন্ড এবং রিসিভ বাফার

হোস্ট প্রক্সির সাথে জড়িত কার্যকর ল্যাটেন্সি অর্জনের ক্ষেত্রে ডিসপ্যাচ কার্নেলের জন্য সেন্ড বাফারের ডিজাইন অত্যন্ত গুরুত্বপূর্ণ। যদি Nটি র‍্যাঙ্কের প্রতিটিতে T টোকেন ডিসপ্যাচ করা হয়, যার প্রতিটি E-এর মধ্যে R বিশেষজ্ঞদের কাছে রুট করা হয়, তবে সবচেয়ে খারাপ সম্ভাব্য ক্ষেত্রে একটি র‍্যাঙ্ক N * T * max(R, E / N) টোকেন পর্যন্ত পেতে পারে, যদি সমস্তই এতে রুট করা হয়। তদুপরি, এই ন্যূনতম বাউন্ড তখনই অর্জন করা যেতে পারে যখন প্রেরকরা তাদের রাইটগুলিকে পরপর লেআউট করে, কারণ প্রাইভেট রিসিভ বাফারগুলি খুব বেশি মেমরি ব্যবহার করবে। প্রেরকরা যাতে কোনো দ্বন্দ্ব ছাড়াই পরপর তাদের রাইটগুলিকে লেআউট করতে সক্ষম হয়, রাউটিং তথ্যের সম্পূর্ণ জ্ঞান প্রতিটি র‍্যাঙ্কে বিতরণ করা আবশ্যক। ফলস্বরূপ, আমাদের ডিসপ্যাচ কার্নেলগুলি প্রথমে প্রতি-এক্সপার্ট টোকেন গণনা বিনিময় করে, যার পরে তারা প্রতিটি নির্ধারণ করতে পারে যে তাদের রাইটগুলি কোথায় যায় এবং কোন অফসেট থেকে তারা প্রতিটি র‍্যাঙ্ক থেকে টোকেন গ্রহণ করে।

শুধুমাত্র রাউটিং তথ্য বিনিময় করার ফলে অপ্রয়োজনীয়ভাবে উচ্চ ল্যাটেন্সি দেখা দেবে, কারণ প্রতিটি র‍্যাঙ্ককে তার নিজের কোনো রাইট ডিসপ্যাচ করার আগে রাইটগুলির পৌঁছানোর জন্য অপেক্ষা করতে হবে। পরিবর্তে, আমরা প্রতিটি রিসিভার র‍্যাঙ্কে অল্প পরিমাণ প্রাইভেট প্রতি-প্রেরক স্পেস রিজার্ভ করি এবং রাউটিং তথ্যের রাইটগুলির সাথে কিছু টোকেন ডিসপ্যাচ করি। এটি ডিসপ্যাচ প্রক্রিয়ার বেশিরভাগ সময় জুড়ে সম্পূর্ণ ব্যান্ডউইথ ব্যবহার নিশ্চিত করে। রুটগুলি বিনিময় হওয়ার পরে, বাকি টোকেনগুলি প্রতি রিমোট পিয়ারে একটি মাত্র রাইটের মাধ্যমে স্থানান্তরিত হয়। রাউটিং তথ্যের বিনিময় এবং নির্দিষ্ট আকারের বাফারগুলি, সেগুলিকে পূরণকারী স্থানান্তরগুলির সাথে, নীচের চিত্রে চিত্রিত করা হয়েছে।

MoE ডিসপ্যাচের জন্য বাফার লেআউট, যেখানে টোকেন ডেটা এবং রাউটিং মেটাডেটা কীভাবে সাজানো ও দুইটি র‍্যাঙ্কের মধ্যে বিনিময় হয় তা দেখানো হয়েছে.

কম্বাইন কার্নেলগুলি মূলত সহজতর, কারণ ডিসপ্যাচ পর্যায় থেকে রাউটিং তথ্য ইতিমধ্যেই তাদের জন্য উপলব্ধ রয়েছে। তারা প্রতি পিয়ারে একটি একক রাইটে টোকেনগুলি কপি করতে পারে, যার পরে তারা আউটপুট টেনসরে টোকেনের ওজনযুক্ত গড় গণনা করার জন্য রিসিভ বাফার থেকে পড়ে।

NVLink-এর জন্য, একটি নোডের মধ্যে সেন্ড এবং রিসিভ বাফারগুলিকে সমকক্ষগুলিতে ম্যাপ করা হয় যাতে তারা প্রতিবেশী র‍্যাঙ্কগুলি থেকে সরাসরি টোকেন পুশ বা পুল করতে সক্ষম হয়।

ডিসপ্যাচ এবং কম্বাইন

নীচের চিত্রগুলিতে মডেলের কার্নেলগুলির সাথে ডিসপ্যাচ এবং কম্বাইনের একটি ইটারেটেশন দেখিয়ে GPU, CPU এবং NIC-এর মধ্যে সময় এবং মিথস্ক্রিয়া বিশদভাবে বর্ণনা করা হয়েছে।

ডিসপ্যাচ সেন্ড-এ কাজ শুরু হয়, যেখানে কার্নেল রাউটিং তথ্য একত্রিত করে এবং একক ব্লকের মধ্যে শেয়ার্ড মেমরিতে পারমাণবিক সংযোজনের মাধ্যমে প্রতি-এক্সপার্ট টোকেন গণনা গণনা করে। একবার টোকেন গণনা উপলব্ধ হলে, সেগুলিকে হোস্ট মেমরিতে কপি করা হয় এবং অন্যান্য সমস্ত পিয়ার র‍্যাঙ্কে রাউটিং তথ্য ডিসপ্যাচ করা শুরু করার জন্য প্রক্সিকে অবিলম্বে বিজ্ঞপ্তি দেওয়া হয়। সমান্তরালভাবে, ডিসপ্যাচ টোকেন গণনার ক্রমবর্ধমান যোগফল গণনা করা চালিয়ে যায়, অবিচ্ছিন্ন প্রতি-পিয়ার সেন্ড বাফারে টোকেন প্যাক করার জন্য প্রয়োজনীয় অফসেটগুলি চিহ্নিত করে। একবার অফসেটগুলি উপলব্ধ হলে, EFA-র মাধ্যমে পাঠানো সমস্ত টোকেন সেন্ড বাফারে প্যাক করা হয়। ইন্টার-নোড পিয়ারদের সেন্ড বাফারে রাইটগুলি পোস্ট করার জন্য প্রক্সিকে বিজ্ঞপ্তি দেওয়া হয়। ইন্ট্রা-নোড, কার্নেলগুলি অবিলম্বে NVLink-এর মাধ্যমে একই নোডের মধ্যে প্রাইভেট বাফারে টোকেন পুশ করে।

MoE ডিসপ্যাচের জন্য সময় নির্ধারণ ও সমন্বয়, যেখানে পর্যায়ক্রমিক GPU, CPU এবং NIC অপারেশন এবং তাদের সিঙ্ক্রোনাইজেশন দেখানো হয়েছে.
MoE কম্বাইনের জন্য সময় নির্ধারণ ও সমন্বয়, যেখানে GPU, CPU এবং NIC অপারেশন এবং তাদের সিঙ্ক্রোনাইজেশন দেখানো হয়েছে.

একবার কোনো র‍্যাঙ্ক সমস্ত পিয়ার থেকে রাউটিং তথ্য পেলে, এটি এটিকে কেন্দ্রীভূত করে এবং ডিসপ্যাচ এবং কম্বাইনের জন্য টোকেন চিহ্নিত করতে প্রয়োজনীয় বিভিন্ন অফসেট গণনা করে। স্থানান্তরগুলি ইতিমধ্যে মুলতুবি থাকাকালীন এই কাজটি CPU-তে করা হয়, সুতরাং এটি ল্যাটেন্সি ক্রিটিক্যাল নয়। পরবর্তীতে, একবার সমস্ত অফসেট পরিচিত হয়ে গেলে, বাকি টোকেনগুলির জন্য রাইট, যা প্রাইভেট বাফারের আকার অতিক্রম করে, পোস্ট করা হয় এবং ডিসপ্যাচের সেন্ড পর্যায় সম্পূর্ণ হয়।

রিসিভার প্রান্তে, কার্নেল প্রথমে একই নোড থেকে টোকেন টানে যা এনভি লিংকের মাধ্যমে প্রাইভেট বাফারের ক্ষমতার বাইরে। এরপর, হোস্ট প্রক্সি সমস্ত স্থানান্তরের সমাপ্তির সংকেত না দেওয়া পর্যন্ত এটি ব্লক থাকে। সংকেত পাওয়ার পর, রিসিভ বাফার থেকে টোকেনগুলোকে গ্রুপ জেমএম-এ পাস করা আউটপুট টেনসরে শাফেল করা হয়। যেহেতু ডিসপ্যাচ এবং কম্বাইনের মধ্যে বাফারগুলো পুনরায় ব্যবহৃত হয়, তাই এনভি লিংক এবং আরডিএমএ উভয় বাধা নিশ্চিত করে যে পরবর্তী কার্নেলকে ওভাররাইট করার অনুমতি দেওয়ার আগে রিসিভার বাফারগুলো পড়া হয়েছে।

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

MoE রাউটিংয়ের জন্য TransferEngine

আমাদের বাস্তবায়নের প্রোটোটাইপ তৈরি করতে, আমরা প্রাথমিকভাবে RDMA রাইট ইস্যু এবং ট্র্যাক করার জন্য ডিস্যাগ্রিগেটেড প্রিফিল এবং ডিকোড-এর জন্য তৈরি Transfer Engine পুনরায় ব্যবহার করেছিলাম। যাইহোক, ডিস্যাগ্রিগেটেড ডিকোডিংয়ের বিপরীতে যেখানে প্রতিটি নোড একই পিয়ারে প্রচুর সংখ্যক রাইট পোস্ট করে, MoE ডিসপ্যাচ এক অপারেশনে সমস্ত পিয়ারে ছোট স্থানান্তর পোস্ট করে। বাক্স থেকে বের করে, কর্মক্ষমতা অপ্টিমাল ছিল না এবং আমাদের বাস্তবায়ন ConnectX-7-এ DeepEP-এর চেয়ে প্রায় 20us পিছিয়ে ছিল। ফলস্বরূপ, বিপুল সংখ্যক পিয়ারের সাথে মিথস্ক্রিয়া অপ্টিমাইজ করতে আমরা দুটি অপারেশন, স্ক্যাটার এবং ব্যারিয়ার সমর্থন করার জন্য TransferEngine-কে বিশেষায়িত করেছি।

স্ক্যাটার এবং ব্যারিয়ার উভয় অপারেশনই পিয়ার গ্রুপ প্রকাশ করে যেগুলিকে অন্তর্নিহিত পরিবহন বাস্তবায়ন (Work Request (WR) টেমপ্লেটিং) দ্বারা ব্যবহৃত ডেটা স্ট্রাকচারগুলিকে প্রি-পপুলেট করতে প্রি-রেজিস্টার করা যেতে পারে। স্ক্যাটার একই উৎস বাফার থেকে বিভিন্ন স্লাইসকে একটি পিয়ার গ্রুপের সমস্ত সদস্যের বিভিন্ন অফসেটে কপি করে। ব্যারিয়ার একটি ইমিডিয়েটের মাধ্যমে সমস্ত পিয়ারকে সংকেত দেয়। সমালোচনামূলক পথে এই অপারেশনগুলিকে এনকিউ এবং বাল্কে পরিচালনা করা মূল্যবান মাইক্রোসেকেন্ড বাঁচায়। EFA-তে, যেখানে দুটি 200Gbps NIC 400Gbps ব্যান্ডউইথ প্রদান করতে একত্রিত হয়, আমরা প্রতিটি স্থানান্তরের বাইট শার্ড করার পরিবর্তে দুটি NIC জুড়ে গ্রুপ পিয়ার শার্ড করি।

যদিও প্রাথমিকভাবে আমরা libfabric ব্যবহার করে শুধুমাত্র EFA-তে TransferEngine তৈরি করেছি, libibverbs ব্যবহার করে TransferEngine-এ ConnectX-7 সমর্থন যোগ করার পরে MoE কার্নেলগুলি কোডের একটি লাইনও পরিবর্তন না করে ConnectX-7-এ কাজ করে। স্কেলেবল রিলায়েবল ডেটাগ্রাম (SRD) ভিত্তিক EFA-এর তুলনায়, ConnectX-7-এর জন্য সংযোগ সেটআপ এবং পিয়ার ব্যবস্থাপনার জন্য অতিরিক্ত কাজের প্রয়োজন হয়। আমরা রিলায়েবল কানেকশন (RC) বুটস্ট্র্যাপ করতে একটি আনরিলায়েবল ডেটাগ্রাম (UD) কিউ পেয়ার ব্যবহার করি। আমরা প্রতিটি রিমোট পিয়ারের জন্য দুটি কিউ পেয়ার তৈরি করি, একটি দুই-পার্শ্বযুক্ত SEND/RECV-এর জন্য এবং একটি এক-পার্শ্বযুক্ত WRITE_IMM-এর জন্য, কারণ RECV এবং WRITE_IMM উভয়ই ক্রমানুসারে RECV অপারেশন ব্যবহার করে যখন দুটি অপারেশনের জন্য বিভিন্ন বাফার আকারের প্রয়োজন হয়। তাছাড়া, আমরা ConnectX-7 এবং GPU মেমরির মধ্যে PCIe ট্রানজাকশন অর্ডারিং শিথিল করি। EFA-র মতো, আমরা WR টেমপ্লেটিং অপ্টিমাইজেশান প্রয়োগ করি। উপরন্তু, একই পিয়ারে একাধিক ছোট বার্তা পাঠানোর সময়, আমরা বার্তা হার উন্নত করতে WR চেইনিং ব্যবহার করি।

যেহেতু GPU-সাইডের কাজ উভয় অ্যাডাপ্টার জুড়ে অভিন্ন, তাই EFA এবং ConnectX-7 MoE রাউটিংয়ের মধ্যে ব্যবধানটি অন্তর্নিহিত হার্ডওয়্যারের ক্ষমতা দ্বারা নির্ধারিত হয় তা হাইলাইট করতে আমরা DeepEP-এর কার্যক্ষমতাকে ছাড়িয়ে যাওয়ার জন্য অন্তর্নিহিত পরিবহন বাস্তবায়নকে এর সীমাতে ঠেলে দিয়েছি।

মূল্যায়ন

ডিসপ্যাচ/কম্বাইন ল্যাটেন্সি

আমরা 7168-এর একটি লুকানো ডাইমেনশন, ব্লক-স্কেলড fp8 ডিসপ্যাচ এবং bf16 কম্বাইন সহ স্ট্যান্ডার্ড DeepSeek-V3 এবং Kimi-K2 কনফিগারেশনে ConnectX-7 এবং EFA অ্যাডাপ্টারে সজ্জিত H200 সিস্টেমে ডিসপ্যাচ এবং কম্বাইন ল্যাটেন্সির মূল্যায়ন করেছি। আমরা ডিসপ্যাচের জন্য 128 এবং কম্বাইনের জন্য 4096 ব্যাচ সাইজ বিবেচনা করি। ConnectX-7-এ, আমরা GPUDirect Async (IBGDA) এবং একটি হোস্ট প্রক্সি (IBRC) উভয় ব্যবহার করে DeepEP এবং আমাদের পূর্ববর্তী NVSHMEM-ভিত্তিক pplx-kernels-এর সাথে তুলনা করি। আমরা যথাক্রমে EP16, EP32 এবং EP64-এ 459us, 582us এবং 692us-এর সম্মিলিত ল্যাটেন্সি অর্জন করি। আমরা সাধারণ প্রক্সির উপর নির্ভর করে এমন অন্যান্য EFA-ভিত্তিক কার্নেল যেমন UCCL-EP, যেগুলি 519us, 966us এবং 1159us অর্জন করে, সেগুলিকে ছাড়িয়ে গেছি।

EP64 MoE ডিকোডের জন্য ডিসপ্যাচ ও কম্বাইন লেটেন্সি, যেখানে দেখানো ইমপ্লিমেন্টেশন এবং যোগাযোগ পথগুলোর তুলনা করা হয়েছে.

ডিকোডে, আমাদের কার্নেলগুলি DeepEP-এর চেয়ে কয়েক মাইক্রোসেকেন্ড ধীর হওয়া সত্ত্বেও, আমরা সামগ্রিকভাবে কম ল্যাটেন্সি অর্জন করি কারণ আমাদের কম্বাইন কার্নেলগুলি যথেষ্ট দ্রুত। যদিও আমরা একটি হোস্ট প্রক্সি ব্যবহার করি, আমাদের বাল্ক স্থানান্তরের কারণে আমরা সমস্ত IBGDA-ভিত্তিক প্রক্সিলেস বাস্তবায়নের কার্যক্ষমতাকে ছাড়িয়ে যাই। আমরা এটিও দেখাই যে প্রক্সি বাস্তবায়ন গুরুত্বপূর্ণ, কারণ আমাদের অত্যন্ত বিশেষায়িত প্রক্সি সাধারণ NVSHMEM বাস্তবায়নের তুলনায় এক অর্ডার দ্রুত। MoE রাউটিং দ্বারা বিনিময় করা সাধারণ প্যাকেটের আকারের কাছাকাছি থাকা 256KB প্যাকেট স্থানান্তর করার সময় EFA ConnectX-7-এর চেয়ে দ্বিগুণ ধীর হওয়া সত্ত্বেও, দুটি অ্যাডাপ্টারের মধ্যে ব্যবধান সামগ্রিকভাবে কম উল্লেখযোগ্য।

EP64 MoE প্রিফিলের জন্য ডিসপ্যাচ ও কম্বাইন লেটেন্সি, যেখানে pplx এবং DeepEP যোগাযোগ পথগুলোর তুলনা করা হয়েছে.

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

Kimi-K2 / DeepSeek-V3 থ্রুপুট

আমাদের কার্নেলগুলির কার্যকারিতা প্রমাণ করতে, আমরা ইলাস্টিক ফ্যাব্রিক অ্যাডাপ্টার (EFA) এবং H200 GPU দিয়ে সজ্জিত একাধিক p5en ইন্সটান্সে DeepSeek-V3 (671B প্যারামিটার) এবং Kimi-K2 (1T প্যারামিটার) পরিবেশনকারী আমাদের ইন-হাউস ইনফারেন্স ইঞ্জিনের এন্ড-টু-এন্ড কর্মক্ষমতার বেঞ্চমার্ক করি। আমরা ড্রাফ্ট ভেরিফিকেশন মোডে মডেলটি চালাই এবং একটি একক MTP স্তর ব্যবহার করে 80% গ্রহণের হার ধরে নিয়ে ল্যাটেন্সি রিপোর্ট করি।

DeepSeek-V3-এ, আমরা দক্ষ NVLink-only ডিসপ্যাচ এবং কম্বাইন কার্নেল চালানো একটি EP=8 ইন্ট্রানোড বেসলাইনের বিরুদ্ধে তুলনা করি। ইন্টার-নোড ডিপ্লয়মেন্টগুলি সামগ্রিকভাবে হয় একক-নোড ডিপ্লয়মেন্টের কার্যক্ষমতার সাথে মেলে বা ছাড়িয়ে যায়, বিশেষ করে মাঝারি আকারের ব্যাচগুলিতে, যা প্রদর্শন করে যে নোড জুড়ে স্কেলিং করা সত্যিই সামগ্রিক থ্রুপুটে উন্নতি আনে।

Kimi-K2-তে, কার্নেলগুলি পরিবেশন করা সম্ভব করে তোলে। এর আকারের কারণে, মডেলটি একটি H200 নোডে ডেটা প্যারালালিজম (DP) ব্যবহার করে একই নোডের মধ্যে ফিট হতে পারে না, ফলে মডেলটি পরিবেশন করার জন্য একটি ইন্টার-নোড ডিপ্লয়মেন্টের প্রয়োজন হয়। যেহেতু মডেলটিতে কম মনোযোগের মাথা রয়েছে, আমরা DeepSeek-V3-এর চেয়ে ভালো ল্যাটেন্সি অর্জন করি এবং আমরা কার্যকর ল্যাটেন্সিতে EFA-তে মডেলটি পরিবেশন করতে পারি।

DeepSeek-V3-এর প্রতি-GPU throughput বনাম EP32, EP16 এবং EP8 কনফিগারেশনের জন্য output speed.
Kimi-K2-এর প্রতি-GPU throughput বনাম EP32 এবং EP16 কনফিগারেশনের জন্য output speed.

আমরা মাইক্রো-ব্যাচিংও বিবেচনা করেছি, যদিও এটি শুধুমাত্র খুব উচ্চ ব্যাচ সাইজে বা একাধিক ড্রাফ্ট টোকেন ব্যবহার করার সময় ল্যাটেন্সি উন্নত করেছে। গ্রুপ করা GEMM সমস্যাগুলিকে দুটিতে বিভক্ত করা থেকে উপকৃত হতে, টোকেন ব্যাচ সাইজগুলি যথেষ্ট ঘন হতে হবে। বেশিরভাগ সময় এখনও MoE ডিসপ্যাচ এবং কম্বাইনে ব্যয় করা হয়, যা ইঙ্গিত করে যে কার্নেলগুলিতে যেকোনো আরও উন্নতি ফলস্বরূপ ল্যাটেন্সি উন্নত করবে এবং মাইক্রো-ব্যাচিং সহজতর করবে।

ভবিষ্যতের কাজ

আমরা EFA-তে কর্মক্ষমতা উন্নত করতে AWS ইঞ্জিনিয়ারদের সঙ্গে ঘনিষ্ঠভাবে কাজ করছি। আমাদের পক্ষ থেকে, আমরা libfabric-এর আপডেটগুলো অনুসরণ করব, যা ডেটা প্লেনের ওভারহেড কমাবে। এছাড়াও, ব্যবহারকারীর স্থান (userspace)–এর ওভারহেড আরও কমাতে এবং হার্ডওয়্যারের সঙ্গে সরাসরি ইন্টারফেস করতে আমরা efa-direct নিয়ে পরীক্ষা-নিরীক্ষা করব.

তথ্যসূত্র

DeepSeek R1 প্রযুক্তিগত প্রতিবেদন

Kimi K2 প্রযুক্তিগত প্রতিবেদন

DeepEP

UCCL-EP

NVIDIA Magnum IO NVSHMEM এবং GPUDirect Async ব্যবহার করে HPC সিস্টেমের নেটওয়ার্ক কার্যক্ষমতা উন্নত করা

উদ্ধৃতি

BibTeX
@online{perplexity2025EnablingTrillionParameterModelsOnAwsEfa,
  author = {{Perplexity} and Nandor Licker and Kevin Hu and Vladimir Zaytsev and Lequn Chen},
  title = {{Enabling trillion-parameter models on AWS EFA}},
  date = {2025-11-04},
  url = {https://www.perplexity.ai/hub/blog/enabling-trillion-parameter-models-on-aws-efa}
}