Creare un flusso di lavoro MLOps end-to-end per l’ispezione della qualità visiva in edge – Parte 2

Creare un flusso di lavoro MLOps completo per ispezioni di qualità visiva su edge - Parte 2

Nella Parte 1 di questa serie, abbiamo delineato un’architettura per un flusso di lavoro MLOps end-to-end per un caso di utilizzo di ispezione visiva della qualità al limite. È progettata per automatizzare l’intero processo di machine learning (ML), dall’etichettatura dei dati all’addestramento e al rilascio del modello al limite. La focalizzazione su servizi gestiti e senza server riduce la necessità di operare l’infrastruttura per il flusso di lavoro e consente di iniziare rapidamente.

In questo articolo, approfondiremo come sono implementate le parti di etichettatura, costruzione e addestramento del modello nel flusso di lavoro. Se sei particolarmente interessato all’aspetto del rilascio al limite dell’architettura, puoi saltare direttamente alla Parte 3. Forniamo anche un repository di GitHub correlato se desideri distribuire e provare questo processo tu stesso.

Panoramica della soluzione

Il caso di utilizzo di esempio utilizzato per questa serie è una soluzione di ispezione visiva della qualità in grado di rilevare difetti su etichette metalliche, che potrebbe essere implementata come parte di un processo di produzione. Il diagramma seguente mostra l’architettura ad alto livello del flusso di lavoro MLOps definita all’inizio di questa serie. Se non l’hai ancora letto, ti consigliamo di dare un’occhiata alla Parte 1.

Diagramma dell'architettura

Automazione dell’etichettatura dei dati

L’etichettatura dei dati è un’attività intrinsecamente intensiva dal punto di vista del lavoro che coinvolge esseri umani (etichettatori) per etichettare i dati. Per il nostro caso di utilizzo, l’etichettatura significa ispezionare un’immagine e disegnare rettangoli di delimitazione per ogni difetto visibile. Questo potrebbe sembrare semplice, ma dobbiamo tener conto di diverse cose per automatizzarlo:

  • Fornire un’attrezzatura per consentire agli etichettatori di disegnare rettangoli di delimitazione
  • Gestire una forza lavoro di etichettatori
  • Garantire una buona qualità delle etichette
  • Gestire e versionare i nostri dati e le etichette
  • Orchestrare l’intero processo
  • Integrarlo nel sistema CI/CD

Possiamo fare tutto questo con i servizi di AWS. Per facilitare l’etichettatura e gestire la nostra forza lavoro, utilizziamo Amazon SageMaker Ground Truth, un servizio di etichettatura dei dati che consente di creare e gestire i propri flussi di lavoro e forza lavoro di etichettatura dei dati. Puoi gestire la tua forza lavoro privata di etichettatori o utilizzare il potere degli etichettatori esterni tramite Amazon Mechanical Turk o fornitori di terze parti.

Inoltre, l’intero processo può essere configurato e gestito tramite l’SDK di AWS, che è ciò che usiamo per orchestrare il nostro flusso di lavoro di etichettatura come parte del nostro sistema CI/CD.

I lavori di etichettatura vengono utilizzati per gestire i flussi di lavoro di etichettatura. SageMaker Ground Truth fornisce modelli predefiniti per molti diversi tipi di attività di etichettatura, inclusa l’etichettatura di rettangoli di delimitazione. Per ulteriori dettagli su come configurare un lavoro di etichettatura per le attività di rettangolo di delimitazione, consulta Ottimizzazione dell’etichettatura dei dati per l’individuazione di oggetti YOLO in Amazon SageMaker Ground Truth. Per il nostro caso di utilizzo, adattiamo il modello di attività per le attività di rettangolo di delimitazione e utilizziamo annotatori umani forniti da Mechanical Turk per etichettare le nostre immagini per impostazione predefinita. La seguente schermata mostra cosa vede un etichettatore quando lavora su un’immagine.

Interfaccia di etichettatura

Parliamo ora della qualità delle etichette. La qualità delle nostre etichette influenzerà la qualità del nostro modello di apprendimento automatico. Quando automatizziamo l’etichettatura dell’immagine con una forza lavoro umana esterna come Mechanical Turk, è difficile garantire una buona e costante qualità delle etichette a causa della mancanza di competenze nel settore. A volte è necessaria una forza lavoro privata di esperti del settore. Nella nostra soluzione di esempio, tuttavia, utilizziamo Mechanical Turk per implementare l’etichettatura automatica delle nostre immagini.

