Introdução à aceleração de GPU para ML no WSL
O machine learning (ML) está se tornando uma parte fundamental de muitos fluxos de trabalho de desenvolvimento. Seja você um cientista de dados, engenheiro de ML ou está iniciando sua jornada 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, o NVIDIA CUDA no WSL, o TensorFlow-DirectML e o PyTorch-DirectML oferecem diferentes maneiras de usar sua GPU para ML com WSL. Para saber mais sobre os motivos para escolher um ou outro, consulte Treinamento de ML acelerado por GPU.
Esse guia mostrará como configurar:
- NVIDIA CUDA se você tiver uma cartão de elementos gráficos NVIDIA e executar um contêiner de estrutura de ML de exemplo
- TensorFlow-DirectML e PyTorch-DirectML nos elementos gráficos AMD, Intel ou NVIDIA cartão
Pré-requisitos
- Verifique se você está executando Windows 11 ou Windows 10, versão 21H2 ou superior.
- Instale o WSL e configure um nome de usuário e senha para sua distribuição do Linux.
Como configurar o NVIDIA CUDA com o Docker
Instale o Docker Desktop ou instale o mecanismo do Docker diretamente no WSL executando o comando a seguir
curl https://get.docker.com | sh
sudo service docker start
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 NVIDIA e as dependências executando os comandos:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
Execute um contêiner e um exemplo de estrutura de machine learning.
Para executar um contêiner de estrutura de machine learning e começar a usar sua GPU com esse 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
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
Outras maneiras de configurar e utilizar o NVIDIA CUDA podem ser encontradas no NVIDIA CUDA no Guia do Usuário do WSL.
Como configurar TensorFlow-DirectML ou PyTorch-DirectML
Baixe e instale o driver mais recente do seu site de fornecedores de GPU: AMD, Intel ou NVIDIA.
Configure um ambiente do Python.
É recomendável configurar um ambiente virtual do Python. Várias ferramentas podem ser usadas para configurar um ambiente virtual Python. 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
Instale a estrutura de machine learning com o apoio do DirectML de sua escolha.
TensorFlow-DirectML:
pip install tensorflow-directml
PyTorch-DirectML:
sudo apt install libblas3 libomp5 liblapack3
pip install pytorch-directml
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 do 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
Windows Subsystem for Linux