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
- Asegúrese de que está ejecutando Windows 11 o Windows 10, versión 21H2 o posterior.
- Instale WSL y configure un nombre de usuario y una contraseña para la distribución de Linux.
Configuración de NVIDIA CUDA con Docker
Descarga e instalación del controlador más reciente para la GPU de NVIDIA
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
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
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
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
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
Descargue e instale el controlador más reciente desde el sitio web de los proveedores de GPU: AMD, Intel o NVIDIA.
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
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
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
Windows Subsystem for Linux