Voor datawetenschappers vormt het verplaatsen van machine learning (ML)-modellen van proof of concept naar productie vaak een grote uitdaging. Een van de grootste uitdagingen kan het implementeren van een goed presterend, lokaal getraind model in de cloud zijn voor inferentie en gebruik in andere applicaties. Het kan omslachtig zijn om het proces te beheren, maar met de juiste tool kunt u de vereiste inspanning aanzienlijk verminderen.
Amazon SageMaker-gevolgtrekking, dat in april 2022 algemeen beschikbaar werd gesteld, maakt het u gemakkelijk om ML-modellen in productie te nemen om voorspellingen op schaal te doen, en biedt een brede selectie van ML-infrastructuur en modelimplementatieopties om te helpen voldoen aan alle soorten ML-inferentiebehoeften. Je kunt gebruiken SageMaker serverloze inferentie-eindpunten voor werklasten die periodes van inactiviteit hebben tussen verkeersstromen en koude starts kunnen verdragen. De endpoints schalen automatisch uit op basis van verkeer en nemen het ongedifferentieerde zware werk van het selecteren en beheren van servers weg. Bovendien kunt u gebruiken AWS Lambda direct om uw modellen bloot te leggen en uw ML-applicaties te implementeren met behulp van uw favoriete open-source framework, dat flexibeler en kosteneffectiever kan blijken te zijn.
FastAPI is een modern, krachtig webframework voor het bouwen van API's met Python. Het onderscheidt zich als het gaat om het ontwikkelen van serverloze applicaties met RESTful microservices en use cases die ML-inferentie op schaal in meerdere industrieën vereisen. Het gemak en de ingebouwde functionaliteiten, zoals de automatische API-documentatie, maken het een populaire keuze onder ML-engineers om hoogwaardige inferentie-API's in te zetten. U kunt uw routes definiëren en organiseren met behulp van out-of-the-box functionaliteiten van FastAPI om naar behoefte uit te schalen en groeiende bedrijfslogica te verwerken, lokaal te testen en te hosten op Lambda, en vervolgens beschikbaar te stellen via een enkele API-gateway, waarmee u breng een open-source webframework naar Lambda zonder zwaar tillen of refactoring van uw codes.
Dit bericht laat zien hoe u eenvoudig serverloze ML-inferentie kunt implementeren en uitvoeren door uw ML-model als een eindpunt bloot te stellen met behulp van FastAPI, Docker, Lambda en Amazon API-gateway. We laten u ook zien hoe u de implementatie kunt automatiseren met behulp van de AWS Cloud-ontwikkelingskit (AWS-CDK).
Overzicht oplossingen
Het volgende diagram toont de architectuur van de oplossing die we in dit bericht implementeren.
Voorwaarden
Je moet de volgende voorwaarden hebben:
- Python3 geïnstalleerd, samen met
virtualenv
voor het creëren en beheren van virtuele omgevingen in Python - aws-cdk v2 op uw systeem geïnstalleerd om de AWS CDK CLI te kunnen gebruiken
- Docker geïnstalleerd en uitgevoerd op uw lokale computer
Test of alle benodigde software is geïnstalleerd:
- De AWS-opdrachtregelinterface (AWS CLI) is vereist. Log in op uw account en kies de regio waar u de oplossing wilt implementeren.
- Gebruik de volgende code om uw Python-versie te controleren:
- Controleer of
virtualenv
is geïnstalleerd voor het maken en beheren van virtuele omgevingen in Python. Strikt genomen is dit geen harde vereiste, maar het zal je leven gemakkelijker maken en helpt om dit bericht gemakkelijker te volgen. Gebruik de volgende code: - Controleer of cdk is geïnstalleerd. Dit wordt gebruikt om onze oplossing te implementeren.
- Controleer of Docker is geïnstalleerd. Onze oplossing maakt uw model toegankelijk via een Docker-image voor Lambda. Om deze afbeelding lokaal te bouwen, hebben we Docker nodig.
- Zorg ervoor dat Docker actief is met de volgende code:
Hoe u uw FastAPI-project structureert met behulp van AWS CDK
We gebruiken de volgende directorystructuur voor ons project (waarbij sommige standaard AWS CDK-code wordt genegeerd die niet van belang is in de context van dit bericht):
De map volgt de aanbevolen structuur van AWS CDK-projecten voor Python.
Het belangrijkste onderdeel van deze repository is de fastapi_model_serving
map. Het bevat de code die de AWS CDK-stack definieert en de bronnen die zullen worden gebruikt voor modelserving.
De fastapi_model_serving
map bevat de model_endpoint
subdirectory, die alle activa bevat die nodig zijn om ons serverloze eindpunt te vormen, namelijk de Dockerfile om de Docker-image te bouwen die Lambda zal gebruiken, de Lambda-functiecode die FastAPI gebruikt om inferentieverzoeken af te handelen en ze naar het juiste eindpunt te leiden, en het model artefacten van het model dat we willen inzetten. model_endpoint
bevat ook het volgende:
Docker
– Deze submap bevat het volgende:Dockerfile
- Dit wordt gebruikt om de afbeelding voor de Lambda-functie op te bouwen met alle artefacten (Lambda-functiecode, modelartefacten, enzovoort) op de juiste plaats, zodat ze zonder problemen kunnen worden gebruikt.serving.api.tar.gz
- Dit is een tarball die alle middelen uit de runtime-map bevat die nodig zijn voor het bouwen van de Docker-image. We bespreken hoe je de.tar.gz
bestand verderop in dit bericht.runtime
– Deze submap bevat het volgende:serving_api
– De code voor de Lambda-functie en de bijbehorende afhankelijkheden gespecificeerd in het bestand requirements.txt.custom_lambda_utils
- Dit omvat een inferentiescript dat de benodigde modelartefacten laadt, zodat het model kan worden doorgegeven aan deserving_api
dat zal het dan als een eindpunt blootleggen.
Daarnaast hebben we de sjabloondirectory, die een sjabloon biedt met mapstructuren en bestanden waarin u uw aangepaste codes en API's kunt definiëren volgens het voorbeeld dat we eerder hebben doorgenomen. De sjabloonmap bevat dummycode die u kunt gebruiken om nieuwe Lambda-functies te maken:
dummy
- Bevat de code die de structuur van een gewone Lambda-functie implementeert met behulp van de Python-runtimeapi
– Bevat de code die een Lambda-functie implementeert die een FastAPI-eindpunt rond een bestaande API-gateway wikkelt
Implementeer de oplossing
Standaard wordt de code geïmplementeerd binnen de regio eu-west-1. Als u de regio wilt wijzigen, kunt u de contextvariabele DEPLOYMENT_REGION wijzigen in de cdk.json
bestand.
Houd er echter rekening mee dat de oplossing probeert een Lambda-functie in te zetten bovenop de arm64-architectuur en dat deze functie mogelijk niet in alle regio's beschikbaar is. In dit geval moet u de architectuurparameter in het fastapi_model_serving_stack.py
-bestand, evenals de eerste regel van de Dockerfile in de Docker-directory, om deze oplossing op de x86-architectuur te hosten.
Voer de volgende stappen uit om de oplossing te implementeren:
- Voer de volgende opdracht uit om de GitHub-repository te klonen:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
Omdat we willen laten zien dat de oplossing kan werken met modelartefacten die u lokaal traint, bevatten we een voorbeeldmodelartefact van een vooraf getraind DestillerenBERT model op de Hugging Face-modelhub voor een vraagantwoordtaak in deserving_api.tar.gz
bestand. De downloadtijd kan ongeveer 3-5 minuten duren. Laten we nu de omgeving instellen. - Download het vooraf getrainde model dat wordt geïmplementeerd vanuit de Hugging Face-modelhub naar de
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
map. Het creëert ook een virtuele omgeving en installeert alle afhankelijkheden die nodig zijn. U hoeft deze opdracht maar één keer uit te voeren:make prep
. Deze opdracht kan ongeveer 5 minuten duren (afhankelijk van uw internetbandbreedte) omdat de modelartefacten moeten worden gedownload. - Verpak de modelartefacten in een
.tar.gz
archief dat zal worden gebruikt in de Docker-image die is ingebouwd in de AWS CDK-stack. U moet deze code uitvoeren wanneer u wijzigingen aanbrengt in de modelartefacten of de API zelf om altijd de meest up-to-date versie van uw serverendpoint te hebben:make package_model
. De artefacten zijn allemaal op hun plaats. Nu kunnen we de AWS CDK-stack implementeren op uw AWS-account. - Voer cdk-bootstrap uit als het de eerste keer is dat u een AWS CDK-app implementeert in een omgeving (combinatie account + regio):
Deze stapel bevat bronnen die nodig zijn voor de werking van de toolkit. De stack bevat bijvoorbeeld een Amazon Simple Storage Service (Amazon S3)-bucket die wordt gebruikt om sjablonen en activa op te slaan tijdens het implementatieproces.
Omdat we Docker-images lokaal bouwen in deze AWS CDK-implementatie, moeten we ervoor zorgen dat de Docker-daemon actief is voordat we deze stack kunnen implementeren via de AWS CDK CLI.
- Gebruik de volgende opdracht om te controleren of de Docker-daemon op uw systeem draait:
Als u geen foutbericht krijgt, moet u klaar zijn om de oplossing te implementeren.
- Implementeer de oplossing met de volgende opdracht:
Deze stap kan ongeveer 5-10 minuten duren vanwege het bouwen en pushen van de Docker-image.
Probleem oplossen
Als u een Mac-gebruiker bent, kunt u een fout tegenkomen bij het inloggen Amazon Elastic Container-register (Amazon ECR) met de Docker-login, zoals Error saving credentials ... not implemented
. Bijvoorbeeld:
Voordat u Lambda bovenop Docker-containers in de AWS CDK kunt gebruiken, moet u mogelijk het ~/docker/config.json
bestand. Meer specifiek moet u mogelijk de credsStore-parameter wijzigen in ~/.docker/config.json
naar osxkeychain. Dat lost Amazon ECR-inlogproblemen op een Mac op.
Voer real-time inferentie uit
Na jouw AWS CloudFormatie stack met succes is geïmplementeerd, gaat u naar de Uitgangen tabblad voor uw stapel op de AWS CloudFormation-console en open de eindpunt-URL. Ons model is nu toegankelijk via de eindpunt-URL en we zijn klaar om real-time gevolgtrekkingen uit te voeren.
Navigeer naar de URL om te zien of u het bericht "hallo wereld" kunt zien en voeg toe /docs
naar het adres om te zien of u de interactieve swagger UI-pagina met succes kunt zien. Er kan een koude starttijd zijn, dus het kan zijn dat u een paar keer moet wachten of vernieuwen.
Nadat u bent ingelogd op de bestemmingspagina van de FastAPI swagger UI-pagina, kunt u via de root uitvoeren /
of via /question
.
Van /
, kunt u de API uitvoeren en het bericht "Hallo wereld" ontvangen.
Van /question
, kunt u de API uitvoeren en ML-inferentie uitvoeren op het model dat we hebben geïmplementeerd voor een casus voor het beantwoorden van vragen. We gebruiken bijvoorbeeld de vraag Wat is nu de kleur van mijn auto? en de context is Mijn auto was vroeger blauw, maar ik heb rood geverfd.
Wanneer je kiest Uitvoeren, op basis van de gegeven context, zal het model de vraag beantwoorden met een antwoord, zoals te zien is in de volgende schermafbeelding.
In de antwoordtekst ziet u het antwoord met de betrouwbaarheidsscore van het model. U kunt ook experimenteren met andere voorbeelden of de API integreren in uw bestaande applicatie.
U kunt de gevolgtrekking ook via code uitvoeren. Hier is een voorbeeld geschreven in Python, met behulp van de requests
bibliotheek:
De code voert een tekenreeks uit die lijkt op het volgende:
Als u meer wilt weten over het inzetten van generatieve AI en grote taalmodellen op AWS, kijk dan hier:
- Implementeer serverloze generatieve AI op AWS Lambda met OpenLLaMa
- Implementeer grote taalmodellen op AWS Inferentia2 met behulp van grote model-inferentiecontainers
Opruimen
Voer in de hoofdmap van uw repository de volgende code uit om uw bronnen op te schonen:
Conclusie
In dit bericht hebben we geïntroduceerd hoe u Lambda kunt gebruiken om uw getrainde ML-model te implementeren met behulp van uw favoriete webapplicatieframework, zoals FastAPI. We hebben een gedetailleerde coderepository geleverd die u kunt implementeren, en u behoudt de flexibiliteit om over te schakelen naar de getrainde modelartefacten die u verwerkt. De prestaties kunnen afhangen van hoe u het model implementeert en implementeert.
U bent van harte welkom om het zelf uit te proberen, en we zijn benieuwd naar uw feedback!
Over de auteurs
Tingyi Li is een Enterprise Solutions Architect van AWS gevestigd in Stockholm, Zweden, die de Scandinavische klanten ondersteunt. Ze helpt klanten graag met de architectuur, het ontwerp en de ontwikkeling van voor de cloud geoptimaliseerde infrastructuuroplossingen. Ze is gespecialiseerd in AI en Machine Learning en is geïnteresseerd in het versterken van klanten met intelligentie in hun AI/ML-toepassingen. In haar vrije tijd is ze ook een parttime illustrator die romans schrijft en piano speelt.
Demir Catovic is een Machine Learning Engineer van AWS gevestigd in Zürich, Zwitserland. Hij gaat in gesprek met klanten en helpt hen schaalbare en volledig functionele ML-applicaties te implementeren. Hij is gepassioneerd door het bouwen en produceren van machine learning-applicaties voor klanten en is altijd bereid nieuwe trends en geavanceerde technologieën in de AI/ML-wereld te verkennen.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoData.Network Verticale generatieve AI. Versterk jezelf. Toegang hier.
- PlatoAiStream. Web3-intelligentie. Kennis versterkt. Toegang hier.
- PlatoESG. Automotive / EV's, carbon, CleanTech, Energie, Milieu, Zonne, Afvalbeheer. Toegang hier.
- BlockOffsets. Eigendom voor milieucompensatie moderniseren. Toegang hier.
- Bron: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :is
- :niet
- :waar
- $UP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- in staat
- Over
- beschikbaar
- Account
- over
- toevoegen
- Daarnaast
- adres
- AI
- AI / ML
- Alles
- toestaat
- langs
- ook
- altijd
- Amazone
- Amazon Web Services
- te midden van
- an
- en
- beantwoorden
- elke
- api
- APIs
- gebruiken
- Aanvraag
- toepassingen
- April
- architectuur
- Archief
- ZIJN
- rond
- AS
- Activa
- At
- automatiseren
- Automatisch
- webmaster.
- Beschikbaar
- weg
- AWS
- AWS CloudFormatie
- AWS Lambda
- backend
- bandbreedte
- gebaseerde
- BE
- omdat
- vaardigheden
- tussen
- Blauw
- lichaam
- Bootstrap
- brengen
- breed
- bouw
- Gebouw
- bebouwd
- ingebouwd
- bedrijfsdeskundigen
- maar
- by
- CAN
- auto
- geval
- gevallen
- uitdagen
- uitdagingen
- verandering
- Wijzigingen
- controle
- keuze
- Kies
- Cloud
- code
- codes
- koud
- kleur
- combinatie van
- komt
- compleet
- concept
- vertrouwen
- Verbinden
- versterken
- troosten
- bevatten
- Containers
- containers
- bevat
- verband
- te corrigeren
- kostenefficient
- kon
- en je merk te creëren
- creëert
- Wij creëren
- Geloofsbrieven
- Klanten
- aangepaste
- op het randje
- gegevens
- Standaard
- Afhankelijk
- implementeren
- ingezet
- het inzetten
- inzet
- Design
- gedetailleerd
- het ontwikkelen van
- Ontwikkeling
- direct
- bespreken
- havenarbeider
- documentatie
- Dont
- Download
- twee
- gedurende
- Vroeger
- gemak
- gemakkelijker
- gemakkelijk
- En het is heel gemakkelijk
- inspanning
- insluiten
- empowering
- einde
- Endpoint
- houdt zich bezig
- ingenieur
- Ingenieurs
- verzekeren
- Enterprise
- Milieu
- omgevingen
- fout
- voorbeeld
- voorbeelden
- opgewonden
- uitvoeren
- bestaand
- afrit
- experiment
- Verken
- Gezicht
- Kenmerk
- weinig
- Dien in
- Bestanden
- Voornaam*
- eerste keer
- Flexibiliteit
- flexibel
- volgen
- volgend
- volgt
- Voor
- Achtergrond
- oppompen van
- functie
- functionaliteiten
- functies
- poort
- algemeen
- generatief
- generatieve AI
- krijgen
- GitHub
- gegeven
- Go
- gaan
- Groeiend
- handvat
- Hard
- Hebben
- he
- horen
- zwaar
- zwaar tillen
- hulp
- het helpen van
- helpt
- haar
- hier
- hoge performantie
- gastheer
- Hoe
- How To
- Echter
- HTML
- http
- HTTPS
- Naaf
- i
- Idle
- if
- beeld
- afbeeldingen
- uitvoeren
- gereedschap
- belangrijk
- in
- Anders
- omvat
- industrieën
- Infrastructuur
- binnen
- geïnstalleerd
- Intelligentie
- interactieve
- geïnteresseerd
- Internet
- in
- geïntroduceerd
- problemen
- IT
- HAAR
- zelf
- json
- Keen
- Weten
- landing
- taal
- Groot
- later
- leren
- Bibliotheek
- Life
- facelift
- als
- Lijn
- ladingen
- lokaal
- plaatselijk
- inloggen
- logging
- logica
- Log in
- Mac
- machine
- machine learning
- gemaakt
- Hoofd
- maken
- MERKEN
- beheer
- beheren
- Mei..
- Maak kennis met
- Bericht
- microservices
- macht
- denken
- minuten
- ML
- model
- modellen
- Modern
- meer
- meest
- bewegend
- meervoudig
- Dan moet je
- my
- namelijk
- noodzakelijk
- Noodzaak
- nodig
- behoeften
- New
- nu
- of
- vaak
- on
- eens
- EEN
- Slechts
- open
- open source
- operatie
- Opties
- or
- bestellen
- gewoon
- Overige
- onze
- uit
- verpakt
- pagina
- parameter
- deel
- voorbij
- hartstochtelijk
- prestatie
- periodes
- plaats
- Plato
- Plato gegevensintelligentie
- PlatoData
- speelt
- Populair
- Post
- Voorspellingen
- bij voorkeur
- vereisten
- cadeautjes
- productie
- project
- projecten
- bewijs
- proof of concept voor
- Bewijzen
- mits
- biedt
- het verstrekken van
- voortvarend
- Python
- vraag
- klaar
- real-time
- Rood
- verminderen
- regio
- regio
- bewaarplaats
- verzoeken
- nodig
- vereiste
- Voorwaarden
- Resources
- antwoord
- resultaat
- behouden
- rechts
- wortel
- weg
- wegen
- lopen
- lopend
- sagemaker
- besparing
- schaalbare
- Scale
- wetenschappers
- omvang
- partituur
- zien
- selecteren
- selectie
- Serverless
- Servers
- service
- Diensten
- serveer-
- reeks
- ze
- moet
- tonen
- showcase
- getoond
- Shows
- aanzienlijke
- aanzienlijk
- gelijk
- Eenvoudig
- single
- So
- Software
- oplossing
- Oplossingen
- Lost op
- sommige
- spreken
- gespecialiseerde
- specifiek
- gespecificeerd
- stack
- staat
- begin
- starts
- Status
- Stap voor
- Stappen
- mediaopslag
- shop
- bewaartemperatuur
- Draad
- structuur
- Met goed gevolg
- dergelijk
- Ondersteuning
- Zweden
- Zwitserland
- system
- Nemen
- Taak
- Technologies
- sjabloon
- templates
- proef
- dat
- De
- hun
- Ze
- harte
- Er.
- ze
- dit
- Door
- niet de tijd of
- keer
- naar
- tools
- top
- verkeer
- Trainen
- getraind
- Trends
- proberen
- ui
- unix
- up-to-date
- URL
- .
- gebruikt
- Gebruiker
- toepassingen
- gebruik
- versie
- via
- Virtueel
- wachten
- willen
- was
- we
- web
- web applicatie
- webservices
- welkom
- GOED
- gegaan
- Wat
- Wat is
- wanneer
- telkens als
- of
- welke
- WIE
- wil
- Met
- zonder
- Mijn werk
- wereld
- geschreven
- You
- Your
- jezelf
- zephyrnet
- Zurich