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 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 Connector for PyTorch implementa a primitiva de conjunto de dados do PyTorch, que pode ser usada para carregar dados de treinamento de buckets do Cloud Storage de maneira eficiente.
- 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 funcione de maneira flexível com matrizes NumPy ou tensores do PyTorch.
Para a criação de checkpoints e o carregamento de modelos, o Connector for PyTorch oferece as seguintes vantagens:
- Uma interface de criação de checkpoints 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 à criação de checkpoints do PyTorch Lightning usando a implementação
DatafluxLightningCheckpointdoCheckpointIOdo PyTorch Lightning. - O Connector for PyTorch fornece implementações
StorageWritereStorageReaderpara uso com a criação de checkpoints distribuída do PyTorch. A biblioteca de demonstração do Connector for PyTorch inclui um código de exemplo para uso em uma carga de trabalho FSDP do PyTorch Lightning. - A criação de checkpoints do conector inclui suporte para salvamentos de checkpoints assíncronos com o Lightning e o PyTorch de base.
Para mais informações, consulte a página de destino do Connector for PyTorch no GitHub.
Frameworks
O Connector for PyTorch tem suporte nas seguintes versões de 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 conector para PyTorch, você precisa ter o seguinte:
- Um bucket do Cloud Storage que contém os dados com que você quer trabalhar.
- Consulte o uso de objetos compostos para outras configurações recomendadas para o bucket.
- As seguintes permissões para trabalhar com os dados armazenados no bucket:
storage.objects.createstorage.objects.liststorage.objects.getstorage.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 um papel do IAM, como Usuário do objeto de armazenamento.
Instalação
Para instalar o conector para PyTorch, use o comando a seguir:
pip install gcs-torch-dataflux
Configuração
A autenticação precisa ser fornecida para usar o Connector for PyTorch Application Default Credentials usando um dos seguintes métodos:
- Ao executar o Connector for PyTorch em uma VM do Compute Engine, as Application Default Credentials usam automaticamente a conta de serviço anexada da VM por padrão. Para mais informações, consulte Escolher um método de autenticação de carga de trabalho.
- Application Default Credentials 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 sobre a carga de trabalho de treinamento de segmentação de imagens.
- Um exemplo completo e o notebook para integração do PyTorch Lightning.
Desempenho
O conector para PyTorch tem otimizações específicas projetadas para cargas de trabalho de ML que podem oferecer um desempenho significativamente melhor do que chamadas de API diretas 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 de listagem 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 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 checkpoints permite uma melhoria de desempenho de até 10 vezes em relação ao upload de checkpoints padrão.
É possível encontrar dados de performance no GitHub para o seguinte:
- Treinamento baseado em texto do Lightning
- Treinamento de imagens do Lightning
- Criação de checkpoints de nó único
- Criação de checkpoints de 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 o Connector for PyTorch use mais operações de lista 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 extras de armazenamento e cobranças 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 objetos desativado
- Standard Storage 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 loop de treinamento, mas em casos raros eles podem não ser. 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á construindo. 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 capacidade de processamento 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 os limites de QPS ou capacidade de processamento do projeto, mesmo sem usar objetos compostos.
Erros 429 e desempenho degradado
Ao trabalhar com o conector para PyTorch, você pode receber erros 429 ou tempos de execução mais lentos do que o esperado. Há vários motivos comuns para isso ocorrer:
- 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 Connector for PyTorch, mas geralmente podem acionar os limites de taxa do Cloud Storage.
- Erros 429 acompanhados de mensagens como "Essa carga de trabalho está consumindo muita largura de banda de saída do Cloud Storage" ou "Essa 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 Cloud de Confiance by S3NS projeto. Para resolver esses problemas, siga estas etapas:
- Verifique se outras cargas de trabalho no seu projeto não estão consumindo largura de banda em excesso.
- Solicite um aumento de cota.
- Ajuste as opções
list_retry_configedownload_retry_configna parte de configuração dos conjuntos de dados que você está construindo para ajustar o backoff de repetição e maximizar o desempenho.
- Os limites de QPS podem acionar erros 429 com uma mensagem de corpo indicando
TooManyRequests, mas mais comumente 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 são escalonados naturalmente ao longo do tempo. Portanto, permitir um período de aquecimento geralmente leva a um desempenho mais rápido. Para mais detalhes sobre o desempenho de um bucket de destino, consulte a guia "Observabilidade" ao visualizar o bucket no Cloud de Confiance console. - Se a carga de trabalho falhar com um erro
TooManyRequestsque inclua a palavra-chavedataflux-composed-objectsna 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 escala.
Consumo de memória
As gravações e cargas de checkpoints, incluindo modelos finais para inferência, são totalmente preparadas na memória para otimizar o desempenho de upload e download. Cada máquina precisa ter RAM livre suficiente para preparar o checkpoint na memória para aproveitar essas melhorias de desempenho.
Receber suporte
Receba ajuda, envie perguntas gerais e solicite novos recursos registrando itens no GitHub.