Nell'ambito del machine learning, i framework davvero robusti e performanti destinati allo sviluppo di applicazioni moderne e professionali si contano sulla punta delle dita. Due dei più diffusi ed apprezzati sono PyTorch e TensorFlow (quest'ultimo unitamente a Keras).
Lo scorso 14 dicembre è stato rilasciato TensorFlow 2.4, che porta con sé diverse novità interessanti (alcune relative anche all'integrazione con Keras). In questo articolo cercheremo di riassumere quelle principali.
Keras: le novità
Partendo dal livello di astrazione più alto, le prime novità più interessanti sono quelle che riguardano Keras, ormai da diverso tempo parte integrante di TensorFlow. Nella nuova versione del framework, è stato infatti perfezionato il supporto alla precisione mista, introducendo tipi come float16
che possono adesso essere utilizzati insieme a float32
(già supportato). Questo garantisce la possibilità di migliorare le performance dei modelli addestrati, così come quelle dei processi di training, con un incremento di prestazioni di un fattore pari a 3 su GPU, e del 60% sulle TPU.
Per utilizzare al meglio la precisione mista, sono stati introdotti nuovi ottimizzatori e layer specifici, il cui uso è descritto in un apposito tutorial nella documentazione di Keras.
Altre novità che riguardano Keras sono alcune nuove opzioni di personalizzazione degli algoritmi di ottimizzazione (come i parametri gradient_transformers
e gradient_aggregator
, introdotti in tf.keras.optimizer.Optimizer
), ed ulteriori perfezionamenti relativi alle API funzionali.
Integrazione con NumPy
Un'altra importante aggiunta a TensorFlow riguarda il nuovo supporto (ancora in fase sperimentale) a NumPy, che ha lo scopo di permettere l'esecuzione di codice basato su questo modulo, in modo che possa essere accelerato tramite le API di TensorFlow. Ciò permetterà, ad esempio, che una funzione TensorFlow-NumPy possa essere eseguita operando sia su oggetti di tipo tf.Tensor
, sia su array NumPy (np.ndarray
).
Esecuzione parallela
Uno dei principali punti di forza di TensorFlow è la capacità di parallelizzare l'esecuzione del codice, eventualmente sfruttando la disponibilità di GPU e dei relativi driver (leggasi nVidia CUDA). Non è quindi un caso se una delle principali novità introdotte con TensorFlow 2.4 riguarda le ottimizzazioni del modulo tf.distribute
, con un interessante supporto (seppur ancora sperimentale) per il training asincrono dei modelli e la possibilità di personalizzare i cicli di training.
Sempre in questo contesto, le funzionalità offerte dalla classe MultiWorkerMirroredStrategy
sono state "promosse", fuoriuscendo dalla fase sperimentale ed inserendosi tra le API stabili.
TensorFlow Profiler
Prima di chiudere questa panoramica di TensorFlow 2.4, vale la pena menzionare anche la suite di strumenti del TensorFlow Profiler, che permette di misurare al meglio sia le performance di training che le risorse utilizzate dai modelli realizzati tramite questo framework. Si tratta di un serie di strumenti ad API di diagnostica estremamente utili, soprattutto quando si hanno vincoli stringenti sull'hardware, oppure per ottimizzare al meglio le performance prima di andare in produzione.
È stato inoltre introdotto il TFLite Profiler, che permette di effettuare diagnostica dei modelli realizzati con TensorFlow Lite (molto utile, quindi, quando si ha a che fare con app mobile).
Altre novità in TensorFlow 2.4
Infine, è stato perfezionato il supporto a CUDA 11 (ultima versione dei driver di nVidia), e la relativa cuDNN 8 per il supporto al deep learning.
Queste, comunque, sono solo alcune delle principali novità introdotte con quest'ultimo rilascio. Chi volesse ottenere maggiori dettagli può comunque fare riferimento alle note di rilascio.