Put up AI Weblog: tocha 0.9.0


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 torchAs 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:


Put up AI Weblog: tocha 0.9.0

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.


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.

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_moduleSe 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=1entã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 de torch 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}
}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *