Отказ от ответственности

ГП-ускорение для WSL-контейнеров в настоящее время поддерживается только в Windows Dev Preview build 20150 или выше (на момент написания). Для запуска графических приложений внутри WSL2 существуют еще более строгие требования: вам потребуется Windows build 22000 или выше. выше.

Вы можете получить последнюю версию Dev Preview, зарегистрировавшись в Программе предварительной оценки Windows и выбрав Канал разработки в качестве рабочего канала. Также можно получить необходимый ISO (возможно даже более свежий билд) отсюда.

Что такое ВСЛ?

Подсистема Windows для Linux, или сокращенно WSL, позволяет разработчикам запускать среду GNU/Linux, включая большинство инструментов, утилит и приложений командной строки, непосредственно в Windows, без изменений, без накладных расходов на традиционную виртуальную машину или настройку двойной загрузки. .

Ты сможешь:

  • Выберите свои любимые дистрибутивы GNU/Linux из Microsoft Store.
  • Запускайте сценарии оболочки Bash и приложения командной строки GNU/Linux, включая:
  • Инструменты: vim, emacs, tmux
  • Языки: NodeJS, JavaScript, Python, Ruby, C/C++, C# & F#, Rust, Go и др.
  • Сервисы: SSHD, MySQL, Apache, MongoDB, PostgreSQL.
  • Установите дополнительное программное обеспечение, используя собственный менеджер пакетов дистрибутива GNU/Linux.
  • Вызов приложений Windows с помощью оболочки командной строки, подобной Unix.
  • Запуск приложений GNU/Linux в Windows.

Чем отличается WSL 2?

WSL 2 — это новая версия архитектуры подсистемы Windows для Linux, которая позволяет подсистеме Windows для Linux запускать двоичные файлы ELF64 Linux в Windows. Его основные цели — повысить производительность файловой системы, а также добавить полную совместимость системных вызовов.

Эта новая архитектура изменяет то, как эти двоичные файлы Linux взаимодействуют с Windows и оборудованием вашего компьютера, но по-прежнему обеспечивает тот же пользовательский интерфейс, что и в WSL 1 (текущая широкодоступная версия).

Отдельные дистрибутивы Linux могут работать с архитектурой WSL 1 или WSL 2. Каждый дистрибутив можно обновить или понизить в любое время, и вы можете одновременно запускать дистрибутивы WSL 1 и WSL 2. WSL 2 использует совершенно новую архитектуру, в которой используется настоящее ядро ​​Linux.

Как установить WSL и настроить WSL2

* Для установки WSL требуется Windows 10/11 версии 2004 или новее (сборка 19041 или новее). Проверьте, какая у вас версия, нажав WIN+R и запустив winver. Вы должны увидеть что-то вроде этого:

Откройте приглашение PowerShell от имени администратора и введите следующие команды:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Перезагрузите систему, чтобы включить WSL, и загрузите обновление ядра WSL. Запустите программу обновления от имени администратора и просто нажимайте Далее, пока программа установки не завершится.

Если появляется сообщение об ошибке, говорящее о том, что сначала необходимо включить WSL, возможно, вы пропустили часть, в которой перезагружали компьютер. Если это не помогает, найдите «Компоненты Windows» в настройках Windows и вручную установите флажок «Подсистема Windows для Linux».

Перезагрузитесь снова, если вам пришлось выполнить эти действия, и запустите средство обновления ядра после входа в систему.

Вы должны увидеть это, если установка прошла успешно:

Вы только что включили WSL!

Изменение версии WSL на 2

Установка по умолчанию по-прежнему предназначена для исходного WSL, но нам нужен WSL2, поскольку он обеспечивает гораздо лучшую производительность. Эта статья показывает разницу в производительности между WSL, WSL2 и Ubuntu 20.04 LTS. Чтобы установить версию WSL на 2, снова откройте PowerShell от имени администратора и вставьте эту команду:

wsl --set-default-version 2

Настройка системных ресурсов WSL2

По умолчанию WSL имеет доступ ко всем доступным ядрам и потокам в вашей системе, а также к половине доступного объема системной памяти. Например, ноутбук с 4 ядрами/8 потоками и 16 ГБ памяти предоставит WSL с 8 потоками и 8 ГБ памяти. Вы можете изменить эти значения на любые значения, которые вы предпочитаете, создав файл «.wslconfig». Этот файл необходимо поместить в корневой каталог вашего пользователя Windows следующим образом: C:\Users\<yourUserName>\.wslconfig. Вот как может выглядеть возможный файл .wslconfig:

[wsl2]
memory=4GB # Limits memory in WSL2 to 4 GB
processors=3 # Makes WSL2 use up to 3 threads

Полный список возможных конфигураций можно найти на https://docs.microsoft.com/en-us/windows/wsl/wsl-config.

Установите Ubuntu из магазина Microsoft.

Откройте Microsoft Store и найдите Ubuntu. Вы должны выбрать последнюю версию LTS для установки.

Другие версии также поддерживаются Docker, но если вы хотите включить ускорение графического процессора, выберите Ubuntu 20.04 LTS. Ubuntu 18.04 LTS и Debian были протестированы, но не смогли использовать графический процессор для рендеринга приложений, а вместо этого использовали программный рендеринг.

После завершения установки вы сможете запустить приложение, которое запросит у вас имя пользователя и пароль UNIX. Вы можете выбрать их по своему усмотрению, они не влияют на ваш вход в Windows. Не забудьте запомнить свой пароль.

Если вы можете запустить Ubuntu и получить этот экран, вы можете приступить к установке Docker.

Конфигурация рабочего стола Docker

Скачайте и установите Docker Desktop. После установки перезагрузите компьютер и запустите Docker. Настройте параметры следующим образом: (Вы можете выбрать запуск и открытие при входе в систему, если хотите, это приведет к потреблению системных ресурсов, даже если Docker или WSL не используются активно):

