Imate težave z umetno inteligenco ali razvojem celotnega paketa? Naši strokovnjaki so vam na voljo za pomoč: prilagojeni nasveti, tehnična integracija in še več. Obrnite se na [email protected].

Kako pospešiti sklepanje globokega učenja za obdelavo naravnega jezika Transformatorji

Napredni modeli globokega učenja za obdelavo naravnega jezika, ki temeljijo na transformatorjih, dajejo impresivne rezultate, vendar je pridobivanje visokih hitrosti je težko doseči. V tem članku povzemamo najboljše možnosti, ki jih imate, če želite zmanjšati zakasnitev svojih napovedi v produkciji.

Uporaba boljšega procesorja ali grafičnega procesorja

Kadar želimo izboljšati hitrost modelov za obdelavo naravnega jezika, ki temeljijo na transformatorjih, je "naivni" pristop uporaba več naprednejšo strojno opremo.

Večinoma je to neizogibna rešitev, saj imajo vse programske rešitve svoje omejitve. Predstavljajte si, da izvajate sklepanje na procesorju. Lahko porabite tedne za delo na optimizaciji na nizki ravni za svoj najljubši model, ki temelji na Transformerju, zelo verjetno je, da boste še vedno dosegli boljše izboljšanje hitrosti, če boste svoj model preprosto premaknili na NVIDIA A100.

Danes se za sklepanje v proizvodnji najpogosteje uporabljata grafična procesorja NVIDIA Tesla T4 in V100.

Grafični procesor NVIDIA Tesla

Kaj pa, če ste strojno opremo že nadgradili? Ali kaj, če je vaš proračun omejen in ne morete si ne morete privoščiti uporabiti zadnje najsodobnejše drage grafične procesorje? Preberite naslednje!

Paketno sklepanje

Pri paketnem sklepanju gre za hkratno pošiljanje več zahtev vašemu modelu, tako da se ukvarja z vašimi zahteve naenkrat.

Paketno sklepanje je zelo učinkovito, saj bo vaš model potreboval skoraj enak čas, da bo obravnaval več zahtev, kot ga potrebuje za obravnavo ene zahteve. Pod pokrovom bodo nekatere operacije faktorizirane, tako da da bo model namesto n-krat opravil vse skupaj le enkrat.

Tehnično gledano to ne zmanjšuje zakasnitve vaših zahtevkov, ker vaši zahtevki ne bodo obravnavane hitreje, vendar pa se bo bistveno izboljšala prepustnost vaše aplikacije (vaša aplikacija lahko z isto strojno opremo obravnava več zahtevkov).

Vendar pa paketno sklepanje ni popolno.

Prvič, ni vedno primeren za spletno sklepanje (tj. za aplikacije za stranke), ker boste morali za sestavo serij nekatere uporabniške zahteve odložiti v medpomnilnik, zato bodo nekateri uporabniki imeli čakati dlje kot običajno.

Drugi izziv: paketno sklepanje je boljše pri podobnih zahtevah. Če na primer nameščate model za generiranje besedila za obdelavo naravnega jezika, bo paketno združevanje učinkovitejše, če ustvarite serije zahtevkov, ki imajo enako dolžino.

Nazadnje, paketnega sklepanja ne izvaja vaš model globokega učenja sam, temveč višji ravni, kot je namenski inferenčni strežnik. Takšnega sloja ni vedno enostavno implementirati. Za na primer, inferenčni strežnik Triton podjetja NVIDIA (glej spodaj) je zelo dober pri izvajanju paketnega sklepanja, vendar morate najprej najti način, da bo vaš model skladen s programom Triton.

Ko vam uspe izvoziti svoj model v Triton, je sklepanje v serijah zelo preprosto. Tukaj je na primer kako ustvariti serije, sestavljene iz največ 128 zahtevkov, in počakati največ 5 sekund pred obdelavo (to je treba vnesti v datoteko "config.pbtxt").

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Uporaba izvedb po meri

Veliko ljudi in podjetij se trudi z optimizacijami na nizki ravni za obdelavo naravnega jezika, ki temelji na transformatorjih. modelov. Morda bi bilo dobro, da uporabite te prilagojene izvedbe svojega modela.

Večinoma so te implementacije po meri enostavne za uporabo in ne zahtevajo skoraj nobenega dodatnega dela. vas. Naj jih nekaj omenim tukaj:

Tukaj je primer, kako lahko s programom DeepSpeed izvedete sklepanje za model GPT Neo 2.7B. Ni pretežko, kajne?

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

Ko uporabljate eno od teh izvedb po meri, ne pozabite temeljito preizkusiti kakovosti novega modela, saj nikoli ne morete biti stoodstotno prepričani, da v teh novih izvedbah ni napak.

Uporaba namenskega mehanizma za sklepanje

Microsoft in NVIDIA sta se ukvarjala z naprednimi mehanizmi za sklepanje, da bi izboljšala sklepanje zmogljivosti.

ONNX Runtime ("ORT"), ki ga je izdelal Microsoft, je medplatformni program za strojno učenje in usposabljanje pospeševalnik (glej tukaj). TensorRT ("TRT") družbe NVIDIA je SDK za visoko zmogljivo globoko učenje sklepanje. Vključuje optimizator in izvajanje globokega učenja, ki zagotavlja nizko zakasnitev in visoko prepustnost za aplikacije za sklepanje globokega učenja. (glej tukaj).

Poleg tega je NVIDIA Triton Inference Server programska oprema za podajanje sklepov, ki omogoča, da sklepanje umetne inteligence olajša uporabo modelov umetne inteligence iz različnih ogrodij. Zahvaljujoč Tritonu lahko za na primer enostavno izvajati paketno inferenco, hkrati zagnati več modelov globokega učenja na istem grafičnem procesorju, lahko modele namestite na več grafičnih procesorjev in še več. Oglejte si tukaj.

ONNX Runtime
TensorRT
Triton Inference Server

Vse to se zdi razburljivo, vendar seveda ni tako preprosto... Če želite, da vaš model izkoristi te namenske mehanizme za sklepanje, morate svoj obstoječi model najprej pretvoriti v ustrezno obliko.

Na voljo imate več možnosti:

Pri uporabi zgornjih metod morate biti zelo pozorni na kakovost izvoženih modelov. Na spletni strani morda mislite, da ste uspešno izvozili svoj model, vendar je mogoče, da ste izgubili nekaj natančnosti pri postopku, zato bodite zelo natančni pri načinu testiranja novega izvoženega modela.

Zaključek

Sodobni modeli obdelave naravnega jezika, ki temeljijo na transformatorjih, dajejo impresivne rezultate, tako da vse več podjetij želi jih uporabljajo v proizvodnji. Vendar se pogosto izkaže, da so rezultati razočarani...

Izboljšanje hitrosti napovedi je ključnega pomena, vendar, kot lahko vidite zgoraj, ni ni rešitve, ki bi ustrezala vsem.

Če imate vprašanja o tem, kako pospešiti sklepanje, se obrnite na nas!

Julien Salinas
Tehnični direktor v podjetju NLP Cloud