Introduzione all'accelerazione GPU per ML in WSL
Il Machine Learning (ML) sta diventando una parte fondamentale di molti flussi di lavoro di sviluppo. Se si è scienziati dei dati, ingegneri di ML, oppure si sta iniziando un percorso di apprendimento con ML, il sottosistema Windows per Linux (WSL) offre un ottimo ambiente per eseguire gli strumenti di ML con accelerazione GPU più comuni e popolari.
Esistono molti modi diversi per configurare questi strumenti. Ad esempio, NVIDIA CUDA in WSL, TensorFlow-DirectML e PyTorch-DirectML offrono modi diversi per usare la GPU per ML con WSL. Per altre informazioni sui motivi della scelta di una soluzione rispetto all'altra, vedere Training di ML accelerato tramite GPU.
Questa guida illustra le modalità di configurazione di tali strumenti:
- NVIDIA CUDA se si dispone di una scheda grafica NVIDIA e si esegue un contenitore del framework ML di esempio
- TensorFlow-DirectML e PyTorch-DirectML nella scheda grafica AMD, Intel o NVIDIA
Prerequisiti
- Assicurarsi di eseguire Windows 11 o Windows 10 versione 21H2 o versioni successive.
- Installare WSL e configurare un nome utente e una password per la distribuzione Linux.
Configurazione di NVIDIA CUDA con Docker
Scaricare e installare il driver più recente per la GPU NVIDIA
Installare Docker Desktop o installare il motore Docker direttamente in WSL eseguendo il comando seguente
curl https://get.docker.com | sh
sudo service docker start
Se il motore Docker è stato installato direttamente, installare NVIDIA Container Toolkit seguendo la procedura seguente.
Configurare il repository stabile per NVIDIA Container Toolkit eseguendo i comandi seguenti:
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
Installare i pacchetti di runtime NVIDIA e le dipendenze eseguendo i comandi:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
Eseguire un contenitore e un esempio del framework di Machine Learning.
Per eseguire un contenitore del framework di Machine Learning e iniziare a usare la GPU con questo contenitore NVIDIA NGC TensorFlow, immettere il comando:
docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3
È possibile eseguire un esempio di modello con training preliminare integrato in questo contenitore eseguendo i comandi seguenti:
cd nvidia-examples/cnn/
python resnet.py --batch_size=64
Altri modi per configurare e usare NVIDIA CUDA sono disponibili nella Guida per l'utente di NVIDIA CUDA in WSL.
Configurazione di TensorFlow-DirectML o PyTorch-DirectML
Scaricare e installare il driver più recente dal sito Web dei fornitori di GPU: AMD, Intelo NVIDIA.
Configurare un ambiente Python.
È consigliabile configurare un ambiente Python virtuale. Sono disponibili molti strumenti che è possibile usare per configurare un ambiente Python virtuale. Per queste istruzioni si userà Miniconda di 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
Installare il framework di Machine Learning supportato da DirectML preferito.
TensorFlow-DirectML:
pip install tensorflow-directml
PyTorch-DirectML:
sudo apt install libblas3 libomp5 liblapack3
pip install pytorch-directml
Eseguire un esempio di aggiunta rapida in una sessione Python interattiva per TensorFlow-DirectML o PyTorch-DirectML per verificare che tutto funzioni.
In caso di domande o problemi, visitare il repository DirectML su GitHub.
GPU multiple
Se nel computer sono presenti GPU multiple, è anche possibile accedervi all'interno di WSL. Tuttavia, sarà possibile accedere solo a una alla volta. Per scegliere una GPU specifica, impostare la variabile d'ambiente seguente con il nome della GPU così come appare in Gestione dispositivi:
export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"
In questo modo viene eseguita una corrispondenza di stringhe, per cui se si imposta "NVIDIA", verrà eseguita una corrispondenza con la prima GPU che inizia con "NVIDIA".
Risorse aggiuntive
Windows Subsystem for Linux