Conector para PyTorch

O Connector for PyTorch do Cloud Storage é um produto de código aberto com suporte do Google que oferece uma integração direta do Cloud Storage com o PyTorch.

Visão geral

O Connector for PyTorch oferece vantagens para o carregamento de dados no treinamento e para a criação de checkpoints e o carregamento de modelos:

Para o carregamento de dados no treinamento, o Connector for PyTorch oferece as seguintes vantagens:

  • O Connector for PyTorch contém otimizações para acelerar o treinamento em até três vezes em comparação com o PyTorch padrão em conjuntos de dados compostos principalmente de arquivos menores que 1 MB.
  • O Connector for PyTorch implementa a primitiva de conjunto de dados do PyTorch, que pode ser usada para carregar dados de treinamento de maneira eficiente dos buckets do Cloud Storage.
  • Suporte para conjuntos de dados de estilo de mapa para padrões de acesso aos dados aleatórios e conjuntos de dados de estilo iterável para padrões de acesso aos dados de streaming.
  • A capacidade de transformar os bytes brutos de dados baixados no formato de sua escolha, permitindo que o DataLoader do PyTorch trabalhe de maneira flexível com matrizes NumPy ou tensores do PyTorch.

Para checkpoint e carregamento de modelos, o Connector for PyTorch oferece as seguintes vantagens:

  • Uma interface de checkpointing para salvar checkpoints de modelo de maneira conveniente e direta em um bucket do Cloud Storage e carregar checkpoints de modelo do bucket.
  • O Connector for PyTorch oferece suporte a checkpoints do PyTorch Lightning usando a implementação DatafluxLightningCheckpoint do CheckpointIO do PyTorch Lightning.
  • O Connector for PyTorch oferece implementações de StorageWriter e StorageReader para uso com o checkpoint distribuído do PyTorch. A biblioteca de demonstração do Connector for PyTorch inclui um exemplo de código para usar isso em uma carga de trabalho FSDP do PyTorch Lightning.
  • O checkpoint do conector inclui suporte para salvamentos de checkpoint assíncrono com Lightning e PyTorch básico.

Para mais informações, consulte a página inicial do conector para PyTorch no GitHub.

Frameworks

O Connector for PyTorch é compatível com as seguintes versões do framework:

  • Python 3.8 ou mais recente
  • PyTorch Lightning 2.0 ou mais recente
  • PyTorch 2.3.1 ou mais recente

Primeiros passos

Para usar o Connector para PyTorch, você precisa ter o seguinte:

  • Um bucket do Cloud Storage que contém os dados com que você quer trabalhar.
  • As seguintes permissões para trabalhar com os dados armazenados no bucket:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, se você pretende usar downloads compostos

Essas permissões precisam ser concedidas à conta que o Connector for PyTorch usará para autenticação usando um papel do IAM, como Usuário de objetos do Storage.

Instalação

Para instalar o Connector for PyTorch, use o seguinte comando:

pip install gcs-torch-dataflux

Configuração

A autenticação precisa ser fornecida para usar o Connector for PyTorch com Application Default Credentials por um dos seguintes métodos:

gcloud auth application-default login

Exemplos

Um conjunto completo de exemplos para trabalhar com o Connector for PyTorch pode ser encontrado no diretório de demonstração do repositório do GitHub do Connector for PyTorch. Por exemplo:

Desempenho

O Connector for PyTorch tem otimizações específicas projetadas para cargas de trabalho de ML que podem oferecer um desempenho significativamente melhor do que chamadas diretas de API para o Cloud Storage:

  • Para otimizar o desempenho da listagem, o Connector for PyTorch usa um algoritmo de listagem rápida desenvolvido para equilibrar a carga de trabalho entre processos de listagem de objetos paralelizados.
  • Para otimizar o desempenho de download de arquivos pequenos, o Connector for PyTorch usa a operação de composição para concatenar conjuntos de objetos menores em objetos únicos e maiores. Esses novos objetos compostos são armazenados no mesmo bucket que os objetos de origem e têm o prefixo dataflux-composed-objects/ nos nomes.
  • O upload de várias partes para gravação de checkpoint permite uma melhoria de desempenho de até 10 vezes em relação ao upload de checkpoint padrão.

