Swift for TensorFlow foi um experimento na plataforma de próxima geração para aprendizado de máquina, incorporando as pesquisas mais recentes em aprendizado de máquina, compiladores, programação diferenciável, design de sistemas e muito mais. Foi arquivado em fevereiro de 2021. Algumas conquistas significativas deste projeto incluem:
- Adicionada programação diferenciável integrada à linguagem na linguagem Swift. Este trabalho continua no compilador Swift oficial.
- Desenvolvi uma API de aprendizado profundo orientada para semântica de valor mutável
- Promoveu o desenvolvimento de um jardim modelo com mais de 30 modelos de uma variedade de disciplinas de aprendizagem profunda .
- Possibilitou novas pesquisas que combinam aprendizado profundo com modelos gráficos probabilísticos para rastreamento de movimento 3D e muito mais.
- Alimentado um protótipo (quase) puro Swift de um tempo de execução GPU + CPU com suporte para pmap .
- Gerou vários esforços paralelos de código aberto que continuam em desenvolvimento ativo:
- PythonKit : interoperabilidade Python com Swift.
- swift-jupyter : permite o uso de Swift em notebooks Jupyter.
- swift-benchmark : fornece um conjunto robusto de benchmarking para código Swift.
- Gerou vários outros esforços de código aberto:
- pinguim : Programação paralela, estruturas de dados, algoritmos gráficos e muito mais.
- Tensores se ajustando perfeitamente : análise estática de incompatibilidades de formato de tensor.
- Propostas de evolução rápida propostas e implementadas:
Este site não receberá mais atualizações. A documentação da API e os downloads binários continuarão acessíveis, assim como as gravações das reuniões do Open Design Review .
Rápido
Swift é uma linguagem de programação de código aberto de uso geral, que possui uma base de usuários grande e crescente. Escolhemos o Swift porque ele possui um processo de design de linguagem aberta e por motivos técnicos específicos detalhados no documento " Por que Swift para TensorFlow ". Presumimos que a maioria dos leitores não esteja familiarizada com ele, por isso abordaremos brevemente algumas coisas adicionais importantes sobre ele aqui.
O desenvolvimento do Swift começou em 2010 e teve como objetivo reunir as melhores práticas em design de linguagens de programação em um sistema, em vez de tentar novidades acadêmicas ou propagar religiosamente metodologias de programação. Como resultado, ele suporta o desenvolvimento multiparadigma (por exemplo, funcional, OOP, genérico, processual, etc.) tudo em um único sistema, e traz muitos conceitos bem conhecidos de linguagens acadêmicas (por exemplo, correspondência de padrões , tipos de dados algébricos e classes de tipo). em primeiro plano. Em vez de encorajar fortemente os desenvolvedores a reescrever todo o seu código em Swift, ele se concentra pragmaticamente na interoperabilidade com outras linguagens, por exemplo, permitindo importar diretamente arquivos de cabeçalho C e usá-los sem um FFI e (agora) a capacidade de usar APIs Python sem wrappers .
Swift tem o objetivo audacioso de abranger desde a programação de sistemas de baixo nível até scripts de alto nível, com foco em ser fácil de aprender e usar . Como o Swift precisa ser fácil de aprender e usar, mas também poderoso, ele se baseia no princípio da divulgação progressiva da complexidade , que atribui agressivamente o custo da complexidade às pessoas que se beneficiam dessa complexidade. A "sensação de linguagem de script" combinada com alto desempenho é muito útil para aprendizado de máquina.
Um último aspecto pertinente do design do Swift é que grande parte da linguagem Swift é realmente implementada em sua biblioteca padrão. Tipos "construídos" como Int e Bool são, na verdade, apenas estruturas definidas na biblioteca padrão que envolvem tipos e operações mágicas. Como tal, às vezes brincamos que Swift é apenas "açúcar sintático para LLVM".
Há muito mais coisas legais sobre o Swift e uma tonelada de conteúdo disponível online. Se você estiver interessado em aprender mais sobre os conceitos gerais de programação em Swift, aqui estão alguns links para começar:
- Um Swift Tour é um tour rápido pela sintaxe e sensação de alto nível do Swift e faz parte do livro maior "The Swift Programming Language".
- A semântica de valor é poderosa e desempenha um papel importante no código Swift, conforme explicado em " Construindo aplicativos melhores com tipos de valor em Swift " [ YouTube ].
- Swift suporta OOP clássico, mas adaptou ideias do sistema de tipos Haskell. Isso é explicado em " Programação Orientada a Protocolo em Swift " [ YouTube ].
Um aviso: o Swift evoluiu rapidamente em seus primeiros anos, então você deve ter cuidado com qualquer coisa antes do Swift 3 (lançado em 2016).
Por que Swift para TensorFlow?
Swift for TensorFlow é uma nova maneira de desenvolver modelos de aprendizado de máquina. Ele oferece o poder do TensorFlow diretamente integrado à linguagem de programação Swift . Acreditamos que os paradigmas de aprendizado de máquina são tão importantes que merecem linguagem de primeira classe e suporte de compilador .
Uma primitiva fundamental no aprendizado de máquina é a otimização baseada em gradiente: computar derivadas de funções para otimizar parâmetros. Com o Swift para TensorFlow, você pode diferenciar funções facilmente usando operadores diferenciais como gradient(of:)
ou diferenciar em relação a um modelo inteiro chamando o método gradient(in:)
. Essas APIs de diferenciação não estão disponíveis apenas para conceitos relacionados ao Tensor
— elas são generalizadas para todos os tipos que estão em conformidade com o protocolo Differentiable
, incluindo Float
, Double
, vetores SIMD e suas próprias estruturas de dados.
// 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
Além dos derivados, o projeto Swift for TensorFlow vem com um conjunto de ferramentas sofisticado para tornar os usuários mais produtivos. Você pode executar o Swift interativamente em um notebook Jupyter e obter sugestões úteis de preenchimento automático para ajudá-lo a explorar a enorme superfície da API de uma biblioteca moderna de aprendizado profundo. Você pode começar diretamente no seu navegador em segundos !
Migrar para Swift para TensorFlow é realmente fácil graças à poderosa integração Python do Swift. Você pode migrar gradativamente seu código Python (ou continuar a usar suas bibliotecas Python favoritas), porque você pode facilmente chamar sua biblioteca Python favorita com uma sintaxe familiar:
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!