Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti del modello ML con i test delle ombre di Amazon SageMaker

Amazon Sage Maker ora consente di confrontare le prestazioni di una nuova versione di uno stack di servizio di modelli con la versione attualmente distribuita prima di un'implementazione di produzione completa utilizzando una pratica di sicurezza della distribuzione nota come prova dell'ombra. Il test delle ombre può aiutarti a identificare potenziali errori di configurazione e problemi di prestazioni prima che abbiano un impatto sugli utenti finali. Con SageMaker, non è necessario investire nella costruzione della tua infrastruttura di shadow testing, permettendoti di concentrarti sullo sviluppo del modello. SageMaker si occupa di distribuire la nuova versione insieme alla versione corrente al servizio delle richieste di produzione, instradando una parte delle richieste alla versione shadow. È quindi possibile confrontare le prestazioni delle due versioni utilizzando metriche come la latenza e il tasso di errore. Questo ti dà maggiore sicurezza che le implementazioni di produzione agli endpoint di inferenza SageMaker non causeranno regressioni delle prestazioni e ti aiuta a evitare interruzioni dovute a configurazioni errate accidentali.

In questo post dimostriamo questa nuova funzionalità di SageMaker. Il notebook di esempio corrispondente è disponibile in questo GitHub deposito.

Panoramica della soluzione

La tua infrastruttura di servizio di modelli è costituita dal modello di machine learning (ML), dal contenitore di servizio o dall'istanza di calcolo. Consideriamo i seguenti scenari:

  • Stai pensando di promuovere un nuovo modello che è stato convalidato offline alla produzione, ma desideri valutare le metriche delle prestazioni operative, ad esempio latenza, tasso di errore e così via, prima di prendere questa decisione.
  • Stai prendendo in considerazione modifiche al contenitore dell'infrastruttura di servizio, ad esempio l'applicazione di patch alle vulnerabilità o l'aggiornamento a versioni più recenti e desideri valutare l'impatto di queste modifiche prima del passaggio alla produzione.
  • Stai valutando la possibilità di modificare la tua istanza ML e vuoi valutare come si comporterebbe la nuova istanza con le richieste di inferenza in tempo reale.

Il diagramma seguente illustra l'architettura della nostra soluzione.

Per ciascuno di questi scenari, seleziona una variante di produzione su cui desideri eseguire il test e SageMaker distribuisce automaticamente la nuova variante in modalità shadow e instrada una copia delle richieste di inferenza ad essa in tempo reale all'interno dello stesso endpoint. All'applicazione chiamante vengono restituite solo le risposte della variante di produzione. Puoi scegliere di scartare o registrare le risposte della variante ombra per il confronto offline. Facoltativamente, puoi monitorare le varianti tramite una dashboard integrata con un confronto affiancato delle metriche delle prestazioni. Puoi utilizzare questa funzionalità tramite le API dell'endpoint di aggiornamento dell'inferenza di SageMaker o tramite la console di SageMaker.

Le varianti shadow si basano sulla capacità delle varianti di produzione negli endpoint di inferenza di SageMaker. Per ribadire, a variante di produzione è costituito dal modello ML, dal contenitore di servizio e dall'istanza ML. Poiché ogni variante è indipendente dalle altre, puoi avere diversi modelli, contenitori o tipi di istanza tra le varianti. SageMaker ti consente di specificare i criteri di ridimensionamento automatico in base alle varianti in modo che possano ridimensionarsi in modo indipendente in base al carico in entrata. SageMaker supporta fino a 10 varianti di produzione per endpoint. Puoi configurare una variante per ricevere una parte del traffico in entrata impostando i pesi delle varianti o specificare la variante di destinazione nella richiesta in entrata. La risposta dalla variante di produzione viene inoltrata all'invocatore.

A variante ombra (nuovo) ha gli stessi componenti di una variante di produzione. Una parte specificata dall'utente delle richieste, nota come percentuale di campionamento del traffico, viene inoltrato alla variante shadow. Puoi scegliere di registrare la risposta della variante shadow Servizio di archiviazione semplice Amazon (Amazon S3) o scartalo.

