Sliter du med AI eller fullstack-utvikling? Ekspertene våre er her for å veilede deg: skreddersydde råd, teknisk integrasjon og mer. Ta kontakt på [email protected].

Hvordan øke hastigheten på dyp læringsinferens for transformatorer for naturlig språkbehandling

Avanserte dyplæringsmodeller for Natural Language Processing basert på Transformers gir imponerende resultater, men det er vanskelig å få høy hastighet. hastighetsytelser er vanskelig. I denne artikkelen oppsummerer vi de beste alternativene du har hvis du vil redusere ventetiden til prediksjonene dine i produksjonen.

Bruk en bedre CPU eller GPU

Når man ønsker å forbedre hastigheten til Transformer-baserte Natural Language Processing-modeller, er den "naive" tilnærmingen å bruke mer avansert maskinvare. avansert maskinvare.

Mesteparten av tiden er dette en uunngåelig løsning, ettersom rene programvarebaserte løsninger alle har begrensninger. Tenk deg at du utfører inferens på en CPU. Du kan bruke uker på å jobbe med optimalisering på lavt nivå for din favoritt Transformer-baserte modell, det er veldig sannsynlig at du fremdeles vil få bedre hastighetsforbedring ved å bare flytte modellen din til en NVIDIA A100 GPU.

I disse dager er de mest brukte GPU-ene for slutning i produksjonen NVIDIA Tesla T4 og V100.

NVIDIA Tesla GPU

Men hva om du allerede har oppgradert maskinvaren din? Eller hva om budsjettet ditt er begrenset, og du ikke kan råd til å utnytte de siste banebrytende dyre GPU-ene? Les det følgende!

Batch-inferens

Batch-inferens handler om å sende flere forespørsler samtidig til modellen din, slik at den adresserer dine forespørsler samtidig.

Batchinferens er svært kraftig fordi det vil ta nesten like lang tid for modellen å behandle flere forespørsler som det tar å behandle én forespørsel. flere forespørsler som det tar å adressere 1 forespørsel. Under panseret vil noen operasjoner bli faktorisert, så at i stedet for å gjøre alt n ganger, trenger modellen bare å gjøre det én gang.

Teknisk sett reduserer det ikke ventetiden for forespørslene dine, fordi forespørslene dine ikke blir behandlet raskere. adresseres raskere, men det vil forbedre gjennomstrømningen til applikasjonen din dramatisk (applikasjonen din kan håndtere kan håndtere flere forespørsler med samme maskinvare).

Batchinferens er imidlertid ikke perfekt.

For det første er det ikke alltid egnet for online inferens (dvs. for kundevendte applikasjoner), fordi for å bygge batchene dine må du bufre noen brukerforespørsler, slik at noen brukere må vente lenger enn vanlig. må vente lenger enn vanlig.

2. utfordring: Batch-inferens fungerer bedre for lignende forespørsler. For eksempel, hvis du distribuerer en tekstgenereringsmodell for naturlig språkbehandling, vil batching være mer effektivt hvis du oppretter grupper av forespørsler som har samme lengde. har samme lengde.

Sist av alt, batchinferens utføres ikke av selve dybdelæringsmodellen din, men av et høyere nivå, som en dedikert inferensserver. Det er ikke alltid lett å implementere et slikt lag. For eksempel er NVIDIAs Triton Inference Server (se nedenfor) veldig god til å utføre batchinferens, men du må først finne en måte å gjøre modellen din kompatibel med Triton.

Når du klarer å eksportere modellen din til Triton, er batchinferens veldig enkelt. Her er for eksempel hvordan du oppretter batcher laget av opptil 128 forespørsler, og vent i maksimalt 5 sekunder før du behandler batchen. batch (dette skal legges inn i filen "config.pbtxt").

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Utnytte tilpassede implementeringer

Mange mennesker og selskaper jobber hardt med optimaliseringer på lavt nivå for noen Transformer-baserte Natural Language Processing modeller. Det kan være en god idé for deg å utnytte disse tilpassede implementeringene av modellen din.

Mesteparten av tiden er disse tilpassede implementeringene enkle å bruke og krever nesten ikke noe ekstra arbeid fra deg. deg. La meg nevne noen av dem her:

Her er et eksempel på hvordan du kan utføre inferens for din GPT Neo 2.7B-modell takket være DeepSpeed. Ikke så vanskelig, ikke sant?

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

Når du bruker en av disse tilpassede implementeringene, må du ikke glemme å teste kvaliteten på din nye modell, ettersom du aldri kan være 100 % sikker på at det ikke er noen feil i disse nye implementeringene.

Bruk en dedikert slutningsmotor

Microsoft og NVIDIA arbeidet begge med avanserte inferensmotorer for å forbedre inferensytelsen. ytelse.

ONNX Runtime ("ORT"), fra Microsoft, er en maskinlæringsakselerator for inferens og opplæring på tvers av plattformer. akselerator (se her). TensorRT ("TRT"), av NVIDIA, er en SDK for høy ytelse dyp læring inferens. Den inkluderer en dyp læringsinferensoptimalisering og kjøretid som gir lav ventetid og høy gjennomstrømning for applikasjoner for dyp læringsinferens (se her).

I tillegg er NVIDIA Triton Inference Server en inferensserverprogramvare som gjør AI-inferanse enklere ved å gjøre det mulig å distribuere AI-modeller fra forskjellige rammeverk. Takket være Triton kan du for for eksempel utføre batch-inferens enkelt, kjøre flere dype læringsmodeller samtidig på samme GPU, distribuere modeller på flere GPU-er og mer. Se her.

ONNX Runtime
TensorRT
Triton Inference Server

Ovennevnte virker spennende, men det er selvfølgelig ikke så enkelt ... For at modellen din skal kunne utnytte disse dedikerte slutningsmotorene, må du først konvertere den eksisterende modellen din til et riktig format.

Du har flere valgmuligheter:

Når du spiller med metodene ovenfor, bør du være veldig forsiktig med kvaliteten på de eksporterte modellene dine. Du tror kanskje at du har eksportert modellen din, men det er mulig at du har mistet noe nøyaktighet i prosessen. prosessen, så vær veldig nøye med hvordan du tester den nye eksporterte modellen.

Konklusjon

Moderne transformatorbaserte Natural Language Processing-modeller gir imponerende resultater, slik at stadig flere selskaper ønsker å bruke dem i produksjonen. bruke dem i produksjonen. Men veldig ofte ser det ut til at resultatene er skuffende ...

Arbeidet med å forbedre hastigheten på prediksjonene dine er avgjørende, men som du kunne se ovenfor, finnes det ingen løsning som passer for alle. én løsning som passer alle.

Ikke nøl med å kontakte oss hvis du har spørsmål om hvordan du kan fremskynde slutningene dine! Eller ikke bry deg med infrastruktur og bare abonner på NLP Cloud!

Abhinav
Utviklingsingeniør hos NLP Cloud