Ci sono molti modi per garantire una buona qualità delle etichette. Per ulteriori informazioni sulle migliori pratiche, consultare la presentazione di AWS re:Invent 2019, Crea set di dati di addestramento accurati con Amazon SageMaker Ground Truth. Come parte di questa soluzione di esempio, abbiamo deciso di concentrarci sui seguenti aspetti:

Infine, dobbiamo pensare a come memorizzare le nostre etichette in modo che possano essere riutilizzate in seguito per l’addestramento e consentire la tracciabilità dei dati di addestramento del modello utilizzati. L’output di un lavoro di etichettatura di SageMaker Ground Truth è un file nel formato JSON-lines che contiene le etichette e i metadati aggiuntivi. Abbiamo deciso di utilizzare il archivio offline di Amazon SageMaker Feature Store per memorizzare le nostre etichette. Rispetto alla semplice memorizzazione delle etichette su Amazon Simple Storage Service (Amazon S3), ci fornisce alcuni vantaggi distinti:

  • Consente di archiviare un’intera cronologia dei valori delle funzioni, combinata con query nel tempo. Ciò ci permette di versionare facilmente il nostro dataset e garantire la tracciabilità.
  • Come archivio centrale delle funzioni, promuove la riutilizzabilità e la visibilità dei nostri dati.

Per una introduzione a SageMaker Feature Store, consultare Iniziare con Amazon SageMaker Feature Store. SageMaker Feature Store supporta la memorizzazione delle funzioni in formato tabellare. Nel nostro esempio, memorizziamo le seguenti funzioni per ogni immagine etichettata:

  • La posizione in cui l’immagine è memorizzata su Amazon S3
  • Le dimensioni dell’immagine
  • Le coordinate del bounding box e i valori delle classi
  • Una bandiera di stato che indica se l’etichetta è stata approvata per l’uso nell’addestramento
  • Il nome del lavoro di etichettatura utilizzato per creare l’etichetta

La seguente immagine mostra come potrebbe apparire una tipica voce nell’archivio delle funzioni.

Archivio delle funzioni

Con questo formato, possiamo facilmente interrogare l’archivio delle funzioni e lavorare con strumenti familiari come Pandas per costruire un dataset da utilizzare in seguito per l’addestramento.

Orchestrazione dell’etichettatura dei dati

Infine, è ora di automatizzare e orchestrare ciascuno dei passaggi del nostro flusso di lavoro di etichettatura! Per fare ciò, utilizziamo AWS Step Functions, un servizio di flusso di lavoro serverless che ci fornisce integrazioni API per orchestrare e visualizzare rapidamente i passaggi nel nostro flusso di lavoro. Utilizziamo anche un insieme di funzioni AWS Lambda per alcuni dei passaggi più complessi, in particolare i seguenti:

  • Verificare se ci sono nuove immagini che richiedono etichettatura su Amazon S3
  • Preparare i dati nel formato di input richiesto e avviare il lavoro di etichettatura
  • Preparare i dati nel formato di input richiesto e avviare il lavoro di verifica delle etichette
  • Scrivere il set finale di etichette nell’archivio delle funzioni

La seguente figura mostra come appare la macchina a stati Step Functions completa per l’etichettatura.

Labeling StepFunction

Etichettatura: implementazione dell’infrastruttura e integrazione nel CI/CD

Il passaggio finale consiste nell’integrare il workflow di Step Functions nel nostro sistema CI/CD e garantire che venga distribuita l’infrastruttura necessaria. Per completare questo compito, utilizziamo l’AWS Cloud Development Kit (AWS CDK) per creare tutta l’infrastruttura necessaria, come le funzioni Lambda e il workflow di Step Functions. Con CDK Pipelines, un modulo di AWS CDK, creiamo una pipeline in AWS CodePipeline che distribuisce le modifiche alla nostra infrastruttura e attiva una pipeline aggiuntiva per avviare il workflow di Step Functions. L’integrazione di Step Functions in CodePipeline rende questo compito molto facile. Utilizziamo Amazon EventBridge e le azioni di origine di CodePipeline per assicurarci che la pipeline venga attivata secondo un programma, nonché quando vengono apportate modifiche a git.

Il seguente diagramma mostra in dettaglio l’architettura CI/CD per l’etichettatura.

Labeling CDK

Recap automatizzazione dell’etichettatura dei dati