Ускорение графического процессора внутри WSL2

Прежде чем начать этот раздел, откройте командную строку PowerShell от имени администратора и проверьте наличие обновлений ядра wsl с помощью команды wsl --update. Если вы хотите получать обновления ядра автоматически, включите "Получать обновления для других продуктов Microsoft" в дополнительных настройках обновлений Windows. Либо перезагрузите компьютер, либо перезапустите WSL с помощью команды wsl --shutdown, чтобы продолжить.

Установка драйвера

Благодаря технологии WSL 2 и паравиртуализации графического процессора Microsoft позволяет разработчикам запускать приложения с ускорением графического процессора в Windows. Чтобы предоставить WSL2 виртуальный графический процессор, вам необходимо установить драйверы от вашего поставщика оборудования графического процессора. Эти драйверы позволяют графическому процессору Windows работать с WSL2.

AMD

Загрузите и установите предварительную версию драйвера AMD с их веб-сайта. Этот предварительный драйвер поддерживает следующее оборудование:

  • Серия AMD Radeon™ RX и графика Radeon™ VII.
  • Графика AMD Radeon™ серии Pro.
  • Процессоры AMD Ryzen™ и Ryzen™ PRO с графикой Radeon™ Vega.
  • Мобильные процессоры AMD Ryzen™ и Ryzen™ PRO с графикой Radeon™ Vega.

Полный список совместимых продуктов AMD см. в примечаниях к выпуску AMD.

Интел

Загрузите и установите предварительный драйвер Intel для использования с DirectML с их веб-сайта. У меня нет доступа к графическому процессору Intel, поэтому этот шаг лично мной не проверялся.

NVIDIA

Ускорение NVIDIA GPU будет доступно при официальной поддержке Pascal (серия 1000) и более поздних версий. Тем не менее, Turing (серия 2000) или более новые архитектуры рекомендуются для повышения производительности.

Загрузите драйвер NVIDIA из раздела загрузок на странице CUDA on WSL. Выберите подходящий драйвер в зависимости от типа графического процессора NVIDIA в вашей системе.

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

Это единственный драйвер, который необходимо установить. Никаких дополнительных драйверов для WSL2 не требуется. Не устанавливайте драйвер дисплея Linux в WSL.

Чтобы включить vGPU для Ubuntu 20.04, откройте приложение Ubuntu или запустите профиль Ubuntu 20.04 в Терминале Windows. Введите следующие команды:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda-repo-ubuntu2004-11-4-local_11.4.0-470.42.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-4-local_11.4.0-470.42.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-4-local/7fa2af80.pub
sudo apt-get update
sudo apt-get install -y cuda-toolkit-11-4

Теперь все, что вам нужно сделать, это перезагрузить систему, и все готово!

Тестирование проброса GPU для графических приложений

До сих пор мне удавалось заставить GPU работать только в Ubuntu 20.04 с использованием WSL2. В Ubuntu 18.04 и Debian графические приложения выполняют рендеринг, но они не используют графический процессор для рендеринга содержимого приложения. Разница в производительности достаточно заметна в приложениях, использующих 3D-рендеринг.

2D-рендеринг: Gedit

Gedit — это простая программа для работы с текстом, очень похожая на блокнот в Windows. Просто запустите sudo apt install -y gedit и запустите gedit, чтобы запустить приложение.

Gedit запускается в текущем каталоге, что означает, что при сохранении файла он фактически сохраняется в каталоге пользователя в Windows! Я думаю, это опрятно :)

3D-рендеринг: Беседка

Gazebo предлагает возможность точно и эффективно моделировать популяции роботов в сложных внутренних и наружных условиях. Это приложение доступно только для Linux и использует трехмерную среду для имитации роботов и их окружения, так что это отличный тест на производительность.

Gazebo работает с максимальной частотой кадров 62,5 кадра в секунду. В Ubuntu 20.04 мы достигаем этой «максимальной производительности», используя только 10% мощности графического процессора и 4% мощности процессора. Вот где Ubuntu 18.04 отстает. Чтобы достичь той же производительности по сравнению с Ubuntu 20.04, загрузка ЦП увеличилась до 72 %, а загрузка графического процессора снизилась до 6 %. Это явный признак того, что рендерит сцену не GPU, а CPU.

Передача графического процессора в контейнеры Pytorch/Tensorflow WSL2 Docker

Docker Desktop предоставляет пользователям возможность запускать и запускать контейнер на основе загруженных образов. При этом возможности создания нового контейнера весьма ограничены.

При условии, что вы настроили Docker, как я показал, вы можете передать свой графический процессор в любой контейнер, используя параметр --gpus all или --gpus 0, если у вас есть 2 графических процессора и вы хотите передать только первый (начиная с нуля, поэтому 0, 1, ... ). Поскольку запуск контейнеров в Docker Desktop не позволяет использовать этот параметр, контейнер не будет иметь доступа к графическому процессору.

Чтобы использовать свой графический процессор внутри контейнера Docker, вам необходимо запустить контейнер либо из приложения Ubuntu, либо с помощью вышеупомянутого терминала Windows. Команда docker run --rm --it --gpus all --name fastai fastdotai/fastai:2.2.5 bash запускает новый интерактивный контейнер Fast.AI с именем fastai, предоставляет доступ ко всем доступным графическим процессорам и удаляет контейнер после выхода.

Как видите, у контейнера теперь есть доступ к графическому процессору вашей системы! Вы можете попробовать этот флаг --gpus all, чтобы создать контейнер из любого изображения (например, tensorflow/tensorflow:latest-gpu-jupyter).

Первоначально опубликовано на http://github.com.