PyTorch, Python per la IA: cos’è e come iniziare
PyTorch è un framework di machine learning open source utilizzato sia per la prototipazione della ricerca, sia per l’implementazione della produzione. Secondo il suo repository di codice sorgente, PyTorch offre due funzionalità di alto livello:
- Calcolo tensoriale (come Numpy) con accelerazione GPU
- Reti neurali profonde costruite su un sistema tape-based autograd
Sviluppato originariamente presso Idiap Research Institute, NEC Laboratories America, Facebook e Deepmind Technologies, con il contributo dei progetti Torch e Caffe2, PyTorch ora ha una fiorente comunità open source. PyTorch 1.10, rilasciato nell’ottobre 2021, può vantare 426 contributori e il repository ha attualmente 54.000 stelle.
Questo articolo vuole offrire una panoramica su PyTorch (incluse le nuove funzionalità di PyTorch 1.10) e una breve guida per iniziare a utilizzare questo framework in grande ascesa.
L’evoluzione di PyTorch
All’inizio, accademici e ricercatori furono attratti da PyTorch perché era più facile da usare di TensorFlow per lo sviluppo di modelli con unità di elaborazione grafica (GPU). PyTorch imposta automaticamente la modalità eager execution, il che significa che le sue chiamate API vengono eseguite quando richiamate, anziché essere aggiunte a un grafico per essere eseguite in seguito. Da allora TensorFlow ha migliorato il suo supporto per la modalità eager execution, ma PyTorch è ancora popolare nelle comunità accademiche e di ricerca.
Ora PyTorch è pronto per la produzione, consentendo di passare facilmente dalla modalità eager execution a quella grafica con TorchScript e accelerare il percorso verso la produzione con TorchServe. Il back-end torch.distributed consente la formazione distribuita scalabile e l’ottimizzazione delle prestazioni nella ricerca e nella produzione e un ricco ecosistema di strumenti e librerie, oltre a supportare lo sviluppo nella visione artificiale, l’elaborazione del linguaggio naturale e altro ancora. Infine, PyTorch è ben supportato sulle principali piattaforme cloud, tra cui Alibaba, Amazon Web Services (AWS), Google Cloud Platform (GCP) e Microsoft Azure. Il supporto cloud offre uno sviluppo frictionless e uno scaling facile.
Novità di PyTorch 1.10
Secondo il blog di PyTorch, gli aggiornamenti di PyTorch 1.10 si sono concentrati sul miglioramento della formazione e delle prestazioni, nonché sull’usabilità degli sviluppatori. Ecco alcuni punti salienti di questa versione:
- Le API CUDA Graphs sono integrate per ridurre l’overhead della CPU per i carichi di lavoro CUDA.
- Diverse API front-end come FX, torch.special e la parametrizzazione nn.Module sono state spostate dallo stato beta a quello stable. FX è una piattaforma Pythonic per trasformare i programmi PyTorch; torch.special implementa funzioni speciali come le funzioni gamma e Bessel.
- Un nuovo compilatore JIT basato su LLVM supporta la fusione automatica nelle CPU e nelle GPU. Il compilatore JIT basato su LLVM può fondere insieme sequenze di chiamate alla libreria torch per migliorare le prestazioni.
- Il supporto per Android NNAPI è ora disponibile in versione beta. NNAPI (Android’s Neural Networks API) consente alle app Android di eseguire reti neurali ad alta intensità di calcolo sulle parti più potenti ed efficienti dei chip per smartphone, comprese le GPU e le unità di elaborazione neurale specializzate (NPU).
Come iniziare con PyTorch
La pagina del tutorial di PyTorch offre due percorsi: uno per chi ha familiarità con altri framework di deep learning e uno per i neofiti. Se siete tra questi ultimi e dovete essere ancora introdotti a termini come tensori, set di dati, autograd e altri concetti importanti, vi suggerisco di seguire il secondo percorso e utilizzare l’opzione Run in Microsoft Learn come mostrato nell’immagine sottostante.
Se invece avete già una certa familiarità con i concetti di deep learning, vi suggerisco di eseguire il quickstart mostrato nell’immagine sottostante. Potete anche fare clic su Run in Microsoft Learn o Run in Google Colab.
Progetti PyTorch da tenere d’occhio
Come mostrato sul lato sinistro dello screenshot qui sopra, PyTorch ha molte ricette e tutorial. Ha anche numerosi modelli ed esempi e sono soprattutto tre i progetti nell’ecosistema PyTorch che mi sembrano particolarmente interessanti: Captum, PyTorch Geometric (PyG) e skorch.
Captum
Il termine latino captum significa comprensione e in questo caso parliamo di “una libreria di interpretabilità del modello per PyTorch”. Contiene una varietà di algoritmi di attribuzione basati su gradiente e perturbazione che possono essere utilizzati per interpretare e comprendere i modelli PyTorch. Ha anche una rapida integrazione per i modelli creati con librerie specifiche del dominio come torchvision, torchtext e altri.
L’immagine sottostante mostra tutti gli algoritmi di attribuzione attualmente supportati da Captum.
PyTorch geometrico (PyG)
PyTorch Geometric (PyG) è una libreria che i data scientist e altri possono utilizzare per scrivere e addestrare reti neurali di grafici per applicazioni relative ai dati strutturati. Come descritto nella sua pagina del repository GitHub:
PyG offre metodi per il deep learning su grafici e altre strutture irregolari, noto anche come geometric deep learning. PyG è costituito da caricatori mini-batch facili da usare per operare su molti grafici piccoli, dal supporto multi GPU, da un gran numero di set di dati benchmark comuni e dal gestore di esperimenti GraphGym.
L’immagine sottostante offre una panoramica dell’architettura di PyTorch Geometric.
skorch
skorch è una libreria di rete neurale compatibile con scikit-learn. Il suo obiettivo è rendere possibile l’utilizzo di PyTorch con sklearn. Se avete familiarità con sklearn e PyTorch, non dovete imparare nuovi concetti e la sintassi dovrebbe essere ben nota. Inoltre, skorch astrae il ciclo di formazione, rendendo obsoleto gran parte del codice standard. È sufficiente un semplice net.fit(X, y), come mostrato nell’immagine sottostante.
Conclusione
Nel complesso, PyTorch è uno dei pochi framework di alto livello per reti neurali profonde con supporto GPU. Potete usarlo per lo sviluppo e la produzione di modelli, eseguirlo in locale o nel cloud e trovare molti modelli PyTorch predefiniti da utilizzare come punto di partenza per i vostri modelli.