Pärast seda, kui andmeteadlased on hoolikalt välja töötanud rahuldava masinõppe (ML) mudeli, tuleb mudel kasutusele võtta, et see oleks hõlpsasti juurdepääsetav teistele organisatsiooni liikmetele. Optimeeritud kulude ja arvutusefektiivsusega mudelite ulatuslik juurutamine võib aga olla hirmutav ja tülikas ülesanne. Amazon SageMaker lõpp-punktid pakuvad mudeli juurutamiseks hõlpsasti skaleeritavat ja kuludelt optimeeritud lahendust. GPLv5 litsentsi alusel levitatav YOLOv3 mudel on populaarne objektide tuvastamise mudel, mis on tuntud oma tööaja tõhususe ja tuvastamise täpsuse poolest. Selles postituses näitame, kuidas majutada eelkoolitatud YOLOv5 mudelit SageMakeri lõpp-punktides ja kasutada AWS Lambda funktsioonid nende lõpp-punktide kutsumiseks.
Lahenduse ülevaade
Järgmine pilt kirjeldab AWS-teenuseid, mida kasutatakse YOLOv5 mudeli hostimiseks SageMakeri lõpp-punkti abil ja lõpp-punkti kutsumiseks Lambda abil. SageMakeri sülearvuti pääseb YOLOv5 PyTorchi mudelile juurde alates Amazoni lihtne salvestusteenus (Amazon S3) kopp, teisendab selle YOLOv5 TensorFlow-ks SavedModel
vormingus ja salvestab selle tagasi S3 ämbrisse. Seda mudelit kasutatakse seejärel lõpp-punkti hostimisel. Kui pilt laaditakse Amazon S3-sse, toimib see Lambda funktsiooni käivitajana. Funktsioon kasutab OpenCV-d Lambda kihid üleslaaditud pildi lugemiseks ja lõpp-punkti abil järelduste tegemiseks. Pärast järelduse käivitamist saate sellest saadud tulemusi vastavalt vajadusele kasutada.
Selles postituses käsitleme PyTorchis YOLOv5 vaikemudeli kasutamist ja selle TensorFlow'ks teisendamist. SavedModel
. Seda mudelit hostitakse SageMakeri lõpp-punkti abil. Seejärel loome ja avaldame Lambda funktsiooni, mis kutsub välja lõpp-punkti järelduse tegemiseks. Eelkoolitatud YOLOv5 mudelid on saadaval saidil GitHub. Selle postituse jaoks kasutame yolov5l mudel.
Eeldused
Eeltingimusena peame seadistama järgmise AWS-i identiteedi- ja juurdepääsuhaldus (IAM) rollid vastavate juurdepääsupoliitikad SageMakeri, Lambda ja Amazon S3 jaoks:
- SageMaker IAM roll — See nõuab
AmazonS3FullAccess
lisatud eeskirjad mudelile S3 ämbris salvestamiseks ja sellele juurde pääsemiseks - Lambda IAM roll – See roll vajab mitut poliitikat:
- Amazon S3-sse salvestatud piltidele juurdepääsemiseks vajame järgmisi IAM-eeskirju:
s3:GetObject
s3:ListBucket
- SageMakeri lõpp-punkti käitamiseks vajame juurdepääsu järgmistele IAM-eeskirjadele:
sagemaker:ListEndpoints
sagemaker:DescribeEndpoint
sagemaker:InvokeEndpoint
sagemaker:InvokeEndpointAsync
- Amazon S3-sse salvestatud piltidele juurdepääsemiseks vajame järgmisi IAM-eeskirju:
Teil on vaja ka järgmisi ressursse ja teenuseid:
- . AWS-i käsurea liides (AWS CLI), mida kasutame Lambda loomiseks ja konfigureerimiseks.
- SageMakeri märkmiku eksemplar. Need on Dockeriga eelinstallitud ja me kasutame seda Lambda kihtide loomiseks. Märkmiku eksemplari seadistamiseks toimige järgmiselt.
- Looge SageMakeri konsoolis märkmiku eksemplar ja sisestage märkmiku nimi, eksemplari tüüp (selle postituse jaoks kasutame ml.c5.large), IAM-i roll ja muud parameetrid.
- Kloonige avalik hoidla ja lisage YOLOv5 hoidla pakub Ultralytics.
Hosti YOLOv5 SageMakeri lõpp-punktis
Enne kui saame SageMakeris hostida eelkoolitatud YOLOv5 mudelit, peame selle eksportima ja pakkima õigesse kataloogistruktuuri. model.tar.gz
. Selle postituse jaoks näitame, kuidas YOLOv5 hostida saved_model
vormingus. YOLOv5 repo pakub export.py
faili, mis suudab mudelit mitmel erineval viisil eksportida. Pärast YOLOv5 kloonimist ja YOLOv5 kataloogi sisestamist käsurealt saate mudeli eksportida järgmise käsuga:
$ cd yolov5
$ pip install -r requirements.txt tensorflow-cpu
$ python export.py --weights yolov5l.pt --include saved_model --nms
See käsk loob uue kataloogi nimega yolov5l_saved_model
sees yolov5
kataloog. Sees yolov5l_saved_model
kataloogis peaksime nägema järgmisi üksusi:
Et luua a model.tar.gz
faili, teisaldage selle sisu yolov5l_saved_model
et export/Servo/1
. Käsurealt saame tihendada export
kataloogi, käivitades järgmise käsu ja laadides mudeli S3 ämbrisse:
$ 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>"
Seejärel saame SageMakeri sülearvutist SageMakeri lõpp-punkti juurutada, käivitades järgmise koodi:
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)
Eelmisel skriptil kulub mudeli täielikuks juurutamiseks SageMakeri lõpp-punktis umbes 2–3 minutit. Juurutuse olekut saate jälgida SageMakeri konsoolil. Pärast mudeli edukat hostimist on mudel järelduste tegemiseks valmis.
Testige SageMakeri lõpp-punkti
Kui mudel on SageMakeri lõpp-punktis edukalt hostitud, saame seda testida, mida teeme tühja pildi abil. Testimiskood on järgmine:
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)
Seadistage Lambda kihtide ja päästikutega
Kasutame OpenCV-d mudeli demonstreerimiseks, edastades pildi ja saades järeldused. Lambdaga ei ole kaasas väliseid teeke, nagu OpenCV eelehitatud, seetõttu peame selle ehitama enne, kui saame Lambda koodi välja kutsuda. Lisaks tahame olla kindlad, et me ei loo väliseid teeke nagu OpenCV iga kord, kui Lambdat käivitatakse. Sel eesmärgil pakub Lambda funktsiooni Lambda kihtide loomiseks. Me saame määratleda, mis nendesse kihtidesse läheb, ja Lambda kood võib neid tarbida iga kord, kui see välja kutsutakse. Samuti demonstreerime, kuidas luua OpenCV jaoks Lambda kihte. Selle postituse jaoks kasutame Amazon Elastic Compute Cloud (Amazon EC2) eksemplar kihtide loomiseks.
Kui kihid on paigas, loome app.py
skript, mis on Lambda kood, mis kasutab kihte, käivitab järelduse ja saab tulemusi. Järgmine diagramm illustreerib seda töövoogu.
Looge Dockeri abil OpenCV jaoks lambda kihid
Dockeri kujutise loomiseks Python 3.7 abil kasutage Dockerfile'i järgmiselt.
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/
Ehitage ja käivitage Docker ning salvestage väljund ZIP-fail allolevasse praegusesse kataloogi 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
Nüüd saame OpenCV kihi artefaktid Amazon S3-sse üles laadida ja Lambda kihi luua:
$ 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
Pärast eelmiste käskude edukat käivitamist on teil Lambdas OpenCV kiht, mida saate Lambda konsoolil üle vaadata.
Looge lambda funktsioon
Me kasutame app.py
skript Lambda funktsiooni loomiseks ja OpenCV kasutamiseks. Muutke järgmises koodis väärtusi BUCKET_NAME
ja IMAGE_LOCATION
pildile juurdepääsu kohta:
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
}),
}
Lambda funktsiooni juurutamine järgmise koodiga:
$ 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>"
Kinnitage OpenCV kiht Lambda funktsiooniga
Kui Lambda funktsioon ja kiht on paigas, saame kihi funktsiooniga ühendada järgmiselt:
$ aws lambda update-function-configuration --function-name yolov5-lambda --layers cv2
Lambda konsooli kaudu saame vaadata kihi seadeid.
Käivitage Lambda, kui pilt laaditakse Amazon S3-sse
Kasutame Lambda funktsiooni käivitamiseks pildi üleslaadimist Amazon S3-sse. Juhiste saamiseks vaadake Õpetus: Amazon S3 päästiku kasutamine Lambda funktsiooni käivitamiseks.
Lambda konsoolil peaksite nägema järgmisi funktsiooni üksikasju.
Käivitage järeldus
Pärast Lambda ja SageMakeri lõpp-punkti seadistamist saate väljundit testida, käivitades Lambda funktsiooni. Kasutame Lambda käivitamiseks pildi üleslaadimist Amazon S3-sse, mis omakorda kutsub esile lõpp-punkti järelduste tegemiseks. Näiteks laadime järgmise pildi Amazon S3 asukohta <S3 PATH TO IMAGE>/test_image.png
konfigureeritud eelmises jaotises.
Pärast pildi üleslaadimist käivitatakse Lambda funktsioon, et laadida alla ja lugeda pildiandmeid ning saata need järelduste tegemiseks SageMakeri lõpp-punkti. SageMakeri lõpp-punkti väljundtulemus hangib ja tagastab funktsioon JSON-vormingus, mida saame kasutada erineval viisil. Järgmisel pildil on kujutatud näidisväljundit, mis on pildi peal.
Koristage
Sõltuvalt eksemplari tüübist võivad SageMakeri sülearvutid nõuda märkimisväärset arvutuskasutust ja -kulusid. Tarbetute kulude vältimiseks soovitame sülearvuti eksemplari peatada, kui seda ei kasutata. Lisaks võetakse Lambda funktsioonide ja SageMakeri lõpp-punktide eest tasu ainult nende käivitamisel. Seetõttu ei ole nende teenuste jaoks vaja puhastada. Kui aga lõpp-punkti enam ei kasutata, on hea tava lõpp-punkt ja mudel eemaldada.
Järeldus
Selles postituses näitasime, kuidas majutada eelkoolitatud YOLOv5 mudelit SageMakeri lõpp-punktis ja kasutada Lambdat järelduste tegemiseks ja väljundi töötlemiseks. Üksikasjalik kood on saadaval aadressil GitHub.
SageMakeri lõpp-punktide kohta lisateabe saamiseks vaadake Looge oma lõpp-punkt ja juurutage oma mudel ja Ehitage, testige ja juurutage oma Amazon SageMakeri järeldusmudeleid AWS Lambdas, mis tõstab esile, kuidas saate YOLOv5 mudelite juurutamise protsessi automatiseerida.
Autoritest
Kevin Song on IoT Edge'i andmeteadlane ettevõttes AWS Professional Services. Kevinil on Chicago ülikoolis biofüüsika doktorikraad. Tal on üle 4-aastane kogemus arvutinägemise ja masinõppe valdkonnas. Ta aitab spordi- ja bioteaduste tööstuse klientidel masinõppe mudeleid juurutada.
Romil Shah on IoT Edge'i andmeteadlane ettevõttes AWS Professional Services. Romil on üle 6-aastane kogemus arvutinägemise, masinõppe ja IoT servaseadmete vallas. Ta aitab klientidel optimeerida ja juurutada oma masinõppemudeleid tööstusliku seadistamise jaoks mõeldud servaseadmete jaoks.
- Täpsem (300)
- AI
- ai kunst
- ai kunsti generaator
- on robot
- Amazon SageMaker
- tehisintellekti
- tehisintellekti sertifikaat
- tehisintellekt panganduses
- tehisintellekti robot
- tehisintellekti robotid
- tehisintellekti tarkvara
- AWS Lambda
- AWS-i masinõpe
- blockchain
- plokiahela konverents ai
- coingenius
- Arvutama
- vestluslik tehisintellekt
- krüptokonverents ai
- dall's
- sügav õpe
- google ai
- masinõpe
- Objekti tuvastamine
- Platon
- plato ai
- Platoni andmete intelligentsus
- Platoni mäng
- PlatoData
- platogaming
- skaala ai
- süntaks
- Tehniline juhend
- sephyrnet