Pokročilé modely hlubokého učení pro zpracování přirozeného jazyka založené na transformátorech poskytují působivé výsledky, ale získání vysokých rychlosti je obtížné. V tomto článku shrnujeme nejlepší možnosti, které máte, pokud chcete snížit latenci svých predikcí v produkci.
Pokud chceme zvýšit rychlost modelů zpracování přirozeného jazyka založených na transformátorech, "naivní" přístup spočívá v použití více modelů. pokročilejšího hardwaru.
Většinou se jedná o nevyhnutelné řešení, protože všechna čistě softwarová řešení mají své limity. Představte si, že provádíte inferenci na procesoru. Můžete strávit týdny prací na nízkoúrovňové optimalizaci svého oblíbeného modelu založeného na Transformeru, je velmi pravděpodobné, že i tak dosáhnete lepšího zlepšení rychlosti prostým přesunutím modelu na NVIDIA A100 GPU.
V současné době jsou nejpoužívanějšími GPU pro inferenci ve výrobě NVIDIA Tesla T4 a V100.
Ale co když jste již upgradovali svůj hardware? Nebo co když je váš rozpočet omezený a nemůžete si dovolit dovolit využít poslední špičkové drahé grafické procesory? Přečtěte si následující řádky!
Dávkové odvozování spočívá v tom, že modelu pošlete několik požadavků najednou, takže se zabývá vašimi všechny požadavky najednou.
Dávkové odvozování je velmi výkonné, protože řešení vašeho modelu zabere téměř stejnou dobu. několik požadavků, tak jako vyřešení 1 požadavku. Pod kapotou budou některé operace faktorizovány, takže že místo toho, aby model vše provedl n-krát, musí to udělat pouze jednou.
Technicky vzato to latenci vašich požadavků nesníží, protože vaše požadavky nebudou ale výrazně se zlepší propustnost vaší aplikace (vaše aplikace bude rychleji adresována), ale výrazně se zlepší propustnost vaší aplikace (vaše aplikace bude rychleji adresována). může se stejným hardwarem zpracovat více požadavků).
Dávkové odvozování však není dokonalé.
Především není vždy vhodný pro online odvozování (tj. pro aplikace určené pro zákazníky), protože abyste mohli sestavit dávky, budete muset některé požadavky uživatelů ukládat do vyrovnávací paměti, takže někteří uživatelé budou mít čekat déle než obvykle.
Druhá výzva: dávkové odvozování funguje lépe u podobných požadavků. Pokud například nasazujete model zpracování přirozeného jazyka pro generování textu, bude dávkové zpracování efektivnější, pokud vytvoříte dávky požadavků, které mají stejnou délku.
A konečně, dávkovou inferenci neprovádí váš model hlubokého učení sám, ale vyšší model. vrstvy, jako je specializovaný inferenční server. Implementace takové vrstvy není vždy snadná. Pro například inferenční server Triton společnosti NVIDIA (viz níže) je velmi dobrý v provádění dávkové inference, ale je však třeba nejprve najít způsob, jak zajistit kompatibilitu modelu s Tritonem.
Jakmile se vám podaří exportovat model do systému Triton, je dávkové odvozování velmi jednoduché. Například zde je jak vytvořit dávky složené až ze 128 požadavků a počkat maximálně 5 sekund, než se zpracují. dávku (toto by mělo být uvedeno v souboru "config.pbtxt").
max_batch_size: 128
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
Mnoho lidí a společností usilovně pracuje na nízkoúrovňových optimalizacích pro zpracování přirozeného jazyka pomocí transformátorů. modelů. Může pro vás být dobrým nápadem využít tyto vlastní implementace vašeho modelu.
Většinou se tyto vlastní implementace snadno používají a nevyžadují téměř žádnou další práci. vás. Dovolte mi, abych se zde o některých z nich zmínil:
Zde je příklad toho, jak můžete provést inferenci pro model GPT Neo 2.7B díky službě DeepSpeed. Není to příliš těžké, že?
# 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)
Při použití jedné z těchto vlastních implementací nezapomeňte důkladně otestovat kvalitu nového systému. modelu, protože si nikdy nemůžete být stoprocentně jisti, že v těchto nových implementacích není chyba.
Microsoft i NVIDIA pracovaly na pokročilých inferenčních enginech, aby zlepšily inferenci. výkonnosti.
ONNX Runtime ("ORT") od společnosti Microsoft je multiplatformní nástroj pro odvozování a školení strojového učení. akcelerátor (viz zde). TensorRT ("TRT") společnosti NVIDIA je SDK pro vysoce výkonné hluboké učení. odvozování. Zahrnuje optimalizátor a runtime pro inferenci hlubokého učení, který zajišťuje nízkou latenci a vysokou propustnost pro aplikace odvozování hlubokého učení (viz zde).
Kromě toho je NVIDIA Triton Inference Server inferenční software, který umožňuje odvozování umělé inteligence. tím, že umožňuje nasazení modelů AI z různých frameworků. Díky Tritonu můžete pro například snadno provádět dávkovou inferenci, spouštět více modelů hlubokého učení současně na stejném GPU, nasadit modely na více GPU a další. Viz zde.
Výše uvedené se zdá být vzrušující, ale samozřejmě to není tak jednoduché... Aby váš model mohl využít tyto specializovaných inferenčních motorů, musíte nejprve převést svůj stávající model do správného formátu.
Máte několik možností:
Při hraní s výše uvedenými metodami byste si měli dávat velký pozor na kvalitu exportovaných modelů. Na adrese se vám může zdát, že jste model úspěšně vyexportovali, ale je možné, že jste ztratili část přesnosti při exportu. procesu, takže buďte velmi důslední v tom, jak testujete svůj nový exportovaný model.
Moderní modely zpracování přirozeného jazyka založené na transformátorech poskytují působivé výsledky, takže stále více společností chce používat ve výrobě. Velmi často se však ukazuje, že výkony jsou zklamáním...
Práce na zlepšení rychlosti vašich předpovědí je zásadní, ale jak jste mohli vidět výše, neexistuje žádný. jedno univerzální řešení.
Pokud máte dotazy ohledně toho, jak urychlit odvozování, neváhejte se na nás obrátit!
Julien Salinas
Technický ředitel společnosti NLP Cloud