Apprendimento automatico con MATLAB e Amazon SageMaker

Apprendimento automatico con MATLAB e Amazon SageMaker un viaggio nel futuro della tecnologia

Questo post è scritto in collaborazione con Brad Duncan, Rachel Johnson e Richard Alcock di MathWorks.

MATLAB è un popolare strumento di programmazione per una vasta gamma di applicazioni, come l’elaborazione dei dati, il calcolo parallelo, l’automazione, la simulazione, il machine learning e l’intelligenza artificiale. Viene ampiamente utilizzato in molti settori come l’automotive, l’aerospaziale, le telecomunicazioni e la produzione. Negli ultimi anni, MathWorks ha portato molte offerte di prodotti nel cloud, in particolare su Amazon Web Services (AWS). Per ulteriori dettagli sui prodotti cloud di MathWorks, consulta MATLAB e Simulink nel Cloud o contatta MathWorks via email.

In questo post, portiamo le capacità di machine learning di MATLAB in Amazon SageMaker, che presenta diversi vantaggi significativi:

  • Risorse di calcolo: Utilizzare l’ambiente di calcolo ad alte prestazioni offerto da SageMaker può accelerare l’addestramento del machine learning.
  • Collaborazione: MATLAB e SageMaker insieme forniscono una piattaforma robusta che i team possono utilizzare per collaborare efficacemente nella creazione, nel testing e nella distribuzione di modelli di machine learning.
  • Distribuzione e accessibilità: I modelli possono essere distribuiti come endpoint in tempo reale di SageMaker, rendendoli prontamente accessibili ad altre applicazioni per elaborare dati in streaming live.

Ti mostreremo come addestrare un modello di machine learning di MATLAB come job di addestramento di SageMaker e poi distribuire il modello come endpoint in tempo reale di SageMaker in modo da poter elaborare dati in streaming live.

Per fare ciò, useremo un esempio di manutenzione predittiva in cui classifichiamo i guasti in una pompa operativa che trasmette dati dei sensori in tempo reale. Abbiamo accesso a un ampio repository di dati etichettati generati da una simulazione Simulink che presenta tre tipi di guasti possibili in varie combinazioni possibili (ad esempio, uno sano e sette guasti). Poiché disponiamo di un modello del sistema e i guasti sono rari durante l’operazione, possiamo sfruttare i dati simulati per addestrare il nostro algoritmo. Il modello può essere regolato per adattarsi ai dati operativi dalla nostra pompa reale utilizzando tecniche di stima dei parametri in MATLAB e Simulink.

Il nostro obiettivo è dimostrare la potenza combinata di MATLAB e Amazon SageMaker utilizzando questo esempio di classificazione dei guasti.

Iniziamo ad addestrare un modello classificatore sul nostro desktop con MATLAB. Prima, estraiamo le caratteristiche da un subset del dataset completo utilizzando l’app Diagnostic Feature Designer, quindi eseguiamo l’addestramento del modello localmente con un modello di albero decisionale di MATLAB. Una volta soddisfatti delle impostazioni dei parametri, possiamo generare una funzione MATLAB e inviare il job insieme al dataset a SageMaker. Ciò ci consente di scalare il processo di addestramento per adattarlo a dataset molto più grandi. Dopo aver addestrato il nostro modello, lo distribuiamo come un endpoint live che può essere integrato in un’applicazione o una dashboard downstream, come un’app Web MATLAB.

Questo esempio riassume ogni passaggio, fornendo una comprensione pratica di come sfruttare MATLAB e Amazon SageMaker per compiti di machine learning. Il codice completo e la descrizione dell’esempio sono disponibili in questo repository.

