Kun datatieteilijät ovat huolellisesti keksineet tyydyttävän koneoppimismallin (ML), malli on otettava käyttöön, jotta muut organisaation jäsenet voivat tehdä siitä päätelmiä. Mallien käyttöönotto mittakaavassa optimoiduilla kustannuksilla ja laskentateholla voi kuitenkin olla pelottava ja raskas tehtävä. Amazon Sage Maker päätepisteet tarjoavat helposti skaalautuvan ja kustannusoptimoidun ratkaisun mallin käyttöönottoon. GPLv5-lisenssillä jaettu YOLOv3-malli on suosittu objektientunnistusmalli, joka tunnetaan suoritustehokkuudestaan ja tunnistustarkkuudestaan. Tässä viestissä näytämme, kuinka isännöidä esikoulutettua YOLOv5-mallia SageMaker-päätepisteissä ja AWS Lambda toimintoja kutsuakseen nämä päätepisteet.
Ratkaisun yleiskatsaus
Seuraava kuva esittelee AWS-palvelut, joita käytetään YOLOv5-mallin isännöimiseen SageMaker-päätepisteen avulla ja päätepisteen kutsumiseen Lambdan avulla. SageMaker-muistikirja käyttää YOLOv5 PyTorch -mallia osoitteesta Amazonin yksinkertainen tallennuspalvelu (Amazon S3) -ämpäri, muuntaa sen YOLOv5 TensorFlow -muotoon SavedModel
muodossa ja tallentaa sen takaisin S3-ämpäriin. Tätä mallia käytetään sitten päätepisteen isännöinnissa. Kun kuva ladataan Amazon S3:een, se toimii laukaisimena Lambda-toiminnon suorittamiseksi. Toiminto käyttää OpenCV:tä Lambda kerrokset lukeaksesi ladatun kuvan ja suorittaaksesi päätelmän päätepisteen avulla. Kun päättely on suoritettu, voit käyttää siitä saatuja tuloksia tarpeen mukaan.
Tässä viestissä käymme läpi YOLOv5-oletusmallin hyödyntämisprosessin PyTorchissa ja sen muuntamisen TensorFlow-malliksi. SavedModel
. Tätä mallia isännöidään SageMaker-päätepisteen avulla. Sitten luomme ja julkaisemme Lambda-funktion, joka kutsuu päätepisteen suorittamaan päättelyn. Valmiiksi koulutetut YOLOv5-mallit ovat saatavilla GitHub. Tätä viestiä varten käytämme yolov5l malli.
Edellytykset
Edellytyksenä meidän on määritettävä seuraavat AWS-henkilöllisyyden ja käyttöoikeuksien hallinta (IAM) roolit sopivilla pääsykäytännöt SageMakerille, Lambdalle ja Amazon S3:lle:
- SageMaker IAM -rooli – Tämä vaatii
AmazonS3FullAccess
liitteenä olevat mallin tallentamista ja käyttöä koskevat käytännöt S3-säilössä - Lambda IAM -rooli – Tämä rooli vaatii useita käytäntöjä:
- Amazon S3:een tallennettujen kuvien käyttö edellyttää seuraavia IAM-käytäntöjä:
s3:GetObject
s3:ListBucket
- Jotta voimme suorittaa SageMaker-päätepisteen, tarvitsemme pääsyn seuraaviin IAM-käytäntöihin:
sagemaker:ListEndpoints
sagemaker:DescribeEndpoint
sagemaker:InvokeEndpoint
sagemaker:InvokeEndpointAsync
- Amazon S3:een tallennettujen kuvien käyttö edellyttää seuraavia IAM-käytäntöjä:
Tarvitset myös seuraavat resurssit ja palvelut:
- - AWS-komentoriviliitäntä (AWS CLI), jota käytämme Lambdan luomiseen ja määrittämiseen.
- SageMaker-muistikirjan esiintymä. Näissä Docker on esiasennettu, ja käytämme tätä Lambda-kerrosten luomiseen. Voit määrittää muistikirjan esiintymän suorittamalla seuraavat vaiheet:
- Luo SageMaker-konsolissa muistikirjan ilmentymä ja anna muistikirjan nimi, ilmentymän tyyppi (tässä viestissä käytämme ml.c5.largea), IAM-rooli ja muut parametrit.
- Kloonaa julkinen arkisto ja lisää YOLOv5-arkisto tarjoaa Ultralytics.
Isännöi YOLOv5:tä SageMaker-päätepisteessä
Ennen kuin voimme isännöidä esikoulutettua YOLOv5-mallia SageMakerissa, meidän on vietävä ja pakattava se oikeaan hakemistorakenteeseen sisällä model.tar.gz
. Tässä viestissä näytämme kuinka isännöidä YOLOv5:tä saved_model
muoto. YOLOv5-repo tarjoaa export.py
tiedosto, joka voi viedä mallin monin eri tavoin. Kun olet kloonannut YOLOv5:n ja kirjoittanut YOLOv5-hakemistoon komentoriviltä, voit viedä mallin seuraavalla komennolla:
$ cd yolov5
$ pip install -r requirements.txt tensorflow-cpu
$ python export.py --weights yolov5l.pt --include saved_model --nms
Tämä komento luo uuden hakemiston nimeltä yolov5l_saved_model
sisällä yolov5
hakemistosta. Sisällä yolov5l_saved_model
hakemistosta, meidän pitäisi nähdä seuraavat kohteet:
Luo a model.tar.gz
tiedostoa, siirrä sen sisältö yolov5l_saved_model
että export/Servo/1
. Komentoriviltä voimme pakata export
hakemistoon suorittamalla seuraava komento ja lataamalla malli S3-ämpäriin:
$ mkdir export && mkdir export/Servo
$ mv yolov5l_saved_model export/Servo/1
$ tar -czvf model.tar.gz export/
$ aws s3 cp model.tar.gz "<s3://BUCKET/PATH/model.tar.gz>"
Sitten voimme ottaa SageMaker-päätepisteen käyttöön SageMaker-muistikirjasta suorittamalla seuraavan koodin:
import os
import tensorflow as tf
from tensorflow.keras import backend
from sagemaker.tensorflow import TensorFlowModel
model_data = '<s3://BUCKET/PATH/model.tar.gz>'
role = '<IAM ROLE>'
model = TensorFlowModel(model_data=model_data,
framework_version='2.8', role=role)
INSTANCE_TYPE = 'ml.m5.xlarge'
ENDPOINT_NAME = 'yolov5l-demo'
predictor = model.deploy(initial_instance_count=1,
instance_type=INSTANCE_TYPE,
endpoint_name=ENDPOINT_NAME)
Edellisellä komentosarjalla kestää noin 2–3 minuuttia, jotta malli otetaan kokonaan käyttöön SageMaker-päätepisteeseen. Voit seurata käyttöönoton tilaa SageMaker-konsolissa. Kun malli on isännöity onnistuneesti, malli on valmis päättämistä varten.
Testaa SageMaker-päätepistettä
Kun malli on onnistuneesti isännöity SageMaker-päätepisteessä, voimme testata sitä, minkä teemme käyttämällä tyhjää kuvaa. Testauskoodi on seuraava:
import numpy as np
ENDPOINT_NAME = 'yolov5l-demo'
modelHeight, modelWidth = 640, 640
blank_image = np.zeros((modelHeight,modelWidth,3), np.uint8)
data = np.array(resized_image.astype(np.float32)/255.)
payload = json.dumps([data.tolist()])
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
ContentType='application/json',
Body=payload)
result = json.loads(response['Body'].read().decode())
print('Results: ', result)
Asenna Lambda tasoilla ja liipaisimilla
Käytämme OpenCV:tä mallin esittelyyn välittämällä kuvan ja saamalla päättelytulokset. Lambdassa ei ole valmiiksi rakennettuja ulkoisia kirjastoja, kuten OpenCV, joten meidän on rakennettava se ennen kuin voimme kutsua Lambda-koodia. Lisäksi haluamme varmistaa, että emme rakenna ulkoisia kirjastoja, kuten OpenCV:tä joka kerta, kun Lambdaa kutsutaan. Tätä tarkoitusta varten Lambda tarjoaa toiminnon Lambda-kerrosten luomiseen. Voimme määritellä, mitä näissä kerroksissa menee, ja Lambda-koodi voi kuluttaa ne joka kerta, kun sitä kutsutaan. Esittelemme myös, kuinka luodaan Lambda-tasot OpenCV:lle. Tässä viestissä käytämme an Amazonin elastinen laskentapilvi (Amazon EC2) -esiintymä tasojen luomiseen.
Kun kerrokset ovat paikoillaan, luomme app.py
script, joka on Lambda-koodi, joka käyttää tasoja, suorittaa päättelyn ja saa tuloksia. Seuraava kaavio havainnollistaa tätä työnkulkua.
Luo Lambda-tasot OpenCV:lle Dockerin avulla
Käytä Dockerfilea seuraavasti luodaksesi Docker-kuvan Python 3.7:n avulla:
FROM amazonlinux
RUN yum update -y
RUN yum install gcc openssl-devel bzip2-devel libffi-devel wget tar gzip zip make -y
# Install Python 3.7
WORKDIR /
RUN wget https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tgz
RUN tar -xzvf Python-3.7.12.tgz
WORKDIR /Python-3.7.12
RUN ./configure --enable-optimizations
RUN make altinstall
# Install Python packages
RUN mkdir /packages
RUN echo "opencv-python" >> /packages/requirements.txt
RUN mkdir -p /packages/opencv-python-3.7/python/lib/python3.7/site-packages
RUN pip3.7 install -r /packages/requirements.txt -t /packages/opencv-python-3.7/python/lib/python3.7/site-packages
# Create zip files for Lambda Layer deployment
WORKDIR /packages/opencv-python-3.7/
RUN zip -r9 /packages/cv2-python37.zip .
WORKDIR /packages/
RUN rm -rf /packages/opencv-python-3.7/
Rakenna ja suorita Docker ja tallenna ulostulo ZIP-tiedosto nykyiseen hakemistoon layers
:
$ docker build --tag aws-lambda-layers:latest <PATH/TO/Dockerfile>
$ docker run -rm -it -v $(pwd):/layers aws-lambda-layers cp /packages/cv2-python37.zip /layers
Nyt voimme ladata OpenCV-kerroksen artefaktit Amazon S3:een ja luoda Lambda-kerroksen:
$ aws s3 cp layers/cv2-python37.zip s3://<BUCKET>/<PATH/TO/STORE/ARTIFACTS>
$ aws lambda publish-layer-version --layer-name cv2 --description "Open CV" --content S3Bucket=<BUCKET>,S3Key=<PATH/TO/STORE/ARTIFACTS>/cv2-python37.zip --compatible-runtimes python3.7
Kun edelliset komennot on suoritettu onnistuneesti, sinulla on OpenCV-taso Lambdassa, jota voit tarkastella Lambda-konsolissa.
Luo Lambda-funktio
Hyödynnämme app.py
komentosarja Lambda-funktion luomiseksi ja OpenCV:n käyttämiseksi. Muuta seuraavassa koodissa arvoja BUCKET_NAME
ja IMAGE_LOCATION
kuvan käyttöpaikkaan:
import os, logging, json, time, urllib.parse
import boto3, botocore
import numpy as np, cv2
logger = logging.getLogger()
logger.setLevel(logging.INFO)
client = boto3.client('lambda')
# S3 BUCKETS DETAILS
s3 = boto3.resource('s3')
BUCKET_NAME = "<NAME OF S3 BUCKET FOR INPUT IMAGE>"
IMAGE_LOCATION = "<S3 PATH TO IMAGE>/image.png"
# INFERENCE ENDPOINT DETAILS
ENDPOINT_NAME = 'yolov5l-demo'
config = botocore.config.Config(read_timeout=80)
runtime = boto3.client('runtime.sagemaker', config=config)
modelHeight, modelWidth = 640, 640
# RUNNING LAMBDA
def lambda_handler(event, context):
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
# INPUTS - Download Image file from S3 to Lambda /tmp/
input_imagename = key.split('/')[-1]
logger.info(f'Input Imagename: {input_imagename}')
s3.Bucket(BUCKET_NAME).download_file(IMAGE_LOCATION + '/' + input_imagename, '/tmp/' + input_imagename)
# INFERENCE - Invoke the SageMaker Inference Endpoint
logger.info(f'Starting Inference ... ')
orig_image = cv2.imread('/tmp/' + input_imagename)
if orig_image is not None:
start_time_iter = time.time()
# pre-processing input image
image = cv2.resize(orig_image.copy(), (modelWidth, modelHeight), interpolation = cv2.INTER_AREA)
data = np.array(image.astype(np.float32)/255.)
payload = json.dumps([data.tolist()])
# run inference
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME, ContentType='application/json', Body=payload)
# get the output results
result = json.loads(response['Body'].read().decode())
end_time_iter = time.time()
# get the total time taken for inference
inference_time = round((end_time_iter - start_time_iter)*100)/100
logger.info(f'Inference Completed ... ')
# OUTPUTS - Using the output to utilize in other services downstream
return {
"statusCode": 200,
"body": json.dumps({
"message": "Inference Time:// " + str(inference_time) + " seconds.",
"results": result
}),
}
Ota Lambda-toiminto käyttöön seuraavalla koodilla:
$ zip app.zip app.py
$ aws s3 cp app.zip s3://<BUCKET>/<PATH/TO/STORE/FUNCTION>
$ aws lambda create-function --function-name yolov5-lambda --handler app.lambda_handler --region us-east-1 --runtime python3.7 --environment "Variables={BUCKET_NAME=$BUCKET_NAME,S3_KEY=$S3_KEY}" --code S3Bucket=<BUCKET>,S3Key="<PATH/TO/STORE/FUNCTION/app.zip>"
Kiinnitä OpenCV-kerros Lambda-toimintoon
Kun meillä on Lambda-toiminto ja kerros paikallaan, voimme yhdistää kerroksen toimintoon seuraavasti:
$ aws lambda update-function-configuration --function-name yolov5-lambda --layers cv2
Voimme tarkistaa tasoasetukset Lambda-konsolin kautta.
Laukaise lambda, kun kuva ladataan Amazon S3:een
Käytämme kuvan latausta Amazon S3:een käynnistämään Lambda-toiminnon. Katso ohjeet kohdasta Oppitunti: Amazon S3 -laukaisimen käyttäminen Lambda-toiminnon käynnistämiseen.
Sinun pitäisi nähdä seuraavat toimintotiedot Lambda-konsolissa.
Suorita johtopäätös
Kun olet määrittänyt Lambdan ja SageMaker-päätepisteen, voit testata ulostuloa käynnistämällä Lambda-funktion. Käytämme kuvan latausta Amazon S3:een liipaisimena kutsuaksemme Lambdaa, joka puolestaan kutsuu päätepisteen päätelmiä varten. Lataamme esimerkiksi seuraavan kuvan Amazon S3 -sijaintiin <S3 PATH TO IMAGE>/test_image.png
määritetty edellisessä osiossa.
Kun kuva on ladattu, Lambda-toiminto käynnistyy lataamaan ja lukemaan kuvatiedot ja lähettämään ne SageMaker-päätepisteeseen päätelmiä varten. SageMaker-päätepisteen tulostuloksen saa ja palauttaa funktio JSON-muodossa, jota voimme käyttää eri tavoin. Seuraava kuva näyttää esimerkkitulosteen kuvan päällä.
Puhdistaa
Instanssityypistä riippuen SageMaker-muistikirjat voivat vaatia huomattavaa laskentaa ja kustannuksia. Tarpeettomien kustannusten välttämiseksi suosittelemme pysäyttämään kannettavan tietokoneen esiintymän, kun se ei ole käytössä. Lisäksi Lambda-funktioista ja SageMaker-päätepisteistä veloitetaan vain, kun niitä kutsutaan. Siksi näitä palveluita ei tarvitse puhdistaa. Jos päätepistettä ei kuitenkaan enää käytetä, on hyvä käytäntö poistaa päätepiste ja malli.
Yhteenveto
Tässä viestissä osoitimme, kuinka isännöidä esikoulutettu YOLOv5-malli SageMaker-päätepisteessä ja käyttää Lambdaa päättelyn käynnistämiseen ja tulosteen käsittelemiseen. Tarkempi koodi on saatavilla osoitteessa GitHub.
Lisätietoja SageMaker-päätepisteistä on osoitteessa Luo päätepiste ja ota malli käyttöön ja Rakenna, testaa ja ota käyttöön Amazon SageMaker -päätelmämallisi AWS Lambdassa, joka korostaa, kuinka voit automatisoida YOLOv5-mallien käyttöönottoprosessin.
Tietoja kirjoittajista
Kevin Song on IoT Edge Data Scientist AWS Professional Services -palvelussa. Kevin on valmistunut tohtoriksi biofysiikasta Chicagon yliopistosta. Hänellä on yli 4 vuoden kokemus alalta Computer Visionista ja koneoppimisesta. Hän on mukana auttamassa urheilu- ja biotieteiden alan asiakkaita ottamaan käyttöön koneoppimismalleja.
Romil Shah on IoT Edge Data Scientist AWS Professional Services -palvelussa. Romililla on yli 6 vuoden kokemus alalta Computer Vision-, koneoppimis- ja IoT-reunalaitteista. Hän on mukana auttamassa asiakkaita optimoimaan ja ottamaan käyttöön koneoppimismallejaan teollisuusasennusten reunalaitteille.
- Lisäasetukset (300)
- AI
- ai taide
- ai taiteen generaattori
- ai robotti
- Amazon Sage Maker
- tekoäly
- tekoälyn sertifiointi
- tekoäly pankkitoiminnassa
- tekoäly robotti
- tekoälyrobotit
- tekoälyohjelmisto
- AWS Lambda
- AWS-koneoppiminen
- blockchain
- blockchain-konferenssi ai
- coingenius
- Laskea
- keskustelullinen tekoäly
- kryptokonferenssi ai
- dall's
- syvä oppiminen
- google ai
- koneoppiminen
- Objektin tunnistus
- Platon
- plato ai
- Platonin tietotieto
- Platon peli
- PlatonData
- platopeliä
- mittakaava ai
- syntaksi
- Tekniset ohjeet
- zephyrnet