Home topics Pytorch Cos'è PyTorch?
 
Utilizzare PyTorch con watsonx.ai Abbonati per ricevere gli aggiornamenti sull'AI
Illustrazione con collage di pittogrammi di nuvole, grafico a torta, pittogrammi grafici
Cos'è PyTorch?

PyTorch è un framework di deep learning open source basato su software usato per creare reti neurali, combinando la libreria di machine learning back-end di Torch con un'API di alto livello basata su Python . La sua flessibilità e facilità d'uso, tra gli altri vantaggi, lo hanno reso il principale framework di ML per le comunità accademiche e di ricerca.

PyTorch supporta un'ampia varietà di architetture di rete neurali, da semplici algoritmi di regressione lineare a complesse reti neurali convolutive e modelli di trasformatori generativi utilizzati per attività come la computer vision e l'elaborazione del linguaggio naturale (NLP). PyTorch si basa sul noto linguaggio di programmazione Python e offre ampie librerie di modelli preconfigurati (e persino pre-istruiti), consentendo ai data scientist di creare ed eseguire sofisticate reti di deep learning e riducendo al minimo il tempo e il lavoro spesi per il codice e la struttura matematica.

PyTorch consente inoltre ai data scientist di eseguire e testare porzioni di codice in tempo reale, anziché attendere l'implementazione dell'intero codice—operazione che, per i modelli di deep learning di grandi dimensioni, può richiedere molto tempo. Ciò rende PyTorch un'eccellente piattaforma per la prototipazione rapida e velocizza notevolmente il processo di debug.

Originariamente sviluppato da Facebook AI Research (ora Meta), PyTorch è stato reso open source nel 2017 ed è sotto la gestione della PyTorch Foundation (che fa parte della più grande Linux Foundation) dal 2022. La fondazione offre uno spazio neutrale per la comunità del deep learning per collaborare all'ulteriore sviluppo dell'ecosistema PyTorch.

Nel 2023, IBM è diventata un membro di primo piano della PyTorch Foundation, avendo già collaborato a due progetti di primaria importanza: consentire un addestramento più efficiente di foundation model di AI flessibili con miliardi di parametri e rendere il checkpointing per l'addestramento AI notevolmente più conveniente. La piattaforma watsonx di IBM utilizza PyTorch per offrire uno stack di software di livello aziendale per foundation model di intelligenza artificiale, dalla formazione end-to-end alla messa a punto dei modelli.

Imparare e utilizzare Presto

Leggi l'ebook gratuito di O'Reilly per imparare a muovere i primi passi con Presto, il motore SQL open source per l'analisi dei dati.

Contenuti correlati

Registrati per ricevere l'ebook sugli storage dei dati AI

Come funziona PyTorch?

La struttura matematica e di programmazione di PyTorch semplifica e ottimizza i flussi di lavoro di machine learning, senza limitare la complessità o le prestazioni di reti neurali profonde.

Python

Python è un linguaggio di programmazione di alto livello per scopi generali ampiamente usato nella data science, il che lo rende una scelta intuitiva per i data scientist che estendono il proprio lavoro alla modellazione attiva di reti di deep learning. La semplice sintassi di Python è facile da leggere, richiede poco tempo per l'apprendimento e può essere eseguita su qualsiasi sistema operativo, inclusi Windows, macOS, Linux o Unix. Python è stato il secondo linguaggio di programmazione più usato su GitHub da oltre tre anni, dopo aver superato Java nel 2019. La sua popolarità continua a crescere, con un aumento del 22,5% nel 20221.

Grazie a questa flessibilità e semplicità è nata una solida community online di sviluppatori Python che collaborano a risorse didattiche e a un'ampia gamma di librerie e API Python, come Numerical Python (NumPy) per le operazioni matematiche, Pandas per la manipolazione dei dati o matplotlib per la visualizzazione dei dati. Questa community ha anche prodotto una grande quantità di librerie Pytorch che riducono la monotonia e le incertezze di codifica per il machine learning, alleggerendo gli sviluppatori e i data scientist che così possono concentrarsi sull'innovazione piuttosto che sulla scrittura di attività routinarie.

