Проброс GPU в Proxmox: неделя танцев с бубном ради Stable Diffusion
Проброс GPU в виртуальную машину — это моя эпопея на целую неделю. Я хотел, чтобы виртуальная машина с Windows видела видеокарту NVIDIA для машинного обучения. Думал, что достаточно подключить видеокарту и всё заработает. Ага, не тут-то было. Эта неделя танцев с бубном многому меня научила, и сейчас я расскажу, как всё прошло.
С чего всё началось
У меня на сервере стояла виртуальная машина, на которой я хотел гонять нейросети. Для этого нужна видеокарта, а не слабый процессор. В сервере была встроенная графика Intel и дискретная видеокарта NVIDIA. Идеальный сценарий: встроенную оставить хосту, а дискретную пробросить в виртуальную машину.
Я наивно полагал, что процесс займёт полчаса. На деле я потратил неделю, читая вики Proxmox, пробуя разные настройки и собирая систему заново. В итоге всё заработало, но путь был тернистым.
Первый шаг: включение IOMMU
Без включённого IOMMU проброс видеокарты не работает вообще. IOMMU — это технология, которая позволяет виртуальным машинам обращаться к физическим устройствам напрямую. Сначала я не знал об этом и долго не мог понять, почему видеокарта не пробрасывается.
IOMMU включается в двух местах: в BIOS и в ядре Linux. В BIOS я нашёл настройку виртуализации и включил её. В ядре нужно добавить параметр загрузки. Без обоих шагов ничего не заработает. Когда я это сделал, стало ясно, куда двигаться дальше.
Отдельная видеокарта — обязательное условие
Пробросить в виртуальную машину видеокарту, которую использует сам хост, не получится. Нужна отдельная карта, не занятая хостовой системой. У меня было удобно: встроенная Intel для хоста и дискретная NVIDIA для виртуальной машины. Это идеальная комбинация для проброса.
Если у вас только одна видеокарта, придётся решать, кто получит доступ к железу: хост или виртуальная машина. Переключать их туда-сюда неудобно. Поэтому лучше иметь две карты. Мой опыт показал, что это сильно упрощает жизнь.
Настройка конфигурации виртуальной машины
Дальше нужно было отредактировать конфигурацию виртуальной машины. Я добавил PCI-устройство, указав идентификатор видеокарты. В Proxmox это делается в настройках виртуальной машины, в разделе оборудования. Добавил PCI-устройство с нужным ID и сохранил.
После этого запустил виртуальную машину. На этапе загрузки видеокарта уже была видна. Осталось установить драйверы в гостевой системе. Для Windows я поставил драйверы NVIDIA, и видеокарта заработала на полную мощность.
Стабильность и драйверы
С драйверами тоже были приключения. Сначала видеокарта отображалась, но работала с ошибками. Пришлось переустановить драйверы и перезагрузить виртуальную машину. После нескольких попыток всё стабилизировалось. Главное — ставить свежие драйверы под конкретную систему.
Я заметил, что после проброса видеокарты хост перестал видеть её в системе. Это нормально: видеокарта передана виртуальной машине. Если нужно вернуть её хосту, достаточно убрать PCI-устройство из конфигурации виртуальной машины и перезагрузить хост.
Результат: Stable Diffusion работает
Я пробросил NVIDIA GTX 1060 в виртуальную машину с Linux и запустил Stable Diffusion. Скорость генерации изображений оказалась такой же, как на нативной системе. Это был момент, ради которого стоило мучиться неделю. Нейросети работали на полную мощность.
Когда я увидел, что генерация идёт с нормальной скоростью, я почувствовал настоящее облегчение. Все труды окупились. Проброс GPU дал мне возможность использовать видеокарту из виртуальной машины, не выделяя отдельную машину под эти задачи.
Какие ошибки я видел по пути
Самая частая ошибка при пробросе — видеокарта определяется, но виртуальная машина не стартует. У меня такое было, когда я неправильно указал идентификатор PCI-устройства. Пришлось вернуться в настройки и перепроверить номер устройства в системе. Мелочь, а из-за неё не загружалась машина.
Вторая частая ошибка — код 43 в Windows. Это значит, что система не может инициализировать видеокарту. Чаще всего помогает правильная настройка скрытия гипервизора или обновление драйверов. Я с этим столкнулся, но обошёл, подобрав нужные параметры.
Скрытие следов гипервизора
Некоторые программы, особенно игры и некоторые версии драйверов, отказываются работать в виртуальной машине. Для этого в Proxmox есть настройки, которые скрывают следы гипервизора. Я включил их, чтобы драйверы NVIDIA работали корректно.
Эти настройки делают виртуальную машину похожей на физический компьютер. После включения драйверы перестали капризничать. Если вы сталкиваетесь с проблемами драйверов, обратите внимание на скрытие гипервизора — это частая причина и решение.
Проброс GPU в контейнер
Помимо виртуальной машины, я пробовал пробрасывать видеокарту и в контейнер LXC. Это оказалось проще и легче по ресурсам. Контейнеру нужно только передать устройство в настройках. Для задач с нейросетями, где не требуется своё ядро, контейнер — отличный вариант.
В итоге для Stable Diffusion я использовал контейнер, а виртуальную машину оставил для других экспериментов. Гибкость Proxmox позволяет выбрать подходящий вариант. Контейнер экономит ресурсы, а виртуальная машина даёт больше изоляции.
Совет новичкам
Мой главный совет — читайте вики Proxmox по PCI Passthrough. Там всё расписано, но читать нужно внимательно. Я пропустил несколько важных деталей, из-за чего и потратил неделю. Если бы я сразу вник в документацию, уложился бы в пару часов.
Также не бойтесь экспериментировать. Проброс GPU — сложная тема, но решаемая. Действуйте по шагам, проверяйте каждый этап и не отчаивайтесь при ошибках. В конце вас ждёт рабочая видеокарта в виртуальной машине, а это того стоит.
Подготовка системы к пробросу
Прежде чем начать проброс, я рекомендую сделать резервную копию конфигурации и обновить систему. Некоторые проблемы у меня возникали из-за старой версии Proxmox. Обновления закрывают ошибки и добавляют поддержку новых устройств. Свежая система — залог успешного проброса.
Также я советую проверить, что в BIOS включены все нужные технологии виртуализации. Не только IOMMU, но и поддержка аппаратной виртуализации процессора. Если эти настройки выключены, никакие конфигурации не помогут. Начало с BIOS экономит время.
Тестирование на простых устройствах
Если у вас не получается пробросить видеокарту, попробуйте сначала пробросить что-нибудь проще. Например, USB-контроллер или сетевую карту. Так вы проверите, что проброс вообще работает в вашей системе, и освоите процесс. Когда база отлажена, видеокарта пробрасывается легче.
Я именно так и сделал: сначала попробовал пробросить сетевую карту, убедился, что всё работает, и только потом взялся за GPU. Постепенный подход помог мне не путаться и быстро найти ошибки. Не прыгайте сразу в сложное — идите по шагам.
Мои впечатления от результата
Когда я наконец увидел работающую генерацию изображений на видеокарте в виртуальной машине, эмоции были непередаваемые. Неделя разбирательств, ошибок и перезагрузок — и всё это ради одного экрана с результатом. Это был настоящий урок терпения и упорства.
Теперь проброс GPU у меня работает стабильно, и я пользуюсь им регулярно. Если бы мне снова пришлось это делать, я бы потратил на порядок меньше времени, потому что уже знаю все подводные камни. Опыт действительно бесценен.
Ресурсы, которые помогают
В разбирательствах мне помогали форумы и сообщества Proxmox. Там люди делятся конфигурациями и решениями типовых проблем. Я нашёл несколько готовых примеров, которые подстроил под своё железо. Если вы застряли, поищите на форумах — скорее всего, кто-то уже решал вашу проблему.
Ещё полезны официальные статьи и документация. В них подробно описаны требования и шаги. Главное — читать внимательно и не пропускать примечания. Я перечитал документацию несколько раз, и каждый раз находил что-то новое, что упускал раньше.
Планы на будущее
В будущем я хочу попробовать пробросить более мощную видеокарту и использовать её для обучения моделей. Сейчас GTX 1060 справляется с генерацией, но для серьёзных задач хочется больше мощности. Проброс GPU открыл мне путь к более серьёзным экспериментам.
Также я планирую сделать проброс GPU ещё удобнее, настроив автоматическое переключение между хостовой и гостевой видеокартами. Пока это выглядит сложно, но с опытом я разберусь. Главное, что база уже есть и работает.
Чек-лист перед пробросом
Для тех, кто будет повторять мой путь, я собрал чек-лист. Проверьте, что в BIOS включён IOMMU и поддержка виртуализации. Убедитесь, что видеокарта, которую вы пробрасываете, не используется хостовой системой. Обновите Proxmox и прочитайте документацию по PCI Passthrough. Сделайте резервную копию конфигурации.
Этот чек-лист сэкономит вам дни. Я прошёл весь путь без него и потратил неделю. С ним вы уложитесь в пару вечеров. Учитесь на моих ошибках, а не на своих.
Почему стоит пробовать
Несмотря на сложность, проброс GPU стоит того. Вы получаете полную мощность видеокарты в виртуальной машине. Это открывает возможности для машинного обучения, рендеринга и других тяжёлых задач прямо на вашем сервере. Не нужно покупать отдельную машину.
Когда я сравниваю время, потраченное на настройку, и пользу, которую получаю сейчас, выбор очевиден. Неделя разбирательств окупилась годами удобной работы. Если вам нужна видеокарта в виртуальной машине — дерзайте, это реально.
Терпение — главный инструмент
Если из всего этого опыта я вынес одну главную мысль, то это важность терпения. Проброс GPU — не та задача, которая решается с первого раза. Ошибки, перезагрузки и чтение документации — это нормальный путь. Главное не сдаваться и идти по шагам.
Когда я рассказываю про свою неделю разбирательств, многие удивляются. Но именно эта неделя дала мне понимание, как всё устроено. Теперь любые проблемы с пробросом я решаю быстро. Упорство окупается знаниями.
Последний совет
Начните с изучения документации и чек-листа, который я составил выше. Затем действуйте по шагам и проверяйте каждый этап. Если что-то не работает — не ищите лёгких путей, а разбирайтесь в причине. Именно разбор причин дал мне опыт.
В итоге вы получите рабочую видеокарту в виртуальной машине и удовольствие от сделанного. Поверьте, это того стоит. Удачи вам в пробросе GPU — и пусть ваша неделя танцев будет короче моей.
Итог
Проброс GPU в Proxmox — это трудоёмкий, но выполнимый процесс. Включите IOMMU, убедитесь, что видеокарта отдельная, настройте PCI-устройство и установите драйверы. У меня всё заработало, и теперь я использую видеокарту для нейросетей прямо из виртуальной машины.
Для AI-генерации на CPU я в итоге завернул ComfyUI в Docker — там отдельная история. Если хочешь увидеть, как собирался весь мой Proxmox-зоопарк — вот сводный гайд. Там и про GPU проброс, и про LXC, и про бэкапы, и про NPM. Пробуйте, экспериментируйте и делитесь опытом — так мы все учимся быстрее. Надеюсь, моя неделя танцев с бубном сэкономит вам хотя бы вечер разбирательств.