No GitHub, você encontra dados de performance para o seguinte:

  • Treinamento rápido com base em texto
  • Treinamento de imagens com Lightning
  • Criação de checkpoints de nó único
  • Criação de checkpoints em vários nós

Considerações

O seguinte precisa ser considerado por carga de trabalho.

Operações de listagem rápida

O algoritmo de listagem rápida do Connector for PyTorch faz com que ele use mais operações de listagem do que uma listagem sequencial normal. As operações de lista são cobradas como operações de classe A.

Uso de objetos compostos

Para evitar cobranças excessivas de armazenamento e taxas de exclusão antecipada ao trabalhar com objetos compostos temporários, verifique se o bucket usa as seguintes configurações:

Os objetos compostos criados pelo Connector for PyTorch geralmente são removidos automaticamente no final do loop de treinamento, mas em casos raros isso pode não acontecer. Para garantir que os objetos sejam removidos do bucket, execute o seguinte comando:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

Para desativar o uso de objetos compostos, inclua disable_compose=True ou max_composite_object_size=0 na parte de configuração do conjunto de dados que você está criando. No entanto, desativar esse comportamento pode fazer com que os loops de treinamento demorem muito mais, especialmente ao trabalhar com arquivos pequenos.

O uso de objetos compostos faz com que o Cloud Storage atinja os limites de QPS e de capacidade de transferência em uma escala menor do que o download direto de arquivos. Desative o uso de objetos compostos ao executar em grandes escalas de vários nós em que você atinge os limites de QPS ou de capacidade de processamento do projeto, mesmo sem usar objetos compostos.

Erros 429 e desempenho degradado

Ao trabalhar com o Connector for PyTorch, você pode receber erros 429 ou tempos de execução mais lentos do que o esperado. Isso pode acontecer por vários motivos:

  • Muitos esforços de machine learning optam por um modelo de treinamento altamente distribuído que aproveita ferramentas como PyTorch Lightning e Ray. Esses modelos são compatíveis com o Connector for PyTorch, mas podem acionar os limites de taxa do Cloud Storage.
  • Erros 429 acompanhados de mensagens como "Esta carga de trabalho está consumindo muita largura de banda de saída do Cloud Storage" ou "Esta carga de trabalho acionou o limite de largura de banda de saída do Cloud Storage" indicam que a taxa de capacidade de processamento de dados da sua carga de trabalho está excedendo a capacidade máxima do seu projeto Google Cloud . Para resolver esses problemas, siga estas etapas:
  • Os limites de QPS podem acionar erros 429 com uma mensagem no corpo indicando TooManyRequests, mas geralmente se manifestam em tempos de execução mais lentos do que o esperado. Os gargalos de QPS são mais comuns ao operar com grandes volumes de arquivos pequenos. Os limites de QPS do bucket são escalonados naturalmente com o tempo. Por isso, permitir um período de aquecimento geralmente leva a um desempenho mais rápido. Para mais detalhes sobre a performance de um bucket de destino, consulte a guia "Observabilidade" ao visualizar o bucket no console do Google Cloud .
  • Se a carga de trabalho falhar com um erro TooManyRequests que inclui a palavra-chave dataflux-composed-objects na mensagem de erro, desativar o uso de objetos compostos será a melhor primeira etapa de solução de problemas. Isso pode reduzir a carga de QPS causada por operações de composição quando usadas em grande escala.

Consumo de memória

Os checkpoints de gravação e carregamento, incluindo modelos finais para inferência, são totalmente armazenados em memória para otimizar o desempenho de upload e download. Cada máquina precisa ter RAM livre suficiente para armazenar o checkpoint na memória e aproveitar essas melhorias de desempenho.

Receber suporte

Receba suporte, envie perguntas gerais e solicite novos recursos usando um dos Google Cloud canais de suporte oficiais. Também é possível receber suporte registrando problemas no GitHub.

PyTorch, o logotipo do PyTorch e todas as marcas relacionadas são marcas registradas da Linux Foundation.