Compartilhar via


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

O ML (machine learning) está se tornando uma parte fundamental de muitos fluxos de trabalho de desenvolvimento. Seja você um cientista de dados, engenheiro de ML ou iniciando seu percurso de aprendizagem com o ML, o Subsistema do Windows para Linux (WSL) oferece um ótimo ambiente para executar as ferramentas de ML aceleradas por GPU mais comuns e populares.

Há várias maneiras diferentes de configurar essas ferramentas. Por exemplo, NVIDIA CUDA no WSL, TensorFlow-DirectML e PyTorch-DirectML oferecem maneiras diferentes de usar sua GPU para ML com WSL. Para saber mais sobre os motivos para escolher um contra outro, consulte o treinamento de ML acelerado da GPU.

Este guia mostrará como configurar:

  • NVIDIA CUDA se você tiver uma placa gráfica NVIDIA e executar um contêiner de framework de aprendizado de máquina 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 do 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 Kit de Ferramentas de Contêiner NVIDIA seguindo as etapas abaixo.

    Configure o repositório estável para o Kit de Ferramentas de Contêiner NVIDIA 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 runtime e as dependências do NVIDIA executando os comandos:

    sudo apt-get update
    sudo apt-get install -y nvidia-docker2
    
  4. Execute um contêiner de framework de machine learning e uma amostra.

    Para executar um contêiner da estrutura de machine learning e começar a usar sua GPU com este contêiner NVIDIA NGC TensorFlow, insira 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 é integrado a esse contêiner executando os comandos:

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

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

Outras maneiras de obter a instalação e utilizar o NVIDIA CUDA podem ser encontradas no NVIDIA CUDA no Guia do Usuário do WSL.

Configurar TensorFlow-DirectML ou PyTorch-DirectML

  1. Baixe e instale o driver mais recente do seu site de fornecedores de GPU: AMD, Intel ou NVIDIA.

  2. Configurar um ambiente do Python.

    É recomendável configurar um ambiente virtual do Python. Há muitas ferramentas que você pode usar para configurar um ambiente virtual do Python. Para essas instruções, usaremos o Miniconda da 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 machine learning 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 seu computador, também poderá acessá-las dentro do WSL. No entanto, você só poderá acessar um de cada vez. Para escolher uma GPU específica, defina a variável de ambiente abaixo como o nome da GPU como ela aparece no gerenciador de dispositivos:

export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"

Isso fará uma correspondência de cadeia de caracteres, portanto, se você defini-la como "NVIDIA", ela corresponderá à primeira GPU que começa com "NVIDIA".

Recursos adicionais