Начало работы с ускорением GPU для машинного обучения в WSL

Машинное обучение (ML) становится ключевой частью многих рабочих процессов разработки. Независимо от того, являетесь ли вы специалистом по обработке и анализу данных, инженером машинного обучения или начинаете обучение с помощью машинного обучения, подсистема Windows для Linux (WSL) предлагает отличную среду для запуска наиболее распространенных и популярных средств машинного обучения с ускорением GPU.

Существует множество различных способов настройки этих средств. Например, NVIDIA CUDA в WSL, TensorFlow-DirectML и PyTorch-DirectML предлагают различные способы использования GPU для МАШИНного обучения с WSL. Дополнительные сведения о причинах выбора одного из них см. в статье Обучение машинного обучения с ускорением GPU.

В этом руководстве показано, как настроить:

  • NVIDIA CUDA, если у вас есть графическая карта NVIDIA и запущен пример контейнера платформы машинного обучения
  • TensorFlow-DirectML и PyTorch-DirectML на графической карте AMD, Intel или NVIDIA

Предварительные требования

Настройка NVIDIA CUDA с помощью Docker

  1. Скачивание и установка последней версии драйвера для GPU NVIDIA

  2. Установите Docker Desktop или подсистему Docker непосредственно в WSL, выполнив следующую команду.

    curl https://get.docker.com | sh
    
    sudo service docker start
    
  3. Если вы установили подсистему Docker напрямую, установите nvidia Container Toolkit , выполнив приведенные ниже действия.

    Настройте стабильный репозиторий для nvidia Container Toolkit, выполнив следующие команды:

    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
    

    Установите пакеты и зависимости среды выполнения NVIDIA, выполнив следующие команды:

    sudo apt-get update
    
    sudo apt-get install -y nvidia-docker2
    
  4. Запустите контейнер и пример платформы машинного обучения.

    Чтобы запустить контейнер платформы машинного обучения и начать использовать GPU с этим контейнером TensorFlow NVIDIA NGC, введите команду :

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

    TensorFlow с CUDA, запущенным в контейнере Docker

    Вы можете запустить предварительно обученный пример модели, встроенный в этот контейнер, выполнив следующие команды:

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

    Обучение примеров модели TensorFlow в контейнере Docker

Дополнительные способы настройки и использования NVIDIA CUDA см. в руководстве пользователя NVIDIA CUDA на WSL.

Настройка TensorFlow-DirectML или PyTorch-DirectML

  1. Скачайте и установите последнюю версию драйвера с веб-сайта поставщиков GPU: AMD, Intel или NVIDIA.

  2. Настройка среды Python.

    Рекомендуется настроить виртуальную среду Python. Существует множество средств, которые можно использовать для настройки виртуальной среды Python. Для выполнения этих инструкций мы будем использовать Miniconda 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. Установите платформу машинного обучения, поддерживаемую DirectML по вашему выбору.

    TensorFlow-DirectML:

    pip install tensorflow-directml
    

    PyTorch-DirectML:

    sudo apt install libblas3 libomp5 liblapack3
    
    pip install pytorch-directml
    
  4. Запустите пример быстрого добавления в интерактивном сеансе Python для TensorFlow-DirectML или PyTorch-DirectML , чтобы убедиться, что все работает.

Если у вас возникли вопросы или возникли проблемы, посетите репозиторий DirectML на GitHub.

Несколько GPU

Если на компьютере есть несколько GPU, вы также можете получить к ним доступ внутри WSL. Однако вы сможете получить доступ только к одному за раз. Чтобы выбрать конкретный GPU, задайте для переменной среды ниже имя GPU, которое отображается в диспетчере устройств:

export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"

Это приведет к соответсвоию строк, поэтому если задать для него значение NVIDIA, будет соответствовать первому GPU, который начинается с NVIDIA.

Дополнительные ресурсы