Tieni presente che SageMaker supporta un massimo di una variante shadow per endpoint. Per un endpoint con una variante shadow, può esserci un massimo di una variante di produzione.

Dopo aver impostato le varianti di produzione e shadow, è possibile monitorare il file metriche di invocazione sia per la produzione che per le varianti shadow in Amazon Cloud Watch sotto il AWS/SageMaker spazio dei nomi. Tutti gli aggiornamenti all'endpoint SageMaker vengono orchestrati utilizzando schieramenti blu/verdi e si verificano senza alcuna perdita di disponibilità. I tuoi endpoint continueranno a rispondere alle richieste di produzione man mano che aggiungi, modifichi o rimuovi varianti shadow.

Puoi utilizzare questa funzionalità in due modi:

  • Shadow test gestito utilizzando la console SageMaker – Puoi sfruttare la console per un'esperienza guidata per gestire il percorso end-to-end dei test delle ombre. Ciò ti consente di impostare gli shadow test per un periodo di tempo predefinito, monitorare l'avanzamento attraverso una dashboard in tempo reale, ripulire al termine e agire sui risultati.
  • Shadow test self-service utilizzando le API di inferenza di SageMaker – Se il tuo flusso di lavoro di distribuzione utilizza già le API create/update/delete-endpoint, puoi continuare a utilizzarle per gestire le varianti shadow.

Nelle sezioni seguenti esaminiamo ognuno di questi scenari.

Scenario 1: test shadow gestito tramite la console SageMaker

Se desideri scegliere SageMaker per gestire il flusso di lavoro end-to-end di creazione, gestione e azione sui risultati dei test delle ombre, prendi in considerazione l'utilizzo della funzionalità dei test delle ombre nella sezione Inferenza della console di SageMaker. Come affermato in precedenza, ciò consente di impostare i test delle ombre per un periodo di tempo predefinito, monitorare l'avanzamento attraverso una dashboard in tempo reale, presentare opzioni di pulizia al completamento e agire sui risultati. Per saperne di più, visita i test delle ombre pagina della nostra documentazione per una procedura dettagliata di questa funzionalità.

Pre-requisiti

I modelli per la produzione e lo shadow devono essere creati su SageMaker. Si prega di fare riferimento al CreateModel API qui.

Passaggio 1: creare un test delle ombre

Passare alla Inferenza sezione del pannello di navigazione a sinistra della console SageMaker e quindi scegli Shadow tests. Questo ti porterà a una dashboard con tutti i test ombra pianificati, in esecuzione e completati. Fare clic su 'creare un test delle ombre'. Immettere un nome per il test e scegliere successivo.

Questo ti porterà alla pagina delle impostazioni del test delle ombre. Puoi scegliere un ruolo IAM esistente o crearne uno con il AmazonSageMakerFullAccess Politica IAM allegata. Successivamente, scegli 'Crea un nuovo endpoint' e inserisci un nome (xgb-prod-shadow-1). Puoi aggiungere una variante di produzione e una shadow associata a questo endpoint facendo clic su "Aggiungere' nella sezione Varianti. Puoi selezionare i modelli che hai creato nel 'Aggiungi modello' la finestra di dialogo. Questo crea una produzione o una variante. Facoltativamente, puoi modificare il tipo di istanza e il conteggio associati a ciascuna variante.

Tutto il traffico va alla variante di produzione e risponde alle richieste di chiamata. Puoi controllare una parte delle richieste instradate alla variante shadow modificando il file Traffic Sampling Percentage.

Puoi controllare la durata del test da un'ora a 30 giorni. Se non specificato, il valore predefinito è 7 giorni. Dopo questo periodo, il test è contrassegnato come completato. Se stai eseguendo un test su un endpoint esistente, al termine verrà eseguito il rollback allo stato precedente all'avvio del test.

Facoltativamente, puoi acquisire le richieste e le risposte della variante Shadow utilizzando il file Raccolta dati opzioni. Se non specificato, le risposte della variante ombra vengono scartate.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Passaggio 2: monitorare un test delle ombre

