Vai al contenuto

PyTorch

Da Wikipedia, l'enciclopedia libera.
PyTorch
software
Logo
Logo
Genereapprendimento automatico (non in lista)
SviluppatoreMeta AI
Data prima versione2016-9-1
Ultima versione2.9.0 (15 ottobre 2025)
Sistema operativoMultipiattaforma
LinguaggioCUDA
Python
C++
C
LicenzaBSD-3
(licenza libera)
Sito webpytorch.org/

PyTorch è una libreria di apprendimento automatico open source basata sulla libreria Torch [1][2][3] ed utilizzata in applicazioni come la visione artificiale, la ricerca sull'apprendimento profondo [4] e l'elaborazione del linguaggio naturale,[4] originariamente sviluppata da Meta AI, ora è sotto l'ombrello della Linux Foundation .[5][6][7][8] È uno dei framework di apprendimento profondo più popolari, insieme ad altri come TensorFlow;[9] offre un software gratuito e open source rilasciato con licenza BSD modificata. Sebbene l'interfaccia Python sia più curata, costituendo l'obiettivo principale di sviluppo, PyTorch ha anche un'interfaccia C++.[10]

PyTorch utilizza i tensori come tipo di dati intrinseco, in modo molto simile a NumPy. L'addestramento dei modelli è gestito da un sistema di differenziazione automatica, Autograd, che costruisce un grafo aciclico diretto per un passo in avanti di un modello per un dato input, per il quale la differenziazione automatica, utilizzando la regola della catena, calcola i gradienti per l'intero modello.[11] PyTorch è in grado di sfruttare in modo trasparente unità SIMD, come le GPGPU.

Diverse architetture commerciali per l'apprendimento profondo sono costruite sulla base di PyTorch, tra le quali Autopilot di Tesla,[12] Pyro di Uber,[13] Transformers di Hugging Face,[14][15] e Catalyst.[16][17]

Torch, libreria di apprendimento automatico scritta in C++ e CUDA, è stata rilasciata sotto licenza GPL nel 2001. Essa supportava metodi tra i quali le reti neurali, le macchine a vettori di supporto (SVM), i modelli di Markov nascosti, ecc.[18] È stata migliorato via via fino alla versione Torch7 del 2012.[19] Lo sviluppo su Torch è cessato nel 2018 essendo è stata assorbita dal progetto PyTorch.

Meta (precedentemente nota come Facebook) gestisce sia PyTorch che Convolutional Architecture for Fast Feature Embedding (Caffe2), ma i modelli definiti dai due framework erano reciprocamente incompatibili. Il progetto Open Neural Network Exchange (ONNX) è stato creato da Meta e Microsoft nel settembre 2017 al fine di poter convertire i modelli tra i framework. Caffe2 è stato poi incorporato in PyTorch alla fine di marzo 2018.[20] Nel settembre 2022, Meta ha annunciato che PyTorch sarebbe stato gestito dalla PyTorch Foundation, una sussidiaria indipendente di recente creazione della Linux Foundation.[21]

PyTorch 2.0 è stato rilasciato il 15 marzo 2023, introducendo TorchDynamo, un compilatore Python che consente di eseguire il codice più velocemente fino a 2 volte, insieme a miglioramenti significativi delle prestazioni relative ad addestramento e inferenza sulle principali piattaforme cloud.[22][23]

Tensori PyTorch

[modifica | modifica wikitesto]

PyTorch definisce una classe chiamata Tensor (torch.Tensor) per memorizzare e operare su array rettangolari multidimensionali omogenei di numeri. I tensori PyTorch sono simili agli array NumPy, ma possono essere gestiti anche da una GPU NVIDIA compatibile con CUDA. PyTorch ha anche sviluppato il supporto per altre piattaforme GPU, ad esempio ROCm di AMD [24] e Metal Framework di Apple.[25]

PyTorch supporta vari sottotipi di tensori.[26]

Si noti che il termine "tensore" qui non ha lo stesso significato che ha in matematica o in fisica. Il significato del termine nell'apprendimento automatico è solo superficialmente correlato al suo significato originale nell'ambito dell'algebra lineare. I tensori in PyTorch sono semplicemente array multidimensionali.

Reti neurali PyTorch

[modifica | modifica wikitesto]

PyTorch prevede un modulo chiamato nn (torch.nn) per la descrizione di reti neurali e il supporto all'addestramento. Questo modulo offre una raccolta completa di elementi per la costruzione di reti neurali, comprendendo vari tipi di strati (layer) e funzioni di attivazione, che consentono la costruzione di modelli complessi. Le reti vengono costruite ereditando dal modulo torch.nn e definendo la sequenza di operazioni nella funzione forward().

Il seguente programma mostra le funzionalità di basso livello della libreria attraverso un semplice esempio.

import torch

dtype = torch.float

device = torch.device("cpu") #Esegue tutti i calcoli su CPU
# device = torch.device("cuda:0") # Esegue tutti i calcoli su GPU

# Creazione di un tensore riempito di numeri casuali
a = torch.randn(2, 3, device=device, dtype=dtype)
print(a)

# Output: tensor([[-1.1884, 0.8498, -1.7129],
#                 [-0.8816, 0.1944, 0.5847]])

