திறமையான மற்றும் போர்ட்டபிள் மிக்சர்-ஆஃப்-எக்ஸ்பர்ட்ஸ் தகவல்தொடர்பு

பெரிய அளவிலான AI மாடல்களில் GPU இணைத்திறனை மேம்படுத்துவது மற்றும் தாமதத்தைக் குறைப்பதில் கவனம் செலுத்தும், போர்ட்டபிள் மிக்சர்-ஆஃப்-எக்ஸ்பர்ட்ஸ் (MoE) தகவல்தொடர்பு பற்றிய ஒரு கண்ணோட்டம்

ஆசிரியர்கள்Perplexity Research

நிலையான All-to-All தகவல்தொடர்பு ப்ரிமிடிவ்களுடன் ஒப்பிடும்போது 10 மடங்கு வேகமான செயல்திறனை அடையக்கூடிய, மிக்சர்-ஆஃப்-எக்ஸ்பர்ட்ஸ் (MoE) தகவல்தொடர்புக்கான உயர் செயல்திறன் கொண்ட, போர்ட்டபிள், ஓபன் சோர்ஸ் நூலகத்தை நாங்கள் வழங்குகிறோம்.

எங்களது செயல்படுத்துதல் உயர்ந்த MoE தகவல்தொடர்பு திறனை வழங்கும் பல முக்கிய தொழில்நுட்ப புதுமைகளைக் கொண்டுள்ளது:

GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்பு (IBGDA): நேரடி GPU-to-NIC தகவல்தொடர்பை ஆதரிக்கிறது, CPU ஈடுபாட்டைத் தவிர்ப்பதன் மூலம் தாமதத்தை கணிசமாகக் குறைக்கிறது

தகவல்தொடர்பு மற்றும் கணக்கீடு ஒன்றுடன் ஒன்று இணைதல்: தனித்த அனுப்பும் மற்றும் பெறும் நிலைகளைக் கொண்ட பிளவு கர்னல் கட்டமைப்பு, நெட்வொர்க் பரிமாற்றங்களுடன் ஒரே நேரத்தில் கணக்கீடு தொடர உதவுகிறது

வேகமான ஒற்றை-முனை செயல்திறன்: ஒற்றை-முனை உள்ளமைவுகளில் முன்னர் வேகமாக இருந்த செயல்படுத்துதலை விட 2.5 மடங்கு குறைந்த தாமதம்

திறமையான மற்றும் போர்ட்டபிள் பல-முனை செயல்திறன்: நிலையான all-to-all தகவல்தொடர்பை விட எங்களது செயல்படுத்துதல் 10 மடங்கு வரை வேகமான வேகத்தை அடைகிறது. மிகவும் சிறப்பு வாய்ந்த செயல்படுத்துதல்களை விட தோராயமாக 2 மடங்கு மெதுவாக இருந்தாலும், எங்கள் அணுகுமுறை NVSHMEM பதிப்புகள் மற்றும் நெட்வொர்க் சூழல்களில் (NVLink, CX-7 மற்றும் EFA) சிறந்த போர்ட்டபிளிட்டியை வழங்குகிறது

இந்த நூலகம் முழுமையாக ஓபன் சோர்ஸ் ஆகும் மற்றும் https://github.com/ppl-ai/pplx-kernels இல் கிடைக்கிறது.

இந்தக் கட்டுரையில், பெரிய அளவிலான MoE மாடல்களில் எக்ஸ்பர்ட் இணைத்திறனின் சவால்களை நாங்கள் ஆராய்ந்து, விநியோகிக்கப்பட்ட GPU சூழல்களில் திறமையான டோக்கன் டிஸ்பாட்ச் மற்றும் கலவைக்கான எங்கள் அணுகுமுறையை விவரிக்கிறோம்.

அறிமுகம்

DeepSeek R1 மற்றும் Mixtral 8x7B போன்ற மிக்சர்-ஆஃப்-எக்ஸ்பர்ட்ஸ் (MoE) மாடல்கள், ஒவ்வொரு டோக்கனுக்கும் செயல்படுத்தப்படும் எடைகளின் எண்ணிக்கையைக் கட்டுப்படுத்துவதன் மூலம் அடர்த்தியான மாடல்களை மேம்படுத்துகின்றன. ஒவ்வொரு டீகோடர் லேயரிலும் மல்டி-லேயர் பெர்செப்ட்ரானின் (MLP) லேயர்களின் எண்ணிக்கையை அதிகரிப்பதன் மூலமோ அல்லது லீனியர் லேயர்களின் அளவை அதிகரிப்பதன் மூலமோ அதிக பாராமீட்டர் எண்ணிக்கையை அடைவதற்குப் பதிலாக, MoE மாடல்கள் பாரம்பரிய MLP-ஐ பல எக்ஸ்பர்ட்களுடன் மற்றும் ஒரு ரூட்டரைக் கொண்டு மாற்றுகின்றன. உதாரணமாக, DeepSeek R1 இன் 671B பாராமீட்டர்களில், ஊகத்தின் போது கொடுக்கப்பட்ட டோக்கனுடன் 37B மட்டுமே பெருக்கப்படுகிறது. இது ஒரு டோக்கனை டீகோட் செய்யத் தேவையான கணக்கீட்டின் அளவைக் வெகுவாகக் குறைக்கிறது மற்றும் அடர்த்தியான மாடலுடன் ஒப்பிடும்போது தாமதத்தை மேம்படுத்துகிறது.

அடர்த்தியான மாடல்களுடன் ஒப்பிடும்போது MoE மாடல்கள் ஊகத்திற்கு சில கூடுதல் சவால்களை வழங்குகின்றன. எக்ஸ்பர்ட்களே சிறிய MLP லேயர்களாக இருக்கும் அதேவேளையில், ஒவ்வொரு டீகோடர் லேயரிலும் ஒரு டோக்கன் எந்த எக்ஸ்பர்ட்களுக்கு அனுப்பப்படுகிறது என்பதைத் தீர்மானிக்கும் ஒரு ரூட்டர் அடங்கும், ஒவ்வொரு டோக்கனும் பல எக்ஸ்பர்ட்களுக்கு அனுப்பப்படும். ரூட்டர் என்பது பொதுவாக நிகழ்தகவு விநியோகத்தை உருவாக்கும் ஒரு சிறிய லீனியர் லேயர் ஆகும். வழக்கமாக டாப்-K மதிப்புகளைக் கொண்ட எக்ஸ்பர்ட்கள் தேர்ந்தெடுக்கப்பட்டு, ரூட்டரின் நிகழ்தகவு விநியோகத்திலிருந்து பெறப்பட்ட எடையால் பெருக்கப்பட்ட எக்ஸ்பர்ட் வெளியீடுகளைக் கூட்டி, இறுதி ஆக்டிவேஷன் எடையிடப்பட்ட சராசரியாகக் கணக்கிடப்படுகிறது.

