Top 15 Emerging Jobs U.S.
(by Linkedin)
#1 Artificial Intelligence Specialist +74%
Skills required: Machine Learning, Deep Learning, TensorFlow, Python, Natural Language Processing
#2 Robotics Engineer +40%
Skills required: Robotic Process Automation, UiPath, Blue Prism, Automation Anywhere, Robotics
#3 Data Scientist +37%
Skills required: Machine Learning, Data Science, Python, R, Apache Spark
#5 Site Reliability Engineer +34%
Amazon Web Services, Ansible, Kubernetes, Docker Products, Terraform
… Full Stack, JavaScript, Backend Developer, Cybersecurity specialist, etc…
Perché il ML è così
popolare oggi?
Business Case
Modelli e Teorie
Matematiche a supporto
Dati
Potenza di
Calcolo
Peculiarità del Machine Learning
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 moderni di Software Development
Il ciclo di vita di un progetto di ML è differente da quello di un «software
tradizionale»
Generalmente i modelli di ML sono distribuiti come «Black Box» e non
"integrabili" nel codice e nel processo che esegue l’applicazione
Fare Machine Learning senza Python
Nasce da un progetto di Microsoft Research (10 anni fa)
La prima versione è del Maggio 2018, oggi siamo alla 1.5.4
E’ scritto in C# e alcune parti in C++
Open Source, supportato da Microsoft e dalla Community
Basato su .NET Standard (Mac / Linux / Windows)
API flessibile (approccio «low code» e tradizionale)
Supporta il Deep Learning (Transfer Learning / ONNX)
Usare ML.NET
Regole di Ingaggio
API CLI Model Builder
Codificare la pipeline
(basta referenziare il pacchetto nuget e si
può iniziare a codificare la pipeline di
training, fare il training, la predizione,
etc.)
Auto-ML Engine
(strumento da linea di comando per il
“discovery” dei modelli più performanti
partendo dal datase di input e altri
parametri come output abbiamo il
modello trainato e il codice pe usarlo)
low code
(da visual studio in maniera guidata si
procede all’importazione del dataset e
alla scelta dell’algoritmo poi la procedura
produce il codice necessario ad usare il
modello)
Outputs
Training Pipeline Model Prediction Code
Codice C# che rappresenta le fasi di Build
e Training da effettuare su un dataset per
risolvere il task oggetto dell’analisi.
In formato binario è l’artefatto prodotto
della training pipeline. Rappresenta la
descrizione analitica dell’algoritmo
traninato.
Codice C# utilizzato per la fase di
predizione, deve essere incluso nelle
applicazioni finali.
Raccolta
(Load & Transform)
Model Improvement
(Evaluate)
Featuring & Learning
(Append)
Model Training
(Fit)
Salvataggio
(Save)
Caricamento Modello
(Load)
Make Prediction
(PredictionEngine)
SERVING
webapi, webapp, iot, desktop
BULD & TRAINING
Trasformer
Trasformer
DataView
Estimator
Trasformer
Obiettivo
organizzativo
All’interno di un Team di sviluppo,
facilitare il dispiegamento di Modelli di IA
attraverso:
• la COOPERAZIONE tra Data Scientists
e IT Operations
• L’AUTOMAZIONE del processo di
Analisi, Sviluppo, Test e rilascio di un
modello
DevOps e MLOps
DevOps
“DevOps (dalla contrazione inglese di development,
"sviluppo", e operations, qui simile a "messa in
produzione" o "deployment") è un metodologia di
sviluppo del software che punta alla
comunicazione, collaborazione e integrazione
tra sviluppatori e addetti alle operations della
information technology (IT). DevOps vuole
rispondere all'interdipendenza tra sviluppo software
e IT operations, puntando ad aiutare
un'organizzazione a sviluppare in modo più rapido
ed efficiente prodotti e servizi software.”
(cit. DevOps - Wikipedia)
DevOps e MLOps
MLOps
“With Machine Learning Model
Operationalization Management (MLOps),
we want to provide an end-to-end machine
learning development process to design,
build and manage reproducible,
testable, and evolvable ML-powered
software.” (cit. ML Ops: Machine Learning
Operations (ml-ops.org))
Continuous Integration /
Continuous Delivery
Continuous Integration:
Integrazione dei cambiamenti (al codice)
con la baseline esistente
Build
Test (Unit, Integration, Security … )
Continuous Delivery:
• Produzione di Artefatti (ML)
POTENZIALMENTE rilasciabili in
produzione in maniera
• Sicura
• Riproducibile
• Affidabile
• Rapida
COMMIT
FEEDBACK – GREEN / RED
COMMIT
Build
Test
Training
Build
Test
Training
The Last Mile - Deploy
Deploy portare il valore all’utente attraverso il dispiegamento
degli artefatti sull’infrastruttura
Riprodicibile
Automatico
Idempotente
COMMIT
R
E
L
E
A
S
E
SETUP INFRA
Automatic (Approved) Deploy
“Old” Deploy approach
Model
(Code)
Test
Dataset
Build
Test
Training
Trained Model
Dataset
Release 0.1.0-3e82c10
Infrastructure-As-Code
«Infrastructure as code è il processo di gestione e provisioning dei data
center dei computer attraverso file di definizione leggibili dalla macchina,
piuttosto che configurazione hardware fisica o strumenti di
configurazione interattiva»
Hashicorp Terraform
Pulumi
SETUP INFRA
PUSH PULL
IaC CI / CD Pipeline
Ciclo di vita di un progetto di ML
Training
Pipelines T
rained
Models
Training / Test
Dataset
Azure
Resources
33
validation
Model Created
Training Pipeline GitHub Release Prediction Pipeline
Trained Model
Dataset
Release 0.1.0-3e82c10
Tools – GitHub Actions
on push
on pull-request
…
Job #1 Job #2
Action 1 – Setup .NET Core
Action 2 – Build project
Action 3 – Test project
Action N – …
Action 1 – GitVersion
Action 2 – Create Release
Action 3 – Publish Artifacts
Action N – …
Depends on
Environment
Tools – GitHub Actions - Environments
Definiti staticamente all’interno di ogni repo GH
Definisce una FASE del processo di sviluppo
Development
QA
Production
Scoped resources
Protection Rules – Workflow di approvazione
Branch (è possibile limitare l’uso di un “Environment” a specifici branch)
Secrets – variabili criptate con validità limitata al singolo Environment
Ciclo di vita di un progetto di ML –
Training Pipeline in dettaglio – 1
COMMIT
Model
(Code)
Test
Dataset
Build
Test
Training
Trained Model
Dataset
Pull-request
Review
Approve
Merge
Dispatch Message
event_type: model-created
message: |
{
"ML_MODEL_VERSION": vX.Y.Z-xxxx,
"ML_MODEL_URI":
https://github.com/igoran/.../${{
env.VERSION_NAME }}.zip
}
Approvazione
Promozione
Review
Approve
Serving “Environment”
Ciclo di vita di un progetto di ML –
Serving Pipeline in dettaglio
SETUP INFRA
Build
Test
Azure
Resources
model-created
Trained Model
Dataset
Download Model
Tools – Pulumi – 1
Infrastructure-as-Code Framework
Multi-Platform Providers (AWS, Azure, GCP … )
(Multi-)Language oriented
C#, Python, Go …
CLI ed Engine multi piattaforma (pulumi)
NO YAML
Ambienti “sandboxed” Stacks
Tools – Pulumi – 2
Pulumi Service Backend (Pulumi Servers)
Self-Managed Service Backend (Pulumi Enterprise)
Language-Agnostic
Multi-Cloud Resource Provider
Multi-platform Engine
Multi-Platform CLI
Windows
Linux
MacOSX
Tools – Pulumi – State & Stacks
Pulumi State
metadata dell’Infrastruttura
Memorizzata in “Backend services”
Pulumi Stack(s)
• Istanza isolata, configurata in maniera indipendente di
un programma Pulumi
• Utilizzata, principalmente, per separare le risorse delle
diverse fasi di sviluppo (Dev, QA, Prod … ) o di diverse
feature
Nel ML le cose si complicano perché dobbiamo tenere conto di altri fattori per poter gestire in maniera appropriata il processo di CICD:
Dati (Volumi e Gestione dello schema e dei suoi cambiamenti)
Modello (Algoritmo)
Codice (Come prima)
Versioning del modello:
Chi l’ha creato ? Qual è la versione più aggiornata ?
Che performance possiede una specifica versione ?
Tracciare le dipendenze tra:
Modello (schema) e dati usati per il training
Codice di training e Modello trainato
Persone ?
Verificare il modello tramite test
Unit
Integration
Contesto attuale. Il mondo del lavoro chiede nuovi profili legati all’intelligenza artificale e la penetrazione nei vari settori industriali è pressochè ubiquitaria.
Applicazioni più intelligenti
Sono passati circa 60 anni da quando Alan Turing propose al mondo l’idea di una macchina in grado di apprendere e diventare «intelligente» nel modo in cui noi umani percepiamo l’intelligenza. Ma solo oggi, a discapito di fiction e romanzi, cominciamo a sentire reale l’idea di realizzare «applicazioni più intelligenti». Questo sentimento come sviluppatori ed esperti del settore software possiamo toccarlo con mano perché ad ogni conferenza o meetup tecnico a cui partecipiamo cominciamo a trovare talk su AI, ML o DL.
Dati > 10^18 byte = exabyte (milione di terabyte / trilione di byte)
Ad oggi abbiamo una mole di dati immensa a cui attingere a cui fino ad ora solo le Big hanno potuto attingere in modo produttivo. Le piccole e medie imprese non hanno ancora budget e conoscenze adatte a sfruttarle. Esiste la tecnologia ma non è ancora alla portato di tutti. Il ML ci fornisce un primo modo per caso d’uso concreto per cominciare a sfruttare questi dati.
Machine Learning (Data Mining Predittivo)
Se pensiamo al ML possiamo osservare che abbiamo Conoscenza (+50 anni di teorie matematiche e statistiche che lo supportano), Dati e Tecnologie/Strumenti (Cloud) ora quello che rimane da fare è trovare casi d’uso dove utilizzarlo.
1 > Sfida organizzativa, c’è necessità di creare team cross-funzionali e multi-disciplinari, facendo coesistere skills e persone tra loro distanti.
2 > Sfida tecnica, incanalare il ciclo di vita di un progetto di machine learning verso le pratiche Agili e DevOps tradizionali (Pair Programming, Code Review, PR, pattern di release con A/B, Canary, Feature-Toggling, ecc.)
3 > Dati, Modello, Codice vs Codice e basta
4 > La distribuzione dei modelli di ML (binding e chiamate RPC)
Un ramo della scienza che studia la possibilità di evolvere le macchine a tal punto da riuscire a svolgere, in completa autonomia, compiti che fino ad oggi erano assegnati agli essere umani (guida autonoma, possibilità di riconoscere oggetti o voce, fare diagnosi di problemi medici, etc.).
E’ un subset dell’AI ed Usa approcci statistici per migliorare la capacità di apprendimento di algoritmo. Usa dataset di dimensioni ridotte, limitata potenza di calcolo e necessita una fase di feature engineering.
Fa parte del ML e Usa dataset di grandi dimensioni e hardware dedicato per fare computazioni intensive (usa algoritmi del ML) tramite reti neurali multi strato. Non richiede la fase di feature engineering.
Rendere il processo: osservabile tracciabile e riproducibile in ogni sua parte.
Community
Il ML nasce in ambito accademico, la parte teoria di matematica e statistica è stata sviluppato nelle università ed usa Pyton come linguaggio privilegiato.
Microsoft
MS aveva casi d’uso concreti in cui utilizzare la conoscenza legata al ML quindi ha deciso di creare internamente un framework di ML per creare e distribuire i modelli di ML all’interno di tanti prodotti da Excel a Bing che potesse giare su device / piattaforme diverse da Azure a Xbox a Windows.
ML.NET
Nasce dall’esperienza di 10 anni di sviluppo di ML e da quella di centinaia di data scientist e developer che hanno lavorato su questi progetti. E’ multipiattaforma, CODE ORIENTED e open source e possiamo far girare i modelli di ML all’interno dei processi delle applicazioni e non come black box separate.
Production For Everyone
L’idea è quella di rendere il ML più popolare e alla portata di tutti, in questo modo diverrà più facile integrare i modelli all’interno delle applicazioni e anche sostenibile in termini di costi e accessibilità.
curl -L “https://fxappdev6f822e30.azurewebsites.net/api/predict” -d "{ sentimentText:'I recommend this place' }"