Proceso habilitado para GPU
Nota:
Algunos tipos de instancia habilitados para GPU están en versión Beta y se marcan como tales en la lista desplegable cuando se seleccionan los tipos de controlador y de trabajo durante la creación del proceso.
Información general
Azure Databricks admite el proceso acelerado con unidades de procesamiento gráfico (GPU). En este artículo se describe tanto cómo crear un proceso con instancias habilitadas para GPU, como qué controladores y bibliotecas de GPU hay instalados en esas instancias.
Para saber más sobre el aprendizaje profundo en clústeres habilitados para GPU, consulte Aprendizaje profundo.
Cree un proceso de GPU
La creación de un proceso de GPU es similar a la creación de cualquier proceso. Sin embargo, debería tener presente lo siguiente:
- La versión de Databricks Runtime debe ser una versión habilitada para GPU, como Runtime 13.3 LTS ML (GPU, Scala 2.12.15 y Spark 3.4.1).
- El tipo de trabajo y el tipo de controlador deben ser tipos de instancia de GPU.
Tipos de instancia admitidos
Azure Databricks admite los tipos de instancia siguientes:
- Serie de tipos de instancia NC: Standard_NC12, Standard_NC24
- Serie de tipos de instancia NC v3: Standard_NC6s_v3, Standard_NC12s_v3, Standard_NC24s_v3
- Serie de tipos de instancia NC T4 v3: Standard_NC4as_T4_v3, Standard_NC8as_T4_v3, Standard_NC16as_T4_v3, Standard_NC64as_T4_v3
- Serie de tipos de instancia NC A100 v4: Standard_NC24ads_A100_v4, Standard_NC48ads_A100_v4, Standard_NC96ads_A100_v4
- Serie de tipos de instancia de NCads H100 v5: Standard_NC40ads_H100_v5, Standard_NC80adis_H100_v5
- Serie de tipos de instancia ND A100 v4: Standard_ND96asr_v4
- Serie de tipos de instancia NV A10 v5: Standard_NV36ads_A10_v5, Standard_NV36adms_A10_v5, Standard_NV72ads_A10_v5
Consulte Precios de Azure Databricks para una lista actualizada de los tipos de instancia de GPU admitidos y sus regiones de disponibilidad. La implementación de Azure Databricks debe residir en una región admitida para iniciar procesos habilitados para GPU.
Programación de GPU
La programación de GPU distribuye las tareas de Spark de forma eficaz en un número grande de GPU.
Databricks Runtime admite la programación compatible con GPU de Apache Spark 3.0. Azure Databricks lo configura previamente en procesos de GPU.
Nota:
La programación de GPU no está habilitada en los procesos de nodo único.
La programación de GPU definida por el usuario solo está disponible para Databricks Runtime 7.1 y versiones posteriores. Para versiones anteriores de Databricks Runtime, Databricks configura automáticamente el proceso de GPU para que haya como máximo una tarea en ejecución por nodo. De este modo, la tarea puede usar todas las GPU del nodo sin entrar en conflicto con otras tareas.
Programación de GPU para IA y ML
spark.task.resource.gpu.amount
es la única configuración de Spark relacionada con la programación con GPU que puede tener que configurar.
La configuración predeterminada utiliza una GPU por tarea, una buena línea base para cargas de trabajo de inferencia distribuida y entrenamiento distribuido si utiliza todos los nodos de GPU.
Para reducir la sobrecarga de comunicación durante el entrenamiento distribuido, Databricks recomienda establecer spark.task.resource.gpu.amount
en el número de GPU por nodo de trabajo en la configuración de Spark del proceso. Esto crea solo una tarea de Spark para cada trabajo de Spark y asigna todas las GPU de ese nodo de trabajo a la misma tarea.
A fin de aumentar la paralelización para la inferencia de aprendizaje profundo distribuido, puede establecer spark.task.resource.gpu.amount
en valores fraccionarios como 1/2, 1/3, 1/4, etc. 1/N. Esto crea más tareas de Spark que las GPU disponibles, lo que permite que más tareas simultáneas controlen las solicitudes de inferencia en paralelo. Por ejemplo, si establece spark.task.resource.gpu.amount
en 0.5
, 0.33
o 0.25
, las GPU disponibles se dividirán entre el doble, triple o cuádruple de tareas.
Índices de GPU
Para las tareas de PySpark, Azure Databricks reasigna automáticamente las GPU asignadas a los índices basados en cero. En la configuración predeterminada que usa una GPU por tarea, puede utilizar la GPU predeterminada sin comprobar cuál está asignada a la tarea.
Si configura varias GPU por tarea, por ejemplo, cuatro, los índices de las GPU asignadas siempre son 0, 1, 2 y 3. Si necesita los índices físicos de las GPU asignadas, puede obtenerlos de la variable de entorno CUDA_VISIBLE_DEVICES
.
Si usa Scala, puede obtener los índices de las GPU asignadas a la tarea desde TaskContext.resources().get("gpu")
.
Controlador de GPU de NVIDIA, CUDA y cuDNN
Azure Databricks instala el controlador NVIDIA y las bibliotecas necesarias para usar GPU en las instancias de trabajo y del controlador de Spark:
- CUDA Toolkit, instalado en
/usr/local/cuda
. - cuDNN: biblioteca de redes neuronales profundas CUDA de NVIDIA.
- NCCL: biblioteca de comunicaciones colectivas de NVIDIA.
La versión del controlador NVIDIA incluida es la 535.54.03, que admite CUDA 11.0. Para la serie de tipos de instancia NV A10 v5, la versión del controlador NVIDIA incluida es 535.154.05
.
Para ver las versiones de las bibliotecas incluidas, consulte las notas de la versión de la versión de Databricks Runtime específica que está usando.
Nota:
Este software contiene código fuente proporcionado por NVIDIA Corporation. En concreto, para admitir GPU, Azure Databricks incluye código de ejemplos de CUDA.
Contrato de licencia para el usuario final (CLUF) de NVIDIA
Al seleccionar una "versión de Databricks Runtime" habilitada para GPU en Azure Databricks, acepta implícitamente los términos y condiciones descritos en el CLUF de NVIDIA sobre las bibliotecas CUDA, cuDNN y Tesla, así como el Contrato de licencia de usuario final de NVIDIA (con el complemento NCCL) para la biblioteca NCCL.
Databricks Container Services en procesos de GPU
Importante
Esta característica está en versión preliminar pública.
Puede usar Databricks Container Services en procesos con GPU para crear entornos de aprendizaje profundo portátiles con bibliotecas personalizadas. Consulte Personalización de contenedores con Databricks Container Service para instrucciones.
Para crear imágenes personalizadas para procesos con GPU, debe seleccionar una versión de runtime estándar en lugar de Databricks Runtime ML para GPU. Al seleccionar Use your own Docker container (Use su contenedor de Docker), puede elegir procesos con GPU con una versión de runtime estándar. Las imágenes personalizadas para GPU se basan en los contenedores CUDA oficiales, que son diferentes a Databricks Runtime ML para GPU.
Al crear imágenes personalizadas para procesos con GPU, no se puede cambiar la versión del driver NVIDIA, ya que debe coincidir con la versión del equipo host.
databricksruntime
Docker Hub contiene imágenes base de ejemplo con funcionalidad para GPU. Los dockerfiles usados para generar estas imágenes se encuentran en repositorio de GitHub de contenedores de ejemplo, que también tiene detalles sobre lo que proporcionan las imágenes de ejemplo y cómo personalizarlas.