È possibile visualizzare l'elenco degli shadow test accedendo al file Shadow Tests sezione sotto Inferenza. Fare clic sullo shadow test creato nel passaggio precedente per visualizzare i dettagli di uno shadow test e monitorarlo mentre è in corso o dopo che è stato completato.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

La sezione Metriche fornisce un confronto delle metriche chiave e fornisce grafici sovrapposti tra le varianti di produzione e ombra, insieme a statistiche descrittive. Puoi confrontare le metriche di chiamata come ModelLatency ed Invocation4xxErrors così come metriche di istanza come CPUUtilization ed DiskUtilization.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Passaggio 3: promuovere la variante Shadow alla nuova variante di produzione

Dopo il confronto, puoi scegliere di promuovere la variante shadow come nuova variante di produzione o rimuovere la variante shadow. Per entrambe queste opzioni, seleziona 'Contrassegna come completato' nella parte superiore della pagina. Questo ti offre un'opzione per promuovere o rimuovere la variante ombra.

Se scegli di promuovere, verrai indirizzato a una pagina di implementazione, dove potrai confermare le impostazioni della variante prima dell'implementazione. Prima della distribuzione, ti consigliamo di dimensionare le tue varianti shadow per essere in grado di gestire il 100% del traffico di chiamata. Se non stai utilizzando il test delle ombre per valutare tipi o dimensioni di istanza alternativi, puoi utilizzare la scelta del 'mantenere le impostazioni della variante di produzione. Altrimenti, puoi scegliere di 'mantenere le impostazioni della variante ombra. Se scegli questa opzione, assicurati che il campionamento del traffico sia impostato al 100%. In alternativa, puoi specificare il tipo di istanza e il conteggio se desideri sovrascrivere queste impostazioni.

Una volta confermata la distribuzione, SageMaker avvierà un aggiornamento al tuo endpoint per promuovere la variante shadow alla nuova variante di produzione. Come con tutti gli aggiornamenti di SageMaker, il tuo endpoint sarà ancora operativo durante l'aggiornamento.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Scenario 2: Shadow testing utilizzando le API di inferenza SageMaker

Questa sezione illustra come utilizzare le API create/update/delete-endpoint esistenti di SageMaker per distribuire le varianti shadow.

Per questo esempio, abbiamo due modelli XGBoost che rappresentano due diverse versioni dei modelli che sono stati preaddestrati. model.tar.gz è il modello attualmente distribuito in produzione. model2 è il modello più recente e vogliamo testarne le prestazioni in termini di metriche operative come la latenza prima di decidere di utilizzarlo in produzione. Distribuiamo model2 come variante ombra di model.tar.gz. Entrambi i modelli preaddestrati vengono archiviati nel bucket S3 pubblico s3://sagemaker-sample-files. Per prima cosa scarichiamo il modello, la nostra istanza di calcolo locale, quindi lo carichiamo su S3.

I modelli in questo esempio vengono utilizzati per prevedere la probabilità che un cliente di telefonia mobile lasci il proprio attuale operatore di telefonia mobile. Il set di dati che utilizziamo è pubblicamente disponibile ed è stato menzionato nel libro Scoprire la conoscenza nei dati di Daniel T.Larose. Questi modelli sono stati addestrati utilizzando il Notebook di previsione del churn XGB in SageMaker. Puoi anche utilizzare i tuoi modelli pre-addestrati, nel qual caso puoi saltare il download da s3://sagemaker-sample-files e copia i tuoi modelli direttamente nella cartella model/.

!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model.tar.gz model/
!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model2.tar.gz model/

Passaggio 1: creare modelli

Carichiamo i file del modello nel nostro bucket S3 e creiamo due modelli SageMaker. Vedere il seguente codice:

model_url = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
)
model_url2 = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model2.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
from sagemaker import image_uris
image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-1")
image_uri2 = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-2")

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"

resp = sm.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri, "ModelDataUrl": model_url}],
)

resp = sm.create_model(
    ModelName=model_name2,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri2, "ModelDataUrl": model_url2}],
)

