Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in...

38
1 Enabling DevOps for Machine Learning with Azure Pipelines Luca Milan @fewbit [email protected] Alberto Dallagiacoma @albertodall [email protected] www.albertodallagiacoma.it

Transcript of Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in...

Page 1: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

1

Enabling DevOps for Machine Learningwith Azure Pipelines

Luca [email protected]@gmail.com

Alberto Dallagiacoma@albertodallalberto@albertodallagiacoma.itwww.albertodallagiacoma.it

Page 2: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 2

Organizer & sponsors

GetLatestVersion.it

Page 3: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 3

About us

• Luca Milan• Technical Manager @ Yoox Net-A-Porter Group

• Automation Addicted <3 Code Junkie

• Alberto Dallagiacoma• Software Architect R&D @ iSolutions (https://labs.isolutions.it)

• Sviluppatore su .NET dalla versione 1.0

• TFS dalla versione 2010 (e ora Azure DevOps)

• PowerShell and F# fan!

Page 4: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 4

Cosa vedrete oggi ?

Come realizzare una strategia di

«Continuous Deployment» per il rilascio

di modelli ML applicando i principi

DevOps ed Agile

Luca & Alberto

Page 5: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 5

Agenda

• Machine Learning

• ML.NET Framework

• CICD per Machine Learning

• Azure DevOps Pipelines

• Demo: Vediamo il codice in azione ☺

Page 6: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

6

Introduzione

Page 7: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 7

La Sfida

Applicazioni (+) Intelligenti

“Big Data”

“Modelli di ML”

mis

ura

in s

cala

di e

xabyte

Page 8: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 8

Un’opportunità per tanti

CommunityMicrosoft

“Production Ready for Everyone”

Page 9: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 9

Le peculiarità dei progetti di ML

E' collegato alla "Scienza dei Dati", servono "Specialisti" con conoscenze matematiche e statistiche approfondite

Possiede metodologie di sviluppo e strumenti dedicati non sempre allineati con gli approcci "DevOps"

Gli step del ciclo di vita di un progetto di ML sono profondamente differenti da quelli del software tradizionale

I modelli di ML vengono distribuiti come servizi a sé stanti (Black Box) e non sono "integrabili" nel codice delle applicazioni

Page 10: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

10

Come Programmare

l’Improgrammabile

Page 11: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 11

Definizione

«Una macchina apprende con

l'esperienza se la sua performance a

svolgere un compito migliora nel corso

del tempo dopo averlo svolto più volte»

Tom Michael Mitchell

Il comportamento dell’algoritmo non è pre-programmato, ma è «appreso» dai dati

Page 12: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 12

Machine Learning «End to End»

Features Apprendimento Predizione

Dati Raw

Feature: rappresentazione numerica del dato di input

re-training & performance

feedback

Page 13: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH1913

Come funziona la Classificazione ?

Fase Apprendimento

Fase Predizione

INPUT o FEATURES LABEL

«Eccitante e Stimolante», Sì

«Deluso e annoiato», No

TR

AIN

ING

SET

«Bravi, mi ispirate», ?𝒇( ) = 𝑺ìOUTPUTModello (Features) = Label

𝒇(𝑥)Miglior algoritmo

Page 14: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

14

C# Machine Learning

senza Python/R :)

Page 15: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

15

Framework for

Machine Learning

.NET Standard

Cross

PlatformOpen

Source

Page 16: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 16

Come usare ML.NET ?

Api & Tools

APIC# / F#

(by code)

CLIAuto-ML engine

(by tool)

UIVS Model Builder

(by wizard)

Page 17: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 17

ML.NET Extensions

https://www.nuget.org/profiles/MLNET

Page 18: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 18

Cosa produce ML.NET ?

Assets

Model

Serializzato su *.zipAlgoritmo trainato in

base al task

Training PipelineCodice C# per

generare il modello

PredictionCode

Codice C# da includere nelle applicazioni

finali

Page 19: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

19

CD4ML“DevOps is a culture, a movement, a philosophy—A way

to bring together the best of software development and

IT operations”

Page 20: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 20

Continuous «Delivery»

«Portare in produzione qualsiasi

cambiamento del software in maniera

rapida, sicura, affidabile e sostenibile»

InfrastrutturaApplicazione

Page 21: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 21

Continuous Delivery per «ML»

Team cross-funzionali

producono artefatti di ML

tramite un processo

automatizzato e

riproducibile basato su cicli

