Computação habilitada para GPU
Observação
Alguns tipos de instância habilitados para GPU estão em Beta e são marcados como tal na lista suspensa quando você seleciona os tipos de driver e de trabalho durante a criação da computação.
Visão geral
O Azure Databricks dá suporte à computação acelerada com unidades de processamento gráfico (GPUs). Este artigo descreve como criar computação com instâncias habilitadas para GPU e descreve os drivers e as bibliotecas de GPU instalados nessas instâncias.
Para saber mais sobre o aprendizado profundo na computação habilitada para GPU, consulte Aprendizado profundo.
Criar uma computação de GPU
A criação de uma computação de GPU é semelhante à criação de qualquer computação. Você deve ter em mente o seguinte:
- A versão Databricks Runtime deve ser uma versão habilitada para a GPU, como o Runtime 13.3 LTS do ML (GPU, Scala 2.12.15, Spark 3.4.1).
- O Tipo de Trabalho e o Tipo de Driver devem ser tipos de instância de GPU.
Tipos de instância com suporte
O Azure Databricks dá suporte aos seguintes tipos de instância:
- Série de tipos de instância NC: Standard_NC12, Standard_NC24
- Série de tipos de instância NC v3: Standard_NC6s_v3, Standard_NC12s_v3 Standard_NC24s_v3
- Série de tipos de instância NC T4 v3: Standard_NC4as_T4_v3, Standard_NC8as_T4_v3, Standard_NC16as_T4_v3, Standard_NC64as_T4_v3
- Série de tipos de instância do NC A100 v4: Standard_NC24ads_A100_v4, Standard_NC48ads_A100_v4 Standard_NC96ads_A100_v4
- Série de tipos de instância do ND A100 v4: Standard_ND96asr_v4
- Série de tipos de instância NV A10 v5: Standard_NV36ads_A10_v5, Standard_NV36adms_A10_v5 Standard_NV72ads_A10_v5
- Standard_NV72ads_A10_v5 não é compatível com o PyTorch 2.0 e gera um erro cuda ao executar cargas de trabalho de várias GPUs. Como o Databricks Runtime ML 14.0 e superior pré-instala o PyTorch 2.0+, sugerimos usar o Databricks Runtime ML 13.x ou executar
pip install torch==1.13.1
manualmente se você estiver executando o PyTorch em cargas de trabalho com várias GPUs.
- Standard_NV72ads_A10_v5 não é compatível com o PyTorch 2.0 e gera um erro cuda ao executar cargas de trabalho de várias GPUs. Como o Databricks Runtime ML 14.0 e superior pré-instala o PyTorch 2.0+, sugerimos usar o Databricks Runtime ML 13.x ou executar
Confira os Preços do Azure Databricks para obter uma lista atualizada dos tipos de instância de GPU com suporte e suas regiões de disponibilidade. Sua implantação do Azure Databricks deve residir em uma região com suporte para iniciar a computação habilitada para GPU.
Agendamento de GPU
O Databricks Runtime dá suporte ao agendamento com reconhecimento de GPU no Apache Spark 3.0. O Azure Databricks o pré-configura na computação de GPU.
O agendamento de GPU não está habilitado na computação de nó único.
spark.task.resource.gpu.amount
é a única configuração do Spark relacionada ao agendamento com conhecimento de GPU que talvez seja necessário alterar.
A configuração padrão usa uma GPU por tarefa, que é ideal para cargas de trabalho de inferência distribuída e treinamento distribuído, se você usar todos os nós de GPU.
Para fazer o treinamento distribuído em um subconjunto de nós, o que ajuda a reduzir a sobrecarga de comunicação durante o treinamento distribuído, o Databricks recomenda definir spark.task.resource.gpu.amount
como o número de GPUs por nó de trabalho na configuração do Spark de computação.
Para tarefas do PySpark, o Azure Databricks remapeia automaticamente as GPUs atribuídas para índices 0, 1, ....
Na configuração padrão que usa uma GPU por tarefa, seu código pode simplesmente usar a GPU padrão sem verificar qual GPU está atribuída à tarefa.
Se você definir várias GPUs por tarefa, por exemplo 4, seu código poderá assumir que os índices das GPUs atribuídas são sempre 0, 1, 2 e 3. Se você precisar dos índices físicos das GPUs atribuídas, poderá obter os índices da variável CUDA_VISIBLE_DEVICES
de ambiente.
Se você usar o Scala, poderá obter os índices das GPUs atribuídas à tarefa de TaskContext.resources().get("gpu")
.
Para as versões do Databricks Runtime abaixo da 7.0, para evitar conflitos entre várias tarefas do Spark que tentam usar a mesma GPU, o Azure Databricks configura automaticamente a computação da GPU 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.
Driver NVIDIA GPU, CUDA e cuDNN
O Azure Databricks instala o driver NVIDIA e as bibliotecas necessárias para usar as GPUs em instâncias de trabalho e no driver do Spark:
- Kit de ferramentas CUDA, instalado em
/usr/local/cuda
. - cuDNN: Biblioteca de Rede Neural Profunda CUDA da NVIDIA.
- NCCL: Biblioteca de Comunicações Coletivas da NVIDIA.
A versão do driver NVIDIA incluída é 535.54.03, que dá suporte ao CUDA 11.0. Para a série de tipos de instância NV A10 v5, a versão do driver NVIDIA incluída é 525.105.17
.
Para as versões das bibliotecas incluídas, consulte as notas sobre a versão específica do Databricks Runtime que você está usando.
Observação
Esse software contém o código-fonte fornecido pela NVIDIA Corporation. Especificamente, para dar suporte a GPUs, Azure Databricks inclui código de exemplos de CUDA.
EULA (Contrato de Licença de Usuário Final) da NVIDIA
Ao selecionar uma "Versão do Databricks Runtime" habilitada para a GPU no Azure Databricks, você concorda implicitamente com os termos e condições descritos no EULA da NVIDIA em relação às bibliotecas CUDA, cuDNN e Tesla e o Contrato de Licença de Usuário Final da NVIDIA (com o Suplemento NCCL) para a biblioteca NCCL.
Serviços de contêineres do Databricks na computação de GPU
Importante
Esse recurso está em uma versão prévia.
Você pode usar os Serviços de Contêiner do Databricks na computação com GPUs para criar ambientes portáteis de aprendizagem profunda com bibliotecas personalizadas. Confira Personalizar contêineres com o Serviço de Contêiner do Databricks para obter instruções.
Para criar imagens personalizadas para computação de GPU, você deve selecionar uma versão de runtime padrão em vez do Databricks Runtime ML para GPU. Quando você seleciona Usar seu próprio contêiner do Docker, pode escolher a computação de GPU com uma versão de runtime padrão. As imagens personalizadas para computação de GPU são baseadas nos contêineres CUDA oficiais, que são diferentes do Databricks Runtime ML para GPU.
Ao criar imagens personalizadas para computação de GPU, você não pode alterar a versão do driver NVIDIA, pois ela deve corresponder à versão do driver no computador host.
O databricksruntime
Docker Hub contém imagens base de exemplo com a funcionalidade de GPU. Os Dockerfiles usados para gerar essas imagens estão localizados no repositório de contêineres de exemplo do GitHub, que também tem detalhes sobre o que as imagens de exemplo fornecem e como personalizá-las.