Pokročilé modely hlbokého učenia pre spracovanie prirodzeného jazyka založené na transformátoroch poskytujú pôsobivé výsledky, ale dosiahnutie vysokého rýchlosti je ťažké. V tomto článku zhrnieme najlepšie možnosti, ktoré máte, ak chcete znížiť latenciu vašich predikcií v produkcii.
Ak chceme zvýšiť rýchlosť modelov spracovania prirodzeného jazyka založených na transformátore, "naivný" prístup spočíva v použití viacerých pokročilejší hardvér.
Väčšinou je to nevyhnutné riešenie, pretože všetky čisto softvérové riešenia majú svoje limity. Predstavte si, že vykonávate inferenciu na procesore. Môžete stráviť týždne prácou na nízkoúrovňovej optimalizácii vášho obľúbeného modelu založeného na transformátore, je veľmi pravdepodobné, že aj tak dosiahnete lepšie zlepšenie rýchlosti jednoduchým presunom modelu na NVIDIA A100 GPU.
V súčasnosti sú najpoužívanejšími GPU na odvodzovanie vo výrobe NVIDIA Tesla T4 a V100.
Ale čo ak ste už aktualizovali svoj hardvér? Alebo čo ak je váš rozpočet obmedzený a nemôžete dovoliť využiť posledné špičkové drahé grafické procesory? Prečítajte si nasledujúce informácie!
Dávkové odvodzovanie spočíva v odoslaní niekoľkých požiadaviek súčasne vášmu modelu, takže rieši vaše všetky požiadavky naraz.
Dávkové odvodzovanie je veľmi výkonné, pretože vášmu modelu bude trvať takmer rovnaký čas na riešenie niekoľko požiadaviek, ako je potrebné na riešenie 1 požiadavky. Pod kapotou budú niektoré operácie faktorizované, takže namiesto toho, aby model robil všetko n-krát, musí to urobiť len raz.
Technicky povedané, neznižuje latenciu vašich požiadaviek, pretože vaše požiadavky nebudú rýchlejšie, ale výrazne zlepší priepustnosť vašej aplikácie (vaša aplikácia dokáže spracovať viac požiadaviek s rovnakým hardvérom).
Dávkové odvodzovanie však nie je dokonalé.
Po prvé, nie je vždy vhodný na online odvodzovanie (t. j. pre aplikácie určené pre zákazníkov), pretože na zostavenie dávok budete musieť niektoré požiadavky používateľov vyrovnávať, takže niektorí používatelia budú mať čakať dlhšie ako zvyčajne.
Druhá výzva: dávkové odvodzovanie funguje lepšie pri podobných požiadavkách. Ak napríklad nasadzujete model spracovania prirodzeného jazyka na generovanie textu, dávkové spracovanie bude efektívnejšie, ak vytvoríte dávky požiadaviek, ktoré majú rovnakú dĺžku.
Napokon, dávkovú inferenciu nevykonáva samotný model hlbokého učenia, ale vyšší vrstvou, napríklad špecializovaným inferenčným serverom. Nie vždy je jednoduché takúto vrstvu implementovať. Pre napríklad inferenčný server Triton spoločnosti NVIDIA (pozri nižšie) je veľmi dobrý pri vykonávaní dávkovej inferencie, ale musíte najprv nájsť spôsob, ako zabezpečiť, aby bol váš model kompatibilný s modelom Triton.
Keď sa vám podarí exportovať váš model do systému Triton, dávkové odvodzovanie je veľmi jednoduché. Napríklad tu je ako vytvoriť dávky pozostávajúce až zo 128 požiadaviek a počkať maximálne 5 sekúnd pred spracovaním dávky (toto by sa malo uviesť v súbore "config.pbtxt").
max_batch_size: 128
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
Mnohí ľudia a spoločnosti intenzívne pracujú na nízkoúrovňových optimalizáciách pre niektoré transformátory založené na spracovaní prirodzeného jazyka modelov. Môže byť pre vás dobrým nápadom využiť tieto vlastné implementácie vášho modelu.
Väčšinou sa tieto vlastné implementácie ľahko používajú a nevyžadujú takmer žiadnu ďalšiu prácu. vás. Niektoré z nich tu spomeniem:
Tu je príklad, ako môžete vďaka DeepSpeed vykonať odvodenie pre model GPT Neo 2.7B. Nie je to príliš ťažké, však?
# 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)
Pri použití jednej z týchto vlastných implementácií nezabudnite dôkladne otestovať kvalitu nového modelu, pretože si nikdy nemôžete byť stopercentne istí, že v týchto nových implementáciách nie je chyba.
Microsoft aj NVIDIA pracovali na pokročilých inferenčných motoroch s cieľom zlepšiť inferenciu výkonnosť.
ONNX Runtime ("ORT") od spoločnosti Microsoft je multiplatformný program na odvodzovanie a školenie strojového učenia akcelerátor (pozri tu). TensorRT ("TRT") od spoločnosti NVIDIA je SDK pre vysoko výkonné hlboké učenie odvodzovanie. Zahŕňa optimalizátor a runtime pre hlboké učenie, ktorý poskytuje nízku latenciu a vysokú priepustnosť pre aplikácie hlbokého učenia. (pozri tu).
Okrem toho, NVIDIA Triton Inference Server je softvér na odvodzovanie, ktorý umožňuje odvodzovanie umelej inteligencie tým, že umožňuje nasadiť modely AI z rôznych rámcov. Vďaka Tritonu môžete pre napríklad ľahko vykonávať dávkovú inferenciu, spúšťať viacero modelov hlbokého učenia súčasne na tom istom GPU, nasadiť modely na viacerých GPU a ďalšie. Pozri tu.
Uvedené sa zdá byť vzrušujúce, ale samozrejme to nie je také jednoduché... Aby váš model mohol využiť tieto špecializované inferenčné motory, musíte najprv previesť svoj existujúci model do správneho formátu.
Máte niekoľko možností:
Pri hraní s uvedenými metódami by ste si mali dávať veľký pozor na kvalitu exportovaných modelov. Na stránke si môžete myslieť, že ste úspešne exportovali svoj model, ale je možné, že ste stratili určitú presnosť v procese, preto buďte veľmi dôslední v tom, ako testujete svoj nový exportovaný model.
Moderné modely spracovania prirodzeného jazyka založené na transformátoroch poskytujú pôsobivé výsledky, takže čoraz viac spoločností chce používať v produkcii. Veľmi často sa však ukazuje, že výkony sú sklamaním...
Práca na zlepšení rýchlosti vašich predpovedí je veľmi dôležitá, ale ako ste mohli vidieť vyššie, neexistuje jedno univerzálne riešenie.
Ak máte otázky o tom, ako urýchliť odvodzovanie, neváhajte nás kontaktovať!
Julien Salinas
Technický riaditeľ spoločnosti NLP Cloud