Modelli di hosting di modelli in SageMaker: best practice per testare e aggiornare i modelli su SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Pattern di hosting dei modelli in SageMaker: best practice per testare e aggiornare i modelli su SageMaker

Amazon Sage Maker è un servizio completamente gestito che offre a sviluppatori e data scientist la possibilità di creare, addestrare e distribuire rapidamente modelli di machine learning (ML). Con SageMaker, puoi distribuire i tuoi modelli ML su endpoint ospitati e ottenere risultati di inferenza in tempo reale. Puoi facilmente visualizzare le metriche delle prestazioni per i tuoi endpoint in Amazon Cloud Watch, scala automaticamente gli endpoint in base al traffico e aggiorna i tuoi modelli in produzione senza perdere alcuna disponibilità. SageMaker offre un'ampia varietà di opzioni per distribuire modelli ML per l'inferenza in uno dei seguenti modi, a seconda del caso d'uso:

  • Per le previsioni sincrone che devono essere fornite nell'ordine di millisecondi, utilizza SageMaker inferenza in tempo reale
  • Per i carichi di lavoro che hanno periodi di inattività tra gli scatti di traffico e possono tollerare avvii a freddo, utilizzare Inferenza senza server
  • Per richieste con payload di grandi dimensioni fino a 1 GB, lunghi tempi di elaborazione (fino a 15 minuti) e requisiti di latenza quasi in tempo reale (da secondi a minuti), utilizza SageMaker Inferenza asincrona
  • Per ottenere previsioni per un intero set di dati, utilizza SageMaker trasformazione batch

L'inferenza in tempo reale è ideale per i carichi di lavoro di inferenza in cui si hanno requisiti in tempo reale, interattivi e a bassa latenza. Distribuisci il tuo modello ai servizi di hosting SageMaker e ottieni un endpoint che può essere utilizzato per l'inferenza. Questi endpoint sono supportati da un'infrastruttura e un supporto completamente gestiti ridimensionamento automatico. Puoi migliorare l'efficienza e i costi combinando più modelli in un singolo endpoint utilizzando endpoint multi-modello or endpoint multi-contenitore.

Esistono alcuni casi d'uso in cui si desidera implementare più varianti dello stesso modello in produzione per valutarne le prestazioni, misurare i miglioramenti o eseguire test A/B. In questi casi, gli endpoint multi-variante SageMaker sono utili perché consentono di distribuire più varianti di produzione di un modello sullo stesso endpoint SageMaker.

In questo post, discutiamo degli endpoint multivarianti di SageMaker e delle best practice per l'ottimizzazione.

Confronto tra le opzioni di inferenza in tempo reale di SageMaker

Il diagramma seguente offre una rapida panoramica delle opzioni di inferenza in tempo reale con SageMaker.

Un endpoint a modello singolo consente di distribuire un modello su un container ospitato su istanze dedicate o senza server per bassa latenza e velocità effettiva elevata. Puoi creare un modello e richiamare a Immagine supportata da SageMaker per framework popolari come TensorFlow, PyTorch, Scikit-learn e altri. Se stai lavorando con un framework personalizzato per il tuo modello, puoi farlo anche tu porta il tuo contenitore che installa le tue dipendenze.

SageMaker supporta anche opzioni più avanzate come gli endpoint multi-modello (MME) e gli endpoint multi-container (MCE). Gli MME sono utili quando si ha a che fare con centinaia o decine di migliaia di modelli e quando non è necessario distribuire ogni modello come singolo endpoint. Gli MME consentono di ospitare più modelli in modo conveniente e scalabile all'interno dello stesso endpoint utilizzando un contenitore di servizio condiviso ospitato su un'istanza. L'infrastruttura sottostante (contenitore e istanza) rimane la stessa, ma i modelli vengono caricati e scaricati dinamicamente da una posizione S3 comune, in base all'utilizzo e alla quantità di memoria disponibile sull'endpoint. La tua applicazione deve semplicemente includere una chiamata API con il modello di destinazione a questo endpoint per ottenere un'inferenza a bassa latenza e velocità effettiva elevata. Invece di pagare per un endpoint separato per ogni singolo modello, puoi ospitare molti modelli al prezzo di un singolo endpoint.

