Nota: un ringraziamento speciale a Less Wright, Partner Engineer, Meta AI, per la revisione e l'aggiunta di insight al post.
Questo post sulla crezione di intelligenze artificiali (IA) intelligenti è il secondo della serie "Summer of open source". Questa serie mira a fornire un set di risorse utili e contenuti per la formazione nelle aree in cui i progetti open source generano un impatto su Meta e sulle altre piattaforme. Seguici mentre esploriamo altre aree in cui Meta Open Source sta portando avanti il settore condividendo strumenti scalabili e innovativi.
Fin dal lancio nel 2016, PyTorch è stato ampiamente utilizzato dalla community del deep learning e le sue radici nella ricerca sono ora in continua espansione per l'uso in scenari di produzione. In un periodo entusiasmante per l'apprendimento automatico (ML) e l'intelligenza artificiale (IA), in cui i nuovi metodi e i casi d'uso per i modelli IA continuano ad espandersi, PyTorch ha raggiunto il prossimo capitolo della sua storia trasferendosi nella neonata e indipendente PyTorch Foundation sotto l'egida della Linux Foundation. La fondazione è composta da un consiglio di amministrazione eterogeneo che include rappresentanti di AMD, Amazon Web Services, Google Cloud, Microsoft Azure e Nvidia, e il consiglio è destinato ad espandersi nel tempo. La missione è promuovere l'adozione di strumenti per l'intelligenza artificiale attraverso progetti indipendenti dal fornitore e rendere accessibili a tutti strumenti, librerie e altri componenti open source. Il passaggio alla fondazione consentirà inoltre a PyTorch e alla sua comunità open source di continuare ad accelerare il percorso dalla prototipazione alla produzione di IA e ML.
PyTorch è un ottimo esempio della potenza dell'open source. Uno dei primi framework open source per il deep learning, PyTorch ha permesso a persone di diverse discipline di sperimentare con il deep learning e di applicare il loro lavoro in campi molto diversi. PyTorch supporta tutto, dagli esperimenti nelle applicazioni di ricerca allo sviluppo di veicoli autonomi, fino ai radar che penetrano il terreno, e queste sono solo alcune delle sue applicazioni più recenti. L'abbinamento di una libreria versatile di strumenti di IA con la community open source consente di iterare e adattare rapidamente la tecnologia su vasta scala per molti usi diversi.
Con l'implementazione più ampia dell'IA, i modelli stanno aumentando di dimensioni per affrontare problemi più complessi, ma questo significa anche che le risorse necessarie per addestrare questi modelli sono aumentate in modo sostanziale. Fortunatamente, molte persone nella community degli sviluppatori hanno riconosciuto la necessità di modelli che utilizzino meno risorse, dal punto di vista sia pratico che ambientale. Questo post esplorerà perché la quantizzazione e altri tipi di compressione dei modelli possono essere un catalizzatore per un'IA efficiente.
Gran parte di questo post esplora alcune funzioni intermedie e avanzate di PyTorch. Se sei un utente principiante che sta cercando di iniziare o uno esperto che sta utilizzando un'altra libreria, è più facile iniziare con alcune nozioni di base. Dai un'occhiata alla guida introduttiva a PyTorch, che include un'introduzione a un flusso di lavoro ML completo utilizzando il dataset Fashion MNIST.
Ecco altre risorse che potresti consultare se sei alle prime armi con PyTorch:
Ci sono molti modi per rendere l'IA più efficiente. La progettazione contemporanea di hardware e software per ottimizzare l'intelligenza artificiale può essere molto efficace, ma lo sviluppo di soluzioni hardware e software su misura richiede tempo e risorse considerevoli. La creazione di architetture più veloci e più piccole è un'altra strada per l'efficienza, ma molte di queste architetture soffrono di una perdita di precisione rispetto ai modelli più grandi, almeno per il momento. Un approccio più semplice consiste nel trovare il modo di ridurre le risorse necessarie per addestrare e mostrare i modelli esistenti. In PyTorch, un modo per farlo è la compressione del modello attraverso la quantizzazione.
La quantizzazione è una tecnica matematica che è stata utilizzata per creare file musicali digitali con perdita di qualità e per convertire i segnali analogici in digitali. Eseguendo i calcoli matematici con una precisione ridotta, la quantizzazione consente di ottenere prestazioni significativamente superiori su molte piattaforme hardware. Allora perché usare la quantizzazione per rendere l'IA più efficiente? I risultati dimostrano che, in alcuni casi, l'utilizzo di questa tecnica relativamente semplice può portare a una drastica velocizzazione (da 2 a 4 volte) dell'inferenza del modello.
I parametri che compongono un modello di deep learning sono tipicamente numeri decimali in virgola mobile (FP); ogni parametro richiede 16 bit o 32 bit di memoria. Quando si utilizza la quantizzazione, i numeri vengono spesso convertiti in INT4 o INT8, che occupano solo 4 o 8 bit, riducendo in tal modo la quantità di memoria richiesta dai modelli. Inoltre, i produttori di chip includono una speciale aritmetica che rende le operazioni con i numeri interi più veloci di quelle con i decimali.
Esistono tre metodi di quantizzazione che possono essere utilizzati per l'addestramento dei modelli: addestramento dinamico, statico e quantize-aware (QAT). Una breve panoramica dei vantaggi e dei punti deboli è descritta nella tabella seguente. Per sapere come implementare ciascuno di questi elementi nei flussi di lavoro dell'intelligenza artificiale, leggi il post sul blog Quantizzazione pratica in PyTorch.
Metodo di quantizzazione | Vantaggi | Punti deboli |
---|---|---|
| Un overhead aggiuntivo in ogni passaggio in avanti | |
| Può essere necessario ricalibrare regolarmente per la deviazione della distribuzione. | |
| Alto costo computazionale |
La quantizzazione non è l'unico modo per rendere più efficiente l'IA con tecnologia PyTorch. Le funzionalità vengono aggiornate regolarmente e di seguito sono riportati alcuni altri modi in cui PyTorch può migliorare i flussi di lavoro dell'intelligenza artificiale:
Modalità di inferenza: questa modalità può essere utilizzata per scrivere codice PyTorch se quest'ultimo viene utilizzato solo per eseguire l'inferenza. La modalità di inferenza cambia alcuni presupposti quando si lavora con i tensori per velocizzare l'inferenza. Indicando a PyTorch che in seguito non si useranno i tensori per determinate applicazioni (in questo caso, autograd), si adatta per rendere il codice più veloce in questi scenari specifici.
Bassa precisione: la quantizzazione funziona solo al momento dell'inferenza, cioè dopo aver addestrato il modello. Per il processo di addestramento, PyTorch utilizza AMP, o addestramento automatico a precisione mista, per trovare il formato migliore in base ai tensori utilizzati (FP16, FP32 o BF16). Il deep learning a bassa precisione in PyTorch presenta diversi vantaggi. Può aiutare a ridurre le dimensioni di un modello, a ridurre la memoria necessaria per addestrare i modelli e a diminuire la potenza necessaria per eseguire i modelli. Per saperne di più, consulta questo tutorial per l'utilizzo di AMP con le GPU CUDA.
Channels-last: quando si tratta di modelli di visione, NHWC, altrimenti noto come channels-last, è un formato di memoria tensoriale più veloce in PyTorch. Avere i dati memorizzati nel formato channels-last accelera le operazioni in PyTorch. La formattazione dei tensori di input come channels-last riduce l'overhead necessario per la conversione tra diversi tipi di formato, rendendo più veloce l'inferenza.
Ottimizzato per l'inferenza: questo prototipo di TorchScript implementa alcune ottimizzazioni generiche che dovrebbero velocizzare i modelli in tutti gli ambienti e può anche preparare i modelli per l'inferenza con impostazioni specifiche della build. I casi d'uso principali al momento includono modelli di visione su CPU (e GPU). Trattandosi di un prototipo, è possibile che si verifichino dei problemi. Segnala eventuali problemi nel repository GitHub di PyTorch.
Sul blog di PyTorch vengono regolarmente esplorati nuovi metodi per accelerare i flussi di lavoro dell'IA. È un luogo ideale per tenersi aggiornati su tecniche come la recente BetterTransformer, che aumenta la velocità e il throughput dei modelli Transformer fino a 2 volte per gli scenari di esecuzione più comuni. Se ti interessa scoprire come implementare funzioni specifiche in PyTorch, la pagina delle ricette ti permette di effettuare una ricerca per categorie come l'ottimizzazione del modello, l'addestramento distribuito e l'interpretabilità. Questo post è solo un esempio di come strumenti come PyTorch stiano facendo progredire l'open source e l'intelligenza artificiale.
Per non perderti le ultime novità di Meta Open Source per l'intelligenza artificiale e l'apprendimento automatico, visita il nostro sito open source, iscriviti al nostro canale YouTube, oppure seguici su Facebook, Twitter e LinkedIn.