Grūtības ar mākslīgā intelekta vai pilnas paketes izstrādi? Mūsu eksperti ir gatavi jums palīdzēt: individuāli pielāgoti padomi, tehniskā integrācija un daudz kas cits. Sazinieties ar [email protected].

Kā paātrināt dziļās mācīšanās secinājumus dabiskās valodas apstrādes transformatoriem

Uzlabotie dziļās mācīšanās modeļi dabiskās valodas apstrādei, kas balstīti uz transformatoriem, sniedz iespaidīgus rezultātus, bet iegūt augstu ātrdarbības rādītājus ir grūti. Šajā rakstā mēs apkopojam labākās iespējas, kas jums ir pieejamas, ja vēlaties samazināt savu prognožu latentumu ražošanā.

Izmantojiet labāku CPU vai GPU

Ja vēlamies uzlabot uz transformatoru balstītu dabiskās valodas apstrādes modeļu ātrumu, "naivā" pieeja ir izmantot vairāk. modernāku aparatūru.

Lielākoties tas ir neizbēgams risinājums, jo visiem uz programmatūru balstītiem risinājumiem ir ierobežojumi. Iedomājieties, ka jūs veicat secinājumus ar procesoru. Jūs varat pavadīt nedēļas, strādājot pie zema līmeņa optimizācijas savam iecienītākajam modelim, kas balstīts uz transformatoru, ir ļoti iespējams, ka jūs joprojām iegūsiet labāku ātruma uzlabojumu, vienkārši pārvietojot savu modeli uz procesoru. NVIDIA A100 GPU.

Mūsdienās visplašāk izmantotie GPU secinājumiem ražošanā ir NVIDIA Tesla T4 un V100.

NVIDIA Tesla GPU

Bet ko darīt, ja jau esat modernizējis savu aparatūru? Vai arī, ja jūsu budžets ir ierobežots un jūs nevarat atļauties izmantot pēdējos jaunākos un dārgākos GPU? Lasiet tālāk!

Partijas secinājumi

Partijas secinājumu izdarīšana ir saistīta ar vairāku pieprasījumu vienlaicīgu nosūtīšanu jūsu modelim, tāpēc tā ir vērsta uz jūsu visus pieprasījumus vienlaicīgi.

Partijas secinājumu izdarīšana ir ļoti spēcīga, jo modelim būs nepieciešams gandrīz vienāds laiks, lai risinātu problēmas, kas saistītas ar. vairākus pieprasījumus, tikpat daudz, cik nepieciešams, lai izpildītu vienu pieprasījumu. Zem pārsega dažas operācijas tiks faktorizētas, tāpēc tā vietā, lai visu izdarītu n reižu, modelim tas jādara tikai vienu reizi.

Tehniski runājot, tas nesamazina jūsu pieprasījumu latentumu, jo pieprasījumi netiks apstrādāti. ātrāk, bet tas ievērojami uzlabos jūsu lietojumprogrammas caurlaidspēju (jūsu lietojumprogramma būs ātrāk apstrādāta). var apstrādāt vairāk pieprasījumu ar to pašu aparatūru).

Tomēr sērijveida secinājumi nav nevainojami.

Pirmkārt, tas ne vienmēr ir piemērots tiešsaistes secinājumiem (t. i., lietojumprogrammām, kas paredzētas klientiem), jo lai veidotu partijas, jums būs nepieciešams buferēt dažus lietotāju pieprasījumus, tāpēc dažiem lietotājiem būs jāgaida ilgāk nekā parasti.

Otra problēma: partijas secinājumi darbojas labāk līdzīgiem pieprasījumiem. Piemēram, ja izvietojat teksta ģenerēšanas dabiskās valodas apstrādes modeli, partiju veidošana būs efektīvāka, ja izveidosiet tādu pieprasījumu partijas, kas ir vienāda garuma.

Visbeidzot, partijas secinājumus neveic pats jūsu dziļās mācīšanās modelis, bet gan augstāka līmeņa modelis. līmeņa slānis, piemēram, īpašs secinājumu serveris. Šādu slāni ne vienmēr ir viegli ieviest. Piemēram, . Piemēram, NVIDIA Triton inferences serveris (sk. tālāk) ļoti labi veic sērijveida secinājumus, bet vispirms ir jāatrod veids, kā padarīt savu modeli saderīgu ar Triton.

