Jste na pohovoru na pozici AI inženýra ve společnosti OpenAI. Tazatel se ptá: "Náš GPT model vygeneruje 100 tokenů za 42 sekund. Jak to uděláš 5x rychlejší?" Vy: "Přidělím více GPU pro rychlejší generování." Pohovor skončil. Tady je, co jste přehlédli:
Skutečným úzkým hrdlem není výpočetní technika, ale redundantní výpočet. Bez KV cache váš model přepočítává klíče a hodnoty pro každý token a opakuje práci. - s kešováním KV → 9 sekund - bez KV cacheování → 42 sekund (~5x pomaleji) Pojďme se ponořit do toho, jak to funguje!
Abychom porozuměli ukládání KV do mezipaměti, musíme vědět, jak LLM vydávají tokeny. - Transformer vytváří skryté stavy pro všechny tokeny. - Skryté stavy se promítají do prostoru slovní zásoby. - Logity posledního tokenu se používají k vygenerování dalšího tokenu. - Opakujte pro další tokeny. Zkontrolujte toto👇
K vygenerování nového tokenu tedy potřebujeme pouze skrytý stav nejnovějšího tokenu. Žádný z dalších skrytých stavů není vyžadován. Dále se podívejme, jak se počítá poslední skrytý stav ve vrstvě transformátoru z mechanismu pozornosti.
Během pozornosti: Poslední řádek query-key-product zahrnuje: - poslední vektor dotazu. - všechny klíčové vektory. Také poslední řádek konečného výsledku pozornosti zahrnuje: - poslední vektor dotazu. - Všechny vektory klíče a hodnoty. Podívejte se na tento vizuál, abyste to lépe pochopili:
Z výše uvedeného přehledu vyplývá, že k vygenerování nového tokenu potřebuje každá operace pozornosti v síti pouze: - vektor dotazu posledního tokenu. - Všechny vektory klíče a hodnoty. Je tu však ještě jeden klíčový poznatek.
Jak generujeme nové tokeny: - Vektory KV použité pro VŠECHNY předchozí tokeny se nemění. Stačí tedy vygenerovat vektor KV pro token vygenerovaný o krok dříve. Zbytek vektorů KV lze načíst z mezipaměti, aby se ušetřily výpočetní prostředky a čas.
Tomu se říká KV cachování! Abychom to zopakovali, místo redundantního výpočtu vektorů KV všech kontextových tokenů je ukládejte do mezipaměti. Vygenerování tokenu: - Vygenerujte vektor QKV pro token vygenerovaný o krok dříve. - Získejte všechny ostatní vektory KV z mezipaměti. - Počítejte s pozorností. Zkontrolujte toto👇
KV cache urychluje inferenci tím, že před generováním tokenů počítá KV cache promptu. Právě proto ChatGPT generuje první token déle než ostatní. Toto zpoždění je známé jako time-to-first-token (TTFT). Zlepšení TTFT je téma na jindy!
69,15K