di sviluppo rapidi e

incrementali

Page 22: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 22

Obiettivi Organizzativi

Amalgamare persone con

competenze differenti che

lavorano con strumenti e

processi distinti.

Development

Data Operations

Page 23: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 24

Ciclo di vita di un progetto di ML

Analisi Apprendimento * Distribuzione *

Training

Pipelines Trained

Models

Training / Test

Dataset

Prediction

Page 24: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 25

Distribuzione del Modello

• Modello come «allegato»Il modello è distribuito insieme all’applicazione ad esempio all’interno container docker.

• Modello come «servizio»Il modello è distribuito come servizio e accessibile all’applicazione tramite chiamate REST o RPC.

• Modello come «pacchetto»Il modello è distribuito in maniera indipendente e l’applicazione a runtimecarica ed utilizza il modello.

Page 25: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 26

Approccio GIT-centrico (1)

1. Codice

✓ Applicazione

✓ Training Pipeline

✓ CI/CD Pipelines

✓ Provisioning

2. Dati

✓ Dataset Training

✓ Dataset Test

3. Modelli

✓ Release

✓ Versioning (SemVer)

Page 26: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 27

Approccio GIT-centrico (2)

Master

Feature/Experiment

Modifiche al Dataset (T/S)

Cambio Algoritmo

Tuning Algoritmo

Debugging e

Valutazione metriche

Tests (Unit/Integration)

Approvazione &

Merge della PR

Nuovo «Esperimento»

Invio PULL-REQUEST

Page 27: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 28

Approccio GIT-centrico (3)

Valori Metriche

Commits

Modello di ML

Numero di VersioneMAJOR.MINOR.PATCH-SHACOMMIT

https://github.com/lucamilan/doh2019/releases/tag/0.1.1-644382c

Page 28: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

29

Azure DevOps

Pipelines

Page 29: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 30

“Classic” Pipeline (Build)

Build Pipeline

Job

Task

Task

Task

Page 30: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 31

“Classic” Pipeline (Release)

StageStage

Stage

Job

Task

Task

Task

Page 31: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 32

“Classic” Pipeline (Build + Release)

YAML Build Pipeline

Job Job

Task

Task

Task

Task

Release Pipeline

Sta

ge

Job

Task

Task

Sta

ge

Job

Task

Task

Job

Task

Task

Job Job

Task

Task

Task

Task

Build Pipeline

Art

ifacts

Page 32: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 33

Introducing YAML Pipelines

• Unificazione di Build e Release in un’unica pipeline• Attualmente in preview.

• Fa parte del repository• Può evolvere insieme al codice.

• Può essere composta da uno o più files .yml.

• E’ possibile applicare alla pipeline le stesse branching policies del codice.

• Anche una pipeline può essere soggetta a Pull Request.

• Non e’ possibile convertire in formato YAML una pipeline esistente• Export dei singoli task + edit manuale.

• Piccolo supporto da parte dell’editor visuale.

Page 33: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 34

YAML Pipeline

Multi-Stage YAML Pipeline

Sta

ge

Job Job

Task

Task

Task

Task

Sta

ge

Job

Task

Task

Sta

ge

Job

Task

Task

Sta

ge

Job

Task

Task

Job

Task

Task

Job

Task

Task

Page 34: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 35

Abilitare le Multi-Stage Pipelines

Page 35: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 36

Azure Pipelines Tips And Tricks

• Checkout del branch• Di default, ogni job esegue il checkout del branch.

• Può impattare sui tempi di esecuzione in caso di codebase grandi.

• checkout: none

• Publish Pipeline Artifacts• Artefatti prodotti dalla fase di build disponibili ad altri job/stages della pipeline.

• Don’t Repeat Yourself (DRY)• Dove possible, riutilizzare parti di pipeline tramite template.

• Variabili• Definire i parametri «globali» della pipeline in un template a parte.

• Singolo punto dove applicare modifiche.

• Definire a livello di job le variabili utilizzate da uno specifico job.

Page 36: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

37

DEMO

Show me the code! ☺

Page 37: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19 38

Organizzazione della Solution .NET Core

Trainer

Trainer Tests

Trainer Tools

Data

Model

Model

Release Prediction

Training

Model

Serving

Model

Building

Page 38: Enabling DevOps for Machine Learning with Azure Pipelines · •Unificazione di Build e Release in un’unicapipeline •Attualmente in preview. •Fa parte del repository •Può

#DOH19

THANK YOU!