দক্ষ এবং পোর্টেবল মিক্সচার-অফ-এক্সপার্টস কমিউনিকেশন

পোর্টেবল মিক্সচার-অফ-এক্সপার্টস (MoE) কমিউনিকেশনের একটি সারসংক্ষেপ, যা বৃহৎ আকারের এআই মডেলে জিপিইউ প্যারালালিজম অপ্টিমাইজ করার এবং লেটেন্সি কমানোর ওপর ফোকাস করে

লেখকগণPerplexity Research

আমরা মিক্সচার-অফ-এক্সপার্টস (MoE) কমিউনিকেশনের জন্য একটি উচ্চ-কার্যক্ষমতাসম্পন্ন, পোর্টেবল, ওপেন-সোর্স লাইব্রেরি উপস্থাপন করছি যা স্ট্যান্ডার্ড অল-টু-অল কমিউনিকেশন প্রিমিটিভের তুলনায় ১০ গুণ দ্রুত কার্যক্ষমতা অর্জন করে।

আমাদের ইমপ্লিমেন্টেশনে বেশ কিছু মূল প্রযুক্তিগত উদ্ভাবন রয়েছে যা উচ্চতর MoE কমিউনিকেশন দক্ষতা প্রদান করে:

জিপিইউ-সূচিত কমিউনিকেশন (IBGDA): সরাসরি জিপিইউ-টু-নিক কমিউনিকেশন সমর্থন করে, সিপিইউ-এর সম্পৃক্ততা এড়িয়ে উল্লেখযোগ্যভাবে লেটেন্সি কমায়

কমিউনিকেশন এবং কম্পিউটেশনের ওভারল্যাপ: আলাদা সেন্ড এবং রিসিভ স্টেজ সহ স্প্লিট কার্নেল আর্কিটেকচার নেটওয়ার্ক স্থানান্তরের সাথে সাথে কম্পিউটেশন সমসাময়িকভাবে চলতে দেয়

সবচেয়ে দ্রুত একক-নোড কার্যক্ষমতা: একক-নোড কনফিগারেশনে পূর্বে সবচেয়ে দ্রুতগতির ইমপ্লিমেন্টেশনের তুলনায় ২.৫ গুণ কম লেটেন্সি

দক্ষ এবং পোর্টেবল মাল্টি-নোড কার্যক্ষমতা: আমাদের ইমপ্লিমেন্টেশন স্ট্যান্ডার্ড অল-টু-অল কমিউনিকেশনের তুলনায় ১০ গুণ পর্যন্ত দ্রুত গতি অর্জন করে। অত্যন্ত বিশেষায়িত ইমপ্লিমেন্টেশনের তুলনায় প্রায় ২ গুণ ধীরগতির হলেও, আমাদের পদ্ধতিটি এনভিএসএইচএমইএম (NVSHMEM) সংস্করণ এবং নেটওয়ার্ক পরিবেশের (NVLink, CX-7, এবং EFA) জুড়ে আরও ভালো পোর্টেবিলিটি প্রদান করে।

লাইব্রেরিটি সম্পূর্ণ ওপেন-সোর্স এবং https://github.com/ppl-ai/pplx-kernels-এ উপলব্ধ।

এই নিবন্ধে, আমরা বৃহৎ আকারের MoE মডেলে এক্সপার্ট প্যারালালিজমের চ্যালেঞ্জগুলো অন্বেষণ করি এবং বিতরণকৃত জিপিইউ পরিবেশ জুড়ে দক্ষ টোকেন ডিসপ্যাচ ও কম্বিনেশনের জন্য আমাদের পদ্ধতি বর্ণনা করি।

ভূমিকা