Tensori

In qualsiasi algoritmo di machine learning, anche quelli applicati a informazioni apparentemente non numeriche come suoni o immagini, i dati devono essere rappresentati numericamente. In PyTorch ciò viene ottenuto tramite tensori che fungono da unità fondamentali di dati utilizzate per il calcolo sulla piattaforma.

Nell'ambito del machine learning, un tensore è un insieme multidimensionale di numeri che funziona come un dispositivo matematico di contabilità. Dal punto di vista linguistico, “tensore” è un termine generico che si riferisce ad alcune entità matematiche più familiari:

  • Uno scalare è un tensore adimensionale, contenente un singolo numero.
  • Un vettore è un tensore monodimensionale contenente più scalari dello stesso tipo. Una tupla è un tensore monodimensionale contenente diversi tipi di dati.
  • Una matrice è un tensore bidimensionale contenente più vettori dello stesso tipo.
  • I tensori con tre o più dimensioni, come i tensori tridimensionali usati per rappresentare le immagini RGB negli algoritmi di computer vision, sono collettivamente denominati tensori dimensionali.

I tensori di PyTorch funzionano in modo simile ai ndarray usati in NumPy, ma a differenza dei ndarray, che possono essere eseguiti solo su unità di elaborazione centrali (CPU), i tensori possono essere eseguiti anche su unità di elaborazione grafica (GPU). Le GPU consentono un calcolo notevolmente più veloce rispetto alle CPU, il che rappresenta un grande vantaggio dati gli enormi volumi di dati e l'elaborazione parallela tipici del deep learning.

Oltre a codificare gli input e gli output di un modello, i tensori di PyTorch codificano anche i parametri del modello: pesi, pregiudizi e gradienti che vengono "appresi" nella machine learning. Questa proprietà dei tensori consente la differenziazione automatica, una delle funzioni più importanti di PyTorch.

Moduli

PyTorch usa i moduli come elementi costitutivi dei modelli di deep learning, il che consente la costruzione rapida e semplice di reti neurali senza il noioso lavoro di codifica manuale di ogni algoritmo.

 I moduli possono, come spesso accade, contenere altri moduli nidificati. Oltre a consentire la creazione di reti neurali multistrato più elaborate, ciò consente anche di salvare facilmente questi complessi modelli di deep learning come un singolo modulo denominato e di trasferirli tra diverse macchine, CPU o GPU. I modelli PyTorch possono anche essere eseguiti in ambienti non Python, come C++, utilizzando Torchscript (link esterno a ibm.com), contribuendo a colmare il divario tra la ricerca dei prototipi e l'implementazione della produzione.

 In generale, esistono tre classi principali di moduli usate per creare e ottimizzare modelli di deep learning in PyTorch:

  • I moduli NN vengono distribuiti come livelli di una rete neurale.Il pacchetto torch.nn contiene un'ampia libreria di moduli che eseguono operazioni comuni come convoluzioni, pooling e regressione.Ad esempio, torch.nn.Linear(n,m) chiama un algoritmo di regressione lineare con n input e m output (i cui input e parametri iniziali vengono quindi stabiliti nelle righe di codice successive).

  • Il modulo di autograd fornisce un modo semplice per calcolare automaticamente i gradienti, usato per ottimizzare i parametri del modello attraverso la discesa del gradiente, per qualsiasi funzione gestita all'interno delle reti neurali. L'aggiunta di qualsiasi tensore con requires_grad=True segnala ad autograd che ogni operazione su quel tensore deve essere tracciata, il che abilita la differenziazione automatica.

  • I moduli Optim applicano algoritmi di ottimizzazione a tali gradienti. Torch.optim fornisce moduli per vari metodi di ottimizzazione, come la discesa stocastico del gradiente (SGD) o la propagazione della radice valore quadratico medio (RMSprop), per soddisfare specifiche esigenze di ottimizzazione.

Grafici di calcolo dinamici

