A Large Language Model (LLM) következtetésének áttekintése, fontossága, kihívásai és kulcsprobléma megfogalmazásai.
A nagy nyelvi modellek (LLM) forradalmasították a természetes nyelvi feldolgozás (NLP) területét azáltal, hogy az alkalmazások széles skáláját teszik lehetővé, a chatbotoktól és AI-ügynököktől a kód- és tartalomgenerálásig. Az LLM-ek valós forgatókönyvekben történő telepítése azonban gyakran szembesül a várakozási idővel, az erőforrás-felhasználással és a skálázhatósággal kapcsolatos kihívásokkal.
Ebben a blogbejegyzéssorozatban különféle optimalizálási technikákat fogunk megvizsgálni az LLM következtetések levonásához. Elmerülünk a késleltetés, a memória helyigényének és a számítási költségek csökkentésének stratégiáiban, a gyorsítótárazási mechanizmusoktól a hardveres gyorsításokig és a modellkvantálásig.
Ebben a bejegyzésben rövid áttekintést adunk az LLM-következtetésről, annak fontosságáról és az ezzel kapcsolatos kihívásokról. Felvázoljuk azokat a kulcsprobléma-megfogalmazásokat is, amelyek az optimalizálási technikák feltárását irányítják.
A modellkövetkeztetés arra a folyamatra vonatkozik, amikor egy betanított gépi tanulási modellt használnak előrejelzések készítésére vagy kimenetek generálására új bemeneti adatok alapján. Az LLM-ek kontextusában a következtetés magában foglalja a szövegbevitel feldolgozását és koherens és kontextuálisan releváns szövegkimenet létrehozását.
A modellt csak egyszer vagy periodikusan betanítják, míg a következtetés sokkal gyakrabban, valószínűleg másodpercenként több ezer alkalommal fordul elő éles környezetben.
A következtetések optimalizálása elengedhetetlen annak biztosításához, hogy az LLM-eket hatékonyan lehessen telepíteni a valós alkalmazásokban. A cél a késleltetés (a válasz generálásához szükséges idő) minimalizálása, az erőforrás-felhasználás (CPU, GPU, memória) csökkentése és a skálázhatóság javítása (a növekvő terhelések kezelésének képessége).
Például a GPT-3 (175 milliárd paraméterrel) jelentős számítási erőforrásokat igényel a következtetésekhez. Az optimalizálás 1–2 másodpercről ezredmásodpercre csökkentheti a válaszidőt, így az LLM-ek praktikusabbak az interaktív alkalmazásokban.
A figyelemmechanizmusokat használó transzformátor architektúra a legtöbb legkorszerűbb LLM alapjává vált. Ez az architektúra magában foglalja a pozíciókódolást, a többfejes önfigyelést, az előrecsatolt neurális hálózatokat és a rétegnormalizálást. A transzformátorokat általában három fő típusra osztják:
A kódoló-dekódoló modellek (pl. T5) voltak az eredeti architektúra, amelyet az „A figyelem minden, amire szükséged van” című cikkben mutattak be. Ezeket a modelleket olyan feladatokra tervezték, amelyek megértést és generálást is igényelnek, mint például a fordítás és az összegzés. Feldolgozzák a bemeneti sorozatot a kódolóval, majd a dekóderrel generálják a kimeneti sorozatot.
Mivel a csak dekódoló modellek a legelterjedtebb LLM architektúra az autoregresszív feladatokhoz, ez a sorozat a kifejezetten az ilyen típusú modellekre vonatkozó optimalizálási technikákra összpontosít.
A figyelemmechanizmus a transzformátor-architektúra kulcsfontosságú összetevője, amely lehetővé teszi a modell számára, hogy a kimenet generálásakor a bemeneti sorozat különböző részeire összpontosítson. Kiszámítja a bemeneti reprezentációk súlyozott összegét, ahol a súlyokat az egyes bemeneti jogkivonatok relevanciája határozza meg az éppen generált kimeneti tokenhez képest. Ez a mechanizmus lehetővé teszi a modell számára, hogy rögzítse a tokenek közötti függőséget, függetlenül a bemeneti szekvenciában lévő távolságuktól.
A figyelemmechanizmus számítási szempontból költséges lehet, különösen hosszú bemeneti szekvenciák esetén, mivel az összes token közötti páronkénti kölcsönhatások kiszámítását igényli ( O(n^2)
bonyolultság). Lássuk részletesebben, lépésről lépésre:
Bemeneti ábrázolás : A bemeneti szekvencia minden tokenje vektorként van ábrázolva, jellemzően beágyazásokkal.
Lekérdezés, kulcs, érték vektorok : Minden tokenhez három vektor kerül kiszámításra: egy lekérdezési vektor ( Q_i
), egy kulcsvektor ( K_i
) és egy értékvektor ( V_i
). Ezek a vektorok a bemeneti reprezentációkból származnak tanult lineáris transzformációk segítségével.
Figyelempontszámok : A figyelempontszámokat úgy számítják ki, hogy az aktuális token lekérdezési vektorának pontszorzatát a bemeneti szekvencia összes korábbi tokenek kulcsvektorával együtt veszik. Ez egy pontszámot eredményez, amely jelzi, hogy mennyi hangsúlyt kell helyezni az egyes tokenekre.
Softmax normalizálás : A figyelem pontszámait ezután a softmax függvény segítségével normalizálják, hogy megkapják a figyelemsúlyokat, amelyek összege 1.
Súlyozott összeg : Végül az aktuális token kimeneti reprezentációja az értékvektorok súlyozott összegeként kerül kiszámításra a figyelem súlyozásával.
A többfejes figyelem a figyelemmechanizmus kiterjesztése, amely lehetővé teszi a modell számára, hogy különböző pozíciókban lévő, különböző reprezentációs alterekből származó információkat együttesen figyeljen. Ahelyett, hogy egyetlen figyelemsúly-készletet használna, a többfejű figyelem több figyelempontszám-készletet számol ki párhuzamosan, mindegyik saját tanult lineáris transzformációjával.
Ezeknek a figyelemfejeknek a kimeneteit ezután összefűzik, és lineárisan átalakítják a végső kimeneti reprezentáció létrehozásához.
Ez a mechanizmus javítja a modell azon képességét, hogy megragadja a különböző kapcsolatokat és függőségeket a bemeneti adatokban, ami javítja a különböző NLP-feladatok teljesítményét.
Az LLM-ek és a transzformátor architektúra megértésével vázoljuk fel a következtetések számítási folyamatát. A következtetés létrehozza a következő $n$ tokent egy adott bemeneti sorozathoz, és két szakaszra bontható:
Előtöltési szakasz : Ebben a szakaszban egy előrehaladást hajtanak végre a bemeneti szekvencia modelljén, és minden egyes jogkivonathoz kiszámítják a kulcs- és értékábrázolásokat. Ezeket a reprezentációkat egy KV gyorsítótárban tárolják későbbi felhasználás céljából a dekódolási szakaszban. Az egyes rétegekben lévő összes token ábrázolása párhuzamosan történik.
Dekódolási szakasz : Ebben a szakaszban a modell egyenként állítja elő a kimeneti tokeneket, autoregresszív módon. A modell minden jogkivonat esetében lekéri a kulcs- és értékábrázolásokat az előtöltési szakaszban tárolt KV-gyorsítótárból, valamint az aktuális bemeneti token lekérdezési reprezentációját, hogy kiszámítsa a sorozat következő tokent.
Ez a folyamat addig folytatódik, amíg egy leállítási feltétel teljesül (pl. el nem éri a maximális hosszt vagy generál egy sorozatvégi tokent). Az új kulcs- és értékábrázolások a KV-gyorsítótárban tárolódnak a következő tokenekhez. Ebben a szakaszban egy token mintavételi stratégiát is alkalmaznak a következő generálandó token meghatározására (pl. mohó keresés, sugárkeresés, top-k mintavétel).
L hosszúságú, d beágyazási méretű előtag és h fejű és n rétegű modell esetén a következtetés számításának összetettsége a következőképpen elemezhető:
Előtöltési szakasz : Az előtöltési szakaszban kiszámítjuk a bemenetben lévő összes token kezdeti reprezentációját. A komplexitás itt a következő:
Itt:
O(Ln .d^2)
: Az előrecsatolt számítást jelöli, amely az egyes tokent függetlenül dolgozza fel a rétegeken keresztül. Ez lineárisan skálázódik mind az L sorozathosszúsággal, mind az n rétegek számával.
Második tag O(L^2. nh d)
: A figyelemmechanizmus költségeit jelenti. Itt minden token kölcsönhatásba lép az összes többi tokennel, ami L^2
bonyolultságot eredményez a rétegenkénti figyelem kiszámításához. A komplexitás négyzetesen növekszik a sorozat hosszával, ami a hosszú sorozatok fő szűk keresztmetszetévé válhat.
Dekódolási szakasz : A dekódolási szakasz az autoregresszív rész, a komplexitás a következő:
Itt:
Előrecsatolt számítás : Minden generált tokennél minden rétegben előrecsatolási műveleteket hajtunk végre. Mivel ez egyszerre csak egy tokenre történik (nem a teljes sorozatra), a tokenenkénti összetettség: O(nd^2)
.
Figyelem számítása gyorsítótárazással : Minden új token kölcsönhatásba lép a meglévő sorozattal a figyelem révén, a korábban kiszámított kulcs-érték párok felhasználásával. Ez a figyelemszámítás minden generált token esetében arányos a sorozat L hosszával, így: O(Lnd .h)
Amint látjuk, a következtetés számításának bonyolultságát befolyásolja a bemeneti sorozat hossza ( L ), a rétegek száma ( n ), a figyelemfejek száma ( h ), valamint a beágyazás mérete ( d ). Ez a bonyolultság szűk keresztmetszetet jelenthet a valós idejű alkalmazásokban, különösen hosszú bemeneti sorozatok és/vagy nagy modellek esetén.
A KV gyorsítótárazás az LLM következtetések optimalizálási technikája, különösen a dekódolási szakaszban. Az előtöltési szakaszban kiszámított kulcs- és értékábrázolások tárolásával a modell elkerülheti a redundáns számításokat a korábban feldolgozott tokenek esetében.
Ez jelentősen csökkenti a számítási költségeket és a késleltetést a következtetés során, mivel a modellnek csak az előállított új token figyelempontszámait kell kiszámítania, ahelyett, hogy újraszámítaná a kulcs- és értékmegjelenítéseket a bemeneti szekvencia összes tokenjéhez.
Ez a költséget lineárissá teszi a generált tokenek számához képest, nem pedig kvadratikussá a bemeneti hosszhoz képest.
A KV gyorsítótárazás azonban további memóriát igényel a kulcs- és értékmegjelenítések tárolásához, ami kompromisszumot jelenthet erőforrás-korlátos környezetben.
Számítsuk ki a LLaMA 7B modell memóriaigényét.
d_model
): 4096d_head
): 32d_head
): 128 (4096/32) Kulcsméret tokenenként = d_head × num_heads
= 128 × 32 = 4096 elem
Tokenenkénti érték mérete = d_head × num_heads
= 128 × 32 = 4096 elem
Összes elem tokenenként rétegenként = 4096 + 4096 = 8192 elem
Elemek rétegenként = L × 8192 = 2048 × 8192 = 16 777 216 elem
Memória rétegenként (bájtban) = 16 777 216 × 2 = 33 554 432 bájt = 33,55 MB
Így a teljes memóriaigény: 14 GB (modellsúlyok) + 1-2 GB (overhead) + 1073,6 MB (KV gyorsítótár) = 15-16 GB . Ez a számítás becslést ad a LLaMA 7B modell memóriaigényére a következtetés során. A LLaMA 7B viszonylag kicsi az olyan modellekhez képest, mint a GPT-3 (175 milliárd paraméter), ami lényegesen több memóriát igényelne mind a modellsúlyok, mind a KV gyorsítótár számára.
Emellett $m$ egyidejű felhasználókra méretezve az erőforrásigény $m$-szor nagyobb lenne. Így az optimalizálási technikák kulcsfontosságúak a nagy modellek telepítéséhez erőforrás-korlátozott környezetben.
A következtetésoptimalizálási technikák hatékonyságának értékelésekor több mérőszámot is figyelembe vehetünk:
Előtöltési késleltetés : A következtetés előzetes kitöltési szakaszának végrehajtásához szükséges idő, más néven idő az első tokenig (TTFT) késleltetés. Ez a mérőszám kulcsfontosságú az interaktív alkalmazások esetében, ahol a felhasználók gyors választ várnak. Olyan tényezők, mint a modell mérete, a bemeneti hossz és a hardver képességei befolyásolhatják ezt a mutatót.
Dekódolási késleltetés : Az az idő, amely az előtöltési szakaszt követően minden további token létrehozásához szükséges, más néven Inter-Token Latency (ITL). Ez a mérőszám fontos a modell válaszkészségének mérésére a szöveggenerálás során. Az olyan alkalmazásoknál, mint a chatbotok, az alacsony ITL jó, de a gyorsabb nem mindig jobb, mivel másodpercenként 6-8 token gyakran elegendő az emberi interakcióhoz. A befolyásoló tényezők közé tartozik a KV gyorsítótár mérete, a mintavételi stratégia és a hardver.
End-to-End késleltetés : A bemenet fogadásától a végső kimenet létrehozásáig eltelt teljes idő. Ez a mérőszám elengedhetetlen a következtetési folyamat általános teljesítményének megértéséhez, és befolyásolja az előtöltés, a dekódolás és az egyéb összetevők várakozási ideje (pl. JSON-elemzés). A befolyásoló tényezők közé tartozik a modell mérete, a bemeneti hossz és a hardver, valamint a teljes folyamat hatékonysága.
Maximum Request Rate, más néven QPS (lekérdezések másodpercenként) : A másodpercenként feldolgozható következtetési kérelmek száma. Ez a mérőszám kulcsfontosságú a modell méretezhetőségének értékeléséhez éles környezetben. Olyan tényezők, mint a modell mérete, a hardver és az optimalizálási technikák befolyásolhatják a QPS-t. Például, ha egy P90 késleltetéshez 15 QPS szolgál ki 1 GPU-n keresztül, akkor 300 QPS kiszolgálásához 20 GPU-ra lenne szükség. A befolyásoló tényezők közé tartoznak a hardver erőforrások, a terheléselosztás és az optimalizálási technikák.
FLOPS (lebegőpontos műveletek másodpercenként) : A modell által másodpercenként végrehajtható lebegőpontos műveletek száma. Ez a mérőszám hasznos a következtetés számítási költségének megértéséhez, és felhasználható a különböző modellek és optimalizálási technikák hatékonyságának összehasonlítására. A befolyásoló tényezők közé tartozik a modell architektúra, a hardver és az optimalizálási technikák.
Mindezekkel az optimalizálással foglalkozunk a sorozat következő bejegyzésében.
Rendszeroptimalizálás : Az alapul szolgáló hardver- és szoftver-infrastruktúra optimalizálása, például speciális hardver (pl. TPU-k, GPU-k) vagy a szoftververem optimalizálása (pl. hatékony könyvtárak és keretrendszerek használata). A következőkre bontható:
Memóriakezelés : A memóriahasználat hatékony kezelése a többletterhelés csökkentése és a teljesítmény javítása érdekében.
Hatékony számítás : A párhuzamosság kihasználása és a számítás optimalizálása a késleltetés csökkentése érdekében.
Kötegeltetés : Több kérés egyidejű feldolgozása az átviteli sebesség javítása érdekében.
Ütemezés : A feladatok hatékony ütemezése az erőforrás-kihasználás maximalizálása érdekében.
Modell tömörítések : Olyan technikák, mint a kvantálás, metszés és desztilláció használhatók a modell méretének csökkentésére és a következtetési sebesség javítására anélkül, hogy jelentősen feláldoznák a teljesítményt.
Algoritmusoptimalizálás : A következtetéshez használt algoritmusok fejlesztése, például hatékonyabb mintavételi stratégiák alkalmazása vagy a figyelemmechanizmus optimalizálása. Pl. A spekulatív dekódolás, amely lehetővé teszi, hogy a modell párhuzamosan több tokent generáljon, jelentősen csökkentheti a dekódolási késleltetést.
Ebben a bejegyzésben áttekintést adtunk az LLM következtetésekről, annak fontosságáról és az ezzel kapcsolatos kihívásokról. Felvázoltuk azokat a kulcsfontosságú problémamegszövegezéseket is, amelyek az optimalizálási technikák feltárását szolgálják a következő bejegyzésekben.
Ha megértjük az LLM-következtetés bonyolultságát és a teljesítményét befolyásoló tényezőket, jobban megérthetjük az optimalizálási technikák jelentőségét az LLM-ek gyakorlatiasabbá tételében a valós alkalmazások számára. A következő bejegyzésben részletesebben foglalkozunk a konkrét optimalizálási technikákkal és azok megvalósításával, a várakozási idő és az erőforrás-felhasználás csökkentésére összpontosítva a modell teljesítményének megőrzése mellett.