Estamos felizes em anunciar que torch
v0.9.0 está agora no CRAN. Esta versão adiciona suporte para sistemas ARM executando macOS e traz melhorias significativas de desempenho. Esta versão também inclui muitas correções de bugs e recursos menores. O changelog completo pode ser encontrado aqui.
Melhorias de desempenho
torch
para R usa LibTorch como backend. Esta é a mesma biblioteca que alimenta o PyTorch – o que significa que devemos ver um desempenho muito semelhante ao comparar programas.
No entanto, torch
tem um design muito diferente, em comparação com outras bibliotecas de aprendizado de máquina que envolvem bases de código C++ (por exemplo, ‘, xgboost
). Nesse caso, a sobrecarga é insignificante porque há apenas algumas chamadas de função R antes de começarmos a treinar o modelo; todo o treinamento acontece sem nunca sair do C++. Em torch
As funções C++ são agrupadas no nível de operação. E como um modelo consiste em múltiplas chamadas para operadores, isso pode tornar a sobrecarga da chamada de função R mais substancial.
Estabelecemos um conjunto de benchmarks, cada um tentando identificar gargalos de desempenho em áreas específicas. torch
características. Em alguns benchmarks conseguimos tornar a nova versão até 250x mais rápida que a última versão CRAN. Na figura 1 podemos ver o desempenho relativo de torch
v0.9.0 e torch
v0.8.1 em cada um dos benchmarks em execução no dispositivo CUDA:

Figura 1: Desempenho relativo de v0.8.1 vs v0.9.0 no dispositivo CUDA. O desempenho relativo é medido por (horário_novo/horário_antigo)^-1.
A principal fonte de melhorias de desempenho na GPU se deve ao melhor gerenciamento de memória, evitando chamadas desnecessárias ao coletor de lixo R. Veja mais detalhes no Artigo ‘Gerenciamento de memória’ no torch
documentação.
No dispositivo CPU temos resultados menos expressivos, ainda que alguns dos benchmarks sejam 25x mais rápidos com a v0.9.0. Na CPU, o principal gargalo de desempenho resolvido é a utilização de uma nova thread para cada chamada retroativa. Agora usamos um pool de threads, fazendo com que o para trás e ótimo benchmarks quase 25x mais rápidos para alguns tamanhos de lote.

Figura 2: Desempenho relativo de v0.8.1 vs v0.9.0 no dispositivo CPU. O desempenho relativo é medido por (horário_novo/horário_antigo)^-1.
O código de benchmark está totalmente disponível para reprodutibilidade. Embora esta versão traga melhorias significativas em torch
para o desempenho do R, continuaremos trabalhando neste tópico e esperamos melhorar ainda mais os resultados nas próximas versões.
Suporte para Apple Silicon
torch
A v0.9.0 agora pode ser executada nativamente em dispositivos equipados com Apple Silicon. Ao instalar torch
de uma versão ARM R, torch
baixará automaticamente os binários LibTorch pré-construídos direcionados a esta plataforma.
Além disso, agora você pode executar torch
operações na GPU do seu Mac. Este recurso é implementado no LibTorch através do API de shaders de desempenho de metallico que significa que ele suporta dispositivos Mac equipados com GPUs AMD e aqueles com chips Apple Silicon. Até agora, ele só foi testado em dispositivos Apple Silicon. Não hesite em abrir um problema se tiver problemas para testar esse recurso.
Para usar a GPU do macOS, você precisa colocar tensores no dispositivo MPS. Então, as operações nesses tensores acontecerão na GPU. Por exemplo:
x <- torch_randn(100, 100, system="mps")
torch_mm(x, x)
Se você estiver usando nn_module
Se você também precisar mover o módulo para o dispositivo MPS, usando o $to(system="mps")
método.
Observe que esse recurso está em beta a partir desta postagem do weblog, e você poderá encontrar operações que ainda não foram implementadas na GPU. Nesse caso, pode ser necessário definir a variável de ambiente PYTORCH_ENABLE_MPS_FALLBACK=1
então torch
usa automaticamente a CPU como substituto para essa operação.
Outro
Muitas outras pequenas alterações foram adicionadas nesta versão, incluindo:
- Atualização para LibTorch v1.12.1
- Adicionado
torch_serialize()
para permitir a criação de um vetor bruto a partir detorch
objetos. torch_movedim()
e$movedim()
agora ambos são indexados com base em 1.
Leia o changelog completo disponível aqui.
Reutilizar
Texto e figuras estão licenciados sob Artistic Commons Attribution CC POR 4,0. As figuras que foram reutilizadas de outras fontes não se enquadram nesta licença e podem ser reconhecidas por uma nota na sua legenda: “Figura de …”.
Citação
Para atribuição, cite este trabalho como
Falbel (2022, Oct. 25). Posit AI Weblog: torch 0.9.0. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/
Citação BibTeX
@misc{torch-0-9-0, creator = {Falbel, Daniel}, title = {Posit AI Weblog: torch 0.9.0}, url = {https://blogs.rstudio.com/tensorflow/posts/2022-10-25-torch-0-9/}, 12 months = {2022} }