Pentru oamenii de știință de date, mutarea modelelor de învățare automată (ML) de la demonstrarea conceptului la producție prezintă adesea o provocare semnificativă. Una dintre principalele provocări poate fi implementarea în cloud a unui model performant, antrenat local, pentru deducere și utilizare în alte aplicații. Gestionarea procesului poate fi greoaie, dar cu instrumentul potrivit, puteți reduce semnificativ efortul necesar.
Inferență Amazon SageMaker, care a fost pus la dispoziție în general în aprilie 2022, vă facilitează implementarea modelelor ML în producție pentru a face predicții la scară, oferind o selecție largă de infrastructură ML și opțiuni de implementare a modelelor pentru a vă ajuta să satisfaceți toate tipurile de nevoi de inferență ML. Poți să folosești Puncte finale SageMaker Serverless Inference pentru sarcinile de lucru care au perioade de inactivitate între accesele de trafic și pot tolera pornirile la rece. Punctele finale se extind automat în funcție de trafic și elimină greutățile nediferențiate ale selectării și gestionării serverelor. În plus, puteți utiliza AWS Lambdas direct pentru a vă expune modelele și pentru a vă implementa aplicațiile ML folosind cadrul open-source preferat, care se poate dovedi a fi mai flexibil și mai rentabil.
FastAPI este un cadru web modern, de înaltă performanță, pentru construirea de API-uri cu Python. Se remarcă atunci când vine vorba de dezvoltarea de aplicații fără server cu microservicii RESTful și de cazuri de utilizare care necesită inferență ML la scară în mai multe industrii. Ușurința și funcționalitățile sale încorporate, cum ar fi documentația automată API, o fac o alegere populară printre inginerii ML pentru a implementa API-uri de inferență de înaltă performanță. Puteți să vă definiți și să organizați rutele utilizând funcționalități ieșite din cutie din FastAPI pentru a extinde și a gestiona logica de afaceri în creștere, după cum este necesar, testați local și găzduiți-o pe Lambda, apoi expuneți-le printr-un singur gateway API, care vă permite să aduceți un cadru web cu sursă deschisă la Lambda, fără nicio ridicare grea sau refactorizarea codurilor dvs.
Această postare vă arată cum să implementați și să rulați cu ușurință inferențe ML fără server prin expunerea modelului dvs. ML ca punct final folosind FastAPI, Docker, Lambda și Gateway API Amazon. De asemenea, vă arătăm cum să automatizați implementarea utilizând Kit AWS Cloud Development (AWS CDK).
Prezentare generală a soluțiilor
Următoarea diagramă arată arhitectura soluției pe care o implementăm în această postare.
Cerințe preliminare
Trebuie să aveți următoarele condiții preliminare:
- Python3 instalat, împreună cu
virtualenv
pentru crearea și gestionarea mediilor virtuale în Python - aws-cdk v2 instalat pe sistemul dumneavoastră pentru a putea utiliza AWS CDK CLI
- Docker instalat și rulează pe mașina dvs. locală
Testați dacă este instalat tot software-ul necesar:
- Interfața liniei de comandă AWS (AWS CLI) este necesar. Conectați-vă la contul dvs. și alegeți Regiunea în care doriți să implementați soluția.
- Utilizați următorul cod pentru a vă verifica versiunea Python:
- Verifica daca
virtualenv
este instalat pentru crearea și gestionarea mediilor virtuale în Python. Strict vorbind, aceasta nu este o cerință grea, dar vă va face viața mai ușoară și vă va ajuta să urmați mai ușor această postare. Utilizați următorul cod: - Verificați dacă cdk este instalat. Acesta va fi folosit pentru a implementa soluția noastră.
- Verificați dacă Docker este instalat. Soluția noastră va face modelul dvs. accesibil printr-o imagine Docker pentru Lambda. Pentru a construi această imagine local, avem nevoie de Docker.
- Asigurați-vă că Docker este activ și rulează cu următorul cod:
Cum să vă structurați proiectul FastAPI utilizând AWS CDK
Folosim următoarea structură de directoare pentru proiectul nostru (ignorând un cod standard AWS CDK care este imaterial în contextul acestei postări):
Directorul urmează structura recomandată a proiectelor AWS CDK pentru Python.
Cea mai importantă parte a acestui depozit este fastapi_model_serving
director. Conține codul care va defini stiva AWS CDK și resursele care vor fi utilizate pentru servirea modelului.
fastapi_model_serving
directorul conține model_endpoint
subdirectorul, care conține toate activele necesare care alcătuiesc punctul nostru final fără server, și anume Dockerfile pentru a construi imaginea Docker pe care Lambda o va folosi, codul funcției Lambda care utilizează FastAPI pentru a gestiona cererile de inferență și a le direcționa către punctul final corect și modelul artefacte ale modelului pe care vrem să-l implementăm. model_endpoint
contine si urmatoarele:
Docker
– Acest subdirector conține următoarele:Dockerfile
– Acesta este folosit pentru a construi imaginea pentru funcția Lambda cu toate artefactele (codul funcției Lambda, artefactele modelului și așa mai departe) în locul potrivit, astfel încât să poată fi utilizate fără probleme.serving.api.tar.gz
– Acesta este un tarball care conține toate activele din folderul runtime care sunt necesare pentru construirea imaginii Docker. Discutăm cum să creăm.tar.gz
fișier mai târziu în această postare.runtime
– Acest subdirector conține următoarele:serving_api
– Codul pentru funcția Lambda și dependențele acesteia specificate în fișierul requirements.txt.custom_lambda_utils
– Acesta include un script de inferență care încarcă artefactele de model necesare, astfel încât modelul să poată fi transmis cătreserving_api
care îl va expune apoi ca punct final.
În plus, avem directorul de șabloane, care oferă un șablon de structuri de foldere și fișiere în care vă puteți defini codurile și API-urile personalizate, urmând exemplul pe care l-am analizat mai devreme. Directorul șabloanelor conține cod fictic pe care îl puteți utiliza pentru a crea noi funcții Lambda:
dummy
– Conține codul care implementează structura unei funcții Lambda obișnuite folosind runtime-ul Pythonapi
– Conține codul care implementează o funcție Lambda care include un punct final FastAPI în jurul unui gateway API existent
Implementați soluția
În mod implicit, codul este implementat în regiunea eu-west-1. Dacă doriți să schimbați Regiunea, puteți modifica variabila de context DEPLOYMENT_REGION în cdk.json
fișier.
Rețineți, totuși, că soluția încearcă să implementeze o funcție Lambda deasupra arhitecturii arm64 și că această caracteristică ar putea să nu fie disponibilă în toate regiunile. În acest caz, trebuie să modificați parametrul arhitecturii în fișierul fastapi_model_serving_stack.py
fișier, precum și prima linie a fișierului Docker din directorul Docker, pentru a găzdui această soluție pe arhitectura x86.
Pentru a implementa soluția, parcurgeți următorii pași:
- Rulați următoarea comandă pentru a clona depozitul GitHub:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
Deoarece dorim să arătăm că soluția poate funcționa cu artefacte model pe care le antrenați local, conținem un model de artefact eșantion al unui model preantrenat. DistilBERT model pe hub-ul modelului Hugging Face pentru o sarcină de răspuns la întrebări înserving_api.tar.gz
fişier. Timpul de descărcare poate dura aproximativ 3-5 minute. Acum, să creăm mediul. - Descărcați modelul preantrenat care va fi implementat din hub-ul modelului Hugging Face în
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
director. De asemenea, creează un mediu virtual și instalează toate dependențele necesare. Trebuie să rulați această comandă o singură dată:make prep
. Această comandă poate dura aproximativ 5 minute (în funcție de lățimea de bandă de internet) deoarece trebuie să descarce artefactele modelului. - Ambalați artefactele modelului în interiorul a
.tar.gz
arhivă care va fi utilizată în interiorul imaginii Docker care este construită în stiva AWS CDK. Trebuie să rulați acest cod ori de câte ori faceți modificări la artefactele modelului sau la API-ul în sine pentru a avea întotdeauna cea mai actualizată versiune a punctului final de difuzare:make package_model
. Artefactele sunt toate la locul lor. Acum putem implementa stiva AWS CDK în contul dvs. AWS. - Rulați cdk bootstrap dacă este prima dată când implementați o aplicație AWS CDK într-un mediu (combinație cont + regiune):
Această stivă include resurse care sunt necesare pentru funcționarea setului de instrumente. De exemplu, stiva include un compartiment Amazon Simple Storage Service (Amazon S3) care este utilizat pentru a stoca șabloane și active în timpul procesului de implementare.
Deoarece construim imagini Docker local în această implementare AWS CDK, trebuie să ne asigurăm că demonul Docker rulează înainte de a putea implementa această stivă prin intermediul AWS CDK CLI.
- Pentru a verifica dacă demonul Docker rulează sau nu pe sistemul dvs., utilizați următoarea comandă:
Dacă nu primiți un mesaj de eroare, ar trebui să fiți gata să implementați soluția.
- Implementați soluția cu următoarea comandă:
Acest pas poate dura aproximativ 5-10 minute din cauza construirii și împingerii imaginii Docker.
Depanare
Dacă sunteți un utilizator Mac, este posibil să întâmpinați o eroare când vă conectați Registrul Amazon de containere elastice (Amazon ECR) cu autentificarea Docker, cum ar fi Error saving credentials ... not implemented
. De exemplu:
Înainte de a putea utiliza Lambda deasupra containerelor Docker din interiorul AWS CDK, poate fi necesar să schimbați ~/docker/config.json
fişier. Mai precis, este posibil să trebuiască să modificați parametrul credsStore în ~/.docker/config.json
la osxkeychain. Aceasta rezolvă problemele de conectare Amazon ECR pe un Mac.
Executați inferențe în timp real
După dumneavoastră Formarea AWS Cloud stiva este implementată cu succes, accesați ieşiri pentru stiva dvs. pe consola AWS CloudFormation și deschideți adresa URL a punctului final. Acum modelul nostru este accesibil prin adresa URL a punctului final și suntem gata să rulăm inferențe în timp real.
Navigați la adresa URL pentru a vedea dacă puteți vedea mesajul „hello world” și adăugați /docs
la adresa pentru a vedea dacă puteți vedea cu succes pagina interactivă Swagger UI. Este posibil să existe o oră de pornire la rece, așa că poate fi necesar să așteptați sau să vă reîmprospătați de câteva ori.
După ce vă conectați la pagina de destinație a paginii FastAPI swagger UI, puteți rula prin rădăcină /
sau prin /question
.
De la /
, puteți rula API-ul și puteți primi mesajul „hello world”.
De la /question
, puteți rula API-ul și rulați inferența ML pe modelul pe care l-am implementat pentru un caz de răspuns la întrebări. De exemplu, folosim întrebarea care este acum culoarea mașinii mele? iar contextul este Mașina mea cândva era albastră, dar am vopsit-o în roșu.
Când alegi Executa, pe baza contextului dat, modelul va răspunde la întrebare cu un răspuns, așa cum se arată în următoarea captură de ecran.
În corpul răspunsului, puteți vedea răspunsul cu scorul de încredere din model. De asemenea, puteți experimenta cu alte exemple sau puteți încorpora API-ul în aplicația dvs. existentă.
Alternativ, puteți rula inferența prin cod. Iată un exemplu scris în Python, folosind requests
bibliotecă:
Codul scoate un șir similar cu următorul:
Dacă sunteți interesat să aflați mai multe despre implementarea modelelor de inteligență artificială generativă și de limbaje mari pe AWS, consultați aici:
- Implementați IA generativă fără server pe AWS Lambda cu OpenLLaMa
- Implementați modele de limbaj mari pe AWS Inferentia2 folosind containere de inferență de modele mari
A curăța
În directorul rădăcină al depozitului, rulați următorul cod pentru a vă curăța resursele:
Concluzie
În această postare, am prezentat modul în care puteți utiliza Lambda pentru a implementa modelul ML antrenat folosind cadrul de aplicație web preferat, cum ar fi FastAPI. Am furnizat un depozit de cod detaliat pe care îl puteți implementa și vă păstrați flexibilitatea de a trece la orice artefacte de model instruite pe care le procesați. Performanța poate depinde de modul în care implementați și implementați modelul.
Ești binevenit să-l încerci singur și suntem încântați să auzim feedback-ul tău!
Despre Autori
Tingyi Li este un arhitect de soluții pentru întreprinderi de la AWS cu sediul în Stockholm, Suedia, care sprijină clienții nordici. Îi place să ajute clienții cu arhitectura, designul și dezvoltarea soluțiilor de infrastructură optimizate pentru cloud. Este specializată în AI și Machine Learning și este interesată să ofere clienților inteligență în aplicațiile lor AI/ML. În timpul liber, este, de asemenea, ilustratoare cu jumătate de normă, care scrie romane și cântă la pian.
Demir Catovic este un inginer de învățare automată de la AWS cu sediul în Zurich, Elveția. El interacționează cu clienții și îi ajută să implementeze aplicații ML scalabile și complet funcționale. Este pasionat de construirea și producția de aplicații de învățare automată pentru clienți și este întotdeauna dornic să exploreze noile tendințe și tehnologii de ultimă oră din lumea AI/ML.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- PlatoData.Network Vertical Generative Ai. Împuterniciți-vă. Accesați Aici.
- PlatoAiStream. Web3 Intelligence. Cunoștințe amplificate. Accesați Aici.
- PlatoESG. Automobile/VE-uri, carbon, CleanTech, Energie, Mediu inconjurator, Solar, Managementul deșeurilor. Accesați Aici.
- BlockOffsets. Modernizarea proprietății de compensare a mediului. Accesați Aici.
- Sursa: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :este
- :nu
- :Unde
- $UP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- Capabil
- Despre Noi
- accesibil
- Cont
- peste
- adăuga
- În plus,
- adresa
- AI
- AI / ML
- TOATE
- permite
- de-a lungul
- de asemenea
- mereu
- Amazon
- Amazon Web Services
- între
- an
- și
- răspunde
- Orice
- api
- API-uri
- aplicaţia
- aplicație
- aplicatii
- Aprilie
- arhitectură
- arhivă
- SUNT
- în jurul
- AS
- Bunuri
- At
- automatizarea
- Automat
- în mod automat
- disponibil
- departe
- AWS
- Formarea AWS Cloud
- AWS Lambdas
- Backend
- Lățime de bandă
- bazat
- BE
- deoarece
- înainte
- între
- Albastru
- corp
- Bootstrap
- aduce
- larg
- construi
- Clădire
- construit
- construit-in
- afaceri
- dar
- by
- CAN
- mașină
- caz
- cazuri
- contesta
- provocări
- Schimbare
- Modificări
- verifica
- alegere
- Alege
- Cloud
- cod
- Coduri
- rece
- culoare
- combinaţie
- vine
- Completă
- concept
- încredere
- Conectați
- conexiune
- Consoleze
- conţine
- Recipient
- Containere
- conține
- context
- corecta
- cost-eficiente
- ar putea
- crea
- creează
- Crearea
- scrisori de acreditare
- clienţii care
- personalizate
- ultima generație
- de date
- Mod implicit
- În funcție
- implementa
- dislocate
- Implementarea
- desfășurarea
- Amenajări
- detaliat
- în curs de dezvoltare
- Dezvoltare
- direct
- discuta
- Docher
- documentaţie
- Dont
- Descarca
- două
- în timpul
- Mai devreme
- uşura
- mai ușor
- cu ușurință
- uşor
- efort
- încastra
- împuternicirea
- capăt
- Punct final
- se angajează
- inginer
- inginerii
- asigura
- Afacere
- Mediu inconjurator
- medii
- eroare
- exemplu
- exemple
- excitat
- a executa
- existent
- Ieşire
- experiment
- explora
- Față
- Caracteristică
- puțini
- Fișier
- Fişiere
- First
- prima dată
- Flexibilitate
- flexibil
- urma
- următor
- urmează
- Pentru
- Cadru
- din
- funcţie
- funcționalități
- funcții
- poartă
- în general
- generativ
- AI generativă
- obține
- GitHub
- dat
- Go
- merge
- În creştere
- manipula
- Greu
- Avea
- he
- auzi
- greu
- ridicare de greutati
- ajutor
- ajutor
- ajută
- ei
- aici
- performanta ridicata
- gazdă
- Cum
- Cum Pentru a
- Totuși
- HTML
- http
- HTTPS
- Butuc
- i
- Idle
- if
- imagine
- imagini
- punerea în aplicare a
- ustensile
- important
- in
- În altele
- include
- industrii
- Infrastructură
- în interiorul
- instalat
- Inteligență
- interactiv
- interesat
- Internet
- în
- introdus
- probleme de
- IT
- ESTE
- în sine
- JSON
- pasionat
- Cunoaștere
- aterizare
- limbă
- mare
- mai tarziu
- învăţare
- Bibliotecă
- Viaţă
- ridicare
- ca
- Linie
- loturile
- local
- la nivel local
- log
- logare
- logică
- Logare
- mac
- maşină
- masina de învățare
- făcut
- Principal
- face
- FACE
- administra
- de conducere
- Mai..
- Întâlni
- mesaj
- microservices
- ar putea
- minte
- minute
- ML
- model
- Modele
- Modern
- mai mult
- cele mai multe
- în mişcare
- multiplu
- trebuie sa
- my
- și anume
- necesar
- Nevoie
- necesar
- nevoilor
- Nou
- acum
- of
- de multe ori
- on
- dată
- ONE
- afară
- deschide
- open-source
- operaţie
- Opţiuni
- or
- comandă
- obișnuit
- Altele
- al nostru
- afară
- ambalate
- pagină
- parametru
- parte
- Trecut
- pasionat
- performanță
- perioadele
- Loc
- Plato
- Informații despre date Platon
- PlatoData
- joacă
- Popular
- Post
- Predictii
- preferat
- premise
- cadouri
- proces
- producere
- proiect
- Proiecte
- dovadă
- dovada de concept
- Dovedi
- prevăzut
- furnizează
- furnizarea
- împingerea
- Piton
- întrebare
- gata
- în timp real
- Roșu
- reduce
- regiune
- regiuni
- depozit
- cereri de
- necesar
- cerință
- Cerinţe
- Resurse
- răspuns
- rezultat
- reține
- dreapta
- rădăcină
- Traseul
- rute
- Alerga
- funcţionare
- sagemaker
- economisire
- scalabil
- Scară
- oamenii de stiinta
- domeniu
- scor
- vedea
- selectarea
- selecţie
- serverless
- Servere
- serviciu
- Servicii
- servire
- set
- ea
- să
- Arăta
- prezenta
- indicat
- Emisiuni
- semnificativ
- semnificativ
- asemănător
- simplu
- singur
- So
- Software
- soluţie
- soluţii
- rezolvă
- unele
- vorbire
- de specialitate
- specific
- specificată
- stivui
- Standuri
- Începe
- începe
- Stare
- Pas
- paşi
- depozitare
- stoca
- stocarea
- Şir
- structura
- Reușit
- astfel de
- De sprijin
- Suedia
- Elveția
- sistem
- Lua
- Sarcină
- Tehnologii
- șablon
- şabloane
- test
- acea
- lor
- Lor
- apoi
- Acolo.
- ei
- acest
- Prin
- timp
- ori
- la
- instrument
- top
- trafic
- Tren
- dresat
- Tendinţe
- încerca
- ui
- unix
- up-to-data
- URL-ul
- utilizare
- utilizat
- Utilizator
- utilizări
- folosind
- versiune
- de
- Virtual
- aștepta
- vrea
- a fost
- we
- web
- aplicatie web
- servicii web
- bun venit
- BINE
- a mers
- Ce
- Ce este
- cand
- oricând
- dacă
- care
- OMS
- voi
- cu
- fără
- Apartamente
- lume
- scris
- Tu
- Ta
- te
- zephyrnet
- Zurich