Introducción a la aceleración de GPU para ML en WSL

El aprendizaje automático (ML) se está convirtiendo en una parte clave de muchos flujos de trabajo de desarrollo. Tanto si es científico de datos, ingeniero de aprendizaje automático como si va a comenzar su recorrido de aprendizaje con ML, el Subsistema de Windows para Linux (WSL) ofrece un entorno excelente para ejecutar las herramientas de aprendizaje automático aceleradas por GPU más comunes y populares.

Hay muchas maneras diferentes de configurar estas herramientas. Por ejemplo, NVIDIA CUDA en WSL, TensorFlow-DirectML y PyTorch-DirectML ofrecen diferentes formas de usar la GPU para ML con WSL. Para más información sobre los motivos para elegir uno frente a otro, consulte Aprendizaje automático acelerado por GPU.

En esta guía se muestra cómo configurar:

  • NVIDIA CUDA si tiene una tarjeta gráfica NVIDIA y ejecuta un contenedor de marcos de ML de ejemplo
  • TensorFlow-DirectML y PyTorch-DirectML en la tarjeta gráfica AMD, Intel o NVIDIA

Requisitos previos

Configuración de NVIDIA CUDA con Docker

  1. Descarga e instalación del controlador más reciente para la GPU de NVIDIA

  2. Instale Docker Desktop o instale el motor de Docker directamente en WSL mediante la ejecución del comando siguiente.

    curl https://get.docker.com | sh
    
    sudo service docker start
    
  3. Si instaló el motor de Docker directamente, instale NVIDIA Container Toolkit siguiendo los pasos que se indican a continuación.

    Configure el repositorio estable para NVIDIA Container Toolkit mediante la ejecución de los siguientes comandos:

    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
    
    curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    

    Instale los paquetes y dependencias en tiempo de ejecución de NVIDIA mediante la ejecución de los comandos:

    sudo apt-get update
    
    sudo apt-get install -y nvidia-docker2
    
  4. Ejecute un contenedor y un ejemplo de marco de aprendizaje automático.

    Para ejecutar un contenedor de marco de aprendizaje automático y empezar a usar la GPU con este contenedor nvidia NGC TensorFlow, escriba el comando :

    docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3
    

    TensorFlow with CUDA running inside a Docker container

    Puede ejecutar un ejemplo de modelo entrenado previamente integrado en este contenedor mediante la ejecución de los comandos:

    cd nvidia-examples/cnn/
    
    python resnet.py --batch_size=64
    

    TensorFlow sample model training within Docker container

Encontrará más formas de configurar y usar NVIDIA CUDA en la Guía del usuario de NVIDIA CUDA en WSL.

Configuración de TensorFlow-DirectML o PyTorch-DirectML

  1. Descargue e instale el controlador más reciente desde el sitio web de los proveedores de GPU: AMD, Intel o NVIDIA.

  2. Configure un entorno de Python.

    Se recomienda configurar un entorno de Python virtual. Existen muchas herramientas que puede usar para configurar un entorno de Python virtual; en este caso, usaremos la característica miniconda de Anaconda.

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    
    bash Miniconda3-latest-Linux-x86_64.sh
    
    conda create --name directml python=3.7 -y
    
    conda activate directml
    
  3. Instale el marco de aprendizaje automático respaldado por DirectML de su elección.

    TensorFlow-DirectML:

    pip install tensorflow-directml
    

    PyTorch-DirectML:

    sudo apt install libblas3 libomp5 liblapack3
    
    pip install pytorch-directml
    
  4. Ejecute una muestra de adición rápida en una sesión interactiva de Python para TensorFlow-DirectML o PyTorch-DirectML para asegurarse de que todo funciona.

Si tiene preguntas o tiene problemas, visite el repositorio de DirectML en GitHub.

Varias GPU

Si tiene varias GPU en la máquina, también puede acceder a ellas dentro de WSL. Sin embargo, solo podrá acceder de uno en uno. Para elegir una GPU específica, establezca la variable de entorno siguiente en el nombre de la GPU tal como aparece en el administrador de dispositivos:

export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"

Esto hará una coincidencia de cadena, por lo que si se establece en "NVIDIA" que coincidirá con la primera GPU que comienza con "NVIDIA".

Recursos adicionales