A NVIDIA Data Load Library (DALI) é uma biblioteca acelerada por GPU para carregamento e pré-processamento de dados para acelerar aplicativos de aprendizado profundo. Ele fornece uma coleção de blocos de construção altamente otimizados para carregar e processar dados de imagem, vídeo e áudio. Ele pode ser usado como um substituto portátil para carregadores de dados e iteradores de dados integrados em estruturas populares de aprendizado profundo.
Os aplicativos de aprendizagem profunda exigem pipelines de processamento de dados complexos e de vários estágios que incluem carregamento, decodificação, corte, redimensionamento e muitos outros aumentos. Esses pipelines de processamento de dados, atualmente executados na CPU, tornaram-se um gargalo, limitando o desempenho e a escalabilidade do treinamento e da inferência.
DALI resolve o problema do gargalo da CPU descarregando o pré-processamento de dados para a GPU. Além disso, o DALI conta com seu próprio mecanismo de execução, construído para maximizar o rendimento do pipeline de entrada. Recursos como pré-busca, execução paralela e processamento em lote são tratados de forma transparente para o usuário.
Além disso, as estruturas de aprendizagem profunda têm múltiplas implementações de pré-processamento de dados, resultando em desafios como portabilidade de fluxos de trabalho de treinamento e inferência e capacidade de manutenção do código. Os pipelines de processamento de dados implementados usando DALI são portáteis porque podem ser facilmente redirecionados para TensorFlow, PyTorch e PaddlePaddle.
DALI em ação:
from nvidia.dali.pipeline import pipeline_defimport nvidia.dali.types as typesimport nvidia.dali.fn as fnfrom nvidia.dali.plugin.pytorch import DALIGenericIteratorimport os# Para executar com dados diferentes, consulte a documentação de nvidia.dali.fn.readers. file# aponta para https://github.com/NVIDIA/DALI_extradata_root_dir = os.environ['DALI_EXTRA_PATH']images_dir = os.path.join(data_root_dir, 'db', 'single', 'jpeg')def loss_func(pred , y):passdef modelo(x):passdef para trás(perda, modelo):pass@pipeline_def(num_threads=4, device_id=0)def get_dali_pipeline():images, rótulos = fn.readers.file(file_root=images_dir, random_shuffle =True, name="Reader")# decodifica dados na GPUimages = fn.decoders.image_random_crop(images, device="mixed", output_type=types.RGB)# o resto do processamento também acontece na GPUimages = fn. redimensionar (imagens, redimensionar_x = 256, redimensionar_y = 256) imagens = fn.crop_mirror_normalize (imagens, cortar_h = 224, cortar_w = 224, média = [0,485 * 255, 0,456 * 255, 0,406 * 255], std = [0,229 * 255 , 0,224 * 255, 0,225 * 255],mirror=fn.random.coin_flip())retornar imagens, rótulostrain_data = DALIGenericIterator( [get_dali_pipeline(batch_size=16)], ['data', 'label'],reader_name='Reader')para i, dados em enumerate(train_data):x, y = data[0]['data'], data[0]['label']pred = modelo(x)perda = loss_func(pred, y)backward(perda, modelo)
API Python de estilo funcional fácil de usar.
Suporte a vários formatos de dados - LMDB, RecordIO, TFRecord, COCO, JPEG, JPEG 2000, WAV, FLAC, OGG, H.264, VP9 e HEVC.
Portátil em estruturas populares de aprendizado profundo: TensorFlow, PyTorch, PaddlePaddle, JAX.
Suporta execução de CPU e GPU.
Escalável em várias GPUs.
Gráficos flexíveis permitem que os desenvolvedores criem pipelines personalizados.
Extensível para necessidades específicas do usuário com operadores personalizados.
Acelera cargas de trabalho de classificação de imagens (ResNet-50), detecção de objetos (SSD), bem como modelos ASR (Jasper, RNN-T).
Permite caminho direto de dados entre armazenamento e memória GPU com armazenamento GPUDirect.
Fácil integração com NVIDIA Triton Inference Server com DALI TRITON Backend.
Código aberto.
Durante as competições de visão computacional Kaggle: "DALI é uma das melhores coisas que aprendi nesta competição"
Lightning Pose - modelo de pesquisa de estimativa de pose de última geração
Para melhorar a utilização de recursos em Infraestrutura de Computação Avançada
MLPerf - o padrão da indústria para benchmarking de hardware e software de computação e aprendizagem profunda
"otimizamos os principais modelos dentro do eBay com a estrutura DALI"
A edição a seguir representa uma visão geral de alto nível do nosso plano para 2024. Você deve estar ciente de que este roteiro pode sofrer alterações a qualquer momento e a ordem de seus itens não reflete nenhum tipo de prioridade.
Recomendamos fortemente que você comente nosso roteiro e nos forneça feedback sobre o problema mencionado no GitHub.
Para instalar a versão mais recente do DALI para a versão mais recente do CUDA (12.x):
pip instalar nvidia-dali-cuda120 # ou pip install --extra-index-url https://pypi.nvidia.com --upgrade nvidia-dali-cuda120
DALI requer driver NVIDIA compatível com a versão CUDA apropriada. No caso de DALI baseado em CUDA 12, é necessário instalar o CUDA Toolkit.
DALI vem pré-instalado nos contêineres TensorFlow, PyTorch e PaddlePaddle na NVIDIA GPU Cloud.
Para outros caminhos de instalação (plug-in TensorFlow, versão CUDA mais antiga, compilações noturnas e semanais, etc.) e requisitos específicos, consulte o Guia de instalação.
Para construir o DALI a partir do código-fonte, consulte o Guia de Compilação.
Uma introdução ao DALI pode ser encontrada na página Introdução.
Exemplos mais avançados podem ser encontrados na página Exemplos e Tutoriais.
Para obter uma versão interativa (caderno Jupyter) dos exemplos, acesse o diretório docs/examples.
Nota: Selecione a documentação de lançamento mais recente ou a documentação de lançamento noturno, que permanece sincronizada com o branch principal, dependendo da sua versão.
Conferência de Tecnologia GPU 2024; Otimizando a veiculação do modelo de inferência para obter o melhor desempenho no eBay ; Yiheng Wang: evento
Conferência de Tecnologia GPU 2023; Revelação do desenvolvedor: Acelerando fluxos de trabalho empresariais com Triton Server e DALI ; Brandon Tuttle: evento.
Conferência de Tecnologia GPU 2023; Fluxos de trabalho geoespaciais completos com aceleração de GPU ; Kevin Green: evento.
Conferência de Tecnologia GPU 2022; NVIDIA DALI Eficaz: Acelerando Aplicativos de Aprendizado Profundo da Vida Real ; Rafał Banaś: evento.
Conferência de Tecnologia GPU 2022; Introdução ao NVIDIA DALI: pré-processamento de dados acelerado por GPU ; Joaquin Anton Guirao: evento.
Conferência de Tecnologia GPU 2021; NVIDIA DALI: pré-processamento de dados alimentado por GPU por Krzysztof Łęcki e Michał Szołucha: evento.
Conferência de Tecnologia GPU 2020; Pré-processamento rápido de dados com NVIDIA Data Load Library (DALI) ; Albert Wolant, Joaquin Anton Guirao: gravação.
Conferência de Tecnologia GPU 2019; Pré-processamento rápido de dados de IA com DALI ; Janusz Lisiecki, Michał Zientkiewicz: slides, gravação.
Conferência de Tecnologia GPU 2019; Integração de DALI com TensorRT no Xavier ; Josh Park e Anurag Dixit: slides, gravação.
Conferência de Tecnologia GPU 2018; Pipeline de dados rápido para treinamento de aprendizado profundo , T. Gale, S. Layton e P. Trędak: slides, gravação.
Página do desenvolvedor.
Postagens de blog.
Aceitamos contribuições para o DALI. Para contribuir com o DALI e fazer solicitações pull, siga as diretrizes descritas no documento de contribuição.
Se você está procurando uma tarefa boa para começar, verifique o rótulo de boas-vindas de contribuição externa.
Agradecemos comentários, perguntas ou relatórios de bugs. Quando precisar de ajuda com o código, siga o processo descrito no documento Stack Overflow. Certifique-se de que os exemplos postados sejam:
mínimo : Use o mínimo de código possível que ainda produza o mesmo problema.
completo : Forneça todas as peças necessárias para reproduzir o problema. Verifique se você consegue eliminar a dependência externa e ainda mostrar o problema. Quanto menos tempo gastamos reproduzindo os problemas, mais tempo podemos dedicar às correções.
verificável : teste o código que você está prestes a fornecer, para ter certeza de que ele reproduz o problema. Remova todos os outros problemas que não estejam relacionados à sua solicitação.
O DALI foi originalmente construído com contribuições importantes de Trevor Gale, Przemek Tredak, Simon Layton, Andrei Ivanov e Serge Panev.