விநியோகிக்கப்பட்ட MoE அமைப்புகளில் தாமதத்தைக் குறைக்க, பல சாதனங்களில் இணைத்திறனைப் பயன்படுத்திக் கொள்ளலாம், ஆனால் இது தகவல்தொடர்பு சவால்களை அறிமுகப்படுத்துகிறது. Mixtral 8x7B அல்லது Llama-70B போன்ற மாடல்கள் ஒரு முனையில் உள்ள 8 சாதனங்களுக்குள் பொருந்துகின்றன, வேகமான மற்றும் குறைந்த தாமதம் கொண்ட NVLink இணைப்புகளிலிருந்து (900Gbps வரை) பயனடைகின்றன. இருப்பினும், பெரிய மாடல்களுக்கு InfiniBand (400Gbps உச்சம்) ஐப் பயன்படுத்தி பல முனைகளில் எக்ஸ்பர்ட்களை ஷார்டிங் செய்ய வேண்டும், இது கூடுதல் தாமத சவால்களை அறிமுகப்படுத்துகிறது.

மிக்சர்-ஆஃப்-எக்ஸ்பர்ட்ஸ் அடுக்கில் டோக்கன் வழித்தடம், நிபுணர் கணக்கீடு, மற்றும் வெளியீட்டு சேகரிப்பு.

இந்தக் கட்டுரையில், எக்ஸ்பர்ட் இணைத்திறன் சிக்கலை நாங்கள் ஆராய்வோம், ஒதுக்கப்பட்ட எக்ஸ்பர்ட்களைக் கொண்டுள்ள சாதனங்களுக்கு டோக்கன்களைத் திறம்பட அனுப்பும் மற்றும் எக்ஸ்பர்ட் வெளியீடுகளின் எடையிடப்பட்ட தொகையைக் கணக்கிடுவதன் மூலம் அவற்றை மீண்டும் சேகரிக்கும் GPU கர்னல்களின் எங்கள் செயலாக்கத்தை விவரிக்கிறோம். குறிப்பிட்ட நெட்வொர்க் ஹார்டுவேரை இலக்காகக் கொண்ட ஆக்ரோஷமாக உகந்ததாக மாற்றப்பட்ட செயலாக்கங்கள் esist செய்யும் அதே வேளையில், NVSHMEM ப்ரிமிடிவ்களின் குறைந்தபட்ச தொகுப்பை நம்பியிருக்கும் ஆனால் நிலையான all-to-all தகவல்தொடர்பை விட 10 மடங்கு வேகமான செயல்திறனை வழங்கும் மிகவும் போர்ட்டபிள் செயலாக்கத்தை நாங்கள் முன்வைக்கிறோம். எங்களது செயலாக்கம் பல்வேறு நெட்வொர்க் சூழல்களில் சிறந்த போர்ட்டபிளிட்டியைப் பராமரிக்கும் அதே வேளையில் ஒற்றை-முனை உள்ளமைவுகளில் அதிநவீன செயல்திறனை அடைகிறது.

ஷார்டிங் மற்றும் இணைத்திறன்

திறமையான ஊகத்திற்கு, ஒரு மாடலின் எடைகள் சாதன நினைவகத்தில் வைக்கப்பட வேண்டும், அதே நேரத்தில் மாடல் வழியாக ஃபார்வர்ட் பாஸுக்குத் தேவையான ஆக்டிவேஷன்கள், KV காசுகள் மற்றும் பிற பஃபர்களுக்குப் போதுமான ஸ்பேஸ் விடப்பட வேண்டும். மிகவும் திறன் வாய்ந்த மாடல்கள் மிகவும் திறன் வாய்ந்த GPU-களின் திறனைக் கூட மீறுகின்றன, எனவே மாடலின் எடைகளை கூட்டாகச் சேமிக்கக்கூடிய பல சாதனங்களில் ஊகம் பரப்பப்பட வேண்டும். எடைகளின் ஷார்டிங் திட்டங்களின் அடிப்படையில், கணக்கீட்டை ஆஃப்லோட் செய்யவும் சாதனங்களை ஒத்திசைக்கவும் வெவ்வேறு தகவல்தொடர்பு மற்றும் கணக்கீட்டுத் திட்டங்கள் பயன்படுத்தப்பட வேண்டும்.

இரண்டு GPUகளில் நிபுணர் இணைமையாக்கம்.

முதல் படத்தில் விளக்கப்பட்டுள்ள எக்ஸ்பர்ட் இணைத்திறன் (EP), எக்ஸ்பர்ட் கணக்கீட்டை மட்டுமே இணைப்படுத்துகிறது. வெவ்வேறு எக்ஸ்பர்ட்கள் வெவ்வேறு சாதனங்களுக்கு ஒதுக்கப்படுகின்றன, அவை அவற்றின் எடைகளைக் கொண்டுள்ளன. ரூட்டிங் செய்த பிறகு, டோக்கன்கள் தொடர்புடைய சாதனத்திற்கு அனுப்பப்படுகின்றன, முடிவுகள் பின்னர் சேகரிக்கப்பட்டு குவிக்கப்படுகின்றன. மாடலின் மற்ற பாகங்களில் உள்ள இணைத்திறனின் அளவைப் பொறுத்து ரூட்டிங்கின் சிக்கலானது அமையும்: பிற லேயர்களைப் பிரதிபலிப்பது ரூட்டிங் தேவையை முற்றிலுமாக நீக்கலாம், ஏனெனில் ஒவ்வொரு ரேங்க்கும் உள்ளூர் பிரதிபலிப்பு ரூட்டிங் அட்டவணையிலிருந்து டோக்கன்களைத் தேர்ந்தெடுக்கலாம். இருப்பினும், ஒரு ரேங்க் மட்டுமே ரூட்டிங்கை இயக்கினால், டோக்கன்கள், குறியீடுகள் மற்றும் எடைகளை அந்தந்த எக்ஸ்பர்ட்களுக்கு அனுப்ப ஒரு பிராட்காஸ்ட் தேவைப்படுகிறது. இறுதியாக, ஒரு all-gather அல்லது all-to-all பிராட்காஸ்ட் வெளியீட்டு டோக்கன்களை மாடலின் செயலாக்கத்தைத் தொடரும் எந்த ரேங்க்களுடனும் ஒத்திசைக்கிறது. எக்ஸ்பர்ட்களிடமிருந்து டோக்கன்களைச் சேகரிக்கும் கேதர் செயல்பாட்டுடன் குவிப்பை இணைப்பதன் மூலம் சில நன்மைகளைப் பெறலாம் என்றாலும், டார்ச் ஏற்கனவே தேவையான ப்ரிமிடிவ்களை வெளிப்படுத்துவதால் அத்தகைய செயலாக்கம் ஒப்பீட்டளவில் எளிமையானது.

இரண்டு GPUகளில் நிபுணர் இணைமையாக்கத்தையும் டென்சர் இணைமையாக்கத்தையும் இணைத்தல்.

