Виртуальная машина на cuda
CUDA / OpenCL в виртуальной машине / гипервизоре
кто-нибудь знает о любых решениях виртуализации, которые либо разрешают доступ CUDA/OpenCL напрямую, либо реализуют абстракцию CUDA/OpenCL.
UPDATE: спасибо тем, кто прокомментировал. Хотя классическая виртуализация «рабочего стола» была бы хорошей, я подозреваю, что такие, как Xen, были бы ближе к цели.
5 ответов
NVIDIA объявила о виртуализации GPU на новых картах Kepler этим летом в GTC.
Они не только объявили об этом, они продемонстрировали это вживую
вы можете использовать Xen VGA passthrough, чтобы иметь полный доступ и контроль над вашей графической картой внутри виртуальной машины. Вы можете найти более подробную информацию об этом здесь:http://vfio.blogspot.com/ (Посмотрите на VFIO GPU, как серии частей 1-5).
Я сделал это несколько раз, это не очень легко настроить, но это дает очень хорошие результаты (почти родной). Вот видео эксперемента я сделал двойной сквозной VGA с помощью Xen: http://www.youtube.com/watch?v=Gtmwnx-k2qg
Я не тестировал OpenCL или CUDA, но я уверен, что это сработает.
VirtualBox имеет PCI-passthrough, который позволяет использовать CUDA или OpenCL внутри виртуальной машины.
отказ от ответственности: vGPU является одним из проектов, над которыми я работал.
Если вы хотите получить доступ к GPU через API CUDA или OpenCL, я предлагаю вам взглянуть наhttp://www.zillians.com/vgpu
при простой реализации SR-IOV на GPU не будет работать не только из-за отсутствия поддержки в аппаратном обеспечении, но и возможности использования виртуализированных ресурсов GPU под гипервизором. Простой вопрос: сколько графических процессоров вы можете поместить в свое шасси? и поделитесь ими для каждого экземпляра VM, что значительно снизит производительность и будет иметь огромные требования к пропускной способности на коммутаторе PCI-E. имеет ли это смысл?
вот почему Amazon EC2 предоставляет только выделенные экземпляры GPU, а также причина, по которой мы решили реализовать VGPU, чтобы сделать GPU общим и масштабируемым вычислительным блоком.
Виртуальная машина графического процессора (GPU) в концентраторе Azure Stack
Область применения: интегрированные системы Azure Stack Hub
В этой статье описывается, какие модели графического процессора поддерживаются в интегрированной системе центра Azure Stack. Кроме того, вы можете найти инструкции по установке драйверов, используемых с графическими процессорами. Поддержка GPU в концентраторе Azure Stack позволяет выполнять такие решения, как искусственный интеллект, обучение, вывод и визуализация данных. AMD Radeon порывом MI25 можно использовать для поддержки ресурсоемких графических приложений, таких как Autodesk AutoCAD.
Можно выбрать одну из трех моделей GPU. Они доступны в видеоадаптерах NVIDIA V100, NVIDIA T4 и AMD MI25 GPU. Эти физические GPU выводятся в соответствии со следующими типами виртуальных машин Azure серии N следующим образом:
В этом выпуске не поддерживаются виртуальные машины GPU. Необходимо выполнить обновление до Azure Stack центра 2005 или более поздней версии. Кроме того, оборудование центра Azure Stack должно иметь физические GPU.
Виртуальные машины серии NCv3 созданы на базе GPU Tesla V100 от NVIDIA. Клиенты могут воспользоваться этими обновленными GPU для традиционных рабочих нагрузок HPC. Вы сможете реализовать такие сценарии, как пластовое моделирование, секвенирование ДНК, анализ белков, моделирование методом Монте-Карло и другие.
Размер | vCPU | Память: ГиБ | Временное хранилище (SSD): ГиБ | Графический процессор | Память GPU: ГиБ | Максимальное число дисков данных | Максимальное число сетевых адаптеров |
---|---|---|---|---|---|---|---|
Standard_NC6s_v3 | 6 | 112 | 736 | 1 | 16 | 12 | 4 |
Standard_NC12s_v3 | 12 | 224 | 1474 | 2 | 32 | 24 | 8 |
Standard_NC24s_v3 | 24 | 448 | 2948 | 4 | 64 | 32 | 8 |
Виртуальные машины серии NVv4 работают на базе процессоров AMD Radeon ПОРЫВОМ MI25 GPU. С помощью центра Azure Stack серии NVv4 представляет виртуальные машины с частичными GPU. Этот размер можно использовать для графических приложений с ускорением GPU и виртуальных рабочих столов. Виртуальные машины NVv4 в настоящее время поддерживают только гостевую ОС Windows.
Размер | vCPU | Память: ГиБ | Временное хранилище (SSD): ГиБ | Графический процессор | Память GPU: ГиБ | Максимальное число дисков данных | Максимальное число сетевых адаптеров |
---|---|---|---|---|---|---|---|
Standard_NV4as_v4 | 4 | 14 | 88 | 1/8 | 2 | 4 | 2 |
Standard_NV8as_v4 | 8 | 28 | 176 | 1/4 | 4 | 8 | 4 |
Standard_NV16as_v4 | 16 | 56 | 352 | 1/2 | 8 | 16 | 8 |
Standard_NV32as_v4 | 32 | 112 | 704 | 1 | 16 | 32 | 8 |
NCasT4_v3
Размер | vCPU | Память: ГиБ | Графический процессор | Память GPU: ГиБ | Максимальное число дисков данных | Максимальное число сетевых адаптеров |
---|---|---|---|---|---|---|
Standard_NC4as_T4_v3 | 4 | 28 | 1 | 16 | 8 | 4 |
Standard_NC8as_T4_v3 | 8 | 56 | 1 | 16 | 16 | 8 |
Standard_NC16as_T4_v3 | 16 | 110 | 1 | 16 | 32 | 8 |
Standard_NC64as_T4_v3 | 64 | 440 | 4 | 64 | 32 | 8 |
Рекомендации по системе GPU
Планирование ресурсов
Добавление GPU в существующий центр Azure Stack
Исправление и обновление, режим FRU виртуальных машин
Виртуальные машины GPU будут проходить простой во время таких операций, как исправление и обновление (ПНУ) и замена оборудования (FRU) центра Azure Stack. В следующей таблице рассматривается состояние виртуальной машины в ходе этих действий, а также ручное действие, которое позволяет сделать эти виртуальные машины доступными после выполнения операции.
Установка гостевого драйвера
Для установки драйверов можно использовать следующие командлеты PowerShell:
В зависимости от операционной системы введите и подключение виртуальной машины GPU Azure Stack Hub, необходимо изменить с помощью параметров ниже.
AMD MI25 — подключено
Приведенную выше команду можно использовать с соответствующим типом драйвера для AMD. в статье устанавливаются драйверы amd GPU на виртуальных машинах серии N, где выполняется Windows содержатся инструкции по установке драйвера для AMD Radeon порывом MI25 на виртуальной машине с включенной NVv4 GPU-P, а также инструкции по проверке установки драйверов.
AMD MI25 — отключено
Так как расширение извлекает драйвер из расположения в Интернете, виртуальная машина, отключенная от внешней сети, не может получить к ней доступ. Вы можете скачать драйвер по ссылке ниже и отправить ее в учетную запись хранения в локальной сети, доступной для виртуальной машины.
NVIDIA
Драйверы NVIDIA должны быть установлены внутри виртуальной машины для рабочих нагрузок CUDA или GRID с помощью GPU.
Вариант использования: сетка графики или визуализации
Этот сценарий требует использования драйверов сетки. Драйверы сетки можно скачать с помощью центра приложений NVIDIA, если у вас есть необходимые лицензии. Для драйверов сетки также требуется сервер лицензирования сетки с соответствующими лицензиями на СЕТКу, прежде чем использовать драйверы сетки на виртуальной машине.
Вариант использования: «COMPUTE/CUDA-Connected»
Драйверам CUDA не требуется сервер лицензий, и изменения параметров не требуются.
Вариант использования: «COMPUTE» или «CUDA-disconnected»
Windows:
Linux:
Вам потребуется сослаться на некоторые URL-адреса для параметров.
CUDA и удалённый GPU
CUDA всем хороша, пока под рукой есть видеокарта от Nvidia. Но что делать, когда на любимом ноутбуке нет Nvidia видеокарты? Или нужно вести разработку в виртуальной машине?
Я постараюсь рассмотреть в этой статье такое решение, как фреймворк rCUDA (Remote CUDA), который поможет, когда Nvidia видеокарта есть, но установлена не в той машине, на которой предполагается запуск CUDA приложений. Тем, кому это интересно, добро пожаловать под кат.
rCUDA (Remote CUDA) — фреймворк, реализующий CUDA API, позволяющий использовать удалённую видеокарту. Находится в работоспособной бета-версии, доступен только под Linux. Основная цель rCUDA — полная совместимость с CUDA API, вам не нужно никак модифицировать свой код, достаточно задать специальные переменные среды.
Что такое rCUDA
rCUDA (Remote CUDA) — фреймворк, реализующий CUDA API, позволяющий использовать для CUDA вычислений видеокарту, расположенную на удалённой машине, не внося никаких изменений в ваш код. Разработан в политехническом университете Валенсии (rcuda-team).
Ограничения
На данный момент поддерживаются только GNU/Linux системы, однако разработчики обещают поддержку Windows в будущем. Текущая версия rCUDA, 18.03beta, совместима с CUDA 5-8, то есть CUDA 9 не поддерживается. Разработчиками заявлена полная совместимость с CUDA API, за исключением графики.
Возможные сценарии использования
Краткая инструкция
Тестовая конфигурация
Тестирование проводилось на следующей конфигурации:
Сервер:
Ubuntu 16.04, GeForce GTX 660
Клиент:
Виртуальная машина с Ubuntu 16.04 на ноутбуке без дискретной видеокарты.
Получение rCUDA
Cамый сложный этап. К сожалению, на данный момент единственный способ получить свой экземпляр этого фреймворка — заполнить соответствующую форму запроса на официальном сайте. Впрочем, разработчики обещают отвечать в течение 1-2 дней. В моём случае мне прислали дистрибутив в тот же день.
Установка CUDA
Важно! На клиенте следует отказаться от установки nvidia драйвера. По умолчанию CUDA Toolkit будет доступен по адресу /usr/local/cuda/. Установите CUDA Samples, они понадобятся.
Установка rCUDA
Распакуем полученный от разработчиков архив в нашу домашнюю директорию на сервере и на клиенте.
Проделать эти действия нужно как на сервере, так и на клиенте.
Запуск демона rCUDA на сервере
Настройка клиента
Откроем на клиенте терминал, в котором в дальнейшем будем запускать CUDA код. На стороне клиента нам необходимо «подменить» стандартные библиотеки CUDA на библиотеки rCUDA, для чего добавим соответствующие пути в переменную среды LD_LIBRARY_PATH. Также нам необходимо указать количество серверов и их адреса (в моём примере он будет один).
Сборка и запуск
Попробуем собрать и запустить несколько примеров.
Пример 1
Начнём с простого, с deviceQuery — примера, который просто выведет нам параметры CUDA совместимого устройства, то есть в нашем случае удалённого GTX660.
Важно! Без EXTRA_NVCCFLAGS=—cudart=shared чуда не получится
Замените на путь, который вы указали для CUDA Samples при установке CUDA.
Запустим собранный пример:
Если вы всё сделали правильно, результат будет примерно таким:
Самое главное, что мы должны увидеть:
Device0 = GeForce GTX 660
Result = PASS
Отлично! Нам удалось собрать и запустить CUDA приложение на машине без дискретной видеокарты, использовав для этого видеокарту, установленную на удалённом сервере.
Важно! Если вывод приложения начинается со строк вида:
значит необходимо добавить на сервере и на клиенте в файл «/etc/security/limits.conf» следующие строки:
Таким образом, вы разрешите всем пользователям (*) неограниченное (unlimited) блокирование памяти (memlock). Еще лучше будет заменить * на нужного пользователя, а вместо unlimited подобрать менее жирные права.
Пример 2
Теперь попробуем что-то поинтереснее. Протестируем реализацию скалярного произведения векторов с использованием разделяемой памяти и синхронизации («Технология CUDA в примерах» Сандерс Дж. Кэндрот Э. 5.3.1).
В данном примере мы рассчитаем скалярное произведение двух векторов размерностью 33 * 1024, сравнивая ответ с результатом, полученным на CPU.
Такой результат говорит нам, что всё у нас хорошо:
Пример 3
Запустим еще один стандартный тест CUDA- matrixMulCUBLAS (перемножение матриц).
[Matrix Multiply CUBLAS] — Starting…
GPU Device 0: «GeForce GTX 660» with compute capability 3.0
MatrixA(640,480), MatrixB(480,320), MatrixC(640,320)
Computing result using CUBLAS. done.
Performance= 436.24 GFlop/s, Time= 0.451 msec, Size= 196608000 Ops
Computing result using host CPU. done.
Comparing CUBLAS Matrix Multiply with CPU results: PASS
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
Performance= 436.24 GFlop/s,
Comparing CUBLAS Matrix Multiply with CPU results: PASS
Безопасность
Я не нашёл в документации к rCUDA упоминания о каком-либо способе авторизации. Думаю, на данный момент самое простое, что можно сделать, это открыть доступ к нужному порту (8308) только с определённого адреса.
При помощи iptables это будет выглядеть так:
В остальном оставляю вопрос безопасности за рамками данного поста.
Use host CUDA from VirtualBox?
Problem
I would like to use my host dGPU to train some neural networks using its CUDA cores via my Ubuntu 16.04 guest in Oracle VM VirtualBox version 5.2.22. Would it be possible to do this?
Host setup:
Guest setup:
Note: A previous question asked about using the windows 7 host’s Nvidia GPU inside VirtualBox for gaming. This question is about a different setup, and purpose and is too old to be useful today. Another question asks about using a graphics card in VirtualBox but this is also an old question.
3 Answers 3
Upon much digging this is currently possible but only with limited configurations, specific host OSes, and the use of enterprise software.
Windows Server 2016 and above but with Hyper-V
Ubuntu 18.04 and above with Virtualbox
Windows 10 Pro but with VMware Workstation Pro 15 or VMware ESXi
This seems possible under Linux and there are detailed instructions for doing that.
Your CPU supports the required VT-d capability, and hopefully your (unspecified) motherboard as well. You also have two graphical adapters, so can afford to give up one to the VM (remembering that your other GPU is rather limited).
There are various articles on the subject which you will need to test, as I don’t have the environment for it. The VM’s chipset seems to need to be ICH9, although not mentioned in the tutorials. You might need to use the virtual manager that is named in each article.
Here are the references :
PCI passthrough via OVMF
A pretty recent article from January 2019. The Open Virtual Machine Firmware (OVMF) is a project to enable UEFI support for virtual machines.
Use NVidia GPU from VirtualBox?
An older post on our site from December 2015, but might be useful.
Проброс видеокарты NVIDIA GTX в виртуальную машину с Ubuntu для ESXi
Данная статья написана нашим читателем Lord_Alfred и выложена к нам чуть измененной копией с его блога.
Немного предыстории: я, Lord_Alfred, очень далек от администрирования серверов и работы с “железом”. Привык использовать готовые решения и стараюсь применять принцип: “работает — не трогай, не работает — погугли и попытайся исправить”. Но недавно я увлекся темой Deep Learning и почувствовал острую необходимость в покупке мощной видеокарты, которая смогла бы избавить мой домашний сервер с двумя Xeon X5660 от постоянной нагрузки на ЦП. В итоге у меня появилась “MSI GeForce GTX 1080 Ti GAMING X TRIO 11 GB OC Enthusiast” (к сожалению, с большим трудом и затратами из-за любителей криптовалют…). Естественно, захотелось сразу сделать всё “хорошо” и “правильно” (читай: поставить Ubuntu и не пытаться завести *nix’овые библиотеки на винде). Но в нашей жизни, к сожалению, не всё так гладко как хотелось бы: из-за того, что множество моих наработок по другим сферам уже были написаны под Windows, то никакого желания их переписывать у меня не было. Соответственно, начались поиски и думы о том, чтоб использовать какой-нибудь гипервизор, где будет возможность пробросить видеокарту в одну из ОС (ubuntu) и не потерять нажитое непосильным трудом (windows). Мой выбор пал на VMware vSphere ESXi, поэтому предупрежу сразу — опыта по его администрированию у меня нет, поэтому не принимайте близко к сердцу, если в статье я где-то ошибусь в терминологии или дам неправильное описание (надеюсь, что создатели vmind поправят совсем уж грубые ошибки).
Вся эта статья целиком и полностью описывает мой многострадальческий опыт в попытках (в итоге, к счастью, успешный) пробросить видеокарту в убунту и установить там драйверы nvidia и cuda toolkit. Я потратил несколько дней и несчетное количество переустановок ubuntu, пока набросал для себя некоторый “план” по установке с описанием и ссылками откуда была взята информация. Специально для тех, кто решит сделать тоже самое (или просто захочет поставить драйвера для gtx на убунте) — я переписал всё в читаемый вид и опубликовал эту статью, чтобы вы смогли потратить не 3 дня на это, а всего лишь несколько часов. Для удобства — ссылки на источники отмечены квадратными скобками, поэтому если у вас что-то пойдет “не так”, то вы сможете посмотреть откуда я взял ту или иную команду.
Предварительная настройка vSphere ESXi 6.5
Установка Ubuntu Desktop 16.04 и настройка проброса видеокарты
Установка CUDA Toolkit 9.1 (вместе с драйвером nVidia) на Ubuntu 16.04
Конечно, частично этот раздел должен включать в себя и некоторые действия из предыдущего, но для упрощения и уменьшения количества шагов — все написано так, как написано 🙂
/.bashrc
# echo «export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64:$LD_LIBRARY_PATH» >>
Проверка корректности установки драйвера и CUDA Toolkit
После перезагрузки и входа в пользователя необходимо проверить корректность установки драйверов и тулкита, т.к. если где-то что-то пошло не так и вы этого не заметили (или это каким-либо образом не отобразилось) — всё насмарку.
Открываем терминал и выполняем следующие шаги [15]:
Если в результате всё прошло без ошибок — можно считать, что всё успешно установлено и вам далее можно пользоваться этой виртуальной машиной с видеокартой как душе угодно 🙂 Но есть пару тонких моментов, которые я решил выделить в несколько отдельных разделов.
Изменение разрешения экрана в Ubuntu для ESXi 6.5
Естественно, работать через VMRC с разрешением (screen resolution) 800х600 крайне некомфортно, а в настройке экранов в убунту (Параметры системы → Настройка экранов → Разрешение) максимальное возможное значение всего 1360×768, что тоже по нынешним меркам очень мало.
Для того, чтобы поставить другое разрешение в гостевой ОС Ubuntu для хоста VMware vSphere ESXi 6.5 нужно проделать следующие действия:
После включения виртуальной машины в настройках экрана можно будет выбрать разрешение больше, чем до этого было возможно. Данный способ подойдет и просто для OS Ubuntu, которая установлена виртуальной машиной в ESXi — не обязательно пробрасывать видеокарту (хотя вся инструкция же об этом).
Для моего iMac 27 дюймов с разрешением в macOS в 4K — комфортнее всего ставить в убунту разрешение экрана равное 1600х1200 (4:3) для сеанса работы через VMRC.
PS: если использовать подключение через VNC — это тоже важно, там тоже будет то разрешение, которое установлено в ОС (а не автоматическое изменение в момент входа как это работает в RDP в Windows — и это очень грустно, что нет аналогичной функции или я просто о ней не знаю).
Вывод изображения с GPU на монитор из Ubuntu для хоста ESXi 6.5
Рядом с моим сервером стоит старенький монитор с VGA каналом, но ради интереса мне захотелось проверить как GTX будет работать непосредственно при выводе изображения на монитор. В видеокарте GTX 1080Ti нет VGA-разъема, поэтому пришлось покупать ЦАП HDMI→VGA (я тестировал на этом: https://www.citilink.ru/catalog/computers_and_notebooks/cables/907388/ ).
К слову, я не уверен, но скорее всего для запуска бенчмарков для проверки FPS и просто замера мощности карты — скорее всего нужно тоже делать хак, описанный в этом разделе, т.к., например, ранее в Windows Server 2012R2 (когда она стояла просто на сервере, без ESXi) после подключения видеокарты и установки на неё драйверов — FurMark и ещё какой-то бенчмарк отказались работать, сказав, что «не могут найти устройство» (подключение к винде было через RDP). Не знаю что они имели ввиду: видеокарту или монитор — скорее всего второе, т.к. другой софт вроде GPU-Z отлично видел видеокарту и показывал по ней все параметры.
Возвращаясь опять к вопросу вывода экрана с GPU на монитор в убунте [18] — нужно произвести некоторые шаги:
Но! Здесь, в конце, следует предостеречь вас от одной досадной оплошности. При использовании вывода изображения через видео-карту на монитор — VMRC и простая консоль в ESXi не будут работать — то есть теперь там не будет изображения с гостевой ОС (будет просто черный экран).
К тому же, взаимодействие с ОС будет происходить через мышь и клавиатуру, через которые вы работаете в VMRC, поэтому скорее всего предварительно — нужно позаботиться о том, чтоб прокинуть во внутрь Ubuntu клавиатуру и мышь, которые подключены непосредственно к серверу с ESXi.
Выводы
Установить драйвера nvidia для видеокарты под Ubuntu, да и ещё если она является виртуалкой — не тривиальная задача. К счастью, большинство вопросов уже были на стековерфлоу и форуме разработчиков nvidia, поэтому гугл спас всю затею. Конечно, если бы я в итоге отказался от использования гипервизора (и просто поставил бы хостом Ubuntu, а из неё бы гостем грузил Windows), то попал бы в такую же западню, но чуть проще. Не знаю почему большинство моментов не учтено в самом инсталляторе, т.к. даже если просто ставить драйвера прямиком из GUI убунты, то можно словить “login loop” (когда падают Иксы и не дают залогиниться в систему — у меня было такое в одну из первых попыток).
Большинство вещей описано в “nVidia CUDA Installation Guide for Linux” [4], но кто в наше время читает 50 страничные мануалы перед установкой? 🙂 Но даже если его прочитать “от корки до корки”, то некоторые моменты вызовут сомнения и захочется попробовать установить тулкит без удаления свежего ядра и установки старого.
Источники
Проброс видеокарты NVIDIA GTX в виртуальную машину с Ubuntu для ESXi: 3 комментария
Третью неделю бьюсь с этим мануалом ( все версии софта соответствуют инструкции. Карта Gt1030, ESXI 6.5, Ubuntu 16.4 )
Всегда одно и то же — в логе инстала nvidia лезет такая гадость
( хотя CUDA при инстале ошибок не выкидывает — все ОК )
340.252028] nvidia: loading out-of-tree module taints kernel.
[ 340.252037] nvidia: module license ‘NVIDIA’ taints kernel.
[ 340.252038] Disabling lock debugging due to kernel taint
[ 340.263258] nvidia: module verification failed: signature and/or required key missing — tainting kernel
……
[ 340.283001] [drm] [nvidia-drm] [GPU ID 0x00000b00] Loading driver
[ 340.284999] [drm] [nvidia-drm] [GPU ID 0x00000b00] Unloading driver
[ 340.305204] nvidia-modeset: Unloading
[ 340.316871] nvidia-uvm: Unloaded the UVM driver in 8 mode
[ 340.328584] nvidia-nvlink: Unregistered the Nvlink Core, major device number 247
-> Installing both new and classic TLS OpenGL libraries.
…..
и естественно nvidia-smi ябедничеает что дивайс не найден.