Pažangūs gilaus mokymosi modeliai, skirti natūralios kalbos apdorojimui, pagrįsti transformatoriais, duoda įspūdingų rezultatų, tačiau gauti aukštą spartos rezultatus yra sudėtinga. Šiame straipsnyje apibendriname geriausias galimybes, kurias turite, jei norite sumažinti savo prognozių vėlavimą gamyboje.
Kai norima padidinti transformatoriais pagrįstų natūralios kalbos apdorojimo modelių greitį, "naivus" metodas yra naudoti daugiau pažangesnę techninę įrangą.
Dažniausiai tai yra neišvengiamas sprendimas, nes visi programinės įrangos sprendimai turi ribas. Įsivaizduokite, kad išvadas darote centriniame procesoriuje. Galite ištisas savaites praleisti dirbdami prie savo mėgstamo Transformeriu pagrįsto modelio žemo lygio optimizavimo, tačiau labai tikėtina, kad vis tiek pasieksite geresnį spartos padidėjimą tiesiog perkeldami savo modelį į NVIDIA A100 GPU.
Šiais laikais gamyboje išvadoms daryti dažniausiai naudojami NVIDIA Tesla T4 ir V100 GPU.
Tačiau ką daryti, jei jau atnaujinote aparatinę įrangą? Arba ką daryti, jei jūsų biudžetas ribotas ir negalite negalite sau leisti naudoti paskutinius naujausius pažangiausius brangius GPU? Skaitykite toliau!
Grupinė išvada - tai kelių užklausų siuntimas modeliui vienu metu, todėl ji skirta jūsų užklausas vienu metu.
Partijų išvada yra labai veiksminga, nes jūsų modelis beveik per tą patį laiką išsprendžia kelioms užklausoms, tiek pat, kiek reikia vienai užklausai patenkinti. Po gaubtu kai kurios operacijos bus faktorizuotos, todėl užuot viską atlikęs n kartų, modelis tai atliks tik vieną kartą.
Techniniu požiūriu tai nesumažina užklausų vėlavimo, nes užklausos nebus greičiau, tačiau tai žymiai padidins jūsų paraiškos pralaidumą (jūsų paraiška gali apdoroti daugiau užklausų su ta pačia aparatine įranga).
Tačiau paketinė išvada nėra tobula.
Pirma, jis ne visada tinka išvadoms daryti internetu (t. y. su klientais susijusioms programoms), nes norėdami sukurti partijas, turėsite buferizuoti kai kurias naudotojų užklausas, todėl kai kurie naudotojai turės laukti ilgiau nei įprastai.
2-asis iššūkis: paketinė išvada geriau veikia panašių užklausų atveju. Pavyzdžiui, jei diegiate teksto generavimo natūralios kalbos apdorojimo modelį, paketinis apdorojimas bus efektyvesnis, jei sukursite paketines užklausas, kurios yra vienodo ilgio.
Galiausiai, paketinį išvedimą atlieka ne pats jūsų gilaus mokymosi modelis, o aukštesnis lygmens sluoksnis, pavyzdžiui, specialus išvedimo serveris. Tokį sluoksnį ne visada lengva įdiegti. Pavyzdžiui, . pavyzdžiui, NVIDIA "Triton" išvadų serveris (žr. toliau) labai gerai atlieka paketines išvadas, tačiau pirmiausia reikia rasti būdą, kaip padaryti savo modelį suderinamą su "Triton".
Kai pavyksta eksportuoti modelį į "Triton", paketinis išvedimas yra labai paprastas. Pavyzdžiui, štai šis pavyzdys kaip sukurti paketus, sudarytus iš 128 užklausų, ir laukti ne ilgiau kaip 5 sekundes prieš apdorojant užklausą. (tai turėtų būti įrašyta į "config.pbtxt" failą).
max_batch_size: 128
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
Daug žmonių ir įmonių intensyviai dirba ties žemo lygio optimizavimu kai kuriems transformatoriais pagrįstiems natūralios kalbos apdorojimo procesams. modelių. Jums gali būti gera idėja pasinaudoti šiomis pasirinktinėmis savo modelio realizacijomis.
Dažniausiai šiuos pasirinktinius įgyvendinimo būdus lengva naudoti ir beveik nereikia papildomo darbo. jūsų. Paminėsiu keletą iš jų:
Pateikiame pavyzdį, kaip, naudodami "DeepSpeed", galite atlikti išvadas savo "GPT Neo 2.7B" modeliui. Argi ne per sunku?
# 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)
Naudodami vieną iš šių pasirinktinių realizacijų, nepamirškite kruopščiai išbandyti savo naujojo nes niekada negalite būti 100 % tikri, kad šiose naujose realizacijose nėra klaidų.
Tiek "Microsoft", tiek NVIDIA dirbo prie pažangių išvedimo variklių, kad pagerintų išvedimą našumą.
ONNX "Microsoft" sukurta "Runtime" ("ORT") - tai įvairioms platformoms skirta mašininio mokymosi išvadų ir mokymo sistema spartintuvas (žr. čia). NVIDIA sukurta "TensorRT" (toliau - TRT) - tai SDK, skirtas didelio našumo giliajam mokymuisi. išvadų darymą. Ji apima gilaus mokymosi išvedimo optimizatorių ir vykdymo laiką, kuris užtikrina mažą vėlavimą ir didelį našumą gilaus mokymosi išvedimo programoms. (žr. čia).
Be to, "NVIDIA Triton Inference Server" - tai išvadų teikimo programinė įranga, kuri leidžia daryti dirbtinio intelekto išvadas. palengvina dirbtinio intelekto modelių diegimą iš įvairių struktūrų. Dėl "Triton" galite pavyzdžiui, lengvai atlikti paketinį išvedimą, vienu metu paleisti kelis gilaus mokymosi modelius tame pačiame GPU, diegti modelius keliuose GPU ir dar daugiau. Žr. čia.
Tai, kas išdėstyta pirmiau, atrodo įdomu, bet, žinoma, nėra taip paprasta... Kad jūsų modelis galėtų pasinaudoti šiais specialiais išvedimo varikliais, pirmiausia turite konvertuoti esamą modelį į tinkamą formatą.
Galite rinktis iš kelių variantų:
Naudodamiesi pirmiau nurodytais metodais, turėtumėte būti labai atidūs eksportuojamų modelių kokybei. Jūs galite manyti, kad sėkmingai eksportavote modelį, tačiau gali būti, kad praradote tam tikrą tikslumą. tikslumą, todėl labai griežtai tikrinkite, kaip testuojate savo naująjį eksportuotą modelį.
Šiuolaikiniai transformatoriais pagrįsti natūralios kalbos apdorojimo modeliai duoda įspūdingų rezultatų, todėl vis daugiau įmonių nori juos naudoti gamyboje. Tačiau labai dažnai paaiškėja, kad rezultatai nuvilia...
Labai svarbu gerinti savo prognozių greitį, tačiau, kaip matote aukščiau, nėra vieno visiems tinkančio sprendimo.
Jei turite klausimų, kaip pagreitinti išvadų darymą, nedvejodami kreipkitės į mus!
Julien Salinas
NLP Cloud techninis direktorius