அட்டென்ஷன், நார்ம் மற்றும் சாம்பிளிங் போன்ற எக்ஸ்பர்ட் அல்லாத லேயர்களை மாடல் இயக்கும்போது கிளஸ்டரில் உள்ள முனைகள் செயலற்ற நிலையில் இருக்கலாம் என்பதால், எக்ஸ்பர்ட்-மட்டும் இணைத்திறன் சிறந்த முறையில் அளவிடப்படாது. இருப்பினும், இந்த லேயர்களின் கணக்கீடு, முதன்மையாக அட்டென்ஷன், டென்சார் இணைத்திறன் (TP) மூலமாகவும் பயனடையலாம். பெரும்பாலான மாடல்கள் மல்டி-ஹெட் அட்டென்ஷனை நம்பியுள்ளன, அதாவது அட்டென்ஷன் ஹெட்கள் மற்றும் அவற்றுடன் தொடர்புடைய Q, K மற்றும் V ப்ரொஜெக்ஷன்களையும் சாதனங்கள் முழுவதும் ஷார்டிங் செய்யலாம், பல்வேறு லேயர்களுக்கு இடையில் ஸ்லைஸ்களைப் பிரதிபலிக்கலாம் அல்லது சேகரிக்கலாம். அட்டென்ஷன் அனைத்து சாதனங்களிலும் பரவினால், ஒரு all-gather ஆக்டிவேஷன்களை ஒத்திசைக்க முடியும், இது திறமையான செயலாக்கத்திற்கு எக்ஸ்பர்ட் இணைத்திறன் வழக்கைப் போன்ற ஒத்திசைவு ப்ரிமிடிவ்கள் தேவைப்படும் ரூட்டிங் பிரதிபலிக்க அனுமதிக்கிறது. இருப்பினும், இந்த மட்டத்தில் இணைத்திறனுக்கு வரம்புகள் உள்ளன, ஏனெனில் அட்டென்ஷன் ஹெட்களின் எண்ணிக்கையைக் குறிப்பிட்ட வரம்பிற்குக் கீழே குறைப்பது குறையும் பலன்களைத் தரும்.

இரண்டு GPUகளில் தனித் தனி கோரிக்கைகளுக்காக நிபுணர் இணைமையாக்கத்தையும் தரவு இணைமையாக்கத்தையும் இணைத்தல்.

அனைத்து சாதனங்களையும் சிறந்த முறையில் பயன்படுத்த மற்றும் 128 அல்லது 256 GPUகள் வரை மிக உயர்ந்த அளவிலான எக்ஸ்பர்ட் இணைத்திறனை ஆதரிக்க, டேட்டா இணைத்திறன் (DP) தேவைப்படுகிறது. இந்தத் திட்டத்தின் கீழ், ஒரு மாடல் பிரிக்கப்பட்டுள்ள சாதனங்கள் கோரிக்கைகளை ஒரே நேரத்தில் கையாள குழுவாக்கப்படுகின்றன, அட்டென்ஷனைக் கணக்கிடுகின்றன மற்றும் அவற்றின் உள்ளூர் குழுவில் ஷார்டிங் செய்யப்பட்ட KV காசுகளைப் பராமரிக்கின்றன. இந்த இணைக் குழுக்களின் பல நிகழ்வுகள் எக்ஸ்பர்ட் மதிப்பீட்டில் ஒத்துழைக்கின்றன, ஒவ்வொன்றும் எக்ஸ்பர்ட் எடைகளின் வெவ்வேறு துணைக்குழுவை ஹோஸ்ட் செய்கின்றன. அட்டென்ஷன் ஹெட்களின் எண்ணிக்கையின் அடிப்படையில், நோட்-க்கு-நோட் தகவல்தொடர்பு வேகமானது என்பதால், ஒரு குழு பொதுவாக முழு முனையின் அளவு வரை பரவலாம். உதாரணமாக, மேலே உள்ள படத்தில், ஒரு DP ரேங்க் சுயாதீனமாக இரண்டு கோரிக்கைகள், A மற்றும் B ஆகியவற்றுக்குச் சேவை செய்கிறது, கோரிக்கைகளுக்கான அட்டென்ஷன், நார்ம் மற்றும் பிற புக்மேக்கிங்கைக் கையாளுகிறது. மற்ற DP ரேங்க் ஒரு தனித்துவமான கோரிக்கை C ஐ செயலாக்குகிறது. இருப்பினும், முதல் முனை எக்ஸ்பர்ட்களில் பாதியை ஹோஸ்ட் செய்கிறது, மற்ற முனை மற்ற பாதியை ஹோஸ்ட் செய்கிறது, இதனால் A மற்றும் B இலிருந்து ரூட்டிங் டோக்கன்களுக்குப் பிறகு இரண்டாவது முனைக்கு அனுப்பப்படலாம் மற்றும் அதற்கு நேர்மாறாகவும் அனுப்பப்படலாம். இது ஒரு ஸ்பார்ஸ் தகவல்தொடர்பு சிக்கலுக்கு வழிவகுக்கிறது: ஒவ்வொரு சாதனமும் வேறுபட்ட எண்ணிக்கையிலான டோக்கன்களை வேறு எந்த இலக்கு ரேங்க்கிற்கும் அனுப்பலாம். டார்ச்சில் இருந்து ஏற்கனவே உள்ள ப்ரிமிடிவ்கள், முதன்மையாக all_to_all, குறிப்பாகப் பொருத்தமானவை அல்ல, ஏனெனில் அவற்றுக்கு சில வகையான பேடிங் அல்லது GPU-to-CPU ஒத்திசைவு மற்றும் மெட்டாடேட்டா பிராட்காஸ்ட் தேவைப்படலாம். தகவல்தொடர்பை திறம்பட செயல்படுத்த, ரூட்டிங் தகவலைச் செயலாக்க மற்றும் CPU தலையீடு இல்லாமல் சாதனங்களிலிருந்து தகவல்தொடர்பைத் தொடங்க தனிப்பயன் கர்னல்கள் தேவைப்படுகின்றன. ரூட்டிங்கிற்குப் பிறகு, ஒரு டிஸ்பாட்ச் கர்னல் டோக்கன்களை அவை ரூட் செய்யப்பட்ட ரேங்க்களுக்கு அனுப்ப வேண்டும், அதே நேரத்தில் கம்பைன் பக்கத்தில் தற்போதைய DP குழுவில் உள்ள கோரிக்கைகளுக்குச் சொந்தமான ஆக்டிவேஷன்கள் சேகரிக்கப்பட வேண்டும். கூடுதலாக, ப்ராட்காஸ்டைக் குறைக்க மற்றும் அடுத்தடுத்த லேயர்களுக்காக அனைத்து ரேங்க்களிலும் டோக்கன்களைச் சரியாகப் பிரதிபலிக்க, பல சாதனங்களைக் கொண்டிருக்கக்கூடிய ஒரு DP குழுவிற்குள் வேலை சமநிலைப்படுத்தப்பட வேண்டும்.

NVSHMEM

NVSHMEM என்பது ஒரு NVIDIA-குறிப்பிட்ட OpenSHMEM செயலாக்கமாகும், இது அடிப்படை ஹார்டுவேரின் சிக்கலான தன்மையை சுருக்கமாகக் கூறும் போர்ட்டபிள் சாதனங்களுக்கு இடையேயான தகவல்தொடர்பு வசதிகளை வழங்குகிறது. API ஆனது சாதனத்திலிருந்து-சாதனம் படித்தல் மற்றும் எழுதுதலை வெளிப்படுத்தலாம், அவை தனிப்பட்ட டிரான்ஸ்போர்ட் லேயர்களின் ப்ரிமிடிவ்களுடன் மேப் செய்யப்படுகின்றன. NVLink மற்றும் RDMA இரண்டும் ஆதரிக்கப்படுகின்றன, இது ஒரு குறிப்பிட்ட அளவிலான போர்ட்டபிளிட்டியை அளிக்கிறது மற்றும் NVSHMEM கர்னல்கள் ஒரு முனைக்குள் அல்லது பல முனைகளின் கிளஸ்டர் முழுவதும் செயல்பட அனுமதிக்கிறது. எங்கள் கர்னல்களில், தரவை மாற்றவும் பங்கேற்கும் சாதனங்களை ஒத்திசைக்கவும் ரிமோட் மெமரி எழுதுதல் மற்றும் சிக்னலிங் செயல்பாடுகளைப் பயன்படுத்துகிறோம்.

