Võitlevad tehisintellekti või täieliku arendusega? Meie eksperdid on siin, et teid juhendada: kohandatud nõuanded, tehniline integratsioon ja palju muud. Võtke ühendust aadressil [email protected].

Kuidas kiirendada süvaõppe järeldusi loomuliku keele töötlemise transformaatorite jaoks

Transformaatoritel põhinevad täiustatud süvaõppe mudelid loomuliku keele töötlemiseks annavad muljetavaldavaid tulemusi, kuid kõrge taseme saavutamine kiiruse saavutamine on raske. Selles artiklis võtame kokku parimad võimalused, mis teil on olemas, kui soovite vähendada oma prognooside latentsust tootmises.

Kasutage paremat protsessorit või GPU-d

Kui soovitakse parandada Transformeril põhinevate loodusliku keele töötlemise mudelite kiirust, on "naiivne" lähenemine, et kasutatakse rohkem täiustatud riistvara.

Enamasti on see paratamatu lahendus, sest puhtalt tarkvarapõhistel lahendustel on kõik piirangud. Kujutage ette, et te teostate järeldusi protsessoril. Te võite nädalaid töötada oma lemmik Transformeril põhineva mudeli madala taseme optimeerimise kallal, siis on väga tõenäoline, et te saate ikkagi parema kiiruse paranemise, kui te lihtsalt liigutate oma mudeli ümber NVIDIA A100 GPU-LE.

Tänapäeval on tootmises järelduste tegemiseks kõige laialdasemalt kasutatavad GPUd NVIDIA Tesla T4 ja V100.

NVIDIA Tesla GPU

Aga mis siis, kui te juba uuendasite oma riistvara? Või mis siis, kui teie eelarve on piiratud ja te ei saa endale lubada kasutada viimast tipptasemel kallist GPU-d? Lugege järgmist!

Partii järeldus

Partii järeldamine tähendab mitme päringu samaaegset saatmist teie mudelile, nii et see käsitleb teie taotlusi korraga.

Partii järeldamine on väga võimas, sest see võtab peaaegu sama kaua aega, et teie mudel tegeleks mitu taotlust, kui kulub 1 taotluse käsitlemiseks. Kapoti all faktoriseeritakse mõned operatsioonid, nii et et selle asemel, et teha kõike n korda, peab mudel seda tegema ainult üks kord.

Tehniliselt võttes ei vähenda see teie taotluste latentsust, sest teie taotlused ei ole kiiremini, kuid see parandab oluliselt teie rakenduse läbilaskevõimet (teie rakendus saab sama riistvaraga käsitleda rohkem päringuid).

Partii järeldamine ei ole siiski täiuslik.

Esiteks ei sobi see alati veebipõhiste järelduste tegemiseks (st klientidele suunatud rakenduste puhul), sest partiide koostamiseks tuleb mõned kasutajate taotlused puhverdada, nii et mõned kasutajad on ootama tavapärasest kauem.

2. väljakutse: sarnaste taotluste puhul töötab partiide tuletamine paremini. Näiteks, kui te kasutate välja teksti genereerivat loodusliku keele töötlemise mudelit, on partiide koostamine tõhusam, kui te loote partiide kaupa taotlusi, mis on sama pikkusega.

Viimaks, partii järeldusi ei tee mitte teie süvaõppe mudel ise, vaid kõrgema tasandi kiht, näiteks spetsiaalne järelduste tegemise server. Sellist kihti ei ole alati lihtne rakendada. Sest näiteks NVIDIA Triton Inference Server (vt allpool) on väga hea batch-järelduste tegemisel, kuid kõigepealt tuleb leida viis, kuidas muuta oma mudel Tritoniga ühilduvaks.

Kui teil õnnestub oma mudel Tritonisse eksportida, on partiide järeldamine väga lihtne. Näiteks siin on kuidas luua kuni 128 päringust koosnevaid partiisid ja oodata maksimaalselt 5 sekundit enne töötlemist. partii (see tuleks panna faili "config.pbtxt").

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Kasutage kohandatud rakendusi

Paljud inimesed ja ettevõtted töötavad kõvasti madala taseme optimeerimise kallal mõne Transformeril põhineva loodusliku keele töötlemise jaoks mudelitel. Teil võib olla hea mõte kasutada neid kohandatud rakendusi oma mudeli jaoks.

Enamasti on neid kohandatud rakendusi lihtne kasutada ja need ei nõua peaaegu mingit lisatööd. teilt. Lubage mul siinkohal mainida mõned neist:

Siin on näide selle kohta, kuidas saate tänu DeepSpeedile oma GPT Neo 2.7B mudeli jaoks järeldusi teha. Pole ju liiga raske?

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

Kui kasutate ühte neist kohandatud rakendustest, ärge unustage rangelt testida oma uue rakenduse kvaliteeti. mudelit, sest te ei saa kunagi olla 100% kindel, et nendes uutes implementatsioonides ei ole vigu.

Kasutage spetsiaalset järeldusmootorit

Microsoft ja NVIDIA töötasid mõlemad täiustatud järelduste tegemise mootorite kallal, et parandada järelduste tegemist. jõudlust.

ONNX Runtime ("ORT"), Microsoft, on platvormideülene järelduste tegemise ja masinõppe treenimise süsteem. kiirendi (vt siit). TensorRT ("TRT"), mida pakub NVIDIA, on SDK suure jõudlusega süvaõppe jaoks. järelduste tegemiseks. See sisaldab süvaõppe järelduste optimeerija ja runtime'i, mis tagab madala latentsuse ja suure läbilaskevõime süvaõppe järeldusrakenduste jaoks (vt siit).

Lisaks sellele on NVIDIA Triton Inference Server järelduste esitamise tarkvara, mis teeb AI järeldusi lihtsamaks, võimaldades eri raamistike tehisintellekti mudelite kasutuselevõttu. Tänu Tritonile saate näiteks hõlpsasti teostada partii järeldusi, käivitada samal GPU-l mitu süvaõppe mudelit samaaegselt, juurutada mudeleid mitmel GPU-l ja palju muud. Vaata siit.

ONNX Runtime
TensorRT
Triton Inference Server

Ülaltoodu tundub põnev, kuid muidugi ei ole see nii lihtne... Selleks, et teie mudel saaks kasutada neid spetsiaalseid järeldusmootoreid, peate kõigepealt oma olemasoleva mudeli konverteerima sobivasse formaati.

Teil on mitu võimalust:

Eespool kirjeldatud meetoditega mängides peaksite olema väga ettevaatlik oma eksporditud mudelite kvaliteedi suhtes. Sa võite arvata, et olete oma mudeli edukalt eksportinud, kuid on võimalik, et olete kaotanud mõne täpsuse protsessi käigus, seega olge väga range selle suhtes, kuidas te oma uut eksporditud mudelit testite.

Kokkuvõte

Kaasaegsed transformaatoritel põhinevad loodusliku keele töötlemise mudelid annavad muljetavaldavaid tulemusi, nii et üha enam ettevõtteid soovivad neid tootmises kasutada. Kuid väga sageli tundub, et tulemused on pettumust valmistavad...

Töö oma prognooside kiiruse parandamise kallal on ülioluline, kuid nagu eespool näha, ei ole mingit kõigile sobivat lahendust.

Kui teil on küsimusi, kuidas kiirendada järelduste tegemist, võtke meiega julgelt ühendust!

Julien Salinas
NLP Cloud tehnoloogiajuht