Vaikeuksia tekoälyn tai full-stack-kehityksen kanssa? Asiantuntijamme opastavat sinua: räätälöityjä neuvoja, teknistä integrointia ja paljon muuta. Ota yhteyttä osoitteessa [email protected].

Miten nopeuttaa syvän oppimisen päättelyä luonnollisen kielen prosessoinnin muuntajia varten?

Muuntajiin perustuvat kehittyneet syväoppimismallit luonnollisen kielen käsittelyyn antavat vaikuttavia tuloksia, mutta korkeiden tulosten saaminen nopeaa suorituskykyä on vaikea saavuttaa. Tässä artikkelissa teemme yhteenvedon parhaista vaihtoehdoista, joita sinulla on, jos haluatte pienentää ennusteidesi latenssia tuotannossa.

Käytä parempaa prosessoria tai näytönohjainta

Kun halutaan parantaa Transformer-pohjaisten luonnollisen kielen prosessointimallien nopeutta, "naiivi" lähestymistapa on käyttää enemmän kehittynyttä laitteistoa.

Useimmiten tämä on väistämätön ratkaisu, sillä puhtaasti ohjelmistopohjaisilla ratkaisuilla on rajansa. Kuvittele, että suoritat päättelyä suorittimella. Saatat viikkoja työskennellä Transformer-pohjaisen suosikkimallisi matalan tason optimoinnin parissa, on hyvin todennäköistä, että saat silti paremman nopeusparannuksen siirtämällä mallisi yksinkertaisesti NVIDIA A100-NÄYTÖNOHJAIMEEN.

Nykyään yleisimmin käytetyt GPU:t tuotannossa tapahtuvaan päättelyyn ovat NVIDIA Tesla T4 ja V100.

NVIDIA Tesla GPU

Entä jos olet jo päivittänyt laitteistosi? Tai entä jos budjettisi on rajallinen etkä voi käyttää varaa hyödyntää viimeisintä huippuluokan kallista näytönohjainta? Lue seuraava!

Erän päättely

Eräpäätelmässä on kyse useiden pyyntöjen lähettämisestä samaan aikaan mallillesi, joten se kohdistuu sinun kaikki pyynnöt kerralla.

Eräkohtainen päättely on erittäin tehokas, koska se vie lähes saman ajan, kun mallisi käsittelee useita pyyntöjä kuin yhden pyynnön käsittelyyn. Konepellin alla jotkin operaatiot faktoroidaan, joten että sen sijaan, että malli tekisi kaiken n kertaa, sen tarvitsee tehdä se vain kerran.

Teknisesti ottaen se ei vähennä pyyntöjen latenssia, koska pyyntöjä ei ole nopeammin, mutta se parantaa huomattavasti sovelluksesi läpäisykykyä (sovelluksesi voi käsitellä enemmän pyyntöjä samalla laitteistolla).

Eräkohtainen päättely ei kuitenkaan ole täydellinen.

Ensinnäkään se ei aina sovellu online-päätelmien tekemiseen (eli asiakassovelluksiin), koska erien muodostamiseksi sinun on puskuroitava joitakin käyttäjien pyyntöjä, joten joillakin käyttäjillä on oltava odottaa tavallista kauemmin.

2. haaste: eräkohtainen päättely toimii paremmin samankaltaisten pyyntöjen kohdalla. Esimerkiksi jos otat käyttöön esimerkiksi tekstin tuottamiseen tarkoitettua luonnollisen kielen prosessointimallia, eräkäsittely on tehokkaampaa, jos luot erissä pyyntöjä, jotka ovat samanpituisia.

Viimeiseksi, eräkohtaista päättelyä ei suorita syväoppimismalli itse, vaan korkeampi tason kerros, kuten erityinen päättelypalvelin. Tällaisen kerroksen toteuttaminen ei ole aina helppoa. Esimerkiksi esimerkiksi NVIDIAn Triton Inference Server (ks. jäljempänä) on erittäin hyvä suorittamaan eräkohtaista päättelyä, mutta sinun on ensin löydettävä keino tehdä mallista yhteensopiva Tritonin kanssa.

