Riduci i costi di implementazione dei modelli del 50% in media utilizzando le ultime funzionalità di Amazon SageMaker

Riduci del 50% i costi di implementazione dei modelli utilizzando le ultime funzionalità di Amazon SageMaker

Man mano che le organizzazioni implementano i modelli in produzione, sono costantemente alla ricerca di modi per ottimizzare le prestazioni dei loro modelli di base (FM) eseguiti sugli ultimi acceleratori, come ad esempio AWS Inferentia e GPU, in modo da ridurre i costi e diminuire la latenza di risposta per offrire la migliore esperienza agli utenti finali. Tuttavia, alcuni FM non utilizzano appieno gli acceleratori disponibili nelle istanze su cui vengono implementati, portando a un utilizzo inefficiente delle risorse hardware. Alcune organizzazioni implementano più FM sulla stessa istanza per utilizzare al meglio tutti gli acceleratori disponibili, ma ciò richiede un’orchestrazione infrastrutturale complessa che richiede tempo e difficoltà di gestione. Quando più FM condividono la stessa istanza, ciascun FM ha le proprie esigenze di dimensionamento e modelli di utilizzo, rendendo difficile prevedere quando è necessario aggiungere o rimuovere istanze. Ad esempio, un modello può essere utilizzato per alimentare un’applicazione utente in cui l’uso può aumentare durante determinate ore, mentre un altro modello può avere un pattern di utilizzo più consistente. Oltre all’ottimizzazione dei costi, i clienti desiderano offrire la migliore esperienza agli utenti finali riducendo la latenza. Per fare ciò, spesso vengono implementate più copie di un FM per gestire le richieste degli utenti in parallelo. Poiché le uscite degli FM possono variare da una singola frase a più paragrafi, il tempo necessario per completare la richiesta di inferenza varia considerevolmente, portando a picchi imprevedibili nella latenza se le richieste vengono instradate casualmente tra le istanze. Amazon SageMaker supporta ora nuove capacità di inferenza che ti aiutano a ridurre i costi di implementazione e la latenza.

Ora puoi creare endpoint basati su componenti di inferenza e implementare modelli di machine learning (ML) su un endpoint SageMaker. Una componente di inferenza (IC) astrae il tuo modello ML e ti consente di assegnare CPU, GPU o acceleratori AWS Neuron, e politiche di ridimensionamento per modello. Le componenti di inferenza offrono i seguenti vantaggi:

  • SageMaker posizionerà e raggrupperà ottimalmente i modelli sulle istanze ML per massimizzare l’utilizzo, ottenendo risparmi sui costi.
  • SageMaker ridimensionerà ogni modello in base alla tua configurazione per soddisfare i requisiti delle tue applicazioni di ML.
  • SageMaker si ridimensionerà dinamicamente per aggiungere e rimuovere istanze per garantire la disponibilità di capacità, mantenendo al minimo l’elaborazione inattiva.
  • Puoi ridimensionare fino a zero copie di un modello per liberare risorse per altri modelli. Puoi inoltre specificare di mantenere sempre carichi e pronti a gestire il traffico i modelli importanti.

Con queste capacità, puoi ridurre i costi di implementazione del modello in media del 50%. I risparmi sui costi varieranno a seconda del carico di lavoro e dei pattern di traffico. Prendiamo un semplice esempio per illustrare come l’raggruppamento di più modelli su un singolo endpoint può massimizzare l’utilizzo e risparmiare costi. Supponiamo di avere un’applicazione di chat che aiuta i turisti a capire le abitudini locali e le migliori pratiche utilizzando due varianti di Llama 2: una ottimizzata per i visitatori europei e l’altra ottimizzata per i visitatori americani. Ci aspettiamo traffico per il modello europeo tra le 00:01 e le 11:59 UTC e traffico per il modello americano tra le 12:00 e le 23:59 UTC. Invece di implementare questi modelli su istanze dedicate in cui rimarrebbero inattive metà del tempo, ora puoi implementarli su un singolo endpoint per risparmiare costi. Puoi ridimensionare il modello americano a zero quando non è necessario per liberare capacità per il modello europeo e viceversa. In questo modo puoi utilizzare efficientemente l’hardware e evitare sprechi. Questo è un semplice esempio che utilizza due modelli, ma è possibile estendere facilmente questa idea per raggruppare centinaia di modelli su un singolo endpoint che si ridimensiona automaticamente in base al carico di lavoro.

