Hogyan lehet felgyorsítani a mély tanulási következtetést a természetes nyelvi feldolgozó transzformátorok számára?

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.

Használjon jobb CPU-t vagy GPU-t

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.

NVIDIA Tesla GPU

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!

Batch következtetés

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
}

Egyedi megvalósítások kihasználása

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.

Dedikált következtetési motor használata

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.

ONNX Runtime
TensorRT
Triton Inference Server

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.

Következtetés

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