NVSHMEM செயல்பாடுகள் சிமெட்ரிக் மெமரி என்ற கருத்தைச் சுற்றியே கட்டமைக்கப்பட்டுள்ளன: அவை சாதனங்களுக்கு இடையேயான தகவல்தொடர்புகளில் பங்கேற்கும் அனைத்து சாதனங்களிலும் ஒதுக்கப்பட்டுள்ள பஃபர்களில் செயல்படுகின்றன. உள்ளூர் சாதனம் ஒரு செயல்பாட்டின் இலக்கைக் குறிப்பிட இலக்கு ரேங்க்கின் குறியீட்டுடன் சேர்த்து அதன் சொந்த உள்ளூர் பஃபருக்குள்ளேயே பெறப்பட்ட முகவரியைப் பயன்படுத்தலாம். கீழே உள்ள படம் இந்த கருத்தை விளக்குகிறது: இரண்டு GPUகளும் ஒரே அளவிலான சிமெட்ரிக் பஃபர்களை ஒதுக்கின்றன, அவற்றுக்கான src பாயிண்டர்களைத் தக்கவைத்துக்கொள்கின்றன. முதல் ரேங்க் இரண்டாவது ரேங்க்கிற்கு 3 முழு எண்களை அனுப்ப விரும்புகிறது, அவற்றை பஃபரின் தொடக்கத்தில் வைக்கிறது: nvshmem_int_put_nbi இலக்கு சாதனத்தைக் குறிப்பிடுவதன் மூலம் உள்ளூர் பஃபரிலிருந்து தொடக்க முகவரியைப் பெறுகிறது. இரண்டாவது ரேங்க் தனது சொந்த பஃபரிலிருந்து ஒரு ஆஃப்செட்டைப் பெறுகிறது, முதல் சாதனத்திற்கு ஒரு உறுப்பை அனுப்புகிறது, ஒன்றை ஆஃப்செட் செய்கிறது. இலக்கு முகவரிகள் எப்போதும் nvshmem_alloc ஐப் பயன்படுத்தி ஒதுக்கப்பட்ட சிமெட்ரிக் பஃபர்களாக இருக்க வேண்டும் என்றாலும், மூல பஃபர்கள் சாதன நினைவகத்தின் தன்னிச்சையான பகுதிகளாக இருக்கலாம், அவை NVSHMEM உடன் முன்கே பதிவு செய்யப்பட்டுள்ளன.

NVSHMEM பரந்த அளவிலான ப்ரிமிடிவ்களை வழங்கும் அதே வேளையில், எங்கள் கர்னல்கள் 3 செயல்பாடுகளை மட்டுமே நம்பியுள்ளன, அவற்றுடன் அனைத்து ஒத்திசைவு மற்றும் ஃபென்சிங்கையும் கட்டமைக்கின்றன.

NVSHMEM பயன்படுத்தி இரண்டு GPUக்களுக்கிடையே சமச்சீர் நினைவகமும் தொலை எழுதுதல்களும்.

nvshmemx_putmem_signal_nbi_warp: ஒரு சாதனத்திலிருந்து மற்றொரு சாதனத்திற்கு தரவுத் தொகுப்பை மாற்றுகிறது, அதே நேரத்தில் ரிமோட் சாதனத்தில் ஒரு கொடியையும் அமைக்கிறது. இந்தச் செயல்பாடு 64-பிட் இருப்பிடத்தை ஒன்று அமைக்க (NVSHMEM_SIGNAL_SET) அல்லது அதிகரிக்க (NVSHMEM_SIGNAL_ADD) செய்கிறது. முழு நினைவகத் தொகுப்பும் மாற்றப்பட்ட பிறகு கொடி புதுப்பிக்கப்படுகிறது. ரிமோட் சாதனம் கொடியில் மாற்றத்தைக் கவனித்தால், அது தனது சொந்த நினைவகத்தில் உள்ள பஃபரைப் பாதுகாப்பாக அணுகலாம். இந்தச் செயல்பாடு தரவுப் பரிமாற்றம் மற்றும் ஒத்திசைவை ஒருங்கிணைக்கப் பயனுள்ளதாக இருக்கும்.

nvshmemx_signal_op ஆனது ஒற்றை நினைவக இருப்பிடத்தில் செயல்படுகிறது, பொதுவாக 64-பிட் கொடி, அதை அணுவில் (atomically) அமைக்கிறது அல்லது அதிகரிக்கிறது. மெட்டாடேட்டாவை அனுப்புவதற்கும் சாதனங்களை ஒத்திசைப்பதற்கும் இது பயனுள்ளதாக இருக்கும்.

nvshmem_uint64_wait_until என்பது ஒரு சிக்னலைப் பெறும் இறுதியில், ரிமோட் அதைப் புதுப்பிக்கும் வரை ஒரு கொடியைப் போல செய்யப் பயன்படுகிறது.

nvshmem_quiet அல்லது nvshmem_fence மூலம் செயல்பாடுகளுக்கு இடையில் எந்தவொரு வரிசைப்படுத்தலையும் உறுதி செய்வது செலவாகும், எனவே கர்னல்களின் எங்கள் செயலாக்கம் வேறு எந்த NVSHMEM ப்ரிமிடிவ்களின் பயன்பாட்டைத் தவிர்க்கிறது மற்றும் தனிப்பட்ட send-receive ஜோடிகளைத் தவிர வேறு எந்தச் சார்புகளையும் குறைக்கிறது. தரவை அனுப்பும்போது, உள்ளூர் ரேங்க்கிலிருந்து தரவு அனுப்பப்படுவதற்காகக் காத்திருக்காமல், எப்போதும் செயல்பாடுகளின் தடுப்பு-அல்லாத (non-blocking) பதிப்பைப் பயன்படுத்துகிறோம். கர்னல்களின் குழு முழுவதும் மற்ற மறைமுக ஒத்திசைவு, NIC-களுக்கு அவற்றுக்கான அணுகல் தேவைப்படும்போது இந்தப் பஃபர்கள் அழிவுகரமாக மேலெழுதப்படுவதில்லை என்பதை உறுதி செய்கிறது.

