Computação habilitada para GPU

Observação

Alguns tipos de instância habilitados para GPU estão em versão beta e são marcados como tal na lista suspensa quando o senhor seleciona os tipos de driver e worker durante a criação de compute.

Visão geral

O Databricks suporta compute acelerado com unidades de processamento gráfico (GPUs). Este artigo descreve como criar o site compute com instâncias habilitadas para GPU e descreve os drivers de GPU e a biblioteca instalada nessas instâncias.

Para saber mais sobre aprendizagem profunda em compute habilitado para GPU, consulte Aprendizagem profunda.

Criar uma computação de GPU

Criar uma GPU compute é semelhante a criar qualquer compute. O senhor deve ter em mente o seguinte:

  • A versão do Databricks Runtime deve ser uma versão habilitada para GPU, como Runtime 13.3 LTS ML (GPU, Scala 2.12.15, Spark 3.4.1).

  • O tipoworker e o tipo de driver devem ser tipos de instância de GPU.

Tipos de instância compatíveis

O Databricks dá suporte aos seguintes tipos de instância aceleradas por GPU:

Considerações

Para todos os tipos de instância aceleradas por GPU, lembre-se do seguinte:

  • Devido aos aumentos de preços das instâncias spot da Amazon, as instâncias spot de GPU são difíceis de reter. Use sob demanda, se necessário.

  • Talvez o senhor precise solicitar um aumento de limite para criar um site habilitado para GPU compute.

Consulte Tipos de instâncias compatíveis para obter uma lista de tipos de instâncias de GPU compatíveis e seus atributos.

Programador GPU

A programação da GPU distribui a tarefa Spark de forma eficiente em um grande número de GPUs.

Databricks Runtime suporta programação com reconhecimento de GPU a partir de Apache Spark 3.0. Databricks pré-configura-o na GPU compute.

Observação

A programação da GPU não está habilitada em um único nó compute.

A programação de GPU definida pelo usuário está disponível apenas para Databricks Runtime 7.1 e acima. Nas versões anteriores do Databricks Runtime, o Databricks configura automaticamente a GPU compute para que haja no máximo uma tarefa em execução por nó. Dessa forma, a tarefa pode usar todas as GPUs no nó sem entrar em conflito com outras tarefas.

Programação de GPU para IA e ML

spark.task.resource.gpu.amount é a única configuração do Spark relacionada ao programa com reconhecimento de GPU que o senhor talvez precise configurar. A configuração default usa uma GPU por tarefa, o que é uma boa linha de base para cargas de trabalho de inferência distribuída e treinamento distribuído se o senhor usar todos os nós de GPU.

Para reduzir a sobrecarga de comunicação durante o treinamento distribuído, o site Databricks recomenda definir spark.task.resource.gpu.amount como o número de GPUs por nó worker na configuração compute Spark . Isso cria apenas uma tarefa Spark para cada Spark worker e atribui todas as GPUs nesse nó worker à mesma tarefa.

Para aumentar a paralelização da inferência de aprendizagem profunda distribuída, o senhor pode definir spark.task.resource.gpu.amount como valores fracionários, como 1/2, 1/3, 1/4, ... 1/N. Isso cria mais Spark tarefa do que o número de GPUs, permitindo que mais tarefa concorrente lide com solicitações de inferência em paralelo. Por exemplo, se o senhor definir spark.task.resource.gpu.amount como 0.5, 0.33 ou 0.25, as GPUs disponíveis serão divididas entre o dobro, o triplo ou o quádruplo do número de tarefas.

Índices de GPU

Para PySpark tarefa, Databricks remapeia automaticamente a(s) GPU(s) atribuída(s) para índices baseados em zero. Para a configuração default que usa uma GPU por tarefa, o senhor pode usar a GPU default sem verificar qual GPU está atribuída à tarefa. Se o senhor definir várias GPUs por tarefa, por exemplo, 4, os índices das GPUs atribuídas serão sempre 0, 1, 2 e 3. Se o senhor precisar dos índices físicos das GPUs atribuídas, poderá obtê-los na variável de ambiente CUDA_VISIBLE_DEVICES.