In questo post, ti mostriamo le nuove capacità degli endpoint SageMaker basati su componenti di inferenza. Ti guidiamo anche nella creazione di modelli multipli utilizzando componenti di inferenza e API. Infine, dettagliamo alcune delle nuove capacità di osservabilità e spieghiamo come configurare le politiche di ridimensionamento automatico per i tuoi modelli e gestire il ridimensionamento delle istanze per i tuoi endpoint. Puoi anche implementare modelli tramite la nostra nuova esperienza utente semplificata e interattiva. Supportiamo anche capacità avanzate di instradamento per ottimizzare la latenza e le prestazioni dei tuoi carichi di inferenza.

Blocchi di costruzione

Diamo uno sguardo più approfondito e capiamo come funzionano queste nuove capacità. Ecco alcune nuove terminologie per l’hosting di SageMaker:

  • Componente di inferenza – Un oggetto di hosting di SageMaker che puoi utilizzare per implementare un modello su un endpoint. Puoi creare una componente di inferenza fornendo quanto segue:
    • Il modello SageMaker o la specifica di un’immagine compatibile con SageMaker e gli artefatti del modello.
    • Requisiti delle risorse di calcolo, che specificano le esigenze di ogni copia del tuo modello, inclusi i core della CPU, la memoria dell’host e il numero di acceleratori.
  • Copia del modello – Una copia in esecuzione di una componente di inferenza in grado di gestire le richieste.
  • Ridimensionamento automatico dell’istanza gestita – Una funzionalità di hosting di SageMaker per ridimensionare il numero di istanze di calcolo utilizzate per un endpoint. Il ridimensionamento dell’istanza reagisce al ridimensionamento delle componenti di inferenza.

Per creare un nuovo componente di inferenza, puoi specificare un’immagine del contenitore e un artefatto del modello, oppure puoi utilizzare modelli SageMaker che potresti aver già creato. Devi anche specificare i requisiti delle risorse di calcolo come il numero di core CPU dell’host, la memoria dell’host o il numero di acceleratori necessari per eseguire il tuo modello.

Quando distribuisci un componente di inferenza, puoi specificare MinCopies per garantire che il modello sia già caricato nella quantità desiderata, pronto per gestire le richieste.

Hai anche la possibilità di impostare le tue politiche in modo che le copie del componente di inferenza si riducano a zero. Ad esempio, se non hai alcun carico in esecuzione su un IC, la copia del modello verrà scaricata. Ciò può liberare risorse che possono essere sostituite da carichi di lavoro attivi per ottimizzare l’utilizzo ed l’efficienza del tuo endpoint.

All’aumentare o diminuire delle richieste di inferenza, il numero di copie dei tuoi IC può anche scalare verso l’alto o verso il basso in base alle tue politiche di autoscaling. SageMaker si occuperà della loro distribuzione ottimizzando l’allocazione dei modelli per garantire disponibilità e costo.

Inoltre, se abiliti l’autoscaling per le istanze gestite, SageMaker scalera le istanze di calcolo in base al numero di componenti di inferenza che devono essere caricati in un determinato momento per gestire il traffico. SageMaker scalera verso l’alto le istanze e allocare le tue istanze e i componenti di inferenza per ottimizzare i costi mantenendo alte le prestazioni del modello. Sebbene ti consigliamo di utilizzare l’autoscaling delle istanze gestite, hai anche la possibilità di gestire tu stesso le scalature, se lo desideri, attraverso l’autoscaling dell’applicazione.

SageMaker riequilibrerà i componenti di inferenza e scalera verso il basso le istanze se non sono più necessarie ai componenti di inferenza, permettendoti di risparmiare sui costi.

Descrizione delle API

SageMaker ha introdotto una nuova entità chiamata InferenceComponent. Ciò permette di separare i dettagli dell’hosting del modello di intelligenza artificiale dall’endpoint stesso. L’InferenceComponent ti consente di specificare le proprietà chiave per l’hosting del modello come il modello SageMaker che desideri utilizzare, i dettagli del contenitore e gli artefatti del modello. Specificare anche il numero di copie dei componenti da distribuire e il numero di acceleratori (GPU, Inf o Trn) o CPU (vCPU) necessari. Questo ti offre maggiore flessibilità nell’utilizzo di un singolo endpoint per qualsiasi numero di modelli che intendi distribuire in futuro.