I grafici di calcolo dinamico (DCG) sono il modo in cui i modelli di deep learning vengono rappresentati in PyTorch. Parlando in modo astratto, i grafici di calcolo mappano il flusso di dati tra le diverse operazioni in un sistema matematico: nel contesto del deep learning, traducono essenzialmente il codice di una rete neurale in un diagramma di flusso che indica le operazioni eseguite in ciascun nodo e le dipendenze tra diversi strati nella rete—la disposizione di fasi e sequenze che trasformano i dati di input in dati di output.

Ciò che differenzia i grafici di calcolo dinamici (come quelli usati in PyTorch) dai grafici di calcolo statici (come quelli usati in TensorFlow) è che i DCG rinviano la specifica esatta dei calcoli e delle relazioni tra di essi fino al momento dell'esecuzione. In altre parole, mentre un grafico di calcolo statico richiede che l'architettura dell'intera rete neurale sia completamente determinata e compilata per funzionare, i DCG possono essere iterati e modificati rapidamente.

Ciò rende i DCG particolarmente utili per il debug e la prototipazione, poiché specifiche porzioni del codice di un modello possono essere modificate o eseguite in isolamento senza dover reimpostare l'intero modello—il che, per i modelli di deep learning molto grandi usati per sofisticate attività di computer vision e NLP, può essere uno spreco di tempo e risorse computazionali. I vantaggi di questa flessibilità comprendono anche l'addestramento del modello, poiché i grafici di calcolo dinamico possono essere facilmente generati al contrario durante la retropropagazione.

Mentre la loro struttura fissa può consentire una maggiore efficienza computazionale, i grafici computazionali statici hanno una flessibilità limitata: ad esempio, la creazione di un modello che usa un numero variabile di strati a seconda dei dati di input—come una rete neurale convoluzionale (CNN) in grado di elaborare immagini di dimensioni diverse—è proibitivamente difficile con i grafici statici.

Differenziazione automatica

Un metodo ampiamente usato per l'addestramento di reti neurali, in particolare nell'apprendimento supervisionato, è la retropropagazione. In primo luogo, in un passaggio avanti, un modello è alimentato da alcuni input (x) e prevede alcuni output (y); lavorando all'indietro da tale output, viene usata una funzione di perdita per misurare l'errore delle previsioni del modello a diversi valori di x. Differenziando la funzione di perdita per trovarne la derivata, la discesa del gradiente può essere usata per regolare i pesi nelle reti neurali, uno strato alla volta.

Il modulo autograd di PyTorch alimenta la sua tecnica di differenziazione automatica usando una formula di calcolo chiamata regola della catena, che calcola i derivati complessi dividendoli in derivati più semplici e combinandoli in un secondo momento. Autograd calcola e registra automaticamente i gradienti per tutte le operazioni eseguite in un grafico computazionale, riducendo notevolmente il lavoro di retropropagazione. 

Quando si esegue un modello che è già stato addestrato, autograd diventa un uso non necessario delle risorse computazionali. L'aggiunta di qualsiasi operazione di tensore con requires_grad=False segnala a PyTorch l'interruzione dei gradienti di rilevamento.

Set di dati e caricatori di dati

Lavorare con dataset di grandi dimensioni necessari per istruire modelli di deep learning può essere complesso e impegnativo dal punto di vista computazionale. PyTorch fornisce due primitive di dati, dataset e dataloader, per facilitare il caricamento dei dati e rendere il codice più facilmente leggibile.

  • torch.utils.data.Dataset memorizza gli esempi di dati e le relative etichette corrispondenti
  • torch.utils.data.Dataloader avvolge un iterabile—un oggetto su cui è possibile operare—intorno al set di dati per consentire un facile accesso ai campioni

 

Ecosistema PyTorch

Le funzioni principali di PyTorch sono integrate da un robusto ecosistema di strumenti, librerie ed estensioni (link esterno a ibm.com) sviluppato dai membri della community PyTorch. Molte librerie open source aggiuntive, contenenti moduli specifici per lo scopo, reti neurali preconfigurate e persino modelli pre-addestrati, sono disponibili per integrare la libreria torch preinstallata.

Torchvision