Se você usar Scala, poderá obter os índices das GPUs atribuídas à tarefa em TaskContext.resources().get("gpu").

Driver de GPU NVIDIA, CUDA e cuDNN

Databricks instala o driver NVIDIA e a biblioteca necessária para usar GPUs no driver Spark e nas instâncias worker :

  • CUDA Toolkit, instalado em /usr/local/cuda.

  • cuDNN: biblioteca NVIDIA CUDA Deep Neural Network.

  • NCCL: biblioteca de comunicações coletivas da NVIDIA.

A versão do driver NVIDIA incluída é 535.54.03, que suporta CUDA 11.0.

Para as versões da biblioteca incluídas, consulte as notas sobre a versão para a versão específica do Databricks Runtime que você está usando.

Observação

Este software contém código-fonte fornecido pela NVIDIA Corporation. Especificamente, para oferecer suporte a GPUs, o Databricks inclui código de amostras CUDA.

Contrato de licença de usuário final da NVIDIA (EULA)

Ao selecionar uma “versão de Databricks Runtime ” habilitada para GPU no Databricks, você concorda implicitamente com os termos e condições descritos no EULA da NVIDIA com relação às bibliotecas CUDA, cuDNN e Tesla, e o Contrato de licença de usuário final da NVIDIA (com NCCL Suplemento) para a biblioteca NCCL.

Databricks Container Services em computação de GPU

Visualização

Esse recurso está em Prévia Pública.

O senhor pode usar o Databricks Container Services em compute com GPUs para criar ambientes portáteis de aprendizagem profunda com biblioteca personalizada. Consulte Personalizar contêineres com o serviço Databricks Container para obter instruções.

Para criar imagens personalizadas para GPU compute, o senhor deve selecionar uma versão de tempo de execução padrão em vez de Databricks Runtime ML para GPU. Ao selecionar Use your own Docker container, o senhor pode escolher a GPU compute com uma versão de tempo de execução padrão. As imagens personalizadas para GPU são baseadas nos contêineres CUDA oficiais, o que é diferente do Databricks Runtime ML para GPU.

Quando o senhor cria imagens personalizadas para a GPU compute, não é possível alterar a versão do driver NVIDIA porque ela deve corresponder à versão do driver na máquina host.

O databricksruntime Docker Hub contém exemplos de imagens base com capacidade de GPU. Os Dockerfiles usados para gerar essas imagens estão localizados no repositório GitHub de contêineres de exemplo, que também contém detalhes sobre o que as imagens de exemplo fornecem e como personalizá-las.

Mensagens de erro

  • O erro a seguir indica que o provedor clouds AWS não tem capacidade suficiente para o recurso compute solicitado. Error: Cluster terminated. Reason: AWS Insufficient Instance Capacity Failure

    Para resolver esse erro, o senhor pode tentar criar o site compute em uma zona de disponibilidade diferente. A zona de disponibilidade está na configuraçãocompute em Advanced options (Opções avançadas). O senhor também pode analisar os preços das instâncias reservadas da AWS para comprar uma cota adicional.

  • Se o seu compute usa os tipos de instância P4d ou G5 e o Databricks Runtime 7.3 LTS ML, a versão do pacote CUDA no 7.3 é incompatível com as instâncias de GPU mais recentes. Nesses casos, o pacote de ML, como o TensorFlow Keras e o PyTorch, produzirá erros como o seguinte:

    • Keras do TensorFlow: InternalError: CUDA runtime implicit initialization on GPU:x failed. Status: device kernel image is invalid

    • PyTorch: UserWarning: NVIDIA A100-SXM4-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation.

    Você pode resolver esses erros atualizando para Databricks Runtime 10.4 LTS ML ouacima.