Carregar e processar dados de forma eficiente é crucial para o treinamento de modelos em machine learning (ML) e deep learning. Este tópico compara o desempenho de carregamento de dados a partir de OssIterableDataset, OssMapDataset e conjuntos de dados criados com ossfs e ImageFolder, usando endpoints internos e endpoints acelerados pelo acelerador do OSS. Com base nos resultados dos testes de desempenho apresentados neste tópico, otimize sua estratégia de acesso a dados.
Descrição do teste
Cenários de teste: teste o desempenho de leitura de dados de conjuntos de dados usando internal endpoints e accelerated endpoints.
Dados de teste: os testes de desempenho usam aproximadamente 1 TB de 10.000.000 imagens, com tamanho médio de 100 KB.
Ambiente de teste: os testes usam uma network-enhanced general-purpose g7nex Elastic Compute Service (ECS) instance com 128 vCPUs, 512 GB de memória e 160 Gbit/s de largura de banda interna.
Conjuntos de dados: o OSS Connector for AI/ML cria os conjuntos de dados dos tipos OssIterableDataset e OssMapDataset. Já o ossfs cria o conjunto de dados do tipo ossfs com ImageFolder.
Testes de desempenho
-
Parâmetros do teste
Parâmetro
Valor/Operação
Descrição
dataloader batch size
256
Cada tarefa em lote processa 256 amostras.
dataloader workers
32
32 processos carregam os dados em paralelo.
transform
trans = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) def transform(object): img = Image.open(io.BytesIO(object.read())).convert('RGB') val = trans(img) return val, object.labelPré-processa os dados.
-
Resultados do teste
Conjunto de dados criado com
Tipo de conjunto de dados
Tempo para carregar 10 milhões de imagens pelo endpoint interno do OSS (s)
Tempo para carregar 10 milhões de imagens pelo endpoint acelerado do OSS (s)
OSS Connector for AI/ML
OssIterableDataset
2182
2107
OssMapDataset
2493
2288
Ossfs with ImageFolder
178571
39840
Testes de desempenho de pico
-
Parâmetros do teste
Parâmetro
Valor/Operação
Descrição
dataloader batch size
256
Cada tarefa em lote processa 256 amostras.
dataloader workers
32
32 processos carregam os dados em paralelo.
transform
def transform(object): data = object.read() return object.key, object.labelNão pré-processa os dados.
-
Resultados do teste
Conjunto de dados criado com
Tipo de conjunto de dados
Tempo para carregar 10 milhões de imagens pelo endpoint interno do OSS (s)
Tempo para carregar 10 milhões de imagens pelo endpoint acelerado do OSS (s)
OSS Connector for AI/ML
OssIterableDataset
100
81
OssMapDataset
176
127
Análise dos dados de desempenho
Na leitura de dados dos conjuntos de dados, o OssIterableDataset e o OssMapDataset oferecem desempenho significativamente superior ao dos conjuntos de dados criados com ossfs e ImageFolder. Especificamente, são cerca de 80 vezes mais rápidos sem o acelerador do OSS e aproximadamente 18 vezes mais rápidos com o acelerador do OSS. Os testes de desempenho demonstram que o OSS Connector for AI/ML melhora de forma expressiva a velocidade de processamento de dados e a eficiência do treinamento de modelos.
Ler dados do OssIterableDataset e do OssMapDataset com o acelerador do OSS ativado é cerca de 1,4 vezes mais rápido do que ler com o acelerador desativado. Mesmo sem o acelerador do OSS, o OSS Connector for AI/ML lida com acessos altamente simultâneos e com alta largura de banda. Combinar o OSS Connector for AI/ML com o acelerador do OSS proporciona desempenho ainda mais robusto.
Conclusão
Use o OSS Connector for AI/ML no seu código Python para transmitir objetos do OSS por streaming. O OSS Connector for AI/ML aumenta a velocidade de leitura de dados e é adequado para a maioria dos cenários de treinamento de modelos. Para obter desempenho ainda maior no processamento de dados, use o OSS Connector for AI/ML junto com o acelerador do OSS.