মিক্সচার-অফ-এক্সপার্টস (MoE) মডেলগুলো, যেমন ডিপসিক আর১ (DeepSeek R1) এবং মিক্সট্রাল ৮এক্স৭বি (Mixtral 8x7B), প্রতিটি টোকেনের জন্য সক্রিয় থাকা ওয়েটের সংখ্যা সীমিত করার মাধ্যমে ডেন্স মডেলগুলোর উন্নতি সাধন করে। প্রতিটি ডিকোডার স্তরের মাল্টি-লেয়ার পারসেপট্রন (MLP)-এ লেয়ারের সংখ্যা বাড়িয়ে বা রৈখিক লেয়ারগুলোর আকার বাড়িয়ে উচ্চ প্যারামিটার গণনা অর্জনের পরিবর্তে, MoE মডেলগুলো ঐতিহ্যবাহী MLP-কে একাধিক এক্সপার্ট এবং একটি রাউটার দিয়ে প্রতিস্থাপন করে। উদাহরণস্বরূপ, ডিপসিক আর১ (DeepSeek R1)-এর ৬৭১ বিলিয়ন প্যারামিটারের মধ্যে, ইনফারেন্সের সময় শুধুমাত্র ৩৭ বিলিয়ন প্যারামিটার নির্দিষ্ট টোকেনের সাথে গুণ করা হয়। এটি একটি টোকেন ডিকোড করার জন্য প্রয়োজনীয় গণনার পরিমাণ ব্যাপকভাবে হ্রাস করে এবং ডেন্স মডেলের তুলনায় লেটেন্সি উন্নত করে।

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

বিতরণকৃত MoE সিস্টেমে লেটেন্সি কমানোর জন্য, একাধিক ডিভাইসের মধ্যে প্যারালালিজম কাজে লাগানো যেতে পারে, কিন্তু এটি যোগাযোগের চ্যালেঞ্জ তৈরি করে। Mixtral 8x7B বা Llama-70B-এর মতো মডেলগুলো একক নোডের মধ্যে ৮টি ডিভাইসের মধ্যে ফিট হয়ে যায়, যা দ্রুত এবং কম লেটেন্সির NVLink ইন্টারকানেকশন (৯০০Gbps পর্যন্ত) থেকে উপকৃত হয়। তবে, বৃহত্তর মডেলগুলোর জন্য ইনফিনিব্যান্ড (InfiniBand) (সর্বোচ্চ ৪০০Gbps) ব্যবহার করে একাধিক নোড জুড়ে এক্সপার্টদের শার্ডিং করার প্রয়োজন হয়, যা অতিরিক্ত লেটেন্সি চ্যালেঞ্জ তৈরি করে।

মিশ্র-অফ-এক্সপার্টস লেয়ারে টোকেন রাউটিং, এক্সপার্ট কম্পিউটেশন, এবং আউটপুট সংগ্রহ।

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

শার্ডিং এবং প্যারালালিজম

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

দুটি GPU জুড়ে এক্সপার্ট প্যারালেলিজম।

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

দুটি GPU জুড়ে এক্সপার্ট প্যারালেলিজমকে টেনসর প্যারালেলিজমের সঙ্গে একত্র করা।

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

দুটি GPU জুড়ে পৃথক অনুরোধের জন্য এক্সপার্ট প্যারালেলিজমকে ডেটা প্যারালেলিজমের সঙ্গে একত্র করা।

