O conector do Cloud Storage para PyTorch é 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 pontos de verificação e carregamento de modelos:
Para o carregamento de dados no treinamento, o Connector para PyTorch oferece as seguintes vantagens:
- O conector para PyTorch contém otimizações para tornar o treinamento até três vezes mais rápido do que o PyTorch padrão em conjuntos de dados que consistem principalmente em arquivos menores que 1 MB.
- O conector para PyTorch implementa a primitiva de conjunto de dados do PyTorch, que pode ser usada para ajudar a carregar dados de treinamento de forma eficiente dos buckets do Cloud Storage.
- Suporte a conjuntos de dados no estilo de mapa para padrões de acesso a dados aleatórios e conjuntos de dados iteráveis para padrões de acesso a dados de streaming.
- A capacidade de transformar os bytes brutos de dados transferidos por download no formato de sua escolha, permitindo que o PyTorch DataLoader trabalhe com flexibilidade com matrizes NumPy ou tensores PyTorch.
Para checkpointing e carregamento de modelos, o Connector for PyTorch oferece as seguintes vantagens:
- Uma interface de checkpointing para salvar de maneira conveniente e direta os checkpoints do modelo em um bucket do Cloud Storage e carregar checkpoints do modelo do bucket.
- O conector para PyTorch oferece suporte ao checkpointing do PyTorch Lightning
usando a implementação
DatafluxLightningCheckpoint
doCheckpointIO
do PyTorch Lightning. - O conector para PyTorch fornece implementações de
StorageWriter
eStorageReader
para uso com o checkpoint distribuído do PyTorch. A biblioteca de demonstração do conector para 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 o Lightning e o PyTorch básico.
Para mais informações, consulte a página de destino do GitHub do Connector for PyTorch.
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 for PyTorch, você precisa ter o seguinte:
- Um bucket do Cloud Storage que contém os dados com que você quer trabalhar.
- Consulte Uso de objetos compostos para ver outras configurações recomendadas para o bucket.
- 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 conector para PyTorch vai usar para autenticação usando uma função do IAM, como Usuário de objetos do Storage.
Instalação
Para instalar o conector para PyTorch, use o seguinte comando:
pip install gcs-torch-dataflux
Configuração
A autenticação precisa ser fornecida para usar o conector para credenciais padrão do aplicativo do PyTorch usando um dos seguintes métodos:
- Ao executar o conector para PyTorch em uma VM do Compute Engine, as credenciais padrão do aplicativo usam automaticamente a conta de serviço anexada à VM por padrão. Para mais informações, consulte Escolher um método de autenticação de carga de trabalho.
- As credenciais padrão do aplicativo também podem ser configuradas manualmente. É possível fazer login diretamente usando a Google Cloud CLI:
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 Connector for PyTorch no GitHub. Por exemplo:
- Um notebook básico do Jupyter (hospedado pelo Google Colab).
- Um tutorial completo de carga de trabalho de treinamento de segmentação de imagens.
- Um exemplo completo e o notebook para integração do PyTorch Lightning.
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 as chamadas de API diretas para o Cloud Storage:
- Para otimizar a performance da listagem, o conector para PyTorch usa um algoritmo de listagem rápida desenvolvido para equilibrar a carga de trabalho da listagem entre os processos de listagem de objetos paralelos.
- 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 um único arquivo maior. 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 até 10 vezes mais performance do que o upload de checkpoint padrão.
Você pode encontrar dados de performance no GitHub para:
- Treinamento com base em texto do Lightning
- Treinamento de imagem do Lightning
- Ponto de verificação de nó único
- Pontos de verificação com vários nós
Considerações
Considere as seguintes informações para cada 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 lista do que uma listagem sequencial regular. As operações de lista são cobradas como operações de classe A.
Uso de objetos compostos
Para evitar cobranças de armazenamento em excesso e de exclusão antecipada ao trabalhar com objetos compostos temporários, verifique se o bucket usa as seguintes configurações:
- Exclusão reversível desativada
- Bloqueio de bucket desativado
- Controle de versões de objeto desativado
- Armazenamento padrão como a classe de armazenamento para o bucket e os objetos.
Os objetos compostos criados pelo conector para PyTorch geralmente são removidos automaticamente no final do ciclo de treinamento, mas, em casos raros, isso não acontece. Para garantir que os objetos sejam removidos do bucket, execute o seguinte comando:
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
É possível desativar o uso de objetos compostos incluindo
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 ciclos de treinamento levem muito mais tempo, especialmente ao trabalhar com arquivos
pequenos.
O uso de objetos compostos faz com que o Cloud Storage atinja os limites de QPS e de taxa de transferência em uma escala menor do que o download de arquivos diretamente. Desative o uso de objetos compostos ao executar em escalas de vários nós altas, em que você atinge limites de QPS ou de throughput 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. Há vários motivos comuns para isso acontecer:
- Muitos esforços de machine learning optam por um modelo de treinamento altamente distribuído que aproveita ferramentas como o PyTorch Lightning e o Ray. Esses modelos são compatíveis com o conector para 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 transferência de dados da carga de trabalho está excedendo a capacidade máxima do projeto do Google Cloud. Para resolver esses problemas, siga estas
etapas:
- Verifique se outras cargas de trabalho no projeto não estão consumindo largura de banda em excesso.
- Solicite um aumento de cota.
- Ajuste as opções
list_retry_config
edownload_retry_config
na parte de configuração dos conjuntos de dados que você está criando para ajustar a repetição de tentativas e maximizar o desempenho.
- Os limites de QPS podem acionar erros 429 com uma mensagem de 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 em grandes volumes de arquivos pequenos. Os limites de QPS do bucket aumentam naturalmente ao longo do tempo. Portanto, permitir um período de aquecimento geralmente pode levar a um desempenho mais rápido. Para saber mais sobre a performance de um bucket de destino, consulte a guia "Observability" ao visualizar o bucket no console do Google Cloud. - Se a carga de trabalho apresentar um erro
TooManyRequests
que inclua a palavra-chavedataflux-composed-objects
na mensagem de erro, desativar o uso de objetos compostos é a melhor primeira etapa de solução de problemas. Isso pode reduzir a carga de QPS gerada por operações de composição quando usada em escala.
Consumo de memória
As gravações e os carregamentos de pontos de verificação, incluindo modelos finais para inferência, são totalmente agrupados na memória para otimizar o desempenho de upload e download. Cada máquina precisa ter RAM suficiente para preparar o ponto de verificação na memória e aproveitar essas melhorias de desempenho.
Receber suporte
Receba suporte, envie perguntas gerais e solicite novos recursos usando um dos canais de suporte oficiais do Google Cloud. Também é possível receber suporte registrando problemas no GitHub.