Gli MCE consentono di eseguire fino a 15 contenitori ML diversi su un singolo endpoint e di richiamarli in modo indipendente. Puoi creare questi contenitori ML su diversi stack di servizio (come framework ML, server modello e algoritmo), da eseguire sullo stesso endpoint per risparmiare sui costi. Puoi unire i contenitori insieme in a pipeline di inferenza seriale o richiamare il contenitore in modo indipendente. Questo può essere l'ideale quando si dispone di diversi modelli ML con modelli di traffico diversi e esigenze di risorse simili. Esempi di quando utilizzare gli MCE includono, ma non sono limitati a, quanto segue:

  • Modelli di hosting su framework diversi (come TensorFlow, PyTorch e Scikit-learn) che non hanno traffico sufficiente per saturare la piena capacità di un'istanza
  • Hosting di modelli dallo stesso framework con diversi algoritmi ML (come raccomandazioni, previsioni o classificazione) e funzioni di gestione
  • Confronti di architetture simili eseguite su versioni di framework differenti (come TensorFlow 1.x e TensorFlow 2.x) per scenari come test A/B

Gli endpoint multivarianti (MVE) di SageMaker consentono di testare più modelli o versioni del modello dietro lo stesso endpoint utilizzando varianti di produzione. Ogni variante di produzione identifica un modello ML e le risorse distribuite per l'hosting del modello, ad esempio il contenitore di servizio e l'istanza.

Panoramica degli endpoint multivarianti di SageMaker

Nei flussi di lavoro ML di produzione, i data scientist e gli ingegneri ML perfezionano i modelli attraverso una varietà di metodi, come il riaddestramento basato sulla deriva di dati/modelli/concetti, l'ottimizzazione degli iperparametri, la selezione delle funzionalità, la selezione del framework e altro ancora. L'esecuzione di test A/B tra un nuovo modello e un vecchio modello con traffico di produzione può essere un passaggio finale efficace nel processo di convalida per un nuovo modello. Nei test A/B, provi diverse varianti dei tuoi modelli e confronti le prestazioni di ciascuna variante rispetto all'altra. Quindi scegli il modello con le migliori prestazioni per sostituire il modello precedente con una nuova versione che offre prestazioni migliori rispetto alla versione precedente. Utilizzando le varianti di produzione, puoi testare questi modelli ML e diverse versioni del modello dietro lo stesso endpoint. Puoi eseguire il training di questi modelli ML utilizzando diversi set di dati, diversi algoritmi e framework ML; distribuirli a diversi tipi di istanza; o qualsiasi combinazione di queste opzioni. Il sistema di bilanciamento del carico connesso all'endpoint SageMaker offre la possibilità di distribuire le richieste di chiamata su più varianti di produzione. Ad esempio, puoi distribuire il traffico tra le varianti di produzione specificando la distribuzione del traffico per ogni variante oppure puoi richiamare direttamente una variante specifica per ogni richiesta.

Puoi anche configurare la policy di ridimensionamento automatico per aumentare o diminuire automaticamente le tue varianti in base a metriche come le richieste al secondo.

Il diagramma seguente illustra in modo più dettagliato il funzionamento di MVE.

Endpoint multivariante SageMaker

Anche la distribuzione di un MVE è molto semplice. Tutto quello che devi fare è definire gli oggetti del modello con l'immagine e i dati del modello utilizzando il file create_model costruire da SageMaker Python SDK e definire le configurazioni degli endpoint utilizzando production_variant costrutti per creare varianti di produzione, ognuna con il proprio modello diverso e requisiti di risorse (tipo di istanza e conteggi). Ciò consente di testare anche i modelli su diversi tipi di istanza. Per distribuire, utilizzare il endpoint_from_production_variant costruire per creare l'endpoint.

Durante la creazione dell'endpoint, SageMaker esegue il provisioning dell'istanza di hosting specificata nelle impostazioni dell'endpoint e scarica il modello e il contenitore di inferenza specificati dalla variante di produzione nell'istanza di hosting. Se viene restituita una risposta positiva dopo l'avvio del contenitore e l'esecuzione di un controllo dello stato con un ping, all'utente viene inviato un messaggio che indica che la creazione dell'endpoint è stata completata. Vedere il seguente codice:

sm_session.create_model(
	name=model_name,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url}
	)

sm_session.create_model(
	name=model_name2,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url2 }
	)