Prerequisiti

  1. Ambiente di lavoro di MATLAB 2023a o successivo con MATLAB Compiler e il Statistics and Machine Learning Toolbox su Linux. Ecco una guida rapida su come eseguire MATLAB su AWS.

  2. Configurazione di Docker in un’istanza di Amazon Elastic Compute Cloud (Amazon EC2) in cui viene eseguito MATLAB. Sia Ubuntu che Linux.

  3. Installazione di AWS Command-Line Interface (AWS CLI), AWS Configure e Python3.

    1. AWS CLI, dovrebbe essere già installato se hai seguito la guida all’installazione da passaggio 1.
    2. Configura AWS Configure per interagire con le risorse AWS.
    3. Verifica l’installazione di python3 eseguendo il comando python -V o python --version nel terminale. Installa Python se necessario.
  4. Copia questo repository in una cartella nella tua macchina Linux eseguendo:

    git clone https://github.com/mathworks/Machine-Learning-with-MATLAB-and-Amazon-Sagemaker-Demo.git
  5. Controlla i permessi sulla cartella del repository. Se non ha i permessi di scrittura, esegui il seguente comando shell:

    sudo chmod -R 777
  6. Compila il pacchetto di addestramento MATLAB e invialo al Amazon Elastic Container Registry (Amazon ECR).

    • Naviga nella cartella docker

    • Crea un repository Amazon ECR utilizzando AWS CLI (sostituisci REGION con la tua regione AWS preferita)

      aws ecr create-repository \ --repository-name sagemaker-matlab-training \ --image-scanning-configuration scanOnPush=true \ --region
    • Esegui il seguente comando docker:

      docker build -t sagemaker-matlab-training-r2023a .  docker tag sagemaker-matlab-training-r2023a ACCOUNT.dkr.ecr.REGION.amazonaws.com/sagemaker-matlab-training-r2023a:latest  aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ACCOUNT.dkr.ecr.us-east-1.amazonaws.com  docker push ACCOUNT.dkr.ecr.REGION.amazonaws.com/sagemaker-matlab-training-r2023a:latest 
  7. Apri MATLAB e apri il live script chiamato PumpFaultClassificationMATLABSageMaker.mlx nella cartella examples/PumpFaultClassification. Imposta questa cartella

    Parte 1: Preparazione dei dati ed estrazione delle caratteristiche

    Il primo passo in qualsiasi progetto di apprendimento automatico è preparare i dati. MATLAB fornisce una vasta gamma di strumenti per l’importazione, la pulizia e l’estrazione delle caratteristiche dai tuoi dati.:

    load SensorData.mat

    Il dataset SensorData.mat contiene 240 record. Ogni record ha due tabelle temporali: flow e pressure. La colonna target è faultcode, che rappresenta in modo binario tre possibili combinazioni di guasti nella pompa. Per queste tabelle di serie temporali, ogni tabella ha 1.201 righe che simulano 1,2 secondi di flusso della pompa e misurazione della pressione con un incremento di 0,001 secondi.

    In seguito, l’app Diagnostic Feature Designer consente di estrarre, visualizzare e classificare una varietà di caratteristiche dai dati. Qui, si utilizzano le Auto Features, che estraggono rapidamente un ampio insieme di caratteristiche dal dominio del tempo e delle frequenze dal dataset e classificano i candidati migliori per l’addestramento del modello. È quindi possibile esportare una funzione MATLAB che ricalcola le prime 15 caratteristiche classificate dai nuovi dati in ingresso. Chiamiamo questa funzione extractFeaturesTraining. Questa funzione può essere configurata per elaborare i dati tutti in un’unica batch o come dati in streaming.

    Questa funzione produce una tabella di caratteristiche con i codici di guasto associati, come mostrato nella figura seguente:

    Parte 2: Organizzare i dati per SageMaker

    Successivamente, è necessario organizzare i dati in modo che SageMaker possa utilizzarli per l’addestramento dell’apprendimento automatico. Tipicamente, ciò comporta la suddivisione dei dati in set di addestramento e di convalida e la suddivisione dei dati predittivi dalla risposta target.

    In questa fase, potrebbero essere necessarie altre operazioni di pulizia e filtraggio dei dati più complesse. In questo esempio, i dati sono già puliti. Potenzialmente, se l’elaborazione dei dati è molto complessa e richiede molto tempo, è possibile utilizzare i job di elaborazione di SageMaker per eseguire queste operazioni separatamente dall’addestramento di SageMaker in modo da poterli separare in due passaggi.

    trainPredictors = trainingData(:,2:end);

    trainResponse = trainingData(:,1);

    Parte 3: Addestrare e testare un modello di apprendimento automatico in MATLAB

    Prima di passare a SageMaker, è una buona idea costruire e testare il modello di apprendimento automatico localmente in MATLAB. Questo ti permette di iterare rapidamente e debuggare il modello. È possibile configurare e addestrare un semplice classificatore ad albero decisionale localmente.

    classifierModel = fitctree(... trainPredictors,... trainResponse,... OptimizeHyperparameters='auto');

    Il lavoro di addestramento qui dovrebbe richiedere meno di un minuto per completarsi e genera alcuni grafici per indicare il progresso dell’addestramento. Dopo che l’addestramento è terminato, viene prodotto un modello di apprendimento automatico MATLAB. L’app Classification Learner può essere utilizzata per provare molti tipi di modelli di classificazione e ottimizzarli per ottenere le migliori prestazioni, quindi produrre il codice necessario per sostituire il codice di addestramento del modello sopra.

    Dopo aver verificato le metriche di accuratezza per il modello addestrato localmente, possiamo passare all’addestramento in Amazon SageMaker.

    Parte 4: Addestra il modello in Amazon SageMaker

    Dopo essere soddisfatti del modello, puoi addestrarlo su larga scala utilizzando SageMaker. Per iniziare a chiamare le SDK di SageMaker, devi inizializzare una sessione SageMaker.

    session = sagemaker.Session();

    Specifica un ruolo IAM di SageMaker che verrà utilizzato per i job di addestramento e l’hosting degli endpoint.

    role = "arn:aws:iam::ACCOUNT:role/service-role/AmazonSageMaker-ExecutionRole-XXXXXXXXXXXXXXX";

    Da MATLAB, salva i dati di addestramento come file .csv in un bucket di Amazon Simple Storage Service (Amazon S3).

    writetable(trainingData,'pump_training_data.csv');

    trainingDataLocation = "s3:// "+session.DefaultBucket+ +"/cooling_system/input/pump_training";

    copyfile("pump_training_data.csv", trainingDataLocation);

    Crea un Estimatore SageMaker

    Successivamente, devi creare un Estimatore SageMaker e passare tutti i parametri necessari, come un’immagine docker per l’addestramento, una funzione di addestramento, variabili d’ambiente, dimensione delle istanze di addestramento, ecc. L’URI dell’immagine di addestramento dovrebbe essere l’URI Amazon ECR che hai creato nel passaggio preliminare con il formato ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/sagemaker-matlab-training-r2023a:latest. La funzione di addestramento dovrebbe essere fornita nella parte inferiore dello script live di MATLAB.

    Console dell'Estimatore SageMaker

    trainingImage = "ACCOUNT.dkr.ecr.us-east-1.amazonaws.com/sagemaker-matlab-training-r2023a:latest";  est = sagemaker.MATLABEstimator(...     role, ...     Image=trainingImage, ...     Session=session, ...     BaseJobName="PumpDecisionTreeMatlab", ...     Environment = loadenv(fullfile(rootFolder, "training.env")), ...     TrainingFunction = @trainingFunction, ...     HyperParameters = struct(), ... % named args to train_decision_tree     InstanceType="ml.m5.large", ...     MaxRunTime=minutes(10), ...         MaxWaitTime=minutes(20), ...     UseSpotInstances=true); 

    Invia il job di addestramento a SageMaker

    Chiamando il metodo fit dell’estimatore, invii il job di addestramento a SageMaker.

    est.fit(training=struct(Location=trainingDataLocation, ContentType="text/csv"))

    Puoi anche verificare lo stato del job di addestramento dalla console di SageMaker:

    Console del Job di Addestramento SageMaker

    Dopo che il job di addestramento è stato completato, selezionando il link del job verrai portato alla pagina di descrizione del job dove puoi vedere il modello MATLAB salvato nel bucket S3 dedicato:

    Output dell'Endpoint SageMaker

    Parte 5: Deploy del modello come endpoint SageMaker in tempo reale

    Dopo l’addestramento, è possibile deployare il modello come endpoint SageMaker in tempo reale, che può essere utilizzato per effettuare previsioni in tempo reale. Per fare ciò, chiamare il metodo deploy dall’estimatore. Qui è possibile configurare la dimensione desiderata dell’istanza per l’hosting in base al carico di lavoro.

    predictor = est.deploy(role, "ClassificationTreeInferenceHandler", uint8(1), "ml.m5.large")

    In background, questo passaggio costruisce un’immagine docker di inferenza e la carica nel repository Amazon ECR, non è richiesto alcun intervento dall’utente per costruire il contenitore di inferenza. L’immagine contiene tutte le informazioni necessarie per gestire la richiesta di inferenza, come la posizione del modello, le informazioni di autenticazione MATLAB e gli algoritmi. Dopo di ciò, Amazon SageMaker crea una configurazione dell’endpoint SageMaker e infine deploya l’endpoint in tempo reale. L’endpoint può essere monitorato nella console SageMaker e può essere terminato in qualsiasi momento se non viene più utilizzato.

    Console di monitoraggio degli endpoint di SageMaker

    Parte 6: Testare l’endpoint

    Ora che l’endpoint è attivo e in funzione, è possibile testare l’endpoint dando alcuni record per effettuare la previsione. Utilizzare il seguente codice per selezionare 10 record dai dati di addestramento e inviarli all’endpoint per la previsione. Il risultato della previsione viene restituito dall’endpoint e mostrato nell’immagine seguente.

    input = trainPredictors(10:19,:) prediction = predictor.predict(input)

    Risultato della previsione

    Parte 7: Integrazione del pannello di controllo

    L’endpoint SageMaker può essere chiamato da molti servizi nativi di AWS. Può anche essere utilizzato come una API REST standard se deployato insieme a una funzione AWS Lambda e al gateway API, che può essere integrato con qualsiasi applicazione web. Per questo caso specifico, è possibile utilizzare l’ingestione in streaming con Amazon SageMaker Feature Store e Amazon Managed Streaming for Apache Kafka, MSK, per prendere decisioni supportate dall’apprendimento automatico in quasi tempo reale. Un’altra possibile integrazione è l’utilizzo di una combinazione di Amazon Kinesis, SageMaker e Apache Flink per costruire un’applicazione gestita, affidabile, scalabile ed altamente disponibile in grado di offrire inferenze in tempo reale su uno stream di dati.

    Una volta che gli algoritmi sono deployati su un endpoint SageMaker, potrebbe essere utile visualizzarli utilizzando un pannello di controllo che mostri previsioni in streaming in tempo reale. Nell’applicazione web custom MATLAB seguente, è possibile visualizzare i dati di pressione e flusso per ciascuna pompa e le previsioni di errore dal modello deployato.

    In questo pannello di controllo è incluso un modello di vita utile residua (RUL) per prevedere il tempo fino al guasto per ciascuna pompa in questione. Per apprendere come addestrare algoritmi RUL, visualizzare il Predictive Maintenance Toolbox.

    Pannello di controllo dello stato di salute della pompa

    Pulizia

    Dopo aver eseguito questa soluzione, assicurarsi di eliminare tutte le risorse AWS non necessarie per evitare costi imprevisti. È possibile eliminare queste risorse utilizzando l’SDK di Python SageMaker o la Console di Gestione AWS per i servizi specifici utilizzati qui (SageMaker, Amazon ECR e Amazon S3). Eliminando queste risorse, si evitano ulteriori addebiti per risorse che non vengono più utilizzate.

    Conclusione

    Abbiamo dimostrato come è possibile portare MATLAB su SageMaker per un caso di utilizzo di manutenzione predittiva di una pompa con l’intero ciclo di vita dell’apprendimento automatico. SageMaker fornisce un ambiente completamente gestito per l’esecuzione di carichi di lavoro di apprendimento automatico e per il rilascio di modelli con una vasta selezione di istanze di calcolo che soddisfano varie esigenze.

    Disclaimer: Il codice utilizzato in questo post è di proprietà e viene mantenuto da MathWorks. Fare riferimento ai termini di licenza nel repository GitHub. Per qualsiasi problema con il codice o richiesta di funzionalità, aprire una segnalazione su GitHub nel repository.

    Riferimenti