Reduser kostnadene og kompleksiteten til ML-forbehandling med Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Reduser kostnadene og kompleksiteten til ML-forbehandling med Amazon S3 Object Lambda

Amazon enkel lagringstjeneste (Amazon S3) er en objektlagringstjeneste som tilbyr bransjeledende skalerbarhet, datatilgjengelighet, sikkerhet og ytelse. Ofte har kunder objekter i S3-bøtter som trenger videre bearbeiding for å kunne brukes effektivt ved å konsumere applikasjoner. Dataingeniører må støtte disse applikasjonsspesifikke datavisningene med avveininger mellom vedvarende avledede kopier eller transformering av data på forbrukernivå. Ingen av løsningene er ideelle fordi de introduserer operasjonell kompleksitet, forårsaker datakonsistensutfordringer og sløser med dyrere dataressurser.

Disse avveiningene gjelder i stor grad for mange pipelines for maskinlæring (ML) som trener på ustrukturerte data, for eksempel lyd, video og fritekst, blant andre kilder. I hvert eksempel må treningsjobben laste ned data fra S3-bøtter, forberede en applikasjonsspesifikk visning og deretter bruke en AI-algoritme. Dette innlegget demonstrerer et designmønster for å redusere kostnader, kompleksitet og sentralt administrere dette andre trinnet. Den bruker betongen eksempel på bildebehandling, selv om tilnærmingen stort sett gjelder for enhver arbeidsbelastning. De økonomiske fordelene er også mest uttalte når transformasjonstrinnet ikke krever GPU, men AI-algoritmen gjør det.

Den foreslåtte løsningen sentraliserer også datatransformasjonskode og muliggjør just-in-time (JIT) transformasjon. Videre bruker tilnærmingen en serverløs infrastruktur for å redusere driftskostnader og udifferensierte tunge løft.

Løsningsoversikt

Når ML-algoritmer behandler ustrukturerte data som bilder og video, krever det ulike normaliseringsoppgaver (som gråskalering og endring av størrelse). Dette trinnet eksisterer for å akselerere modellkonvergens, unngå overtilpasning og forbedre prediksjonsnøyaktigheten. Du utfører ofte disse forbehandlingstrinnene på forekomster som senere kjører AI-treningen. Den tilnærmingen skaper ineffektivitet, fordi disse ressursene vanligvis har dyrere prosessorer (for eksempel GPUer) enn disse oppgavene krever. I stedet eksternaliserer løsningen vår disse operasjonene på tvers av økonomiske, horisontalt skalerbare Amazon S3 Object Lambda funksjoner.

Dette designmønsteret har tre kritiske fordeler. Først sentraliserer den de delte datatransformasjonstrinnene, for eksempel bildenormalisering og fjerning av ML-pipelinekodeduplisering. Deretter unngår S3 Object Lambda-funksjoner datakonsistensproblemer i avledede data gjennom JIT-konverteringer. For det tredje reduserer den serverløse infrastrukturen driftskostnader, øker tilgangstiden og begrenser kostnadene til den per millisekund tiden som kjører koden din.

Det finnes en elegant løsning der du kan sentralisere disse dataforbehandlings- og datakonverteringsoperasjonene med S3 Object Lambda. S3 Object Lambda lar deg legge til kode som endrer data fra Amazon S3 før du returnerer dem til en applikasjon. Koden kjører innenfor en AWS Lambda funksjon, en serverløs databehandlingstjeneste. Lambda kan umiddelbart skaleres til titusenvis av parallelle kjøringer mens den støtter dusinvis av programmeringsspråk og til og med tilpassede containere. For mer informasjon, se Vi presenterer Amazon S3 Object Lambda - Bruk koden din til å behandle data når de hentes fra S3.

Følgende diagram illustrerer løsningsarkitekturen.

Normaliser datasett som brukes til å trene maskinlæringsmodell

I denne løsningen har du en S3-bøtte som inneholder råbildene som skal behandles. Deretter oppretter du en S3 tilgangspunkt for disse bildene. Hvis du bygger flere ML-modeller, kan du opprette separate S3-tilgangspunkter for hver modell. Alternativt AWS identitets- og tilgangsadministrasjon (JEG ER) retningslinjer for tilgangspunkter støtter deling av gjenbrukbare funksjoner på tvers av ML-rørledninger. Deretter kobler du til en Lambda-funksjon som har din forbehandlingsforretningslogikk til S3 Access Point. Etter at du har hentet dataene, ringer du S3-tilgangspunktet for å utføre JIT-datatransformasjoner. Til slutt oppdaterer du ML-modellen din for å bruke den nye S3 Object Lambda Access Point for å hente data fra Amazon S3.

Opprett normaliseringstilgangspunktet

Denne delen går gjennom trinnene for å lage S3 Object Lambda-tilgangspunktet.

Rådata lagres i en S3-bøtte. For å gi brukeren det riktige settet med tillatelser for å få tilgang til disse dataene, samtidig som du unngår komplekse bøttepolicyer som kan forårsake uventet innvirkning på en annen applikasjon, må du opprette S3-tilgangspunkter. S3 Access Points er unike vertsnavn som du kan bruke for å nå S3-bøtter. Med S3 Access Points kan du opprette individuelle tilgangskontrollpolicyer for hvert tilgangspunkt for å kontrollere tilgangen til delte datasett enkelt og sikkert.

  1. Opprett tilgangspunktet ditt.
  2. Opprett en Lambda-funksjon som utfører bildestørrelsen og konverteringen. Se følgende Python-kode:
