WSL2 и CUDA

Материал из wolfram
Перейти к навигации Перейти к поиску

WSL2 и CUDA

ОС - все подобные системы полностью развертываются на linux, ни какой речи о интерфейсах, собирай сам, запускай сам, конфигурируюй текстом. Русский? Не не слышал...

Но все же в 2020 мы живем. И знал я, что есть в Windows некий linux, именуется WSL. что он якобы работает нативно, как на железе. Дай опробую. И каково было моё удивление, оказывается нас обманули, linux то ограниченный. И не о каких аппаратных фишках и не слышно.

Что за аппаратные фишки? Ну это же AI - "искусственный интеллект", нейросеть. И исполняется это все на тензорных вычислительных блоках. Такие, как раз есть в видеокартах, а 20 серии так вообще, всем проели мозги. В общем CUDA. Конечно же можно выполнять все и на CPU. Точнее не всегда, не все AI лежащие на github могут на CPU.


В итоге, я задался вопросом а как же все таки быть с CUDA, и вычислениями силой видеокарты. Изучение интернета привело меня на сайт NVIDIA, как ни странно. Страницу рассказывающую как заставить работать CUDA и вообще аппаратное ускорение в WSL. Я начал не особо вчитываясь выполнять все что там описано, но четно. Оказалось в мануале написано, что работать такая тема будет только на версии Windows 20145, на тот момент версия Windows была 19ххх. Обновился на последний билд по инснайдерской программе. Так же нужен был драйвер Nvidia 455.41 и выше. Сделал. И снова облом. Следование инструкциям мануала nvidia не приводило ни к чему, что могло бы показать что аппаратные блоки задействованы. Прошло время и на Windows прилетело обновление. Животворящее обновление! После которого следовании инструкциям NVIDIA наконец дало результаты. Наконец то удалось сделать все. В конечном счете я понял, что Docker из магазина windows бесполезен, и лучше его нативно устанавливать в ОС WSL. Так и сделал, в таком докере заработали и образы требующие CUDA. Точнее тестовые образы с сайта NVIDIA, но не вышеперечисленные. Они все также работали на CPU, так как были собраны давно, и не о каких последних драйверах NVIDIA, не слышали.

Хорошо. Вступление, пора заканчивать.


Подготовка ОС

Последний билд 20145 или выше, обновления Windows 2004 на момент 20.05.20 (это dev билд, можно получить по инсайдерской программе)

NVIDIA драйвер 455.41 и выше.

Далее следуем инструкции CUDA on WSL User Guide, ну да, конечно же я все продублирую и поясню своими словами, чтобы понять самому и может быть когда нибудь...

Из мануала:

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

Используя технологии паравиртуализации WSL 2 и GPU, Microsoft позволяет разработчикам запускать приложения с ускорением на GPU в Windows.

В следующем документе описывается рабочий процесс для начала работы с приложениями или контейнерами CUDA в среде WSL 2.


Установка WSL 2

В этом разделе содержатся подробные сведения об установке WSL 2, включая настройку дистрибутива Linux на ваш выбор в Магазине Microsoft .

Запустите PowerShell с правами администратора и выполните следующую команду.

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

Скачивание пакета обновления ядра Linux, как ни странно на данный момент нет нормального места где взять установщик. Прямая ссылка на него есть на данной странице.

Так же ссылка на этот файл с моего облака, на всякий случай.

Устанавливаем как обычную программу.

Запустите PowerShell с правами администратора и выполните следующую команду. Включаем компонент "Virtual Machine Platform" (Платформа виртуальных машин).

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Перезапустите компьютер, чтобы завершить установку и обновление WSL до WSL 2.

Выполните следующую команду в PowerShell, чтобы задать WSL 2 в качестве версии по умолчанию при установке нового дистрибутива Linux:

wsl --set-default-version 2

Убедитесь, что у вас установлено последнее ядро:

wsl cat /proc/version

Должно показать не ниже 4.19.121, если ниже то включаем обновление "для других продуктов Макрососфт" в настройках обновлений. Проверяем обновления, если есть дожидаемся окончания установки.

Теперь загружаем контейнерную ОС из магазина Windows. Просто пишем в нём: Ubuntu. Я выбрал 18.04. Загружаем.

Ссылка на запуск появляется в меню Пуск, первый запуск запросит имя пользователя и пароль. У меня это vova:01082008.

Проверим что она работает как нужно и узнаем версию:

uname -r

ответ должен быть подобным этому:

4.19.121-microsoft-standard

Готово WSL2 установлен. И теперь все контейнеры будут выполняться по умолчанию в новой версии.


Настройка CUDA Toolkit

Сначала настройте сетевой репозиторий CUDA.

sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list'
sudo apt-get update
sudo apt-get upgrade

Теперь установите CUDA. Устанавливаем именно 11.0, только данная версия работает с WSL2

sudo apt-get install -y cuda-toolkit-11-0

Запуск приложений CUDA (Тест)

Просто запустите ваше приложение CUDA, как если бы вы запускали его под Linux! После установки драйвера больше не нужно ничего делать для запуска существующих приложений CUDA, созданных на Linux.

Ниже приведен фрагмент запуска приложения BlackScholes.

cd /usr/local/cuda/samples/4_Finance/BlackScholes

Казалось бы что могло пойти не так, но я не мог выполнить следующую команду. Как оказалось нужно было выполнить make! Вот тут как бы весь линукс! От куда мне было знать о том что нужно собирать этот BlackScholes? Да неоткуда. Просто видимо приснится должно было...

sudo make

После чего уже можно запустить тест:

./BlackScholes

И должны увидеть:

Initializing data...
...allocating CPU memory for options.
...allocating GPU memory for options.
...generating input data in CPU mem.
...copying input data to GPU mem.
Data init done.

Executing Black-Scholes GPU kernel (131072 iterations)...
Options count             : 8000000
BlackScholesGPU() time    : 1.314299 msec
Effective memory bandwidth: 60.868973 GB/s
Gigaoptions per second    : 6.086897

...

С установкой NVIDIA закончили. Пора приступать к AI.