NVSHMEM ஆனது GPUDirect RDMA ஐப் பயன்படுத்துகிறது, இதனால் CPUகளை ஈடுபடுத்தாமல் தரவுப் பரிமாற்றத்திற்காக NIC நேரடியாக GPU நினைவகத்தைப் படித்து எழுத முடியும். மேலும், ConnectX NIC-களில், NVSHEMEM ஆனது GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்பை ஆதரிக்கிறது (Infiniband GPUDirect Async அல்லது IBGDA என்றும் அழைக்கப்படுகிறது), இது GPU ஆனது RDMA செயல்பாடுகளை நேரடியாக NIC-ல் இடுகையிடவும், NIC இன் நிறைவு வரிசையை நேரடியாகப் போல செய்யவும் அனுமதிக்கிறது. GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்புகளை ஆதரிக்காத தளங்களில், GPU சார்பாக தகவல்தொடர்பைத் தொடங்க மற்றும் நிறைவைப் போல செய்ய ஹோஸ்ட் CPU-ல் NVSHMEM ஒரு “ப்ராக்ஸி” த்ரெட்டை உருவாக்குகிறது. GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்பு ஆதரிக்கப்பட்டாலும் இல்லாவிட்டாலும் NVSHMEM நிரல் போர்ட்டபிள் ஆகும். இருப்பினும், GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்பு தாமதத்தை கணிசமாகக் குறைக்கிறது, ஏனெனில் இது CPU-க்கான சுற்றுவழியை முழுமையாகத் தவிர்க்கிறது.

போர்ட்டபிள் கர்னல்கள்

டிஸ்பாட்ச் மற்றும் கம்பைன் கர்னல்களின் ஜோடி மூலம் MoE தகவல்தொடர்பை நாங்கள் செயல்படுத்துகிறோம். டிஸ்பாட்ச் கர்னல்கள் ஒவ்வொரு ரேங்க்கிலும் டோக்கன்கள் மற்றும் ரூட்டிங் தகவல்களைப் படிப்பதற்கும், பொருத்தமான எக்ஸ்பர்ட்களுக்கு அவற்றை அனுப்புவதற்கும் பொறுப்பாகும். கம்பைன் கர்னல்கள் எக்ஸ்பர்ட்களால் உருவாக்கப்பட்ட ஆக்டிவேஷன்களைச் சேகரித்து அவற்றை அவற்றின் மூல ரேங்க்களுக்குத் திருப்பி அனுப்புகின்றன, அதே நேரத்தில் ரூட்டரால் கணக்கிடப்பட்ட எடைகளின் அடிப்படையில் தேர்ந்தெடுக்கப்பட்ட எக்ஸ்பர்ட்களிலிருந்து எடையிடப்பட்ட சராவரியைக் கணக்கிடுகின்றன. தரவுப் பரிமாற்றங்கள் கணக்கீட்டுடன் ஒன்றுடன் ஒன்று இணைக்க அனுமதிக்க, கர்னல்கள் மேலும் ஒரு send மற்றும் receive கூறாகப் பிரிக்கப்படுகின்றன. அனுப்பு கர்னல்கள் அனைத்தும் தடுப்பு-அல்லாதவை (non-blocking) மற்றும் ஒத்திசைவு-அல்லாதவை (non-synchronizing): அவை ரிமோட்டுகளுக்கு அனைத்து எழுதுதல்களையும் அனுப்புகின்றன. மறுபுறம், கம்பைன் கர்னல்கள் நினைவகத்திலிருந்து மட்டுமே படிக்கின்றன, தேவையான அனைத்து தரவும் மாற்றப்படும் வரை காத்திருக்கின்றன. NIC-களுக்கு வேலையை அனுப்பிய பிறகு, தரவு வயர் வழியாக ஒத்திசைவற்ற முறையில் மாற்றப்படும்போது, பகிர்ந்தளிக்கப்பட்ட எக்ஸ்பர்ட்களைப் பயன்படுத்துவது அல்லது அட்டென்ஷனைக் கணக்கிடுவது போன்ற பிற பயனுள்ள lokal வேலையை GPU-கள் locally செய்ய முடியும்.

ஒவ்வொரு கர்னல் ஜோடியும் அதன் சொந்த சிமெட்ரிக் மெமரி பஃபர்களைக் கொண்டுள்ளது, ஒவ்வொரு ரேங்க்கும் மற்ற அனைத்து ரேங்க்களிலிருந்தும் தரவைப் பெற தனிப்பட்ட சேமிப்பிடத்தை ஒதுக்க வேண்டும். ஒரு DP குழுவிலிருந்து அனுப்பப்படக்கூடிய டோக்கன்களின் அதிகபட்ச எண்ணிக்கை ரேங்க்கள் முழுவதும் நிலையானது, இது ஒவ்வொரு ரேங்க்கும் ஒவ்வொரு DP ரேங்க்கிலிருந்தும் ஒவ்வொரு உள்ளூர் எக்ஸ்பர்டுக்கும் பெறக்கூடிய மேல் வரம்பையும் அமைக்கிறது. அனுப்புநர் ரேங்குகள் அவற்றுக்கிடையே எந்த ஒத்திசைவும் தேவையில்லாமல், எழுத இலக்கு ரேங்க்கில் ஒரு தனித்துவமான முகவரியைப் பெற இது அனுமதிக்கிறது. தரவு பெறப்பட்ட பிறகு, பெறும் கர்னல்களுக்குத் தேவையான உகந்த வடிவத்தில் நினைவகத்தில் அவற்றை வைக்க கர்னல்கள் டோக்கன்களைச் சுற்றி மாற்றுகின்றன. பஃபர்கள் குறிப்பிடத்தக்க பரிமாணத்தைக் கொண்டிருந்தாலும், அவை மாடலின் அனைத்து தொடர்ச்சியான லேயர்களிலும் மீண்டும் பயன்படுத்தப்படுகின்றன.

அனுப்புதல் மற்றும் இணைத்தல் செயல்பாடுகளுக்கான தனித்தனி send மற்றும் receive kernels.

மேலே உள்ள படத்தில் விளக்கப்பட்டுள்ளபடி, உலகளாவிய ஒத்திசைவின் ஒரே வடிவம் கம்பைன்-ரிசீவ் கர்னலில் செயல்படுத்தப்படுகிறது. அனுப்புதலிருந்து தரவு அனுப்பப்பட்டதும், ஒரு ரேங்க் மற்ற ரேங்க்களிடமிருந்து தனக்குத் தேவையான அனைத்து டோக்கன்களையும் பெறும்போது திரும்பி வந்து செயலாக்கத்தைத் தொடர்கிறது மற்றும் செயலாக்கப்பட்டவுடன் கம்பைன் சென்ட் கர்னல்களில் நுழைகிறது. கம்பைன்-ரிசீவ் இல் உள்ள பேரியர் எந்தவொரு ரேங்க்கும் முன்கூட்டியே இயங்க முடியாது மற்றும் எந்தவொரு ரேங்க்கும் தரவைப் பெறுவதற்காக இன்னும் காத்திருக்கும்போது டிஸ்பாட்ச்-சென்ட் தொடங்க முடியாது என்பதை உறுதி செய்கிறது, இது சாத்தியமான அழிவுகரமான ஒன்றுடன் ஒன்று இணைதலை ஏற்படுத்துகிறது. எளிமைக்காக கம்பைன் கர்னலில் ஒத்திசைவு செய்யப்படுகிறது, டிஸ்பாட்ச் ரிசீவ் மற்றும் கம்பைன் சென்ட் கர்னல்களுக்கு இடையில் அதே பேரியரை ஒரு உகப்பாக்கமாக செயல்படுத்தலாம், GPU மற்ற கர்னல்களை இயக்கும் போது இடமாற்றங்களைத் தீர்க்க NIC-களுக்கு அதிக நேரத்தை அனுமதிப்பதன் மூலம் தாமதத்தை மேலும் குறைக்கலாம்.