import boto3
import cv2
import numpy as np
import requests
import io def lambda_handler(event, context): print(event) object_get_context = event["getObjectContext"] request_route = object_get_context["outputRoute"] request_token = object_get_context["outputToken"] s3_url = object_get_context["inputS3Url"] # Get object from S3 response = requests.get(s3_url) nparr = np.fromstring(response.content, np.uint8) img = cv2.imdecode(nparr, flags=1) # Transform object new_shape=(256,256) resized = cv2.resize(img, new_shape, interpolation= cv2.INTER_AREA) gray_scaled = cv2.cvtColor(resized,cv2.COLOR_BGR2GRAY) # Transform object is_success, buffer = cv2.imencode(".jpg", gray_scaled) if not is_success: raise ValueError('Unable to imencode()') transformed_object = io.BytesIO(buffer).getvalue() # Write object back to S3 Object Lambda s3 = boto3.client('s3') s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) return {'status_code': 200}
  1. Lag en Objekt Lambda tilgangspunkt ved å bruke det støttende tilgangspunktet fra trinn 1.

Lambda-funksjonen bruker det støttende tilgangspunktet for å laste ned de originale objektene.

  1. Oppdater Amazon SageMaker å bruke det nye S3 Object Lambda-tilgangspunktet for å hente data fra Amazon S3. Se følgende bash-kode:
aws s3api get-object --bucket arn:aws:s3-object-lambda:us-west-2:12345678901:accesspoint/image-normalizer --key images/test.png

Kostnadsbesparelsesanalyse

Tradisjonelt kopierer ML-rørledninger bilder og andre filer fra Amazon S3 til SageMaker-forekomster og utfører deretter normalisering. Det har imidlertid ineffektivitet å transformere disse handlingene på treningsinstanser. For det første fungerer Lambda horisontalt for å håndtere utbruddet og deretter krympe elastisk lading per millisekund når koden kjører. Mange forbehandlingstrinn krever ikke GPUer og kan til og med bruke ARM64. Det skaper et insentiv til å flytte den behandlingen til mer økonomisk databehandling som f.eks Lambda-funksjoner drevet av AWS Graviton2-prosessorer.

Ved å bruke et eksempel fra Lambda priskalkulator, kan du konfigurere funksjonen med 256 MB minne og sammenligne kostnadene for både x86 og Graviton (ARM64). Vi valgte denne størrelsen fordi den er tilstrekkelig for mange enkeltbildedataforberedelsesoppgaver. Deretter bruker du SageMaker priskalkulator å beregne utgifter for en ml.p2.xlarge-forekomst. Dette er den minste støttede SageMaker-treningsforekomsten med GPU-støtte. Disse resultatene viser opptil 90 % beregning av besparelser for operasjoner som ikke bruker GPUer og kan skifte til Lambda. Følgende tabell oppsummerer disse funnene.

 

Lambda med x86 Lambda med Graviton2 (ARM) SageMaker ml.p2.xlarge
Minne (GB) 0.25 0.25 61
prosessor  -  - 4
GPU  -  - 1
Kostnad/time $0.061 $0.049 $0.90

konklusjonen

Du kan bygge moderne applikasjoner for å låse opp innsikt i dataene dine. Disse forskjellige applikasjonene har unike krav til datavisning, for eksempel formatering og forhåndsbehandlingshandlinger. Å adressere disse andre brukstilfellene kan resultere i dataduplisering, økende kostnader og mer kompleksitet for å opprettholde konsistens. Dette innlegget tilbyr en løsning for effektiv håndtering av disse situasjonene ved å bruke S3 Object Lambda-funksjoner.

Dette fjerner ikke bare behovet for duplisering, men det danner også en vei for å skalere disse handlingene på tvers av rimeligere databehandling horisontalt! Selv å optimalisere transformasjonskoden for ml.p2.xlarge-forekomsten vil fortsatt være betydelig mer kostbart på grunn av de inaktive GPUene.

For flere ideer om bruk av serverløs og ML, se Maskinlæringsslutning i stor skala ved bruk av AWS-serverløs og Implementere maskinlæringsmodeller med serverløse maler.


Om forfatterne

Reduser kostnadene og kompleksiteten til ML-forbehandling med Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Nate Bachmeier er en AWS Senior Solutions Architect som nomadisk utforsker New York, én skyintegrasjon om gangen. Han spesialiserer seg på migrering og modernisering av kundenes arbeidsmengder. I tillegg til dette er Nate en fulltidsstudent og har to barn.

Reduser kostnadene og kompleksiteten til ML-forbehandling med Amazon S3 Object Lambda PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Marvin Fernandes er en løsningsarkitekt ved AWS, basert i New York City-området. Han har over 20 års erfaring med å bygge og drive applikasjoner for finansielle tjenester. Han jobber for tiden med store bedriftskunder for å løse komplekse forretningsproblemer ved å lage skalerbare, fleksible og spenstige skyarkitekturer.

Tidstempel:

Mer fra AWS maskinlæring