Kun olet onnistunut viemään mallisi Tritoniin, eräkohtainen päättely on todella helppoa. Tässä on esimerkiksi miten luodaan enintään 128 pyyntöä sisältäviä eriä ja odotetaan enintään 5 sekuntia ennen erän käsittelyä. erää (tämä olisi laitettava config.pbtxt-tiedostoon).

max_batch_size: 128
dynamic_batching {
  max_queue_delay_microseconds: 5000000
}

Hyödynnä mukautettuja toteutuksia

Monet ihmiset ja yritykset työskentelevät ahkerasti matalan tason optimointien parissa joidenkin Transformer-pohjaisten luonnollisen kielen prosessointiohjelmien parissa. malleihin. Voi olla hyvä ajatus hyödyntää näitä mallisi mukautettuja toteutuksia.

Useimmiten nämä räätälöidyt toteutukset ovat helppokäyttöisiä, eivätkä ne vaadi juuri lainkaan lisätyötä. sinulta. Mainitsen tässä muutamia niistä:

Tässä on esimerkki siitä, miten voit tehdä päätelmiä GPT Neo 2.7B -mallillesi DeepSpeedin ansiosta. Eihän se ole liian vaikeaa?

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

Kun käytät jotakin näistä mukautetuista toteutuksista, älä unohda testata tiukasti uuden ohjelmasi laatua. mallin, sillä et voi koskaan olla 100-prosenttisen varma siitä, ettei näissä uusissa toteutuksissa ole vikoja.

Käytä omaa päättelymoottoria

Microsoft ja NVIDIA kehittivät molemmat kehittyneitä päättelymoottoreita parantaakseen päättelyä. suorituskykyä.

ONNX Runtime ("ORT"), Microsoftin kehittämä, alustarajat ylittävä päättely- ja koulutuskoneoppimisohjelma. kiihdytin (katso tästä). NVIDIAn TensorRT ("TRT") on SDK korkean suorituskyvyn syväoppimista varten. päättelyyn. Se sisältää syväoppimisen päättelyn optimoijan ja suoritusajan, joka tarjoaa alhaisen viiveen ja korkean läpimenon syväoppimisen päättelysovelluksille. (katso tästä).

Lisäksi NVIDIA Triton Inference Server on päättelyä palveleva ohjelmisto, joka tekee tekoälyn päättelystä helpommaksi mahdollistamalla tekoälymallien käyttöönoton eri kehyksistä. Tritonin ansiosta voit esimerkiksi tehdä helposti eräkohtaista päättelyä ja ajaa useita syväoppimismalleja samanaikaisesti samalla näytönohjaimella, ottaa käyttöön malleja useilla GPU:illa ja paljon muuta. Katso tästä.

ONNX Runtime
TensorRT
Triton Inference Server

Yllä oleva vaikuttaa jännittävältä, mutta se ei tietenkään ole niin yksinkertaista... Jotta mallisi voisi hyödyntää näitä erityisiä päättelymoottoreita, sinun on ensin muunnettava olemassa oleva malli oikeaan muotoon.

Sinulla on useita vaihtoehtoja:

Kun pelaat edellä mainituilla menetelmillä, sinun on oltava hyvin varovainen vietyjen mallien laadun kanssa. Sinun saatat luulla, että olet vienyt mallisi onnistuneesti, mutta on mahdollista, että olet menettänyt tarkkuutta jonkin verran mallien prosessissa, joten ole hyvin tarkka siinä, miten testaat uutta vietyjä mallejasi.

Päätelmä

Nykyaikaiset muuntajapohjaiset luonnollisen kielen prosessointimallit antavat vaikuttavia tuloksia, joten yhä useammat yritykset haluavat ottaa käyttöön käyttää niitä tuotannossa. Hyvin usein näyttää kuitenkin siltä, että suorituskyky on pettymys...

Ennusteiden nopeuden parantaminen on ratkaisevan tärkeää, mutta kuten edellä on todettu, ei ole olemassa minkäänlaista yhtä kaikille sopivaa ratkaisua.

Jos sinulla on kysyttävää siitä, miten voit nopeuttaa päättelyäsi, ota rohkeasti yhteyttä meihin!

Julien Salinas
teknologiajohtaja, NLP Cloud