variant1 = production_variant(
	model_name=model_name,
	instance_type="ml.c5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant1",
	initial_weight=1
	)

variant2 = production_variant(
	model_name=model_name2,
	instance_type="ml.m5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant2",
	initial_weight=1
	)

sm_session.endpoint_from_production_variants(
	name=endpoint_name,
	production_variants=[variant1,  variant2]
	)

Nell'esempio precedente, abbiamo creato due varianti, ciascuna con il proprio modello diverso (questi potrebbero anche avere tipi e conteggi di istanza diversi). Impostiamo un initial_weight di 1 per entrambe le varianti: questo significa che il 50% delle nostre richieste va a Variant1, e il restante 50% a Variant2. La somma delle ponderazioni in entrambe le varianti è 2 e ciascuna variante ha un'assegnazione di ponderazione pari a 1. Ciò implica che ciascuna variante riceve il 50% del traffico totale.

Invocare l'endpoint è simile al comune costrutto SageMaker invoke_endpoint; puoi chiamare l'endpoint direttamente con i dati come payload:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload
	)

SageMaker emette metriche come Latency ed Invocations per ogni variante in CloudWatch. Per un elenco completo delle metriche emesse da SageMaker, vedere Monitora Amazon SageMaker con Amazon CloudWatch. Puoi eseguire una query su CloudWatch per ottenere il numero di chiamate per variante, per vedere come le chiamate vengono suddivise tra le varianti per impostazione predefinita.

Per richiamare una versione specifica del modello, specificare una variante come the TargetVariant nella chiamata a invoke_endpoint:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload,
	TargetVariant="Variant1"
	)

È possibile valutare le prestazioni di ciascuna variante di produzione rivedendo metriche quali accuratezza, precisione, richiamo, punteggio F1 e caratteristica operativa del ricevitore/area sotto la curva per ciascuna variante utilizzando Monitor modello Amazon SageMaker. Puoi quindi decidere di aumentare il traffico verso il modello migliore aggiornando i pesi assegnati a ciascuna variante chiamando Aggiorna EndpointWeightsAndCapacities. Ciò modifica la distribuzione del traffico alle varianti di produzione senza richiedere aggiornamenti all'endpoint. Quindi, invece del 50% del traffico dalla configurazione iniziale, spostiamo il 75% del traffico su Variant2 assegnando nuovi pesi a ciascuna variante utilizzando UpdateEndpointWeightsAndCapacities. Vedi il seguente codice:

sm.update_endpoint_weights_and_capacities(
	EndpointName=endpoint_name,
	DesiredWeightsAndCapacities=[
	{
		"DesiredWeight": 25,
		"VariantName": variant1["VariantName"]
	},
	{
		"DesiredWeight": 75,
		"VariantName": variant2["VariantName"]
	}
] )

Quando sei soddisfatto del rendimento di una variante, puoi indirizzare il 100% del traffico a tale variante. Ad esempio, puoi impostare il peso per Variant1 a 0 e il peso per Variant2 a 1. SageMaker invia quindi il 100% di tutte le richieste di inferenza a Variant2. Puoi quindi aggiornare in modo sicuro il tuo endpoint ed eliminarlo Variant1 dal tuo endpoint. Puoi anche continuare a testare nuovi modelli in produzione aggiungendo nuove varianti al tuo endpoint. Puoi anche configurare questi endpoint in modo che si ridimensionino automaticamente in base al traffico ricevuto dagli endpoint.

Vantaggi degli endpoint multivarianti

Gli MVE SageMaker ti consentono di fare quanto segue:

  • Distribuisci e testa più varianti di un modello utilizzando lo stesso endpoint SageMaker. Questo è utile per testare le variazioni di un modello in produzione. Ad esempio, supponi di aver distribuito un modello in produzione. Puoi testare una variazione del modello indirizzando una piccola quantità di traffico, diciamo il 5%, al nuovo modello.
  • Valuta le prestazioni del modello in produzione senza interrompere il traffico monitorando i parametri operativi per ogni variante in CloudWatch.
  • Aggiorna i modelli in produzione senza perdere alcuna disponibilità. È possibile modificare un endpoint senza mettere fuori servizio i modelli già distribuiti in produzione. Ad esempio, puoi aggiungere nuove varianti di modello, aggiornare le configurazioni delle istanze di calcolo ML delle varianti di modello esistenti o modificare la distribuzione del traffico tra le varianti di modello. Per ulteriori informazioni, vedere Aggiorna Endpoint ed Aggiorna EndpointWeightsAndCapacities.

