Compartilhar via


Carregar dados na computação de GPU sem servidor

Esta seção aborda informações sobre o carregamento de dados na computação de GPU sem servidor especificamente para aplicativos ML e DL. Verifique o tutorial para saber mais sobre como carregar e transformar dados usando a API do Python do Spark.

Carregar dados de tabela

Use o Spark Connect para carregar dados de machine learning tabulares de tabelas Delta.

Para treinamento de único nó, você pode converter DataFrames do Apache Spark em DataFrames do pandas usando o método PySparktoPandas(), e, opcionalmente, converter em formato NumPy usando o método PySparkto_numpy().

Observação

O Spark Connect adia a análise e a resolução de nomes para o tempo de execução, o que pode alterar o comportamento do código. Consulte Comparar o Spark Connect com o Spark Classic.

O Spark Connect dá suporte à maioria das APIs do PySpark, incluindo o Spark SQL, a API do Pandas no Spark, o Streaming Estruturado e o MLlib (baseado em DataFrame). Consulte a documentação de referência da API do PySpark para obter as APIs mais recentes com suporte.

Para outras limitações, consulte limitações de computação sem servidor.

Carregar dados no decorador @distributed

Ao usar a API de GPU sem servidor para treinamento distribuído, mova o código de carregamento de dados no decorador @distributed. O tamanho do conjunto de dados pode exceder o tamanho máximo permitido pelo pickle, assim, é recomendável gerar o conjunto de dados dentro do decorador, conforme mostrado abaixo:

from serverless_gpu import distributed

# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, remote=True)
def run_train():
  # good practice
  dataset = get_dataset(file_path)
  ....

Desempenho de carregamento de dados

/Workspace e /Volumes diretórios são hospedados no armazenamento remoto do Unity Catalog. Se o conjunto de dados estiver armazenado no Catálogo do Unity, a velocidade de carregamento de dados será limitada pela largura de banda de rede disponível. Se você estiver treinando várias épocas, é recomendável primeiro copiar os dados localmente, especificamente para o /tmp diretório hospedado em discos SSD do NVMe (armazenamento super rápido).

Se o conjunto de dados for grande, também recomendamos as seguintes técnicas para paralelizar o treinamento e o carregamento de dados:

  • Ao treinar várias épocas, atualize o conjunto de dados para armazenar arquivos em cache localmente no /tmp diretório antes de ler cada arquivo. Em épocas subsequentes, use a versão armazenada em cache.
  • Paralelize a obtenção de dados habilitando os processos na API do DataLoader do torch. Defina num_workers como pelo menos 2. Por padrão, cada trabalhador pré-busca dois itens de trabalho. Para melhorar o desempenho, aumente num_workers (o que aumentará as leituras paralelas) ou prefetch_factor (o que aumentará o número de itens que cada trabalhador pré-carrega).