Swift per TensorFlow è stato un esperimento sulla piattaforma di prossima generazione per l'apprendimento automatico, che incorpora le ultime ricerche su apprendimento automatico, compilatori, programmazione differenziabile, progettazione di sistemi e altro ancora. È stato archiviato nel febbraio 2021. Alcuni risultati significativi di questo progetto includono:
- Aggiunta la programmazione differenziabile integrata nel linguaggio nel linguaggio Swift. Questo lavoro continua nel compilatore Swift ufficiale.
- Sviluppata un'API di deep learning orientata alla semantica a valore mutabile
- Ha favorito lo sviluppo di un giardino modello con più di 30 modelli provenienti da una varietà di discipline di deep learning .
- Abilitazione di nuove ricerche che combinano il deep learning con modelli grafici probabilistici per il tracciamento del movimento 3D e altro ancora.
- Alimentato da un prototipo (quasi) puro Swift di un runtime GPU+CPU che supporta pmap .
- Frutto di molteplici sforzi lato open source che continuano ad essere in fase di sviluppo attivo:
- PythonKit : interoperabilità di Python con Swift.
- swift-jupyter : consente l'uso di Swift all'interno dei notebook Jupyter.
- swift-benchmark : fornisce una solida suite di benchmarking per il codice Swift.
- Hanno dato vita a diversi altri sforzi open source:
- penguin : programmazione parallela, strutture dati, algoritmi grafici e altro ancora.
- Tensori che si adattano perfettamente : analisi statica delle discrepanze della forma dei tensori.
- Proposte di rapida evoluzione proposte e implementate:
Questo sito non riceverà ulteriori aggiornamenti. La documentazione API e i download binari continueranno a essere accessibili, così come le registrazioni delle riunioni di Open Design Review .
Veloce
Swift è un linguaggio di programmazione generico open source , che ha una base di utenti ampia e in crescita. Abbiamo scelto Swift perché ha un processo di progettazione del linguaggio aperto e per ragioni tecniche specifiche dettagliate nel documento " Perché Swift per TensorFlow ". Partiamo dal presupposto che la maggior parte dei lettori non lo conosce, quindi qui toccheremo brevemente alcuni aspetti importanti aggiuntivi a riguardo.
Lo sviluppo di Swift è iniziato nel 2010 e mirava a riunire le migliori pratiche nella progettazione del linguaggio di programmazione in un unico sistema piuttosto che cercare novità accademiche o propagare religiosamente metodologie di programmazione. Di conseguenza, supporta lo sviluppo multi-paradigma (ad esempio funzionale, OOP, generico, procedurale, ecc.) tutto in un unico sistema e porta molti concetti ben noti dai linguaggi accademici (ad esempio corrispondenza di modelli , tipi di dati algebrici e classi di tipi) in prima linea. Invece di incoraggiare fortemente gli sviluppatori a riscrivere tutto il loro codice in Swift, si concentra pragmaticamente sull'interoperabilità con altri linguaggi, ad esempio consentendo di importare direttamente file di intestazione C e utilizzarli senza FFI e (ora) la possibilità di utilizzare API Python senza wrapper .
Swift ha l'audace obiettivo di spaziare dalla programmazione di sistemi di basso livello allo scripting di alto livello, con l'obiettivo di essere facile da apprendere e utilizzare . Poiché Swift deve essere facile da imparare e da usare ma anche potente, si basa sul principio della progressiva divulgazione della complessità , che fattorizza in modo aggressivo il costo della complessità sulle persone che ne beneficiano. La "sensazione del linguaggio di scripting" combinata con prestazioni elevate è molto utile per l'apprendimento automatico.
Un ultimo aspetto pertinente della progettazione di Swift è che gran parte del linguaggio Swift è effettivamente implementato nella sua libreria standard. I tipi "costruiti" come Int e Bool sono in realtà solo strutture definite nella libreria standard che racchiudono tipi e operazioni magici. Pertanto, a volte scherziamo dicendo che Swift è solo "zucchero sintattico per LLVM".
C'è molto di più di interessante in Swift e un sacco di contenuti disponibili online. Se sei interessato a saperne di più sui concetti generali di programmazione di Swift, ecco alcuni link per iniziare:
- Uno Swift Tour è un breve tour della sintassi e delle sensazioni di alto livello di Swift e fa parte del libro più ampio "The Swift Programming Language".
- La semantica dei valori è potente e svolge un ruolo importante nel codice Swift, come spiegato in " Building Better Apps with Value Types in Swift " [ YouTube ].
- Swift supporta l'OOP classico, ma ha adattato le idee del sistema di tipi Haskell. Ciò è spiegato in " Programmazione orientata al protocollo in Swift " [ YouTube ].
Un avvertimento: Swift si è evoluto rapidamente nei suoi primi anni, quindi dovresti stare attento a qualsiasi cosa prima di Swift 3 (rilasciato nel 2016).
Perché Swift per TensorFlow?
Swift per TensorFlow è un nuovo modo di sviluppare modelli di machine learning. Ti offre la potenza di TensorFlow direttamente integrata nel linguaggio di programmazione Swift . Riteniamo che i paradigmi di machine learning siano così importanti da meritare un supporto di linguaggio e compilatore di prima classe .
Una primitiva fondamentale nell'apprendimento automatico è l'ottimizzazione basata sul gradiente: calcolo delle derivate delle funzioni per ottimizzare i parametri. Con Swift per TensorFlow, puoi facilmente differenziare le funzioni utilizzando operatori differenziali come gradient(of:)
o differenziare rispetto a un intero modello chiamando il metodo gradient(in:)
. Queste API di differenziazione non sono disponibili solo per i concetti relativi a Tensor
: sono generalizzate per tutti i tipi conformi al protocollo Differentiable
, inclusi Float
, Double
, vettori SIMD e le tue strutture dati.
// Custom differentiable type.
struct Model: Differentiable {
var w: Float
var b: Float
func applied(to input: Float) -> Float {
return w * input + b
}
}
// Differentiate using `gradient(at:_:in:)`.
let model = Model(w: 4, b: 3)
let input: Float = 2
let (𝛁model, 𝛁input) = gradient(at: model, input) { model, input in
model.applied(to: input)
}
print(𝛁model) // Model.TangentVector(w: 2.0, b: 1.0)
print(𝛁input) // 4.0
Oltre ai derivati, il progetto Swift per TensorFlow è dotato di una sofisticata catena di strumenti per rendere gli utenti più produttivi. Puoi eseguire Swift in modo interattivo in un notebook Jupyter e ottenere utili suggerimenti di completamento automatico per aiutarti a esplorare l'enorme superficie API di una moderna libreria di deep learning. Puoi iniziare direttamente nel tuo browser in pochi secondi !
La migrazione a Swift per TensorFlow è davvero semplice grazie alla potente integrazione Python di Swift. Puoi migrare in modo incrementale il tuo codice Python (o continuare a utilizzare le tue librerie Python preferite), perché puoi facilmente chiamare la tua libreria Python preferita con una sintassi familiare:
import TensorFlow
import Python
let np = Python.import("numpy")
let array = np.arange(100).reshape(10, 10) // Create a 10x10 numpy array.
let tensor = Tensor<Float>(numpy: array) // Seamless integration!