b = torch.randn(2, 3, device=device, dtype=dtype) 
print(b)

# Output: tensor([[ 0.7178, -0.8453, -1.3403], 
#                 [ 1.3262, 1.1512, -1.7070]])

print(a * b)

# Output: tensor([[-0.8530, -0.7183, 2.58],
                  [-1.1692, 0.2238, -0.9981]])
print(a.sum())

# Output: tensor(-2.1540)

print(a[1, 2]) # Output dell'elemento nella terza colonna della seconda riga (a partire da 0)

# Output: tensor(0.5847)

print(a.max())

# Output: tensor(0.8498)

Il seguente blocco di codice definisce una rete neurale con strati lineari utilizzando il modulo nn.

from torch import nn # Importa il sotto-modulo nn

from PyTorch class NeuralNetwork(nn.Module):  # Reti neurali definite come classi

def __init__(self):  # Layer e variabili definite nel metodo __init__ 
    super().__init__()  # in ogni rete.  
    self.flatten = nn.Flatten()   # Costruisce un layer di flattening
    self.linear_relu_stack = nn.Sequential( # Costruisce una pila di layer
                                            nn.Linear(28 * 28, 512), # i layer lineari hanno una shape di input e una di output
                                            nn.ReLU(), # la ReLU è una delle tante funzioni di attivatione fornite da nn
                                            nn.Linear(512, 512), 
                                            nn.ReLU(),
                                            nn.Linear(512, 10),
                                            )

def forward(self, x): # Questa funzione definisce un passo forward. 
    x = self.flatten(x)
    logits = self.linear_relu_stack(x)
    return logits
  1. ^ https://www.infoworld.com/article/3159120/artificial-intelligence/facebook-brings-gpu-powered-machine-learning-to-python.html.
  2. ^ Lorica, Why AI and machine learning researchers are beginning to embrace PyTorch, su oreilly.com, 3 August 2017. URL consultato l'11 December 2017.
  3. ^ (EN) Nikhil Ketkar, Deep Learning with Python, Apress, Berkeley, CA, 2017, pp. 195–208, DOI:10.1007/978-1-4842-2766-4_12, ISBN 9781484227657.
  4. ^ a b (EN) Moez Ali, NLP with PyTorch: A Comprehensive Guide, su datacamp.com, Jun 2023. URL consultato il 1º April 2024.
  5. ^ (EN) https://www.oreilly.com/ideas/when-two-trends-fuse-pytorch-and-recommender-systems.
  6. ^ (EN) https://techcrunch.com/2017/09/07/facebook-and-microsoft-collaborate-to-simplify-conversions-from-pytorch-to-caffe2/.
    «FAIR is accustomed to working with PyTorch – a deep learning framework optimized for achieving state of the art results in research, regardless of resource constraints. Unfortunately in the real world, most of us are limited by the computational capabilities of our smartphones and computers.»
  7. ^ (EN) Arakelyan, Tech giants are using open source frameworks to dominate the AI community, su VentureBeat, 29 November 2017. URL consultato il 18 December 2017.
  8. ^ (EN) PyTorch strengthens its governance by joining the Linux Foundation, su pytorch.org. URL consultato il 13 September 2022.
  9. ^ Top 30 Open Source Projects., su Open Source Project Velocity by CNCF. URL consultato il 12 October 2023.
  10. ^ The C++ Frontend, su PyTorch Master Documentation. URL consultato il 29 July 2019.
  11. ^ Overview of PyTorch Autograd Engine, su PyTorch Blog, 8 June 2021.
  12. ^ Karpathy, PyTorch at Tesla - Andrej Karpathy, Tesla, su YouTube, 6 November 2019. URL consultato il 2 June 2020.
  13. ^ (EN) https://eng.uber.com/pyro/.
  14. ^ https://pytorch.org/hub/huggingface_pytorch-transformers/.
  15. ^ (EN) Ecosystem Tools, su pytorch.org. URL consultato il 18 June 2020.
  16. ^ https://github.com/catalyst-team/catalyst.
  17. ^ (EN) Ecosystem Tools, su pytorch.org. URL consultato il 4 April 2020.
  18. ^ Torch Library, su torch.ch.
  19. ^ (EN) DOI:10.1007/978-3-642-35289-8_28, ISBN 978-3-642-35289-8, https://doi.org/10.1007/978-3-642-35289-8_28.
  20. ^ Caffe2 Merges With PyTorch, su medium.com, 2 April 2018. URL consultato il 2 January 2019.
  21. ^ Edwards, Meta spins off PyTorch Foundation to make AI framework vendor neutral, su Ars Technica, 12 September 2022. URL consultato il 13 September 2022.
  22. ^ Dynamo Overview, su pytorch.org.
  23. ^ https://venturebeat.com/ai/pytorch-2-0-brings-new-fire-to-open-source-machine-learning/.
  24. ^ Installing PyTorch for ROCm, su rocm.docs.amd.com, 9 February 2024.
  25. ^ (EN) Introducing Accelerated PyTorch Training on Mac, su pytorch.org. URL consultato il 4 June 2022.
  26. ^ An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library, su analyticsvidhya.com, 22 February 2018. URL consultato l'11 June 2018.

Altri progetti

[modifica | modifica wikitesto]