Partilhar via


Introdução à aceleração de GPU para ML no WSL

O aprendizado de máquina (ML) está se tornando uma parte fundamental de muitos fluxos de trabalho de desenvolvimento. Quer seja um cientista de dados, engenheiro de ML ou esteja a iniciar a sua jornada de aprendizagem com ML, o Windows Subsystem for Linux (WSL) oferece um excelente ambiente para executar as ferramentas de ML aceleradas por GPU mais comuns e populares.

Há muitas maneiras diferentes de configurar essas ferramentas. Por exemplo, NVIDIA CUDA em WSL, TensorFlow-DirectML e PyTorch-DirectML oferecem diferentes maneiras de usar sua GPU para ML com WSL. Para saber mais sobre os motivos para escolher um versus outro, consulte Treinamento de ML acelerado por GPU.

Este guia mostrará como configurar:

  • NVIDIA CUDA se você tiver uma placa gráfica NVIDIA e executar um contêiner de estrutura de ML de exemplo
  • TensorFlow-DirectML e PyTorch-DirectML na placa gráfica AMD, Intel ou NVIDIA

Pré-requisitos

Configurar o NVIDIA CUDA com o Docker

  1. Baixe e instale o driver mais recente para sua GPU NVIDIA

  2. Instale o Docker Desktop ou instale o mecanismo Docker diretamente no WSL executando o seguinte comando:

    curl https://get.docker.com | sh
    sudo service docker start
    
  3. Se você instalou o mecanismo do Docker diretamente, instale o NVIDIA Container Toolkit seguindo as etapas abaixo.

    Configure o repositório estável para o NVIDIA Container Toolkit executando os seguintes 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 os pacotes de tempo de execução NVIDIA e as dependências ao executar os comandos:

    sudo apt-get update
    sudo apt-get install -y nvidia-docker2
    
  4. Execute um contêiner e um exemplo de estrutura de aprendizado de máquina.

    Para executar um contêiner de estrutura de aprendizado de máquina e começar a usar sua GPU com esse contêiner NVIDIA NGC TensorFlow, digite o comando:

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

    TensorFlow com CUDA em execução dentro de um contêiner do Docker

    Você pode executar um exemplo de modelo pré-treinado que é incorporado neste contêiner executando os comandos:

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

    Treinamento de modelo de amostra do TensorFlow no contêiner do Docker

Maneiras adicionais de configurar e utilizar o NVIDIA CUDA podem ser encontradas no Guia do Usuário do NVIDIA CUDA na WSL.

Configurar TensorFlow-DirectML ou PyTorch-DirectML

  1. Transfira e instale o controlador mais recente a partir do Web site dos fornecedores de GPU: AMD, Intel ou NVIDIA.

  2. Configure um ambiente Python.

    Recomendamos a configuração de um ambiente Python virtual. Há muitas ferramentas que você pode usar para configurar um ambiente Python virtual — para estas instruções, usaremos o Miniconda do 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 a estrutura de aprendizado de máquina apoiada pelo DirectML de sua escolha.

    TensorFlow-DirectML:

    pip install tensorflow-directml
    

    PyTorch-DirectML:

    sudo apt install libblas3 libomp5 liblapack3
    pip install torch-directml
    
  4. Execute um exemplo de adição rápida em uma sessão interativa do Python para TensorFlow-DirectML ou PyTorch-DirectML para garantir que tudo esteja funcionando.

Se você tiver dúvidas ou tiver problemas, visite o repositório DirectML no GitHub.

Várias GPUs

Se você tiver várias GPUs em sua máquina, também poderá acessá-las dentro do WSL. No entanto, só poderá aceder a um de cada vez. Para escolher uma GPU específica, defina a variável de ambiente abaixo para o nome da sua GPU tal como aparece no gestor de dispositivos:

export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"

Isso fará a correspondência de uma string, portanto, se for definido como "NVIDIA", irá corresponder à primeira GPU que começa com "NVIDIA".

Recursos adicionais