Estamos felizes em anunciar que o torch v0.10.0 agora está no CRAN. Nesta postagem do weblog, destacamos algumas das mudanças que foram introduzidas nesta versão. Você pode verificar o changelog completo aqui.
Precisão mista automática
Precisão Mista Automática (AMP) é uma técnica que permite um treinamento mais rápido de modelos de aprendizado profundo, mantendo a precisão do modelo usando uma combinação de formatos de ponto flutuante de precisão simples (FP32) e meia precisão (FP16).
Para usar a precisão mista automática com tocha, você precisará usar o with_autocast
alternador de contexto para permitir que o torch use diferentes implementações de operações que podem ser executadas com meia precisão. Em geral, também é recomendado dimensionar a função de perda para preservar pequenos gradientes, à medida que eles se aproximam de zero na meia precisão.
Aqui está um exemplo mínimo, omitindo o processo de geração de dados. Você pode encontrar mais informações no artigo amp.
...
loss_fn <- nn_mse_loss()$cuda()
web <- make_model(in_size, out_size, num_layers)
decide <- optim_sgd(web$parameters, lr=0.1)
scaler <- cuda_amp_grad_scaler()
for (epoch in seq_len(epochs)) {
for (i in seq_along(information)) {
with_autocast(device_type = "cuda", {
output <- web(information((i)))
loss <- loss_fn(output, targets((i)))
})
scaler$scale(loss)$backward()
scaler$step(decide)
scaler$replace()
decide$zero_grad()
}
}
Neste exemplo, usar precisão mista levou a uma aceleração de cerca de 40%. Essa aceleração é ainda maior se você estiver apenas executando inferência, ou seja, não precisa dimensionar a perda.
Binários pré-construídos
Com binários pré-construídos, instalar o torch fica muito mais fácil e rápido, especialmente se você estiver no Linux e usar as compilações habilitadas para CUDA. Os binários pré-construídos incluem LibLantern e LibTorch, ambas dependências externas necessárias para executar o torch. Além disso, se você instalar as compilações habilitadas para CUDA, as bibliotecas CUDA e cuDNN já estarão incluídas.
Para instalar os binários pré-compilados, você pode usar:
choices(timeout = 600) # rising timeout is advisable since we will probably be downloading a 2GB file.
<- "cu117" # "cpu", "cu117" are the one presently supported.
variety <- "0.10.0"
model choices(repos = c(
torch = sprintf("https://storage.googleapis.com/torch-lantern-builds/packages/%s/%s/", variety, model),
CRAN = "https://cloud.r-project.org" # or another from which you wish to set up the opposite R dependencies.
))set up.packages("torch")
Como um bom exemplo, você pode começar a usar uma GPU no Google Colaboratory em menos de 3 minutos!

Acelerações
Graças a um emitir aberto por @egillaxpoderíamos encontrar e consertar um bug que fazia com que as funções do torch retornando uma lista de tensores fossem muito lentas. A função no caso period torch_split()
.
Esse problema foi corrigido na v0.10.0, e confiar nesse comportamento deve ser muito mais rápido agora. Aqui está um benchmark mínimo comparando a v0.9.1 com a v0.10.0:
::mark(
bench::torch_split(1:100000, split_size = 10)
torch )
Com a v0.9.1 obtemos:
# A tibble: 1 × 13
expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time
1 x 322ms 350ms 2.85 397MB 24.3 2 17 701ms
# ℹ 4 extra variables: end result , reminiscence , time , gc
enquanto com v0.10.0:
# A tibble: 1 × 13
expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total_time
1 x 12ms 12.8ms 65.7 120MB 8.96 22 3 335ms
# ℹ 4 extra variables: end result , reminiscence , time , gc
Refatoração do sistema de construção
O pacote torch R depende do LibLantern, uma interface C para o LibTorch. O Lantern faz parte do repositório torch, mas até a v0.9.1 seria necessário construir o LibLantern em uma etapa separada antes de construir o pacote R em si.
Essa abordagem teve várias desvantagens, incluindo:
- Instalar o pacote do GitHub não period confiável/reproduzível, pois você dependeria de um binário pré-compilado temporário.
- Comum
devtools
fluxos de trabalho comodevtools::load_all()
não funcionaria se o usuário não tivesse construído a Lanterna antes, o que tornava mais difícil contribuir para a tocha.
A partir de agora, a construção do LibLantern faz parte do fluxo de trabalho de construção de pacotes R e pode ser habilitada definindo o BUILD_LANTERN=1
variável de ambiente. Não é habilitado por padrão, porque a construção do Lantern requer cmake
e outras ferramentas (especialmente se estiver construindo com suporte de GPU), e usar os binários pré-construídos é preferível nesses casos. Com essa variável de ambiente definida, os usuários podem executar devtools::load_all()
para construir e testar a tocha localmente.
Este sinalizador também pode ser usado ao instalar versões de desenvolvimento do Torch do GitHub. Se estiver definido como 1
O Lantern será construído a partir do código-fonte em vez de instalar os binários pré-construídos, o que deve levar a uma melhor reprodutibilidade com versões de desenvolvimento.
Além disso, como parte dessas mudanças, melhoramos o processo de instalação automática do torch. Agora ele tem mensagens de erro aprimoradas para ajudar a depurar problemas relacionados à instalação. Também é mais fácil personalizar usando variáveis de ambiente, veja assist(install_torch)
para maiores informações.
Obrigado a todos os contribuidores do ecossistema torch. Este trabalho não seria possível sem todas as questões úteis abertas, PRs que vocês criaram e seu trabalho duro.
Se você é novo no uso de tochas e quer aprender mais, recomendamos fortemente o anunciado recentemente livro ‘Aprendizagem Profunda e Computação Científica com R torch
‘.
Se você quiser começar a contribuir para o torch, sinta-se à vontade para entrar em contato no GitHub e ver nosso guia de contribuição.
O changelog completo para esta versão pode ser encontrado aqui.