Sfide quando si utilizzano endpoint multi-variante

Gli MVE SageMaker presentano le seguenti sfide:

  • Sforzo di test di carico – È necessario dedicare una discreta quantità di impegno e risorse per i test e i confronti tra matrici di modelli per ciascuna variante. Affinché un test A/B sia considerato riuscito, è necessario eseguire un'analisi statistica delle metriche raccolte dal test per determinare se esiste un risultato statisticamente significativo. Potrebbe diventare difficile ridurre al minimo l'esplorazione di varianti con scarso rendimento. Potresti potenzialmente usare il bandito multi-armato tecnica di ottimizzazione per evitare di inviare traffico a esperimenti che non funzionano e ottimizzare il rendimento durante il test. Per i test di carico, puoi anche esplorare Raccomandatore di inferenza Amazon SageMaker per condurre benchmark approfonditi basati sui requisiti di produzione per latenza e velocità effettiva, modelli di traffico personalizzati e istanze (fino a 10) selezionate.
  • Stretto accoppiamento tra la variante del modello e l'endpoint – Potrebbe diventare complicato a seconda della frequenza di distribuzione del modello, perché l'endpoint potrebbe finire in updating stato per ogni variante di produzione in fase di aggiornamento. SageMaker supporta anche parapetti di dispiegamento, che puoi utilizzare per passare facilmente dal modello attuale in produzione a uno nuovo in modo controllato. Questa opzione introduce canarino ed lineare modalità di spostamento del traffico in modo da poter avere un controllo granulare sullo spostamento del traffico dal modello attuale a quello nuovo durante il corso dell'aggiornamento. Con le misure di sicurezza integrate, come i rollback automatici, puoi individuare tempestivamente i problemi e intraprendere automaticamente azioni correttive prima che causino un impatto significativo sulla produzione.

Best practice per endpoint multi-variante

Quando si ospitano modelli che utilizzano SageMaker MVE, considerare quanto segue:

  • SageMaker è ottimo per testare nuovi modelli perché puoi distribuirli facilmente in un ambiente di test A/B e paghi solo per ciò che usi. Ti viene addebitato l'orario di istanza consumato per ogni istanza mentre l'endpoint è in esecuzione. Quando hai finito con i tuoi test e non utilizzi più l'endpoint o le varianti in modo estensivo, dovresti eliminarlo per risparmiare sui costi. Puoi sempre ricrearlo quando ne hai bisogno di nuovo perché il modello è memorizzato in Servizio di archiviazione semplice Amazon (Amazon S3).
  • È necessario utilizzare il tipo e la dimensione dell'istanza più ottimali per distribuire i modelli. SageMaker offre attualmente Istanze di calcolo ML su varie famiglie di istanze. Un'istanza dell'endpoint è sempre in esecuzione (mentre l'istanza è in servizio). Pertanto, la selezione del giusto tipo di istanza può avere un impatto significativo sul costo totale e sulle prestazioni dei modelli ML. Test di carico è la best practice per determinare il tipo di istanza e le dimensioni del parco istanze appropriati, con o senza ridimensionamento automatico per l'endpoint live per evitare l'overprovisioning e il pagamento di costi aggiuntivi per la capacità di cui non hai bisogno.
  • Puoi monitorare le prestazioni del modello e l'utilizzo delle risorse in CloudWatch. Puoi configurare un ProductionVariant usare Ridimensionamento automatico dell'applicazione. Per specificare le metriche e i valori di destinazione per una policy di dimensionamento, configurare una policy di dimensionamento di tracciamento target. Puoi utilizzare una metrica predefinita o una metrica personalizzata. Per ulteriori informazioni sulla sintassi di configurazione dei criteri, vedere TargetTrackingScalingPolicyConfiguration. Per informazioni sulla configurazione del ridimensionamento automatico, vedere Ridimensiona automaticamente i modelli Amazon SageMaker. Per definire rapidamente una policy di dimensionamento di tracciamento target per una variante, puoi scegliere un parametro CloudWatch specifico e impostare i valori di soglia. Ad esempio, usa metrica SageMakerVariantInvocationsPerInstance per monitorare il numero medio di volte al minuto in cui viene richiamata ogni istanza di una variante o utilizzare la metrica CPUUtilization per monitorare la somma del lavoro gestito da una CPU. L'esempio seguente utilizza il SageMakerVariantInvocationsPerInstance metrica predefinita per regolare il numero di istanze varianti in modo che ogni istanza abbia un InvocationsPerInstance metrica di 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • La modifica o l'eliminazione degli artefatti del modello o la modifica del codice di inferenza dopo la distribuzione di un modello produce risultati imprevedibili. Prima di distribuire i modelli in produzione, è buona norma verificare se l'hosting del modello in modalità locale ha esito positivo dopo aver sufficientemente eseguito il debug dei frammenti di codice di inferenza (come model_fn, input_fn, predict_fne output_fn) nell'ambiente di sviluppo locale come un'istanza notebook SageMaker o un server locale. Se è necessario modificare o eliminare artefatti del modello o modificare il codice di inferenza, modificare l'endpoint fornendo una nuova configurazione dell'endpoint. Dopo aver fornito la nuova configurazione dell'endpoint, puoi modificare o eliminare gli artefatti del modello corrispondenti alla vecchia configurazione dell'endpoint.
  • Puoi usare SageMaker trasformazione batch testare le varianti di produzione. La trasformazione batch è ideale per ottenere inferenze da set di dati di grandi dimensioni. È possibile creare un processo di trasformazione separato per ogni nuova variante del modello e utilizzare un set di dati di convalida per il test. Per ogni processo di trasformazione, specifica un nome modello univoco e una posizione in Amazon S3 per il file di output. Per analizzare i risultati, utilizzare log e metriche della pipeline di inferenza.