সমস্ত ডিভাইসকে সর্বোত্তমভাবে ব্যবহার করতে এবং ১২৮ বা ২৫৬টি জিপিইউ পর্যন্ত খুব উচ্চ মাত্রার এক্সপার্ট প্যারালালিজম সমর্থন করতে, ডেটা প্যারালালিজম (DP)-এর প্রয়োজন হয়। এই স্কিমের অধীনে, যে ডিভাইসগুলোতে একটি মডেল বিভক্ত করা হয় সেগুলোকে সমসাময়িক অনুরোধগুলি পরিচালনা করার জন্য দলবদ্ধ করা হয়, তাদের স্থানীয় গ্রুপের মধ্যে শার্ড করা অ্যাটেনশন গণনা করা এবং KV ক্যাশ বজায় রাখা। এই প্যারালাল গ্রুপগুলোর একাধিক ইনস্ট্যান্স এক্সপার্ট মূল্যায়নে সহযোগিতা করে, প্রতিটিতে এক্সপার্ট ওয়েটের একটি আলাদা উপসেট থাকে। অ্যাটেনশন হেডের সংখ্যার উপর নির্ভর করে, একটি গ্রুপ সাধারণত একটি সম্পূর্ণ নোডের আকার পর্যন্ত প্রসারিত হতে পারে, কারণ নোডের মধ্যে যোগাযোগ দ্রুত হয়। উদাহরণস্বরূপ, উপরের চিত্রে, একটি DP র‍্যাঙ্ক স্বাধীনভাবে দুটি অনুরোধ, A এবং B পরিবেশন করে, অনুরোধগুলির জন্য অ্যাটেনশন, নর্ম এবং অন্য কোনো বুককিপিং পরিচালনা করে। অন্য DP র‍্যাঙ্ক একটি স্বতন্ত্র অনুরোধ C প্রক্রিয়া করে। তবে, প্রথম নোডটি অর্ধেক এক্সপার্ট হোস্ট করে, অন্য নোডটি বাকি অর্ধেক হোস্ট করে, তাই A এবং B থেকে টোকেন রাউটিং করার পরে দ্বিতীয় নোডে পাঠানো হতে পারে এবং এর বিপরীতেও হতে পারে। এটি একটি স্পার্স কমিউনিকেশন সমস্যার দিকে নিয়ে যায়: প্রতিটি ডিভাইস অন্য যেকোনো গন্তব্য র‍্যাঙ্কে একটি ভিন্ন সংখ্যক টোকেন পাঠাতে পারে। টর্চের বিদ্যমান প্রিমিটিভগুলো, বিশেষ করে all_to_all, বিশেষত উপযুক্ত নয়, কারণ তাদের কিছু ধরণের প্যাডিং বা জিপিইউ-সিপিইউ সিঙ্ক্রোনাইজেশন এবং মেটাডেটা ব্রডকাস্টের প্রয়োজন হতে পারে। কার্যকরভাবে যোগাযোগ বাস্তবায়নের জন্য, রাউটিং তথ্য প্রক্রিয়া করতে এবং সিপিইউ হস্তক্ষেপ ছাড়াই ডিভাইস থেকে যোগাযোগ শুরু করতে কাস্টম কার্নেলের প্রয়োজন হয়। রাউটিংয়ের পরে, একটি ডিসপ্যাচ কার্নেলকে যে র‍্যাঙ্কগুলিতে টোকেনগুলি রাউট করা হয়েছিল সেখানে টোকেন পাঠাতে হবে, অন্যদিকে কম্বাইন সাইডে বর্তমান DP গ্রুপের অনুরোধগুলির সাথে সম্পর্কিত অ্যাক্টিভেশনগুলি সংগ্রহ করতে হবে। উপরন্তু, ব্রডকাস্ট কমাতে এবং পরবর্তী লেয়ারের সমস্ত র‍্যাঙ্কে টোকেনগুলোকে সঠিকভাবে প্রতিলিপি করার জন্য একটি DP গ্রুপের মধ্যে কাজ ভারসাম্যপূর্ণ করতে হবে যার একাধিক ডিভাইস থাকতে পারে।

NVSHMEM

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

NVSHMEM অপারেশনগুলো প্রতিসাম্য মেমরির ধারণার চারপাশে তৈরি করা হয়েছে: এগুলো এমন বাফারে কাজ করে যা ইন্টার-ডিভাইস কমিউনিকেশনে অংশগ্রহণকারী সমস্ত ডিভাইসে বরাদ্দ করা হয়েছে। একটি স্থানীয় ডিভাইস একটি অপারেশনের গন্তব্য নির্দিষ্ট করতে লক্ষ্য র‍্যাংকের সূচকের পাশাপাশি তার নিজস্ব স্থানীয় বাফারের মধ্যে প্রাপ্ত একটি ঠিকানা ব্যবহার করতে পারে। নীচের চিত্রটি এই ধারণাকে চিত্রিত করে: উভয় জিপিইউ একই আকারের সিমেট্রিক বাফার বরাদ্দ করে, সেগুলিতে src পয়েন্টার ধরে রাখে। প্রথম র‍্যাঙ্ক দ্বিতীয়টিতে ৩টি পূর্ণসংখ্যা পাঠাতে চায়, সেগুলোকে বাফারের শুরুতে রেখে: nvshmem_int_put_nbi লক্ষ্য ডিভাইস নির্দিষ্ট করে স্থানীয় বাফার থেকে স্টার্ট অ্যাড্রেস ডেরাইভ করে। দ্বিতীয় র‍্যাঙ্ক তার নিজস্ব বাফার থেকে একটি অফসেট ডেরাইভ করে, প্রথম ডিভাইসে একটি উপাদান পাঠায়, এক দ্বারা অফসেট করে। গন্তব্য ঠিকানাগুলো সর্বদা nvshmem_alloc ব্যবহার করে বরাদ্দ করা সিমেট্রিক বাফার হতে হবে, তবে উৎস বাফারগুলো ডিভাইস মেমরির যেকোনো অঞ্চল হতে পারে, যদি সেগুলো NVSHMEM-এর সাথে প্রাক-নিবন্ধিত থাকে।

