Lokal AI-NUMA-lokalitet: Varför minnesplacering ändrar matningshastigheten till acceleratorn

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

NUMA-lokalitet påverkar acceleratorns matningshastighet eftersom värdförbehandling och överföringar går snabbare när CPU-trådar, minnessidor och enheten delar en närliggande väg.

I en hemm arbetsstation med flera socklar kan varje CPU-kärna adressera allt RAM, men åtkomstkostnaden är inte enhetlig. En GPU eller annan accelerator är vanligtvis ansluten via PCIe-rotkomplexet på en av socklarna. Om förbehandlingen körs på en annan nod och buffertarna allokeras där, kan data behöva färdas över sockelns sammankoppling innan den når enheten, vilket ökar belastningen och ger varierande latens.

NUMA gör avståndet till värdminnet mätbart

Ett NUMA-system delar upp processorer och minne i noder med olika åtkomstavstånd. Linux allokerar vanligtvis en sida på den nod som är lokal för den CPU där sidfelet först uppstår. Trådplaceringen under modellinläsning eller förberedelse av indata kan därför avgöra var stora buffertar faktiskt finns.

Dokumentationen om NUMA-minnespolicyer i Linux beskriver policyer för uppgifter, VMA, delat minne, bindning, preferens och interleaving. Den påpekar också att policyer främst påverkar sidor som allokeras efter att policyn har installerats, vilket gör initieringsordningen viktig. Denna skillnad är fortfarande viktig under realistiska förhållanden i hemmet.

För lokal inferens kan den kritiska sökvägen omfatta tokenisering, bildavkodning, tensorförberedelse, låsta buffertar och enhetsöverföringar. Fjärrplacering skapar en flaskhals på värdsidan även när acceleratorn själv rapporterar outnyttjad beräkningskapacitet. Mellanläget bör förbli synligt vid senare felsökning och granskning.

PCIe-topologin kopplar en accelerator till specifika CPU-noder

Den kortaste vägen mellan värd och enhet går normalt genom den CPU-sockel vars rotkomplex äger acceleratorn. Genom att binda arbetarens CPU-trådar och allokeringspolicy till det området kan bandbredden förbättras och variationen minska, särskilt när stora indata eller frekventa överföringar håller länken upptagen.

NVIDIA:s CUDA-vägledning om NUMA innehåller NUMA-rekommendationer och varnar för att automatisk balansering i vissa fall kan försämra GPU-program. Den rekommenderar att topologin inspekteras och att policyn justeras för den faktiska noden i stället för att man antar att vissa nodnummer är bäst.

Placering är ett grafproblem, inte en regel om att nod noll är snabbast. Den korrekta kopplingen beror på moderkortets ledningsdragning, IOMMU-konfigurationen, andra enheter och på om flera arbetare konkurrerar om samma minneskanaler eller PCIe-länkar.

Bindning kan vara skadlig när arbetsbelastningen använder mer än en nod

Att strikt binda minnet till en nod kan tömma dess bandbredd eller kapacitet medan andra noder står oanvända. En pipeline kan använda en GPU nära en sockel men även ett inspelningskort, en NVMe-enhet eller en andra accelerator nära en annan. En placering kan optimera överföringar men samtidigt fördröja förbehandling eller lagring.

NVIDIA:s projekt GPU-affinitet kopplar processer till CPU-kärnor som hör samman med GPU:er och påpekar att korrekt affinitet kan stabilisera prestandan. Dess flera lägen visar varför unika, sammanhängande, socket- och NUMA-omfattningar passar olika arbetsbelastningar med flera processer.

Felgränsen uppstår när ett riktmärke för en enda enhet generaliseras till hela servern. Binda inte blint på system med integrerat minne, maskiner med en enda nod eller pipelines som sträcker sig över flera enheter; mät latens från början till slut, bandbredd och konkurrens under den avsedda samtidigheten.

Benchmarka topologin, inte bara acceleratorn

Kartlägg CPU-noder, minneskapacitet, PCIe-enheter och acceleratorernas lokalitet. Kör samma inferensarbetsbelastning med standardplacering, bindning endast av CPU, bindning endast av minne samt matchad bindning av CPU och minne. Registrera bandbredd mellan värd och enhet, sidplacering, token per sekund och p95-latens.

Om modellfragment hämtas från nätverkslagring, som i nätverkslagring av modeller, ska lästiden från filer separeras från sidplacering och enhetsöverföring. Värm samma data inför varje körning och upprepa sedan med de avsedda samtidiga arbetarna för att synliggöra konkurrens om minneskanalerna.

Använd bindning endast om den matchade topologin förbättrar de upprepningsbara resultaten från början till slut utan att svälta någon annan tjänst på resurser. Om vinsterna försvinner efter uppvärmning eller vänds vid samtidighet, låt placeringen vara flexibel eller isolera endast de trådar och buffertar som är kritiska för överföringarna.

Teknik- och AI-hubb

Mer att läsa

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.