Conclusione

SageMaker ti consente di eseguire facilmente test A/B sui modelli ML in produzione eseguendo più varianti di produzione su un endpoint. Puoi utilizzare le funzionalità di SageMaker per testare modelli che sono stati addestrati utilizzando diversi set di dati di addestramento, iperparametri, algoritmi o framework ML; come si comportano su diversi tipi di istanza; o una combinazione di tutto quanto sopra. Puoi fornire la distribuzione del traffico tra le varianti su un endpoint e SageMaker suddivide il traffico di inferenza nelle varianti in base alla distribuzione specificata. In alternativa, se si desidera testare i modelli per specifici segmenti di clienti, è possibile specificare la variante che deve elaborare una richiesta di inferenza fornendo il TargetVariant header e SageMaker instraderà la richiesta alla variante specificata. Per ulteriori informazioni sui test A/B, vedere Aggiorna in modo sicuro i modelli in produzione.

Riferimenti


Circa gli autori

Modelli di hosting di modelli in SageMaker: best practice per testare e aggiornare i modelli su SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Deepali Rajale è Technical Account Manager specializzato in AI/ML presso Amazon Web Services. Lavora con i clienti aziendali fornendo indicazioni tecniche sull'implementazione di soluzioni di machine learning con le best practice. Nel tempo libero le piace fare escursioni, film e uscire con la famiglia e gli amici.

Modelli di hosting di modelli in SageMaker: best practice per testare e aggiornare i modelli su SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dhawal Patel è un Principal Machine Learning Architect presso AWS. Ha lavorato con organizzazioni che vanno dalle grandi imprese alle startup di medie dimensioni su problemi legati all'informatica distribuita e all'intelligenza artificiale. Si concentra sull'apprendimento profondo, inclusi i domini della PNL e della visione artificiale. Aiuta i clienti a ottenere l'inferenza del modello ad alte prestazioni su SageMaker.

Modelli di hosting di modelli in SageMaker: best practice per testare e aggiornare i modelli su SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai. Saurabh Trikande è un Senior Product Manager per Amazon SageMaker Inference. È appassionato di lavorare con i clienti ed è motivato dall'obiettivo di democratizzare l'apprendimento automatico. Si concentra sulle sfide principali relative all'implementazione di applicazioni ML complesse, modelli ML multi-tenant, ottimizzazioni dei costi e rendere più accessibile l'implementazione di modelli di deep learning. Nel tempo libero, Saurabh ama fare escursioni, conoscere tecnologie innovative, seguire TechCrunch e trascorrere del tempo con la sua famiglia.

Timestamp:

Di più da Apprendimento automatico di AWS