இரண்டு கர்னல்களும் சாதனங்களின் கிடைக்கக்கூடிய அனைத்து SM-களிலும் பிரிக்கப்பட்டுள்ளன: டிஸ்பாட்ச் சென்ட் மற்றும் கம்பைன் ரிசீவ் கர்னல்கள் ஒரு ரேங்க் வாரியான அதிகபட்ச டோக்கன் எண்ணிக்கைக்கு (max_m) இணைப்படுத்தப்பட வேண்டும், அதே நேரத்தில் டிஸ்பாட்ச் ரிசீவ் மற்றும் கம்பைன் சென்ட் கர்னல்கள் ஒவ்வொரு ரேங்க் மற்றும் உள்ளூர் எக்ஸ்பர்டில் இருந்தும் பல டோக்கன்களைக் கையாள வேண்டும், அதிகபட்சம் max_m * (num_experts // EP) * (EP // TP).

டிஸ்பாட்ச்

டிஸ்பாட்ச் கர்னல் டோக்கன்கள் மற்றும் பிளாக் அளவிடுதல் காரணிகளை டோக்கன்கள் ரூட் செய்யப்பட்ட எக்ஸ்பர்ட்களை ஹோஸ்ட் செய்யும் சகாக்களுக்கு அனுப்புவதற்குப் பொறுப்பாகும். அனுப்புநர் பக்கம் இரண்டு பணிகளை இணைப்படுத்த வார்ப் ஸ்பெஷலைசேஷனை நம்பியுள்ளது: ஒவ்வொரு ரேங்க்கிலிருந்து எத்தனை டோக்கன்கள் அனுப்பப்படுகின்றன என்பதைத் தீர்மைக்க ரூட்டிங் தகவலைத் திரட்டுவது மற்றும் ரிமோட்டுக்கு அனுப்ப வேண்டிய செய்திகளில் டோக்கன்களை பேக் செய்வது. பெறுநர் பக்கம் முதலில் அனைத்து டோக்கன் எண்ணிக்கைகளும் பெறப்படுவதற்காகக் காத்திருக்கிறது, பின்னர் அது பகிரப்பட்ட நினைவகத்திலிருந்து பேலோடுகளை கீழ்நிலை குரூப்டு GEMM கர்னல்களுக்கு அனுப்பப்படும் டென்சர்களில் படித்து அன்டேக் செய்கிறது. ஒவ்வொரு டோக்கனும் எங்கு திருப்பி அனுப்பப்பட வேண்டும் என்பதைக் குறிக்க, கம்பைன் கர்னல்களுடன் பகிரப்பட்ட பஃபர்களில் இது தகவலைச் சேமிக்கிறது. ரிசீவ் கர்னல் டோக்கன்களை தீர்மானமற்ற வரிசையில் தொடர்ச்சியான பஃபர்களில் மாற்றுவதால் இந்தத் தகவல் தேவைப்படுகிறது.

மூல மற்றும் இலக்கு ranks இடையே டோக்கன்களை அனுப்பி, அவற்றின் வருகையை signal செய்வது.

அனுப்புநர் பகுதியில், ஒவ்வொரு தொகுதியிலும் 32 த்ரெட்களைக் கொண்ட ஒற்றை வார்ப் ரூட்டிங் தகவலைப் படிப்பதற்கும், இந்த ரேங்க்கிலிருந்து ஒவ்வொரு இலக்கு எக்ஸ்பர்டும் பெற எதிர்பார்க்கப்படும் டோக்கன்களின் எண்ணிக்கையைக் கணக்கிடுவதற்கும் பொறுப்பாகும், nvshmem_signal_op ஐப் பயன்படுத்தி எண்ணிக்கையுடன் ஒன்றைச் சேர்த்து அனுப்புகிறது. ரிமோட் இறுதியில் சுழியிலிருந்து சுழியற்ற நிலைக்கு மாறுவது மூல ரேங்க்கிலிருந்து எண்ணிக்கைகள் பெறப்பட்டதைக் குறிப்பதால், எண்ணிக்கை ஒன்பதால் அதிகரிக்கிறது. இணையாக, மீதமுள்ள வார்ப்கள் அனைத்து தொகுதிகள் முழுவதும் ஒரே நேரத்தில் சிமெட்ரிக் நினைவகத்தில் டோக்கன்களை நகலெடுக்க ஒத்துழைக்கின்றன, ஆக்டிவேஷன்கள், அளவிடுதல் காரணிகள் மற்றும் உள்ளூர் ரேங்க்கில் அவற்றின் குறியீட்டை ஒரு தொடர்ச்சியான துண்டில் பேக் செய்கின்றன. டோக்கன் எழுதப்படும் முகவரியைத் தீர்மானிக்க கம்பைன் சென்டருக்கு குறியீடு தேவைப்படுகிறது. அடுத்து, வார்ப் குழுக்கள் முழுவதும் ஒரு பேரியர் மூலம் அனைத்து தரவும் நகலெடுக்கப்பட்டதை உறுதிசெய்த பிறகு, வார்ப்கள் மீண்டும் தனித்தனியாகச் செயல்படுகின்றன, ஒவ்வொன்றும் அதே பஃபரை வெவ்வேறு எக்ஸ்பர்ட்க்கு இணையாக அனுப்புகின்றன. டோக்கன்கள் nvshmemx_putmem_signal_nbi_warp ஐப் பயன்படுத்தி அனுப்பப்படுகின்றன, இது ரிமோட் சாதனத்தில் உள்ளூர் ரேங்க்கிலிருந்து அனுப்பப்பட்ட டோக்கன்களின் எண்ணிக்கையையும் அணுவில் அதிகரிக்கிறது. ஒரு DP குழுவிற்குள், ஒவ்வொரு ரேங்க்கும் அனுப்பப்பட வேண்டிய டோக்கனின் பிரதியைக் கொண்டுள்ளதால், டிஸ்பாட்ச் சமமாக சமநிலைப்படுத்தப்படுகிறது, ஒவ்வொரு சாதனமும் டோக்கன்களின் துணைக்குழுவை வெளியே அனுப்புகிறது.

பெறும் இறுதியில், அனைத்து கர்னல்களும் மொத்த டோக்கன் எண்ணிக்கைகள் அனுப்பப்படுவதற்காகக் காத்திருப்பதன் மூலம் அனுப்புநர் ரேங்குகளுடன் முதலில் ஒத்திசைக்கப்படுகின்றன. அதன் பிறகு, putmem அழைப்பின் சொற்பொருளுக்கு நன்றி, மூல ரேங்குகளிலிருந்து அனைத்து பேலோடுகளும் அனுப்பப்பட்டுவிட்டன என்பதைக் குறிக்கும் வகையில், அணுவில் அதிகரிக்கப்பட்ட அனுப்பப்பட்ட டோக்கன் எண்ணிக்கைகள் மொத்த எண்ணிக்கைக்குத் தீர்வு காண அவை அனைத்தும் காத்திருக்கின்றன. கர்னல்கள் nvshmem_uint64_wait_until ஐப் பயன்படுத்தி எண்ணிக்கைகளில் போல செய்கின்றன, அனைத்து தொகுதிகள் மற்றும் த்ரெட்கள் முழுவதும் செயல்பாட்டை இணைப்படுத்துகின்றன. அதைத் தொடர்ந்து, குறுக்கு-தொகுதி பேரியர் அனைத்து தரவுகளும் சரியாகப் பெறப்பட்டாலன்றி எந்தத் தொகுதியும் பஃபர்களைப் படிக்காது என்பதை உறுதி செய்கிறது. தொகுதிகள் முழுவதும் பரவி, அணுவில் அதிகரிக்கப்பட்ட கவுண்டர் மூலம் ஒத்திசைக்கப்பட்டு, டோக்கன்கள் சிமெட்ரிக் நினைவகத்திலிருந்து வழக்கமான தொடர்ச்சியான பஃபர்களுக்கு நகலெடுக்கப்படுகின்றன, அவை எக்ஸ்பர்ட்களைச் செயல்படுத்துவதற்கான கீழ்நிலை கர்னல்களுக்கு உள்ளீடுகளாக மாறுகின்றன. மூல ரேங்க், எக்ஸ்பர்ட் குறியீடு மற்றும் டோக்கன் குறியீடு ஆகியவை தனித்தனியாக சேமிக்கப்படுகின்றன, கம்பைன் கர்னல் ஆக்டிவேஷன்களை அனுப்ப வேண்டிய இடத்தைக் துல்லியமாகக் குறிக்கின்றன. ஒரு DP குழுவிற்குள்ளிருந்து வரும் டோக்கன்கள் வெவ்வேறு சாதனங்களிலிருந்து அனுப்பப்பட்டாலும், அவை அனைத்தும் தொடர்புடைய எக்ஸ்பர்ட்க்கு அனுப்பப்படுவதற்கு ஒன்றாகக் தொகுக்கப்படுகின்றன.

கம்பைன்

கம்பைன் கர்னல்கள் மீண்டும் அனுப்பு மற்றும் பெறுநர் பாதிகளாகப் பிரிக்கப்படுகின்றன: அனுப்புநர்கள் குவாண்டம் செய்யப்படாத 16-பிட் ஆக்டிவேஷன்களை ரிமோட் சாதனங்களுக்கு நகலெடுக்கிறார்கள், பெறுநர் கர்னல்கள் தரவு அனுப்பப்படுவதற்காகக் காத்திருக்கின்றன மற்றும் அனைத்து எக்ஸ்பர்ட் பங்களிப்புகளின் எடையிடப்பட்ட சராவரியை locally கணக்கிடுகின்றன. கூடுதலாக, அவை டிஸ்பாட்ச்-கம்பைன் வரிசையை ஒத்திசைக்க ஒரு பேரியராகவும் செயல்படுகின்றன: சென்ட் கர்னல்களில் நுழையும் போது ஒவ்வொரு ரேங்க்கும் ஒவ்வொரு சகாக்களிலும் ஒரு கொடியை அமைக்கிறது, கொடி அமைக்கப்பட்டுள்ளதை அவை கவனித்தாலன்றி ரிசீவ் கர்னல்கள் திரும்ப அனுமதிக்கப்படாது. உண்மையான தகவல்தொடர்பு மற்றும் கணக்கீட்டுடன் ஒன்றுடன் ஒன்று இணைவதால் ஒத்திசைவின் தாமதம் குறைவாக இருக்கும்.

ஒவ்வொரு data-parallel rank-இலும் உள்ள tokens-களுக்குள் expert outputs-ஐ இணைத்தல்.

அனுப்புநர் பக்கத்தில், கர்னல்கள் அனைத்து உள்ளூர் எக்ஸ்பர்ட்களுக்கும் ஒதுக்கப்பட்ட டோக்கன்களின் பட்டியலை இணையாகக் கடந்து செல்கின்றன, அவற்றை இலக்கு ரேங்க்கில் உள்ள பஃபரில் எழுதுகின்றன. இலக்கு ரேங்க், எக்ஸ்பர்ட் குறியீடு மற்றும் டோக்கன் குறியீடு ஆகியவை டோக்கன்கள் பெறப்பட்டவுடன் ஸ்கேட்டர் கர்னல்களால் பாப்புலேட் செய்யப்பட்ட டோக்கன் வாரியான பஃபர்களிலிருந்து படிக்கப்படுகின்றன. மேலே உள்ள படத்தில் சுட்டிக்காட்டப்பட்டுள்ளபடி, ஒவ்வொரு அனுப்புநரும் எழுதுவதற்கு எக்ஸ்பர்ட்டுக்கு தனிப்பட்ட நினைவக பகுதியைக் கொண்டுள்ளனர், இது ஒத்திசைக்க வேண்டிய தேவையைத் தவிர்க்கிறது. டிஸ்பாட்சைப் போலவே, கம்பைன் தரவு பெறப்பட்டதைக் குறிக்க இலக்கு ரேங்க்கில் டோக்கன் கவுண்டர்களை அணுவில் அதிகரிக்கிறது: கவுண்டர் ஒரு டோக்கன் அனுப்பப்பட்ட எக்ஸ்பர்ட்களின் எண்ணிக்கையுடன் பொருந்தும்போது, டோக்கன் உள்ளடக்கங்களை அணுகலாம்.

ரிசீவ் கர்னலில், சிக்னலிங் செயல்பாட்டால் அமைக்கப்பட்ட கொடியைப் போல செய்வதன் மூலம் டோக்கன்களின் பட்டியல் பல தொகுதிகள் முழுவதும் இணையாகக் கடக்கப்படுகிறது, அவற்றின் உள்ளடக்கங்கள் வருவதற்குக் காத்திருக்கின்றன. வருகையின் போது, எந்த பஃபரிலிருந்து படிக்க வேண்டும் மற்றும் ஒவ்வொரு எக்ஸ்பர்ட்க்கும் என்ன எடையை ஒதுக்க வேண்டும் என்பதைக் குறிக்கும் ரூட்டிங் அட்டவணையுடன், தனிப்பட்ட பஃபர்களிலிருந்து பேலோடுகள் படிக்கப்படுகின்றன. முடிவுகள் பின்னர் வெளிப்புறமாக ஒதுக்கப்பட்ட டென்சர்களில் எழுதப்படுகின்றன, அனைத்து சாதனங்களும் பேரியரைக் கடந்தவுடன் கர்னல் செயலாக்கத்தை முடிக்கிறது. ஒரு DP குழு முழுவதும், அனைத்து ரேங்குகளும் தங்கள் சொந்த பிரதிகளைக் கணக்கிட ஒவ்வொரு எக்ஸ்பர்ட் ஆக்டிவேஷனின் நகலைப் பெறுகின்றன.

பெஞ்ச்மார்க்ஸ்

InfiniBand மற்றும் CX-7 NICகள் மூலம் இணைக்கப்பட்ட 16 முனைகளில் பரவியுள்ள 128 GPUகளின் கிளஸ்டரில் எங்கள் கர்னல்களை மதிப்பீடு செய்கிறோம். நாங்கள் GPUDirect Async (IBGDA) மற்றும் CPU ப்ராக்ஸியுடன் நம்பகமான இணைப்பை (RC) முயற்சிக்கிறோம். மிகவும் உகந்ததாக மாற்றப்பட்ட DeepSeek செயலாக்கம் மற்றும் PyTorch (NCCL மூலம்) அல்லது NVSHMEM வழங்கும் அடர்த்தியான ப்ரிமிடிவ்களுடன் அவற்றை ஒப்பிடுகிறோம்.

பல-node EP128 கட்டமைப்பில் GPUக்கு 128 tokens-க்கான communication latency.

அடர்த்தியான NVSHMEM all-to-all செயல்பாட்டில், IBRC மற்றும் IBGDA இன் செயல்திறன் ஒத்ததாக இருந்தாலும் (6378 µs மற்றும் 6180 µs), ஸ்பார்ஸ் கர்னல்களுடன் IBGDA கணிசமாக வேகமானது. டிஸ்பாட்ச் மற்றும் கம்பைனைச் சேர்த்தால், IBGDA 902 µs ஐப் பயன்படுத்துகிறது, அதே நேரத்தில் IBRC 3223 µs ஐ எடுத்துக்கொள்கிறது - தாமதத்தில் 3.6x முன்னேற்றம். all-to-all என்பது பேண்ட்வித் பவுண்ட் ஆனாலும், ஸ்பார்ஸ் கர்னல்கள் பல மடங்கு குறைவான தரவை பிராட்காஸ்ட் செய்கின்றன, தாமதத்தால் கட்டுப்படுத்தப்படுகின்றன. GPU மற்றும் NIC ஐ ஒருங்கிணைக்க CPU ப்ராக்ஸி தேவையில்லாமல், நேரடியாக GPU-விலிருந்து நெட்வொர்க் பரிமாற்றங்களைத் தூண்டுவதன் மூலம், எண்ட்-டு-எண்ட் தாமதம் கணிசமாகக் குறைக்க llegaிறது.

எங்கள் போர்ட்டபிள் கர்னல்கள் மிகவும் உகந்ததாக மாற்றப்பட்ட DeepSeek கர்னல்களை விட சுமார் 2x மெதுவாக இருந்தாலும், அடர்த்தியான கர்னல்களுடன் ஒப்பிடும்போது அவை தாமதத்தை 10x மேம்படுத்துகின்றன (902 µs மற்றும் 9944 µs).

கூடுதலாக, சென்டர்-ரிசீவர் கூறுகளாகப் பிரிப்பது நூலக ப்ரிமிடிவ்களைப் போலன்றி, தாமதத்தில் சிலவற்றை மறைத்து வைக்க அனுமதிக்கிறது.

single-node EP8 கட்டமைப்பில் GPUக்கு 128 tokens-க்கான communication latency.

ஒற்றை முனையில் (EP8), NVSHMEM போக்குவரத்திற்கு NVLINK ஐப் பயன்படுத்துகிறது, இது முனைகளுக்கு இடையேயான நெட்வொர்க்கிங்கை விட குறைந்த தாமதம் மற்றும் அதிக த்ரூபுட்டை வழங்குகிறது. எங்கள் போர்ட்டபிள் கர்னல்கள் ஒற்றை முனையில் DeepEP ஐ விட சுமார் 2.5x வேகமானவை (186µs மற்றும் 481 µs).

மேலும் மேம்பாடுகள்

இங்கே விவரிக்கப்பட்டுள்ள kernels, ML frameworks-இன் built-in primitives-ஐ விட சிறப்பாக செயல்படுகின்றன, மேலும் NVLink அல்லது InfiniBand போன்ற குறிப்பிட்ட சாதனங்களுக்கு இடையிலான போக்குவரத்துகளுக்காக மிகையாக நிபுணத்துவப்படுத்தாமல், நல்ல செயல்திறனை வழங்குகின்றன. ஏற்கனவே குறிப்பிடப்பட்டுள்ள வாய்ப்புகளுக்கு அப்பாற்பட்டு, தொடர்பு primitives-ஐ மேலும் சிறப்பு பெற்ற பதிப்புகளால் மாற்றுவதன் மூலம் கூடுதல் செயல்திறன் மேம்பாடுகளைப் பெற முடியும். உதாரணமாக, NVLink-களுக்குள், symmetric memory-யின் பயன்பாட்டை சாதனங்களுக்கு இடையில் பகிரப்பட்ட buffers-ஆல் மாற்றலாம்; இதனால் சில copying நீங்கும், மேலும் token batches-க்கு பதிலாக தனிப்பட்ட tokens அளவில் finer-grained synchronizations schemes-ஐ அனுமதிக்கும். InfiniBand-களுக்குள், ஒரு implementation அடிப்படையிலான queue pairs-ஐ நேரடியாக அணுகலாம்; இதனால் எதிர்பார்க்கப்பட்ட token counts மற்றும் அனுப்பப்பட்ட token counts இரண்டையும் மாற்ற வேண்டிய தேவை நீங்கும், மேலும் tokens queue-களிலிருந்து அவை வரும் போதே output buffers-க்கு flush செய்யப்படும். இருப்பினும், இத்தகைய implementations portability-க்கு விலை கொடுத்து வருகின்றன; ஆனால் எங்கள் implementations குறிப்பிட்ட configurations-உடைய clusters-ஐ, குறிப்பிட்ட hardware-க்காக optimize செய்வதற்கான development effort-ஐ உறுதியாக்குவதற்கு முன், மதிப்பிட அனுமதிக்கின்றன.

முடிவுரை

பல்வேறு ஹார்டுவேர் உள்ளமைவுகள் முழுவதும் இணக்கத்தன்மையைப் பராமரிக்கும் அதே வேளையில், நிலையான all-to-all தகவல்தொடர்புடன் ஒப்பிடும்போது 10 மடங்கு வேகமான செயல்திறனை அடையக்கூடிய MoE தகவல்தொடர்புக்கான உயர் செயல்திறன் கொண்ட, போர்ட்டபிள் நூலகத்தை நாங்கள் வழங்கியுள்ளோம். NVLink உடன் ஒற்றை-முனை வரிசைப்படுத்தல்களில், எங்கள் தீர்வு முந்தைய செயலாக்கங்களை விட 2.5x குறைந்த தாமதத்தைக் காட்டுகிறது.

GPU-ஆல் தொடங்கப்பட்ட தகவல்தொடர்பு ஆதரவு, கணக்கீடு-தகவல்தொடர்பு ஒன்றுடன் ஒன்று சேர உதவும் பிளவு கர்னல் கட்டமைப்பு மற்றும் குறைந்தபட்ச NVSHMEM ப்ரிமிடிவ்களைப் பயன்படுத்தி திறமையான டோக்கன் டிஸ்பாட்ச் உள்ளிட்ட முக்கிய புதுமைகள் மூலம் எங்கள் அணுகுமுறை செயல்திறனை போர்ட்டபிளிட்டியுடன் சமநிலைப்படுத்துகிறது. பல-முனை அமைப்புகளில் மிகவும் சிறப்பு வாய்ந்த செயலாக்கங்களை விட தோராயமாக 2x மெதுவாக இருந்தாலும், எங்கள் நூலகம் பல்வேறு நெட்வொர்க் சூழல்களில் (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://perplexity.coolkeypoint.com/hub/blog/efficient-and-portable-mixture-of-experts-communication}
}