Ora abbiamo una pipeline funzionante per creare automaticamente etichette dalle immagini non etichettate dei tag metallici utilizzando SageMaker Ground Truth. Le immagini vengono prese da Amazon S3 e inserite in un lavoro di etichettatura di SageMaker Ground Truth. Dopo aver etichettato le immagini, effettuiamo un controllo di qualità utilizzando un lavoro di verifica delle etichette. Infine, le etichette vengono archiviate in un gruppo di caratteristiche in SageMaker Feature Store. Se desideri provare personalmente l’esempio funzionante, consulta il repository GitHub correlato. Ora vediamo come automatizzare la creazione del modello!

Automazione della creazione del modello

Similmente all’etichettatura, diamo uno sguardo approfondito alla nostra pipeline di creazione del modello. Come minimo, dobbiamo orchestrare i seguenti passaggi:

  • Recupera le ultime caratteristiche dal feature store
  • Prepara i dati per l’addestramento del modello
  • Addestra il modello
  • Valuta le prestazioni del modello
  • Versiona e archivia il modello
  • Approva il modello per il rilascio se le prestazioni sono accettabili

Di solito, il processo di creazione del modello è guidato da un data scientist ed è il risultato di una serie di esperimenti eseguiti utilizzando notebook o codice Python. Possiamo seguire un semplice processo in tre fasi per convertire un esperimento in una pipeline MLOps completamente automatica:

  1. Converti il codice esistente di preprocessing, addestramento e valutazione in script a riga di comando.
  2. Crea una definizione di pipeline di SageMaker per orchestrare la creazione del modello. Utilizza gli script creati nella prima fase come parte delle fasi di elaborazione e addestramento.
  3. Integra la pipeline nel tuo flusso di lavoro CI/CD.

Questo processo in tre fasi è generico e può essere utilizzato per qualsiasi architettura del modello e framework di apprendimento automatico a tua scelta. Seguiamolo e iniziamo dalla Fase 1 per creare gli script seguenti:

  • preprocess.py – Prende le immagini etichettate da SageMaker Feature Store, suddivide il dataset e lo trasforma nel formato richiesto per l’addestramento del nostro modello, nel nostro caso il formato di input per YOLOv8
  • train.py – Addestra un modello di rilevamento oggetti YOLOv8 di Ultralytics utilizzando PyTorch per rilevare graffi sulle immagini dei tag metallici

Orchestrare la costruzione del modello

Nel passaggio 2, raggruppiamo questi script in lavori di addestramento e di elaborazione e definiamo la pipeline finale di SageMaker, che appare come nella figura seguente.

SageMaker Pipeline

È composta dai seguenti passaggi:

  1. Un ProcessingStep per caricare le ultime caratteristiche da SageMaker Feature Store; dividere l’insieme di dati in set di addestramento, di convalida e di test; e salvare gli insiemi di dati come archivi tar per l’addestramento.
  2. Un TrainingStep per addestrare il modello usando gli insiemi di dati di addestramento, di convalida e di test e esportare la metrica di Average Precision media (mAP) per il modello.
  3. Un ConditionStep per valutare se il valore della metrica mAP del modello addestrato è superiore a una soglia configurata. In tal caso, viene eseguito uno step RegisterModel che registra il modello addestrato nel SageMaker Model Registry.

Se sei interessato al codice dettagliato della pipeline, consulta la definizione della pipeline nel nostro deposito di esempio.

Addestramento: Implementazione dell’infrastruttura e integrazione nel CI/CD

Ora è il momento per il passaggio 3: l’integrazione nel flusso di lavoro del CI/CD. La nostra pipeline di CI/CD segue lo stesso schema illustrato nella sezione di etichettatura precedente. Utilizziamo AWS CDK per distribuire le pipeline richieste da CodePipeline. L’unica differenza è che utilizziamo Amazon SageMaker Pipelines invece di Step Functions. La definizione della pipeline di SageMaker viene costruita e attivata come parte di un’azione di CodeBuild in CodePipeline.

Training CDK

Conclusione

Ora abbiamo un flusso di lavoro completamente automatizzato per l’etichettatura e l’addestramento del modello utilizzando SageMaker. Abbiamo iniziato creando script da linea di comando a partire dal codice sperimentale. Successivamente, abbiamo utilizzato SageMaker Pipelines per orchestrare ciascuno dei passaggi del flusso di lavoro di addestramento del modello. Gli script da linea di comando sono stati integrati come parte dei passaggi di addestramento e di elaborazione. Alla fine della pipeline, il modello addestrato viene versionato e registrato in SageMaker Model Registry.

Consulta Parte 3 di questa serie, in cui daremo un’occhiata più da vicino all’ultimo passaggio del nostro flusso di lavoro MLOps. Creeremo la pipeline che compila e distribuisce il modello su un dispositivo edge utilizzando AWS IoT Greengrass!