Habilitado para GPU compute
Alguns tipos de instância habilitados para GPU estão na 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 do compute.
Visão geral
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 GPU compute
Criar uma GPU compute é semelhante a criar qualquer compute. Você deve ter em mente o seguinte:
- A versãoDatabricks 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 tipo de trabalhador e o tipo de driver devem ser tipos de instância de GPU.
Tipos de instância compatíveis
Databricks está sendo descontinuado e não oferecerá mais suporte à criação de compute usando instâncias Amazon EC2 P3, pois AWS está descontinuando essas instâncias.
O Databricks é compatível com os seguintes tipos de instâncias aceleradas por GPU:
- P5
- P4
- G6e
- G6
- G5
- G4dn
- P3
- GPU Type: NVIDIA H100 Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
p5.48xlarge | 8 | 80GBx8 | 192 | 2TB |
- GPU Type: NVIDIA A100 Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
p4d.24xlarge | 8 | 40GBx8 | 96 | 1152GB |
p4de.24xlarge | 8 | 80GBx8 | 96 | 1152GB |
- GPU Type: NVIDIA L40S Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
g6e.xlarge | 1 | 48GB | 4 | 32GB |
g6e.2xlarge | 1 | 48GB | 8 | 64GB |
g6e.4xlarge | 1 | 48GB | 16 | 128GB |
g6e.8xlarge | 1 | 48GB | 32 | 256GB |
g6e.16xlarge | 1 | 48GB | 64 | 512GB |
g6e.12xlarge | 4 | 48GB x 4 | 48 | 384GB |
g6e.24xlarge | 4 | 48GB x 4 | 96 | 768GB |
g6e.48xlarge | 8 | 48GB x 8 | 192 | 1536GB |
- GPU Type: NVIDIA L4 Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
g6.xlarge | 1 | 24GB | 4 | 16GB |
g6.2xlarge | 1 | 24GB | 8 | 32GB |
g6.4xlarge | 1 | 24GB | 16 | 64GB |
g6.8xlarge | 1 | 24GB | 32 | 128GB |
g6.16xlarge | 1 | 24GB | 64 | 256GB |
g6.12xlarge | 4 | 24GB x 4 | 48 | 192GB |
g6.24xlarge | 4 | 24GB x 4 | 96 | 384GB |
g6.48xlarge | 8 | 24GB x 8 | 192 | 768GB |
- GPU Type: NVIDIA A10G Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
g5.xlarge | 1 | 24GB | 4 | 16GB |
g5.2xlarge | 1 | 24GB | 8 | 32GB |
g5.4xlarge | 1 | 24GB | 16 | 64GB |
g5.8xlarge | 1 | 24GB | 32 | 128GB |
g5.16xlarge | 1 | 24GB | 64 | 256GB |
g5.12xlarge | 4 | 24GB x 4 | 48 | 192GB |
g5.24xlarge | 4 | 24GB x 4 | 96 | 384GB |
g5.48xlarge | 8 | 24GB x 8 | 192 | 768GB |
- GPU Type: NVIDIA T4 Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
g4dn.xlarge | 1 | 16GB | 4 | 16GB |
g4dn.2xlarge | 1 | 16GB | 8 | 32GB |
g4dn.4xlarge | 1 | 16GB | 16 | 64GB |
g4dn.8xlarge | 1 | 16GB | 32 | 128GB |
g4dn.16xlarge | 1 | 16GB | 64 | 256GB |
g4dn.12xlarge | 4 | 24GB x 4 | 48 | 192GB |
- GPU Type: NVIDIA V100 Tensor Core GPU
Instance Name | Number of GPUs | GPU Memory | vCPUs | CPU Memory |
---|---|---|---|---|
p3.2xlarge | 1 | 16GB | 8 | 61GB |
p3.8xlarge | 4 | 16GB x 4 | 32 | 244GB |
p3.16xlarge | 8 | 16GB x 8 | 64 | 488GB |
Considerações
Para todos os tipos de instâncias aceleradas por GPU, lembre-se do seguinte:
- Devido aos aumentos de preços das instâncias spot da Amazon, é difícil manter as instâncias spot de GPU. 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ância compatíveis para ver uma lista dos tipos de instâncias de GPU compatíveis e seus atributos.
Programador de 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.
A programação da GPU não está habilitada em um único nó compute.
Programação de GPU para AI 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, oDatabricks site recomenda definir spark.task.resource.gpu.amount
como o número de GPUs por worker nó na compute Sparkconfiguração. 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 o senhor 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ários para usar GPUs nas instâncias do driver Spark e worker:
- CUDA Toolkit, instalado em
/usr/local/cuda
. - cuDNN: NVIDIA CUDA Deep rede neural biblioteca.
- NCCL: biblioteca de comunicações coletivas da NVIDIA.
A versão do driver NVIDIA incluída é a 535.54.03, que suporta CUDA 11.0.
Para conhecer as versões da biblioteca incluídas, consulte as notas sobre a versão da versão específica do site Databricks Runtime que o senhor está usando.
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 (EULA) da NVIDIA
Ao selecionar uma "VersãoDatabricks Runtime " habilitada para GPU em Databricks, o usuário concorda implicitamente com os termos e condições descritos no EULA da NVIDIA com relação às bibliotecas CUDA, cuDNN e Tesla e ao Contrato de Licença de Usuário Final da NVIDIA (com Suplemento NCCL) para a biblioteca NCCL.
Databricks Container Services na GPU compute
Visualização
Esse recurso está em Public Preview.
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 imagens de base de exemplo 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 tem detalhes sobre o que as imagens de exemplo fornecem e como personalizá-las.
Mensagens de erro
-
O erro a seguir indica que o provedor de nuvem 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 > Access mode . 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 Databricks Runtime 7.3 LTS ML, a versão do pacote CUDA na versão 7.3 é incompatível com as instâncias de GPU mais recentes. Nesses casos, o pacote ML, como TensorFlow Keras e PyTorch, produzirá erros como o seguinte:
- TensorFlow Keras:
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.
- TensorFlow Keras: