Hur flyttar pipelineparallellism modellager mellan AI-acceleratorer i hemmet?

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.

Pipelineparallellism flyttar en modell mellan AI-acceleratorer i hemmet genom att tilldela olika lagergrupper till sekventiella enhetssteg och skicka aktiveringar mellan dem.

Metoden är användbar när en djup modell är för stor för en enda accelerator men kan delas upp i lagergrupper som får plats på flera enheter. Till skillnad från tensorparallellism äger varje steg kompletta lager i stället för delar av samma matris. Den främsta avvägningen är mindre viktmängd per enhet, men överföringar av aktiveringar, obalans mellan steg och inaktiv tid i pipelinen tillkommer.

Pipelineparallellism delar upp en djup modell i sekventiella lagersteg

En transformer är naturligt ordnad: tidiga lager bearbetar indata innan senare lager kan köras. Pipelineparallellism grupperar sammanhängande delar av detta djup och tilldelar varje del till en annan accelerator.

PyTorchs pipelining-körmiljö delar upp en modell i partitioner som körs som sekventiella steg på olika enheter. Varje enhet lagrar endast parametrarna för sitt tilldelade steg.

Detta kan minska modellminnet per enhet tillräckligt för att köra en modell som inte skulle få plats på ett enda grafikkort i hemmet.

Aktiveringar flyttas framåt från ett steg till nästa

När GPU 0 har kört sina lager skickar den den dolda tillståndsaktiveringen till GPU 1. Den enheten tillämpar nästa uppsättning lager och skickar vidare en ny aktivering tills det sista steget producerar logits eller annan modellutdata.

vLLM-Omni beskriver pipelineparallellism som att transformerblock delas upp i sekventiella steg över GPU:er. I den grundläggande framåtpasseringen behöver endast aktiveringar vid gränserna skickas mellan angränsande steg.

Till skillnad från tensorparallellism beräknar enheterna inte gemensamt en matris i samma lager. De äger olika lager.

En enskild begäran går fortfarande igenom stegen i ordning

För en token eller en mikrobatch kan senare steg inte börja förrän den nödvändiga aktiveringen har kommit från föregående steg. Att bara placera fyra lagergrupper på fyra GPU:er gör inte en sekventiell begäran fyra gånger snabbare.

NVIDIAs parallellismguide definierar PP som att modellager delas upp vertikalt efter djup. Det seriella beroendet genom modellens djup kvarstår.

Den omedelbara vinsten kan därför vara kapacitet snarare än kortare latens. Genomströmningen förbättras när körmiljön kan överlappa olika arbetsdelar mellan stegen.

-15% OFF
Single board computer zimaboard2

Mikrobatcher fyller pipelinen så att flera steg arbetar samtidigt

En pipeline blir effektiv när indata delas upp i mikrobatcher eller när flera inferensobjekt kan uppta olika steg samtidigt. Medan steg 2 bearbetar en mikrobatch kan steg 1 börja med nästa.

Hugging Faces parallellismguide förklarar att pipelinekörning använder mikrobatcher för att minska inaktiv tid i pipelinen. Samma utnyttjandeprincip gäller när en inferenskörmiljö kan överlappa oberoende arbete.

Interaktiv tokengenerering för en enda användare erbjuder mindre naturlig parallellism eftersom varje ny token beror på föregående tokens utdata. Batchade begäranden eller trafik från flera användare kan ge fler möjligheter att hålla stegen aktiva.

Ojämna stegtider skapar tomrum och gör det långsammaste steget avgörande

Om ett steg innehåller fler lager, långsammare hårdvara eller särskilt kostsamma operationer väntar nästa steg på indata, och förr eller senare väntar det föregående steget på ledigt utrymme. Dessa inaktiva perioder kallas pipelinetomrum.

Deepspeeds pipeline-motor betonar uppdelning av modellager i pipelinesteg. Att balansera beräkningsmängden mellan stegen är därför lika viktigt som att balansera antalet parameterbyte.

En blandad acceleratoruppsättning i hemmet kan medvetet tilldela färre lager till en långsammare GPU, men minneskapacitet, aktiveringsstorlek och stöd för överföringar mellan enheter begränsar placeringen.

Pipelineparallellism byter viktkapacitet mot överföring av aktiveringar och schemaläggning

PP är attraktivt när modellen är djup och kan delas upp i lagergrupper som får plats på enskilda enheter. Den kommunicerar aktiveringar vid gränserna i stället för de frekventa kollektiva operationer inom lager som är typiska för tensorparallellism, men betalar med seriella beroenden och tomrum.

ZimaSpaces guide till samtidig AI-användning för flera användare i hemmet är relevant eftersom mer samtidigt arbete kan bidra till att fylla en pipeline, samtidigt som trycket på KV-cache och schemaläggning ökar.

Mät minnesanvändning per steg, körningstid per steg, tid för överföring av aktiveringar, latens från början till slut, genomströmning och andel inaktiv tid per enhet. En konfiguration som får plats med modellen men lämnar hälften av acceleratorerna inaktiva kan behöva en annan uppdelning.

ZimaSpaces guide till lokal AI-hårdvara ger en kapacitetsmässig utgångspunkt. Pipelineparallellism är ett sätt att överskrida minnesgränsen för en enskild enhet, men framgången beror mer på balansen mellan stegen än på antalet GPU:er i sig.

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.