যদিও NVSHMEM বিস্তৃত প্রিমিটিভ প্রদান করে, আমাদের কার্নেলগুলো শুধুমাত্র ৩টি ফাংশনের উপর নির্ভর করে, সেগুলির উপর সমস্ত সিঙ্ক্রোনাইজেশন এবং ফেনসিং তৈরি করে।

NVSHMEM ব্যবহার করে দুটি GPU-এর মধ্যে সমমিত মেমরি এবং রিমোট রাইট।

nvshmemx_putmem_signal_nbi_warp: ডেটার একটি ব্লক এক ডিভাইস থেকে অন্য ডিভাইসে স্থানান্তর করে, পাশাপাশি দূরবর্তী ডিভাইসে একটি পতাকা সেট করে। অপারেশনটি হয় একটি ৬৪-বিট অবস্থান সেট করে (NVSHMEM_SIGNAL_SET) বা বৃদ্ধি করে (NVSHMEM_SIGNAL_ADD)। মেমরির পুরো ব্লকটি স্থানান্তরিত হওয়ার পরে ফ্ল্যাগটি আপডেট করা হয়। যদি রিমোট ডিভাইসটি ফ্ল্যাগের পরিবর্তন লক্ষ্য করে, তবে এটি নিরাপদে তার নিজস্ব মেমরির বাফার অ্যাক্সেস করতে পারে। এই ফাংশনটি ডেটা স্থানান্তর এবং সিঙ্ক্রোনাইজেশন একত্রিত করার জন্য দরকারী।

nvshmemx_signal_op একটি একক মেমরি অবস্থানে কাজ করে, সাধারণত একটি ৬৪-বিট ফ্ল্যাগ, যা পরমাণুভাবে (atomically) সেট বা বৃদ্ধি করে। এটি মেটাডেটা পাঠানো এবং ডিভাইস সিঙ্ক্রোনাইজ করার ক্ষেত্রে দরকারী।

nvshmem_uint64_wait_until একটি সিগন্যালের রিসিভিং প্রান্তে ব্যবহৃত হয়, রিমোট আপডেট না করা পর্যন্ত একটি ফ্ল্যাগ পোল করার জন্য।

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

NVSHMEM GPUDirect RDMA ব্যবহার করে যাতে NIC সিপিইউকে সম্পৃক্ত না করে ডেটা বিনিময়ের জন্য সরাসরি জিপিইউ মেমরি পড়তে এবং লিখতে পারে। তদুপরি, ConnectX NIC-গুলিতে, NVSHEMEM জিপিইউ-সূচিত কমিউনিকেশন সমর্থন করে (যা Infiniband GPUDirect Async বা IBGDA নামেও পরিচিত), যা জিপিইউকে সরাসরি NIC-এ RDMA অপারেশন পোস্ট করতে এবং সরাসরি NIC-এর কমপ্লিশন কিউ পোল করার অনুমতি দেয়। যে সমস্ত প্ল্যাটফর্ম জিপিইউ-সূচিত যোগাযোগ সমর্থন করে না, সেখানে NVSHMEM হোস্ট সিপিইউ-তে যোগাযোগ শুরু করতে এবং জিপিইউ-এর পক্ষ থেকে কমপ্লিশন পোল করতে একটি “প্রক্সি” থ্রেড স্পন করে। জিপিইউ-সূচিত যোগাযোগ সমর্থিত হোক বা না হোক, NVSHMEM প্রোগ্রাম পোর্টেবল। তবে, জিপিইউ-সূচিত যোগাযোগ উল্লেখযোগ্যভাবে লেটেন্সি কমিয়ে দেয় কারণ এটি সিপিইউ-এর দিকে ডেট্যুর সম্পূর্ণভাবে এড়িয়ে যায়।

