Skaalake YOLOv5 järeldusi Amazon SageMakeri lõpp-punktide ja AWS Lambda PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.

Skaalake YOLOv5 järeldust Amazon SageMakeri lõpp-punktide ja AWS Lambda abil

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

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:

yolov5l_saved_model
    ├─ assets
    ├─ variables
    │    ├── variables.data-00000-of-00001
    │    └── variables.index
    └── saved_model.pb

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.

Lambda luba

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.

Lambda konsool

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.

Lambda seaded

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.

funktsiooni ülevaade

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.

test pilt

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.

järelduse tulemus

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

Skaalake YOLOv5 järeldusi Amazon SageMakeri lõpp-punktide ja AWS Lambda PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.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.

Skaalake YOLOv5 järeldusi Amazon SageMakeri lõpp-punktide ja AWS Lambda PlatoBlockchain Data Intelligence abil. Vertikaalne otsing. Ai.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.

Ajatempel:

Veel alates AWS-i masinõpe