paint-brush
Primer on Large Language Model (LLM) következtetések optimalizálása: 1. Háttér és probléma megfogalmazásaáltal@mandliya
1,432 olvasmányok
1,432 olvasmányok

Primer on Large Language Model (LLM) következtetések optimalizálása: 1. Háttér és probléma megfogalmazása

által Ravi Mandliya11m2024/11/04
Read on Terminal Reader

Túl hosszú; Olvasni

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 kulcsfontosságú problémamegfogalmazásokat is, amelyek az optimalizálási technikák feltárását fogják irányítani.
featured image - Primer on Large Language Model (LLM) következtetések optimalizálása: 1. Háttér és probléma megfogalmazása
Ravi Mandliya HackerNoon profile picture

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.

Modellkövetkeztetés: áttekintés

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 Transformer Architecture áttekintése

Transformer Architecture (forrás: Attention is All You Need)


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:


  • Csak kódoló modellek (pl. BERT) olyan feladatokhoz készültek, mint a szövegosztályozás és az elnevezett entitás felismerés. Egy bemeneti szekvenciát fix hosszúságú reprezentációvá alakítanak át - beágyazás. Ezek a modellek kétirányúak, ami azt jelenti, hogy a kontextust a token bal és jobb oldaláról is figyelembe veszik, ami a bemeneti szöveg jobb megértéséhez vezethet.


  • Csak dekódoló modelleket (pl. GPT-3) használnak szöveggenerálási feladatokhoz. Egy bemeneti szekvenciából szöveget generálnak egyenként, és kondicionálják a korábban generált tokeneket. Ezek a modellek egyirányúak, vagyis csak a token bal oldali kontextusát veszik figyelembe, ami alkalmas olyan feladatokra, mint a nyelvi modellezés. Ez a leggyakoribb LLM architektúra.


  • 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 áttekintése

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.

Figyelemmechanizmus a munkahelyen


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:


  1. Bemeneti ábrázolás : A bemeneti szekvencia minden tokenje vektorként van ábrázolva, jellemzően beágyazásokkal.


  2. 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.


  3. 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.


  4. 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.


  5. 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.

Többfejű figyelem

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.

Többfejű figyelem

A következtetés számítási folyamat áttekintése

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ó:


  1. 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.

    Előtöltési szakasz az LLM-következtetés során

  2. 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).

    Dekódolási szakasz az LLM következtetés során

A következtetés számításának összetettsége

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:

    • Első tag 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 jelentősége

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ítások egy példamodellhez

Számítsuk ki a LLaMA 7B modell memóriaigényét.

Modell konfiguráció

  • Paraméterek: 7 milliárd
  • Beágyazási méret ( d_model ): 4096
  • Rétegek száma: 32
  • Figyelemfejek száma ( d_head ): 32
  • Fejméret ( d_head ): 128 (4096/32)
  • Maximális sorozathossz (L): 2048
  • Adattípus: float16 (elemenként 2 bájt)

Memória számítás

  1. Rétegenkénti gyorsítótár mérete : Minden réteghez tárolnunk kell a kulcsokat és az értékeket is
    • 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


  2. Memória rétegenként a teljes sorozathoz : A teljes sorozathoz L = 2048 token
    • 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


  3. Teljes KV gyorsítótár az összes réteghez : Mivel 32 dolláros rétegünk van
    • Teljes memória = 33,55 × 32 MB = 1073,6 MB

Teljes memóriaigény

  • A modell súlya: 7 milliárd paraméter × 2 bájt/paraméter = 14 GB


  • KV gyorsítótár memória: 1073,6 MB


  • Egyéb memória többlet (pl. aktiválások, köztes eredmények): ~1-2 GB


Í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.

Mérőszámok a következtetésoptimalizálás értékeléséhez

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:

  1. 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.


  2. 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.


  3. 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.


  4. 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.


  5. 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.

A következtetésoptimalizálási technikák típusai

Mindezekkel az optimalizálással foglalkozunk a sorozat következő bejegyzésében.

  • Modellarchitektúra optimalizálása : A modellarchitektúra módosítása a következtetések hatékonyságának javítása érdekében, például a rétegek vagy a figyelemfejek számának csökkentése, vagy hatékonyabb figyelési mechanizmusok alkalmazása (pl. ritka figyelem).


  • 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.

    Az optimalizálási technikák taxonómiája


Következtetés

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.

Hivatkozások