Torchvision è un toolkit contenente moduli, architetture di rete e set di dati per varie attività di classificazione delle immagini, rilevamento degli oggetti e segmentazione delle immagini.

Esplora Torchvision
TorchText

TorchText fornisce risorse come set di dati, trasformazioni di elaborazione del testo di base e modelli pre-addestrati da usare in NLP.

Esplora TorchText
Scambio di reti neurali aperte

L'Open Neural Network Exchange (ONNX) assicura l'interoperabilità tra i framework AI, consentendo agli utenti di trasferire facilmente i propri modelli PyTorch su altre piattaforme.

Esplora ONNX
Tutorial

Molti tutorial utili sono disponibili su PyTorch.org. Ad esempio, questo tutorial intermedio (link esterno a ibm.com) insegna i fondamenti del deep reinforcement learning addestrando un'AI a giocare a un videogioco.

Esplora i tutorial di PyTorch
Installazione ed esecuzione di PyTorch

PyTorch può essere installato ed eseguito in configurazioni diverse sia su sistemi locali sia su piattaforme cloud.

L'esecuzione di PyTorch a livello locale richiede l'installazione di Python, utilizzando l'Anaconda Package Manager, Homebrew (link esterno a ibm.com) o il sito web Python (link esterno a Python).

PyTorch può essere installato localmente tramite Anaconda (link esterno a ibm.com) utilizzando il comando conda install pytorch torchvision -c pytorch o tramite pip (link esterno a ibm.com) utilizzando il comando pip3 install torch torchvision. Anaconda è preferibile, in quanto fornisce tutte le dipendenze di PyTorch (incluso Python) in un'unica installazione sandbox2.

PyTorch può essere eseguito anche su piattaforme cloud, tra cui Amazon Web Services, Google Cloud e Microsoft Azure.

È consigliato (ma non obbligatorio) lavorare con le GPU NVIDIA per utilizzare al meglio il supporto di PyTorch per CUDA (Compute Unified Device Architecture), che offre formazione e prestazioni notevolmente più veloci rispetto a quelle che possono essere fornite dalle CPU. 

Soluzioni correlate
watsonx.ai

Addestra, convalida, adatta e distribuisci AI generativa, foundation model e funzionalità di machine learning con facilità e crea applicazioni AI in un tempo brevissimo con pochissimi dati.

Esplora watsonx.ai

Servizi di consulenza AI

Ripensa il modo in cui lavori con l'AI: il nostro team globale e diversificato, composto da oltre 20.000 esperti di AI, può aiutarti a progettare e scalare l'AI e l'automazione in tutta l'azienda in modo rapido e sicuro, lavorando con la nostra tecnologia IBM watsonx e  con un ecosistema aperto di partner, per fornire qualsiasi modello AI, su qualsiasi cloud, guidato da etica e fiducia.

Esplora i servizi di consulenza AI di IBM

watsonx.data

Scala i workload di analytics e AI per tutti i tuoi dati, ovunque, grazie a watsonx.data, l'unico archivio dati del settore che è aperto, ibrido e governato.

Esplora watsonx.data
Risorse di PyTorch Inizia con la machine learning

Questo percorso di apprendimento è progettato per chiunque sia interessato ad acquisire rapidamente familiarità con il machine learning, attraverso tutorial dettagliati con dimostrazioni pratiche dove è possibile costruire modelli da utilizzare nelle app.

Guida per principianti a Python

Presenteremo i concetti di base da sapere per iniziare con questo linguaggio di programmazione semplice, dall'esecuzione di calcoli algebrici alla generazione di output grafico dai tuoi dati.

PyTorch: risorse e strumenti

Esplora articoli, ricerche, post di blog, tutorial e video per approfondire le conoscenze sull'ecosistema PyTorch.

Fasi successive

Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e una minima quantità di dati.

Esplora watsonx.ai Prenota una demo live
Note a piè di pagina

1 Octoverse 2022: i principali linguaggi di programmazione (link esterno a ibm.com), Github, 17 novembre 2022
PyTorch: Inizio – Inizio a livello locale (link esterno a ibm.com)