পোর্টেবল কার্নেল

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

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

ডিসপ্যাচ এবং কম্বাইন অপারেশনের জন্য পৃথক সেন্ড এবং রিসিভ কার্নেল।

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

উভয় কার্নেল ডিভাইসের সমস্ত উপলব্ধ SM জুড়ে বিভক্ত করা হয়েছে: ডিসপ্যাচ সেন্ড এবং কম্বাইন রিসিভ কার্নেলগুলোকে প্রতি-র‍্যাঙ্ক সর্বাধিক টোকেন গণনা (max_m) জুড়ে প্যারালাল করতে হবে, অন্যদিকে ডিসপ্যাচ রিসিভ এবং কম্বাইন সেন্ড কার্নেলগুলোকে প্রতিটি র‍্যাঙ্ক এবং স্থানীয় এক্সপার্ট থেকে সেই পরিমাণ টোকেন পরিচালনা করতে হবে, যা সর্বোচ্চ max_m * (num_experts // EP) * (EP // TP) হতে পারে।

ডিসপ্যাচ

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

সোর্স এবং ডেস্টিনেশন র্যাঙ্কের মধ্যে টোকেন ডিসপ্যাচ করা এবং তাদের আগমন সংকেত দেওয়া।

প্রেরক অংশে, প্রতিটি ব্লকে ৩২টি থ্রেডের একটি একক ওয়ার্প রাউটিং তথ্য পড়া এবং প্রতিটি গন্তব্য এক্সপার্ট এই র‍্যাঙ্ক থেকে গ্রহণ করবে বলে আশা করা টোকেনগুলির সংখ্যা গণনা করার জন্য দায়ী, nvshmem_signal_op ব্যবহার করে গণনা যোগ এক পাঠায়। গণনা এক দ্বারা বৃদ্ধি করা হয়, কারণ দূরবর্তী প্রান্তে শূন্য থেকে অ-শূন্য রূপান্তর একটি উৎস র‍্যাঙ্ক থেকে গণনার প্রাপ্তি নির্দেশ করে। সমান্তরালভাবে, অবশিষ্ট ওয়ার্পগুলো সমস্ত ব্লকে সমান্তরালভাবে সিমেট্রিক মেমরিতে টোকেন কপি করতে সহযোগিতা করে, অ্যাক্টিভেশন, স্কেলিং ফ্যাক্টর এবং স্থানীয় র‍্যাঙ্কে তাদের সূচককে একটি কন্টিগুয়াস চাঙ্কে প্যাক করে। ঠিকানা যেখানে টোকেন লেখা হবে তা নির্ধারণ করতে কম্বাইন সেন্ডারের জন্য সূচকটি প্রয়োজন। এর পরে, ওয়ার্প গ্রুপের একটি ব্যারিয়ারের মাধ্যমে সমস্ত ডেটা কপি করা হয়েছে তা নিশ্চিত করার পরে, ওয়ার্পগুলো আবারও স্বাধীনভাবে কাজ করে, প্রতিটি সমান্তরালভাবে একটি ভিন্ন এক্সপার্টে একই বাফার পাঠায়। টোকেনগুলো nvshmemx_putmem_signal_nbi_warp ব্যবহার করে পাঠানো হয়, যা রিমোট ডিভাইসে স্থানীয় র‍্যাঙ্ক থেকে পাঠানো টোকেনের সংখ্যাও পারমাণবিক (atomically) ভাবে বৃদ্ধি করে। একটি DP গ্রুপের মধ্যে, যেহেতু প্রতিটি র‍্যাঙ্ক পাঠানোর জন্য টোকেনের একটি প্রতিলিপি মালিকানাধীন, ডিসপ্যাচ সমানভাবে ভারসাম্যপূর্ণ হয়, প্রতিটি ডিভাইস টোকেনের একটি উপসেট পাঠায়।

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

কম্বাইন

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

প্রতিটি ডেটা-প্যারালেল র্যাঙ্কে টোকেনগুলোর মধ্যে এক্সপার্ট আউটপুট একত্র করা।

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

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

বেঞ্চমার্ক

আমরা ইনফিনিব্যান্ড এবং CX-7 নিকের মাধ্যমে সংযুক্ত ১৬টি নোড জুড়ে বিস্তৃত ১২৮টি জিপিইউ-এর একটি ক্লাস্টারে আমাদের কার্নেলগুলোর মূল্যায়ন করি। আমরা একটি সিপিইউ প্রক্সি সহ জিপিইউ-ডাইরেক্ট অ্যাসিন্ড (IBGDA) এবং রিলায়েবল কানেকশন (RC) উভয়ই চেষ্টা করি। আমরা অত্যন্ত অপ্টিমাইজ করা ডিপসিক ইমপ্লিমেন্টেশনের পাশাপাশি PyTorch (NCCL-এর মাধ্যমে) বা NVSHMEM দ্বারা প্রদত্ত ডেন্স প্রিমিটিভের সাথে সেগুলোর তুলনা করি।

মাল্টি-নোড EP128 কনফিগারেশনে প্রতি GPU-তে 128 টোকেনের জন্য কমিউনিকেশন লেটেন্সি।

যদিও ডেন্স NVSHMEM অল-to-all অপারেশনে, IBRC এবং IBGDA-এর কার্যক্ষমতা একই রকম (৬৩৭৮ µs বনাম ৬১৮০ µs), স্পার্স কার্নেলগুলির সাথে IBGDA উল্লেখযোগ্যভাবে দ্রুত। ডিসপ্যাচ এবং কম্বাইন যোগ করলে, IBGDA ৯০২ µs ব্যবহার করে যেখানে IBRC ৩২৩৩ µs সময় নেয় - লেটেন্সিতে ৩.৬x উন্নতি। অল-টু-অল ব্যান্ডউইথ বাউন্ড হলেও, স্পার্স কার্নেলগুলো কয়েক মাত্রার কম ডেটা ব্রডকাস্ট করে, যা লেটেন্সি দ্বারা বাউন্ড। জিপিইউ এবং এনআইসি সমন্বয় করার জন্য একটি সিপিইউ প্রক্সির প্রয়োজন ছাড়াই সরাসরি একটি জিপিইউ থেকে নেটওয়ার্ক স্থানান্তর ট্রিগার করার মাধ্যমে, এন্ড-টু-এন্ড লেটেন্সি উল্লেখযোগ্যভাবে হ্রাস পায়।

আমাদের পোর্টেবল কার্নেলগুলো অত্যন্ত অপ্টিমাইজড ডিপসিক কার্নেলের তুলনায় প্রায় ২x ধীরগতির হলেও, এগুলো ডেন্স কার্নেলের তুলনায় ১০x লেটেন্সি উন্নত করে (৯০২ µs বনাম ৯৯৪৪ µs)।

উপরন্তু, লাইব্রেরি প্রিমিটিভের বিপরীতে, সেন্ড-রিসিভ উপাদানে বিভক্ত করার ফলে কিছু লেটেন্সি লুকিয়ে রাখা সম্ভব হয়।

সিঙ্গেল-নোড EP8 কনফিগারেশনে প্রতি GPU-তে 128 টোকেনের জন্য কমিউনিকেশন লেটেন্সি।

একক-নোডে (EP8), NVSHMEM পরিবহনের জন্য NVLINK ব্যবহার করে, যা ইন্টার-নোড নেটওয়ার্কিংয়ের চেয়ে কম লেটেন্সি এবং উচ্চ থ্রুপুট প্রদান করে। আমাদের পোর্টেবল কার্নেলগুলো একক-নোডে DeepEP-এর চেয়ে প্রায় ২.৫x দ্রুত (১৮৬ µs বনাম ৪৮১ µs)।

আরও উন্নতিসমূহ

এখানে বর্ণিত কার্নেলগুলো ML ফ্রেমওয়ার্কের অন্তর্নির্মিত প্রিমিটিভগুলোর চেয়ে ভালো পারফর্ম করে এবং NVLink বা InfiniBand-এর মতো নির্দিষ্ট আন্তঃডিভাইস ট্রান্সপোর্টের জন্য অতিরিক্ত বিশেষায়িত না হয়ে মোটামুটি ভালো কর্মক্ষমতা দেয়। ইতিমধ্যে উল্লেখ করা সুযোগগুলোর পাশাপাশি, যোগাযোগ প্রিমিটিভগুলোকে আরও বিশেষায়িত সংস্করণ দিয়ে প্রতিস্থাপন করলে আরও কর্মক্ষমতা বৃদ্ধি সম্ভব। উদাহরণস্বরূপ, NVLink জুড়ে symmetric memory ব্যবহারের বদলে ডিভাইসগুলোর মধ্যে শেয়ার করা buffers ব্যবহার করা যেতে পারে, এতে কিছু কপি বাদ যাবে এবং আরও সূক্ষ্ম-স্তরের synchronization scheme সম্ভব হবে — token batches-এর বদলে পৃথক token-এর ওপর। InfiniBand জুড়ে, একটি implementation অন্তর্নিহিত queue pairs-এ সরাসরি access করতে পারে, ফলে expected এবং sent token count—দুটিই transfer করার প্রয়োজন থাকবে না এবং token-গুলো queue থেকে output buffer-এ পৌঁছানো মাত্র সেগুলো flush করা যাবে। তবে, এ ধরনের implementation-এর মূল্য হলো portability; অন্যদিকে আমাদের implementation নির্দিষ্ট configuration-সহ clusters-কে মূল্যায়ন করতে দেয়, এরপর নির্দিষ্ট hardware-এর জন্য optimize করতে development effort commit করার আগে।

উপসংহার

আমরা MoE যোগাযোগের জন্য একটি উচ্চ-কার্যক্ষমতাসম্পন্ন, পোর্টেবল লাইব্রেরি উপস্থাপন করেছি যা বিভিন্ন হার্ডওয়্যার কনফিগারেশন জুড়ে সামঞ্জস্য বজায় রেখে স্ট্যান্ডার্ড অল-টু-অল যোগাযোগের তুলনায় ১০x দ্রুত কার্যক্ষমতা অর্জন করে। NVLink সহ একক-নোড ডিপ্লয়মেন্টে, আমাদের সমাধান পূর্ববর্তী ইমপ্লিমেন্টেশনের তুলনায় ২.৫x কম লেটেন্সি প্রদর্শন করে।

আমাদের পদ্ধতিটি জিপিইউ-সূচিত যোগাযোগ সমর্থন, কম্পিউটেশন-কমিউনিকেশন ওভারল্যাপ সক্ষম করে এমন একটি স্প্লিট কার্নেল আর্কিটেকচার এবং ন্যূনতম NVSHMEM প্রিমিটিভ ব্যবহার করে দক্ষ টোকেন ডিসপ্যাচ সহ মূল উদ্ভাবনের মাধ্যমে পোর্টেবিলিটির সাথে কার্যক্ষমতার ভারসাম্য বজায় রাখে। মাল্টি-নোড সেটআপে অত্যন্ত বিশেষায়িত ইমপ্লিমেন্টেশনের তুলনায় প্রায় ২x ধীর গতির হলেও, আমাদের লাইব্রেরি বিভিন্ন নেটওয়ার্ক পরিবেশ (NVLink, CX-7 এবং EFA) জুড়ে উচ্চতর নমনীয়তা প্রদান করে।

MoE মডেলগুলি স্কেল করা অব্যাহত থাকায়, আমাদের মতো দক্ষ যোগাযোগের কৌশলগুলি ব্যবহারিক ডিপ্লয়মেন্টের জন্য ক্রমবর্ধমানভাবে গুরুত্বপূর্ণ হয়ে উঠবে। আমাদের সম্পূর্ণ ওপেন-সোর্স ইমপ্লিমেন্টেশন https://github.com/ppl-ai/pplx-kernels-এ উপলব্ধ।

তথ্যসূত্র

DeepEP

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

NVIDIA NVSHMEM

উদ্ধৃতি

BibTeX
@online{perplexity2025EfficientAndPortableMixtureOfExpertsCommunication,
  author = {{Perplexity} and Nandor Licker and Lequn Chen and Phi Hoang},
  title = {{Efficient and portable mixture-of-experts communication}},
  date = {2025-04-02},
  url = {https://www.perplexity.ai/hub/blog/efficient-and-portable-mixture-of-experts-communication}
}