Esaminiamo le chiamate API di Boto3 per creare un endpoint con un componente di inferenza. Nota che ci sono alcuni parametri che affrontiamo successivamente in questo post.

Ecco un esempio di codice per CreateEndpointConfig:

sagemaker_client.create_endpoint_config(    EndpointConfigName=endpoint_config_name,    ExecutionRoleArn=role,    ProductionVariants=[{        "VariantName": variant_name,        "InstanceType": instance_type,        "InitialInstanceCount": initial_instance_count,        "ModelDataDownloadTimeoutInSeconds": model_data_download_timeout_in_seconds,        "ContainerStartupHealthCheckTimeoutInSeconds": container_startup_health_check_timeout_in_seconds,        {"ManagedInstanceScaling": {            "Status": "ENABLED",            "MinInstanceCount": initial_instance_count,            "MaxInstanceCount": max_instance_count,            }        },    }],)

Di seguito è riportato un esempio di codice per CreateEndpoint:

sagemaker_client.create_endpoint(    EndpointName=nome_endpoint,    EndpointConfigName=nome_configurazione_endpoint,)

Di seguito è riportato un esempio di codice per CreateInferenceComponent:

sm_client.create_inference_component(    InferenceComponentName=nome_componente_inference,    EndpointName=nome_endpoint,    VariantName=nome_variant,    Specification={        "Container": {            "Image": inference_image_uri,            "ArtifactUrl": s3_code_artifact,        },        "StartupParameters": {            "ModelDataDownloadTimeoutInSeconds": 300,            "ContainerStartupHealthCheckTimeoutInSeconds": 600,        },        "ComputeResourceRequirements": {"NumberOfAcceleratorDevicesRequired": 1, "MinMemoryRequiredInMb": 1024}    },    RuntimeConfig={"CopyCount": 1},)

Questo distacco del InferenceComponent da un endpoint fornisce flessibilità. Puoi ospitare più modelli sulla stessa infrastruttura, aggiungendoli o rimuovendoli a seconda delle tue esigenze. Ogni modello può essere aggiornato autonomamente se necessario. Inoltre, puoi scalare i modelli in base alle esigenze aziendali. InferenceComponent ti consente anche di controllare la capacità per modello. In altre parole, puoi determinare quante copie di ciascun modello ospitare. Questa scalabilità prevedibile ti aiuta a rispettare i requisiti specifici di latenza per ciascun modello. In generale, InferenceComponent ti offre un controllo molto maggiore sui tuoi modelli ospitati.

Nella tabella seguente mostriamo un confronto a confronto dell’approccio ad alto livello per la creazione e l’invocazione di un endpoint senza InferenceComponent e con InferenceComponent. Nota che la chiamata a CreateModel() è ora facoltativa per gli endpoint basati su IC.

Step Endpoint basato su modelli Endpoint basato su Inference Component
1 CreateModel(…) CreateEndpointConfig(…)
2 CreateEndpointConfig(…) CreateEndpoint(…)
3 CreateEndpoint(…) CreateInferenceComponent(…)
4 InvokeEndpoint(…) InvokeEndpoint(InferneceComponentName=‘valore’…)

Introducendo InferenceComponent puoi scalare a livello di modello. Consulta Approfondimento su scalabilità automatica di istanza e IC per ulteriori dettagli su come InferenceComponent funziona con la scalabilità automatica.

Quando si invoca l’endpoint SageMaker, è possibile specificare il nuovo parametro InferenceComponentName per raggiungere il InferenceComponentName desiderato. SageMaker si occuperà di instradare la richiesta all’istanza che ospita il InferenceComponentName richiesto. Ecco il codice seguente:

smr_client = boto3.client("sagemaker-runtime") response_model = smr_client.invoke_endpoint(     InferenceComponentName=nome_componente_inference,    EndpointName=nome_endpoint,     Body=payload,     ContentType="application/json", )