Tiklīdz jums izdodas eksportēt savu modeli uz Triton, ir ļoti vienkārši izdarīt secinājumus partijās. Piemēram, šeit ir kā izveidot partijas, kas sastāv no līdz 128 pieprasījumiem, un pirms apstrādes gaidīt ne vairāk kā 5 sekundes. (tas jāievada failā "config.pbtxt").

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Pielāgotu implementāciju izmantošana

Daudzi cilvēki un uzņēmumi cītīgi strādā pie zema līmeņa optimizācijas dažiem uz transformatoru balstītiem dabiskās valodas apstrādes procesiem. modeļiem. Jums var būt laba ideja izmantot šīs pielāgotās modeļa implementācijas.

Lielākoties šīs pielāgotās implementācijas ir viegli lietojamas un neprasa gandrīz nekādu papildu darbu. jums. Ļaujiet man pieminēt dažas no tām:

Šeit ir piemērs, kā, izmantojot DeepSpeed, varat veikt secinājumus savam GPT Neo 2.7B modelim. Tas nav pārāk grūti, vai ne?

# 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)         
            

Ja izmantojat kādu no šīm pielāgotajām implementācijām, neaizmirstiet rūpīgi pārbaudīt jaunā risinājuma kvalitāti. modeli, jo nekad nevar būt 100% pārliecināts, ka šajās jaunajās implementācijās nav kļūdu.

Izmantot specializētu secinājumu izdarīšanas rīku

Gan Microsoft, gan NVIDIA strādāja pie uzlabotiem secinājumu dzinējiem, lai uzlabotu secinājumu izdarīšanu. veiktspēju.

ONNX Microsoft izstrādātais ORT ("ORT") ir starpplatformu mašīnmācīšanās secinājumu un mācību mašīnmācīšanās programmatūra, kas ir paredzēta dažādām platformām. paātrinātājs (skatīt šeit). NVIDIA izstrādātais TensorRT ("TRT") ir SDK augstas veiktspējas dziļajai mācīšanai. secinājumu veikšanai. Tas ietver dziļas mācīšanās secinājumu optimizatoru un izpildes laiku, kas nodrošina zemu latentuma un augstu caurlaides spēju dziļas mācīšanās secinājumu lietojumprogrammām. (skatīt šeit).

Turklāt NVIDIA Triton Inference Server ir secinājumu apkalpošanas programmatūra, kas nodrošina mākslīgā intelekta secinājumu. vieglāku, ļaujot izvietot AI modeļus no dažādiem ietvariem. Pateicoties Triton, jūs varat piemēram, viegli veikt sērijveida inferenci, vienlaicīgi palaist vairākus dziļas mācīšanās modeļus uz viena GPU, izvietot modeļus uz vairākiem GPU un daudz ko citu. Skatīt šeit.

ONNX Runtime
TensorRT
Triton Inference Server

Iepriekš minētais šķiet aizraujoši, bet, protams, tas nav tik vienkārši... Lai jūsu modelis varētu izmantot šos specializētus secināšanas dzinējus, vispirms ir jāpārveido esošais modelis atbilstošā formātā.

Jums ir vairākas izvēles iespējas:

Lietojot iepriekš minētās metodes, jums jābūt ļoti uzmanīgiem attiecībā uz eksportēto modeļu kvalitāti. Jūs var šķist, ka esat veiksmīgi eksportējis savu modeli, bet ir iespējams, ka esat zaudējis daļu precizitātes. procesā, tāpēc ļoti rūpīgi pārbaudiet, kā testējat savu jauno eksportēto modeli.

Secinājums

Mūsdienīgi uz transformatoriem balstīti dabiskās valodas apstrādes modeļi sniedz iespaidīgus rezultātus, tāpēc aizvien vairāk uzņēmumu vēlas. tos izmantot ražošanā. Taču ļoti bieži izrādās, ka rezultāti ir neapmierinoši...

Darbs pie jūsu prognožu ātruma uzlabošanas ir ļoti svarīgs, bet, kā redzams iepriekš, nav nav viena universāla risinājuma.

Ja jums ir jautājumi par to, kā paātrināt secinājumu izdarīšanu, lūdzu, sazinieties ar mums!

Julien Salinas
NLP Cloud tehniskais direktors