Passaggio 2: distribuire i due modelli come varianti di produzione e shadow a un endpoint di inferenza in tempo reale

Creiamo una configurazione dell'endpoint con le varianti di produzione e shadow. Il ProductionVariants ed ShadowProductionVariants sono di particolare interesse. Entrambe queste varianti hanno istanze ml.m5.xlarge con 4 vCPU e 16 GiB di memoria e il conteggio iniziale delle istanze è impostato su 1. Consulta il codice seguente:

ep_config_name = f"Shadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"
production_variant_name = "production"
shadow_variant_name = "shadow"
create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=ep_config_name,
    ProductionVariants=[
    # Type: Array of ProductionVariant (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html) objects
      { 
         "VariantName": shadow_variant_name,
        {
            "VariantName": production_variant_name,
            "ModelName": model_name,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1,
        }
    ],
     # Type: Array of ShadowProductionVariants 
    ShadowProductionVariants = [
         "ModelName": model_name2,
         "InitialInstanceCount": 1,
         "InitialVariantWeight": 0.5,
         "InstanceType": "ml.m5.xlarge" 
      }
   ]
)

Infine, creiamo la variante production e shadow:

endpoint_name = f"xgb-prod-shadow-{datetime.now():%Y-%m-%d-%H-%M-%S}"
create_endpoint_api_response = sm.create_endpoint(
                                    EndpointName=endpoint_name,
                                    EndpointConfigName=ep_config_name,
                                )

Passaggio 3: richiamare l'endpoint per il test

Dopo che l'endpoint è stato creato correttamente, puoi iniziare a richiamarlo. Inviamo circa 3,000 richieste in modo sequenziale:

def invoke_endpoint(endpoint_name, wait_interval_sec=0.01, should_raise_exp=False):
    with open("test_data/test-dataset-input-cols.csv", "r") as f:
        for row in f:
            payload = row.rstrip("n")
            try:
                for i in range(10): #send the same payload 10 times for testing purpose
                    response = sm_runtime.invoke_endpoint(
                        EndpointName=endpoint_name, ContentType="text/csv", Body=payload
                    )
            except Exception as e:
                print("E", end="", flush=True)
                if should_raise_exp:
                    raise e

invoke_endpoint(endpoint_name)

Passaggio 4: confrontare le metriche

Ora che abbiamo distribuito sia il modello di produzione che quello shadow, confrontiamo le metriche di chiamata. Per un elenco delle metriche di chiamata disponibili per il confronto, fare riferimento a Monitora Amazon SageMaker con Amazon CloudWatch. Iniziamo confrontando le invocazioni tra le varianti production e shadow.

Il InvocationsPerInstance metrica si riferisce al numero di chiamate inviate alla variante di produzione. Una frazione di queste invocazioni, specificate nel peso della variante, viene inviata alla variante shadow. La chiamata per istanza viene calcolata dividendo il numero totale di chiamate per il numero di istanze in una variante. Come mostrato nei grafici seguenti, possiamo confermare che entrambe le varianti di produzione e shadow stanno ricevendo richieste di chiamata in base ai pesi specificati nella configurazione dell'endpoint.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Successivamente, confrontiamo la latenza del modello (ModelLatency metrica) tra le varianti produzione e ombra. La latenza del modello è il tempo impiegato da un modello per rispondere come visualizzato da SageMaker. Possiamo osservare come la latenza del modello della variante shadow si confronta con la variante di produzione senza esporre gli utenti finali alla variante shadow.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Ci aspettiamo la latenza dell'overhead (OverheadLatency metrica) per essere confrontabili tra le varianti di produzione e ombra. La latenza dell'overhead è l'intervallo misurato dal momento in cui SageMaker riceve la richiesta fino a quando restituisce una risposta al client, meno la latenza del modello.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.

Passaggio 5: promuovi la tua variante ombra