Per impostazione predefinita, SageMaker utilizza l’instradamento casuale delle richieste verso le istanze che supportano il tuo endpoint. Se vuoi abilitare l’instradamento delle richieste meno pendenti, puoi impostare la strategia di instradamento nella RoutingConfig della configurazione dell’endpoint:

sm_client.create_endpoint_config(    EndpointConfigName=nome_configurazione_endpoint,    ExecutionRoleArn=ruolo,    ProductionVariants=[{        "VariantName": nome_variant,        "InstanceType": tipo_istanza,        "InitialInstanceCount": conteggio_istanze_iniziale,        ...        'RoutingConfig': {                'RoutingStrategy': 'LEAST_OUTSTANDING_REQUESTS'            }    }],)

Le richieste meno eccezionali di routing instradano le rotte verso le istanze specifiche che hanno una maggiore capacità di elaborare le richieste. Ciò fornirà un bilanciamento del carico e una utilizzazione delle risorse più uniformi.

Oltre a CreateInferenceComponent, sono ora disponibili le seguenti API:

  • DescribeInferenceComponent
  • DeleteInferenceComponent
  • UpdateInferenceComponent
  • ListInferenceComponents

Log e metriche dell’InferenceComponent

I log dell’InferenceComponent si trovano in /aws/sagemaker/InferenceComponents/<InferenceComponentName>. Tutti i log inviati a stderr e stdout nel contenitore vengono inviati a questi log in Amazon CloudWatch.

Con l’introduzione degli endpoint basati su IC, ora hai la possibilità di visualizzare metriche aggiuntive dell’istanza, metriche del componente di inferenza e metriche di invocazione.

Per le istanze di SageMaker, ora è possibile tenere traccia delle metriche di GPUReservation e CPUReservation per vedere le risorse riservate per un endpoint in base ai componenti di inferenza che hai distribuito. Queste metriche possono aiutarti a dimensionare il tuo endpoint e le tue politiche di autoscaling. È inoltre possibile visualizzare le metriche aggregate associate a tutti i modelli distribuiti su un endpoint.

SageMaker espone anche metriche a livello di componente di inferenza, che possono mostrare una visione più dettagliata dell’utilizzo delle risorse per i componenti di inferenza che hai distribuito. Ciò ti consente di ottenere una visione di quanto utilizzo aggregato delle risorse, come GPUUtilizationNormalized e GPUMemoryUtilizationNormalized, per ciascun componente di inferenza che hai distribuito che può avere zero o molte copie.

Infine, SageMaker fornisce metriche di invocazione, che tengono traccia delle invocazioni per i componenti di inferenza in modo aggregato (Invocations) o per copia istanziata (InvocationsPerCopy)

Per una lista completa delle metriche, consulta Metriche di invocazione dell’endpoint SageMaker.

Autoscaling a livello di modello

Per implementare il comportamento di autoscaling descritto, durante la creazione della configurazione dell’endpoint SageMaker e del componente di inferenza, si definisce il conteggio iniziale dell’istanza e il conteggio iniziale della copia del modello, rispettivamente. Dopo aver creato l’endpoint e i relativi IC, per applicare l’autoscaling a livello di IC, è necessario prima registrare il target di scaling e quindi associare la policy di scaling all’IC.

Nell’implementazione della policy di scaling, viene utilizzato SageMakerInferenceComponentInvocationsPerCopy, che è una nuova metrica introdotta da SageMaker. Cattura il numero medio di invocazioni per copia del modello al minuto.

