Cos'è PyTorch?

Donna che lavora nel suo ufficio

Autori

Dave Bergmann

Senior Staff Writer, AI Models

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

Cos'è PyTorch?

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

PyTorch supporta un'ampia varietà di architetture di reti 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-addestrati), 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 e dal 2022 è sotto la gestione della PyTorch Foundation (che fa parte della più grande Linux Foundation). La fondazione offre uno spazio neutrale per la comunità di 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, ovvero rendere più efficiente l'addestramento dei foundation model di AI flessibili con miliardi di parametri e rendere più conveniente il checkpointing per l'addestramento dell'AI. Il portfolio IBM watsonx utilizza PyTorch per fornire uno stack software di livello aziendale per foundation model dell'intelligenza artificiale, dall'addestramento end-to-end alla messa a punto dei modelli.

Design 3D di palline che rotolano su una pista

Le ultime notizie e insight sull'AI


Scopri notizie e insight selezionati da esperti in materia di AI, cloud e molto altro nella newsletter settimanale Think. 

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 relativamente 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 2022.1

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 creato una grande quantità di librerie Pytorch che riducono la monotonia e le incertezze di codifica per il machine learning, alleggerendo il carico di lavoro di sviluppatori e 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 a dimensione zero 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 N-dimensionali.

I tensori di PyTorch funzionano in modo simile agli ndarray usati in NumPy, ma a differenza degli 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 è un grande vantaggio considerando 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 annidati. 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 essere eseguiti anche in ambienti non Python, come C++, utilizzando Torchscript e contribuendo a colmare il divario tra i prototipi di ricerca e l'implementazione in 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, che viene usato per ottimizzare i parametri del modello attraverso la discesa del gradiente per qualsiasi funzione gestita all'interno di una rete neurale. 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 consente una maggiore efficienza computazionale, i grafici computazionali statici hanno una flessibilità limitata: ad esempio, creare 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, è estremamente difficile con i grafici statici.

Differenziazione automatica

Un metodo molto usato per l'addestramento delle reti neurali, in particolare nell'apprendimento supervisionato, è la retropropagazione. In primo luogo, in un passaggio avanti, un modello viene alimentato con 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 nella rete neurale, 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 momento successivo. 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
Mixture of Experts | 28 agosto, episodio 70

Decoding AI: Weekly News Roundup

Unisciti al nostro gruppo di livello mondiale di ingegneri, ricercatori, leader di prodotto e molti altri mentre si fanno strada nell'enorme quantità di informazioni sull'AI per darti le ultime notizie e gli ultimi insight sull'argomento.

Ecosistema PyTorch

Le caratteristiche principali di PyTorch sono integrate da un robusto ecosistema di strumenti, librerie ed estensioni sviluppato dai membri della community PyTorch. Molte librerie open source aggiuntive, contenenti moduli per scopi specifici, 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

Su PyTorch.org sono disponibili molti tutorial utili. Ad esempio, questo tutorial intermedio 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.

Per eseguire PyTorch a livello locale è necessario installare Python attraverso il package manager Anaconda, Homebrew o il sito web Python.

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

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

Si consiglia (ma non è obbligatorio) di lavorare con le GPU NVIDIA per utilizzare al meglio il supporto di PyTorch per CUDA (Compute Unified Device Architecture), che offre addestramento e prestazioni notevolmente più veloci rispetto a una CPU.

Soluzioni correlate
IBM® watsonx.ai

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
Soluzioni di intelligenza artificiale

Metti l'AI al servizio della tua azienda con l'esperienza leader di settore e il portfolio di soluzioni di IBM nel campo dell'AI.

Esplora le soluzioni AI
Consulenza e servizi per l'intelligenza artificiale (AI)

I servizi di AI di IBM Consulting aiutano a reinventare il modo in cui le aziende lavorano con l'AI per la trasformazione.

Esplora i servizi AI
Fasi successive

Ottieni l'accesso completo a funzionalità che coprono l'intero ciclo di vita dello sviluppo dell'AI. Crea soluzioni AI all'avanguardia con interfacce intuitive, workflow e accesso alle API e agli SDK standard di settore.

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