Per promuovere il modello shadow alla produzione, crea una nuova configurazione dell'endpoint con current ShadowProductionVariant come il nuovo ProductionVariant e rimuovere il file ShadowProductionVariant. Questo rimuoverà la corrente ProductionVariant e promuovere la variante ombra affinché diventi la nuova variante di produzione. Come sempre, tutti gli aggiornamenti di SageMaker sono orchestrati come distribuzioni blu/verdi sotto il cofano e non vi è alcuna perdita di disponibilità durante l'esecuzione dell'aggiornamento.

Facoltativamente, puoi sfruttare Parapetti di schieramento se desideri utilizzare lo spostamento del traffico e i rollback automatici tutto in una volta durante l'aggiornamento.

promote_ep_config_name = f"PromoteShadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=promote_ep_config_name,
    ProductionVariants=[
        {
            "VariantName": shadow_variant_name,
            "ModelName": model_name2,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1.0,
        }
    ],
)
print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

update_endpoint_api_response = sm.update_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=promote_ep_config_name,
)

wait_for_endpoint_in_service(endpoint_name)

sm.describe_endpoint(EndpointName=endpoint_name)

Passaggio 6: ripulire

Se non prevedi di utilizzare ulteriormente questo endpoint, devi eliminare l'endpoint per evitare di incorrere in costi aggiuntivi e ripulire altre risorse create in questo blog.

dsm.delete_endpoint(EndpointName=endpoint_name)
sm.delete_endpoint_config(EndpointConfigName=ep_config_name)
sm.delete_endpoint_config(EndpointConfigName=promote_ep_config_name)
sm.delete_model(ModelName=model_name)
sm.delete_model(ModelName=model_name2)

Conclusione

In questo post, abbiamo introdotto una nuova funzionalità dell'inferenza di SageMaker per confrontare le prestazioni di una nuova versione di uno stack di servizio del modello con la versione attualmente distribuita prima di un'implementazione di produzione completa utilizzando una pratica di sicurezza della distribuzione nota come shadow test. Ti abbiamo illustrato i vantaggi dell'utilizzo di varianti e metodi shadow per configurare le varianti con un esempio end-to-end. Per ulteriori informazioni sulle varianti shadow, fare riferimento ai test delle ombre documentazione.


Informazioni sugli autori

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.Raghu Ramesha è un Machine Learning Solutions Architect con il team di servizio di Amazon SageMaker. Si concentra sull'aiutare i clienti a creare, distribuire e migrare i carichi di lavoro di produzione ML su SageMaker su larga scala. È specializzato in machine learning, intelligenza artificiale e domini di visione artificiale e ha conseguito un master in Informatica presso l'UT Dallas. Nel tempo libero ama viaggiare e fotografare.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.QingweiLi è uno specialista in machine learning presso Amazon Web Services. Ha conseguito il dottorato di ricerca. in Ricerca Operativa dopo che ha rotto il conto dell'assegno di ricerca del suo consulente e non è riuscito a consegnare il premio Nobel che aveva promesso. Attualmente aiuta i clienti nel settore dei servizi finanziari e assicurativi a creare soluzioni di machine learning su AWS. Nel tempo libero gli piace leggere e insegnare.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.Qiyun Zhao è un ingegnere di sviluppo software senior con il team della piattaforma di inferenza di Amazon SageMaker. È lo sviluppatore principale di Deployment Guardrails e Shadow Deployments e si concentra sull'aiutare i clienti a gestire i carichi di lavoro e le distribuzioni ML su larga scala con disponibilità elevata. Lavora anche sulle evoluzioni dell'architettura della piattaforma per l'implementazione rapida e sicura dei lavori di ML e l'esecuzione di esperimenti online di ML a proprio agio. Nel tempo libero ama leggere, giocare e viaggiare.

Riduci al minimo l'impatto sulla produzione degli aggiornamenti dei modelli ML con il test shadow di PlatoBlockchain Data Intelligence di Amazon SageMaker. Ricerca verticale. Ai.Tarun Sairam è Senior Product Manager per Amazon SageMaker Inference. È interessato a conoscere le ultime tendenze nel machine learning e ad aiutare i clienti a sfruttarle. Nel tempo libero ama andare in bicicletta, sciare e giocare a tennis.

Timestamp:

Di più da Apprendimento automatico di AWS