aas_client.put_scaling_policy(    PolicyName=endpoint_name,    PolicyType='TargetTrackingScaling',    ServiceNamespace=service_namespace,    ResourceId=resource_id,    ScalableDimension=scalable_dimension,    TargetTrackingScalingPolicyConfiguration={        "PredefinedMetricSpecification": {            "PredefinedMetricType": "SageMakerInferenceComponentInvocationsPerCopy",        },        "TargetValue": autoscaling_target_value,        "ScaleInCooldown": 300,  # default        "ScaleOutCooldown": 300,  # default    },)

Dopo aver impostato la policy di scaling, SageMaker crea due allarmi CloudWatch per ciascun target di autoscaling: uno per attivare l’allargamento se è in allarme per 3 minuti (tre punti dati da 1 minuto) e uno per attivare il ridimensionamento se è in allarme per 15 minuti (15 punti dati da 1 minuto), come mostrato nella seguente schermata. Il tempo per attivare l’azione di ridimensionamento è di solito di 1-2 minuti più lungo di quei minuti perché occorre del tempo affinché l’endpoint pubblichi le metriche su CloudWatch e occorre anche del tempo perché AutoScaling reagisca. Il periodo di cooldown è il tempo, in secondi, dopo un’attività di ridimensionamento in entrata o in uscita, prima che possa iniziare un’altra attività di allargamento. Se il periodo di cool-down di espansione è inferiore al tempo di aggiornamento dell’endpoint, allora non ha effetto, perché non è possibile aggiornare un endpoint SageMaker quando è in stato di Aggiornamento.

Si noti che, durante la configurazione del ridimensionamento automatico a livello di IC, è necessario assicurarsi che il parametro MaxInstanceCount sia uguale o inferiore al numero massimo di IC che questo endpoint può gestire. Ad esempio, se il tuo endpoint è configurato solo per avere un’istanza nella configurazione dell’endpoint e questa istanza può ospitare al massimo quattro copie del modello, allora il MaxInstanceCount dovrebbe essere uguale o inferiore a 4. Tuttavia, è anche possibile utilizzare la capacità di ridimensionamento automatico gestito fornita da SageMaker per ridimensionare automaticamente il numero di istanze in base al numero di copie del modello richiesto per soddisfare la necessità di ulteriori risorse di calcolo. Il seguente frammento di codice mostra come configurare il ridimensionamento automatico dell’istanza gestita durante la creazione della configurazione dell’endpoint. In questo modo, quando il ridimensionamento automatico a livello di IC richiede un numero maggiore di istanze per ospitare le copie del modello, SageMaker aumenterà automaticamente il numero di istanze per consentire al ridimensionamento a livello di IC di avere successo.

sagemaker_client.create_endpoint_config(    EndpointConfigName=endpoint_config_name,    ExecutionRoleArn=role,    ProductionVariants=[{        "VariantName": variant_name,        "InstanceType": instance_type,        "InitialInstanceCount": initial_instance_count,        "ModelDataDownloadTimeoutInSeconds": model_data_download_timeout_in_seconds,        "ContainerStartupHealthCheckTimeoutInSeconds": container_startup_health_check_timeout_in_seconds,        {"ManagedInstanceScaling": {            "Status": "ENABLED",            "MinInstanceCount": initial_instance_count,            "MaxInstanceCount": max_instance_count,            }        },    }],)

Puoi applicare più politiche di ridimensionamento automatico allo stesso endpoint, il che significa che sarai in grado di applicare la tradizionale politica di ridimensionamento automatico agli endpoint creati con IC e ridimensionare verso l’alto e verso il basso in base alle altre metriche dell’endpoint. Per ulteriori informazioni, consulta Ottimizza le tue implementazioni di machine learning con il ridimensionamento automatico su Amazon SageMaker. Tuttavia, sebbene ciò sia possibile, raccomandiamo comunque di utilizzare il ridimensionamento automatico dell’istanza gestita anziché gestire il ridimensionamento manualmente.

Conclusion

In questo articolo, abbiamo introdotto una nuova funzionalità in SageMaker inference che ti aiuterà a massimizzare l’utilizzo delle istanze di calcolo, ridimensionare centinaia di modelli e ottimizzare i costi, garantendo al contempo prestazioni prevedibili. Inoltre, abbiamo fornito una panoramica delle API e ti abbiamo mostrato come configurare e distribuire i componenti di inferenza per i tuoi carichi di lavoro.

Supportiamo anche funzionalità avanzate di routing per ottimizzare la latenza e le prestazioni dei tuoi carichi di lavoro di inferenza. SageMaker può aiutarti a ottimizzare i tuoi carichi di lavoro di inferenza in termini di costo e prestazioni e fornirti una granularità a livello di modello per la gestione. Abbiamo creato un insieme di notebook che ti mostreranno come distribuire tre diversi modelli, utilizzando contenitori diversi e applicando politiche di ridimensionamento automatico su GitHub. Ti incoraggiamo a iniziare con il notebook 1 e a sperimentare le nuove funzionalità di hosting di SageMaker oggi stesso!