A transzformátorokon alapuló fejlett mélytanulási modellek a természetes nyelvfeldolgozáshoz lenyűgöző eredményeket adnak, de a magas szint elérése sebességű teljesítményt nehéz elérni. Ebben a cikkben összefoglaljuk a legjobb lehetőségeket, ha azt szeretné, hogy csökkenteni a predikciók késleltetését a termelésben.
Ha a transzformátor alapú természetes nyelvfeldolgozó modellek sebességét szeretnénk javítani, a "naiv" megközelítés az, hogy több hardvert használjunk.
A legtöbbször ez egy elkerülhetetlen megoldás, mivel a tisztán szoftveralapú megoldásoknak is vannak korlátai. Képzeljük el, hogy következtetést hajtunk végre egy CPU-n. Hetekig dolgozhatsz a kedvenc Transformer-alapú modelled alacsony szintű optimalizálásán, nagyon valószínű, hogy még mindig jobb sebességjavulást érhetsz el, ha egyszerűen áthelyezed a modelled egy NVIDIA A100 GPU-RA.
Napjainkban a gyártásban a következtetések levonásához leggyakrabban használt GPU-k az NVIDIA Tesla T4 és V100.
De mi van akkor, ha már frissítette a hardverét? Vagy mi van akkor, ha a költségvetése korlátozott, és nem tudja megengedheti magának, hogy kihasználja a legutóbbi csúcstechnológiás drága GPU-kat? Olvassa el a következőket!
A kötegelt következtetés arról szól, hogy egyszerre több kérést küldünk a modellünknek, tehát a kéréseket egyszerre.
A kötegelt következtetés nagyon erős, mert a modellnek majdnem ugyanannyi időbe telik, amíg a több kérést, mint 1 kérés kezelése. A motorháztető alatt néhány művelet faktorizálva lesz, tehát hogy ahelyett, hogy mindent n-szer kellene elvégeznie, a modellnek csak egyszer kell elvégeznie.
Technikailag nem csökkenti a kérések késleltetését, mivel a kérések nem lesznek gyorsabb lesz a címzés, de drámaian javítja az alkalmazás átviteli sebességét (az alkalmazás több kérést tud kezelni ugyanazzal a hardverrel).
A kötegelt következtetés azonban nem tökéletes.
Először is, nem mindig alkalmas online következtetésre (azaz az ügyfelekkel szembenéző alkalmazásokhoz), mert a kötegek összeállításához pufferelnie kell néhány felhasználói kérést, így néhány felhasználónak a szokásosnál tovább kell várakozniuk.
2. kihívás: a kötegelt következtetés jobban működik hasonló kérések esetén. Például, ha telepítünk egy szöveggeneráló természetes nyelvi feldolgozó modellt, a kötegelt feldolgozás hatékonyabb lesz, ha olyan kérések kötegeit hozza létre, amelyek azonos hosszúságúak.
Végül pedig a kötegelt következtetést nem maga a mélytanulási modell végzi, hanem egy magasabb szintű szintű réteg, például egy dedikált következtetési szerver. Egy ilyen réteget nem mindig könnyű megvalósítani. A például az NVIDIA Triton Inference Server (lásd alább) nagyon jól végzi a kötegelt következtetést, de a először meg kell találnia a módját annak, hogy a modellje kompatibilis legyen a Tritonnal.
Ha egyszer sikerül exportálni a modellt a Tritonba, a kötegelt következtetés halálian egyszerű. Például itt van hogyan hozhatunk létre legfeljebb 128 kérésből álló kötegeket, és várhatunk maximum 5 másodpercet a feldolgozás előtt. (ezt a "config.pbtxt" fájlba kell beírni).
max_batch_size: 128
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
Sok ember és vállalat dolgozik keményen néhány Transformer-alapú természetes nyelvi feldolgozás alacsony szintű optimalizálásán. modelleken. Jó ötlet lehet, ha kihasználja a modelljének ezeket az egyedi implementációkat.
A legtöbbször ezek az egyéni megvalósítások könnyen használhatók és szinte semmilyen további munkát nem igényelnek a Öntől. Hadd említsek meg néhányat közülük itt:
Íme egy példa arra, hogyan végezhet következtetést a GPT Neo 2.7B modelljére a DeepSpeednek köszönhetően. Nem túl nehéz, ugye?
# Filename: gpt-neo-2.7b-generation.py
import os
import deepspeed
import torch
from transformers import pipeline
local_rank = int(os.getenv('LOCAL_RANK', '0'))
world_size = int(os.getenv('WORLD_SIZE', '1'))
generator = pipeline('text-generation', model='EleutherAI/gpt-neo-2.7B',
device=local_rank)
generator.model = deepspeed.init_inference(generator.model,
mp_size=world_size,
dtype=torch.float,
replace_method='auto')
string = generator("DeepSpeed is", do_sample=True, min_length=50)
if not torch.distributed.is_initialized() or torch.distributed.get_rank() == 0:
print(string)
Ha ilyen egyedi implementációt használ, ne feledje, hogy szigorúan tesztelje az új modellt, mivel soha nem lehetünk 100%-ig biztosak abban, hogy nincs hiba ezekben az új implementációkban.
A Microsoft és az NVIDIA is dolgozott fejlett következtetési motorokon a következtetés javítása érdekében. teljesítményt.
ONNX Runtime ("ORT"), a Microsoft által kifejlesztett, platformokon átívelő következtetési és képzési gépi tanulású gyorsító (lásd itt). A TensorRT ("TRT") az NVIDIA által készített SDK a nagy teljesítményű mélytanuláshoz. következtetés. Tartalmaz egy olyan mélytanulási következtetés-optimalizálót és futásidőt, amely alacsony késleltetést és nagy áteresztőképességet biztosít a mélytanulási következtetési alkalmazások számára. (lásd itt).
Emellett az NVIDIA Triton Inference Server egy olyan következtetést kiszolgáló szoftver, amely az AI következtetéseket megkönnyíti azáltal, hogy lehetővé teszi a különböző keretrendszerekből származó AI-modellek telepítését. A Tritonnak köszönhetően a például könnyedén elvégezhetünk kötegelt következtetést, több mélytanulási modellt futtathatunk egyidejűleg ugyanazon a GPU-n, modelleket telepíthet több GPU-n, és így tovább. Lásd itt.
A fentiek izgalmasnak tűnnek, de persze ez nem ilyen egyszerű... Annak érdekében, hogy a modellje kihasználja ezeket dedikált következtetési motorokat, először a meglévő modelljét megfelelő formátumba kell konvertálnia.
Több választási lehetősége van:
Ha a fenti módszerekkel játszol, nagyon óvatosnak kell lenned az exportált modellek minőségével. A azt gondolhatja, hogy sikeresen exportálta a modelljét, de lehetséges, hogy a pontosságot elvesztette a a folyamat során, ezért legyen nagyon szigorú azzal kapcsolatban, hogy hogyan teszteli az új exportált modelljét.
A modern transzformátor alapú természetes nyelvi feldolgozó modellek lenyűgöző eredményeket adnak, így egyre több vállalat szeretné, ha használni őket a termelésben. Nagyon gyakran azonban úgy tűnik, hogy a teljesítmények csalódást okoznak...
Az előrejelzések sebességének javítása kulcsfontosságú, de ahogy fentebb láthattad, nincs olyan nincs mindenre egyforma megoldás.
Ha kérdései vannak azzal kapcsolatban, hogyan gyorsíthatja fel a következtetést, forduljon hozzánk bizalommal!
Julien Salinas
CTO az NLP Cloud-nál