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

Configurazione di NVIDIA CUDA con Docker

  1. Scaricare e installare il driver più recente per la GPU NVIDIA

  2. 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
    
  3. 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
    
  4. 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
    

    TensorFlow with CUDA running inside a Docker container

    È 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
    

    TensorFlow sample model training within Docker container

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

  1. Scaricare e installare il driver più recente dal sito Web dei fornitori di GPU: AMD, Intelo NVIDIA.

  2. 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
    
  3. 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
    
  4. 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