AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-1781084

SpacemanSanchez's questions

Martin Hope
SpacemanSanchez
Asked: 2024-04-10 00:12:03 +0800 CST

Não é possível vincular/desvincular GPU da nvidia para vfio-pci corretamente sob demanda sem reinicialização (Ubuntu 22 QEMU KVM OVMF)

  • 4

Estou me deparando com um problema estranho. Tenho lutado para que a passagem da GPU funcione corretamente em uma VM do Windows 11 e finalmente encontrei algo que funciona, mas não é tão ideal quanto esperava. Essencialmente, se eu adicionar aos /etc/modprobe.d/vfio.confmeus IDs PCI options vfio-pci ids=10de:2684,10de:22ba VFIO vinculados na inicialização e posso usá-lo perfeitamente para passagem de GPU. Mas se eu tentar reconectar a GPU aos drivers da nvidia, não consigo usá-la com o pytorch (embora nvidia-smifuncione bem).

Se eu remover o arquivo vfio.conf e reiniciar, a GPU será vinculada à nvidia e o torch funcionará muito bem, mas quando tento desvincular da nvidia e vincular ao vfio-pci, quando inicio a VM recebo o código de erro 43 no driver da Nvidia e o seguinte erro nos logs da libvirt:

2024-04-09T15:38:49.796258Z qemu-system-x86_64: -device vfio-pci,host=0000:01:00.0,id=hostdev0,bus=pci.5,addr=0x0: Failed to mmap 0000:01:00.0 BAR 1. Performance may be slow
2024-04-09T15:39:07.971124Z qemu-system-x86_64: vfio_region_write(0000:01:00.0:region1+0x8c, 0x1,4) failed: Cannot allocate memory

É realmente estranho, porque de todas as minhas inspeções parece que a GPU está devidamente isolada, mas parece que não consigo passá-la para a GPU sem vincular explicitamente a vfio via /etc/modprobe.d/vfio.confe, quando faço isso, não consigo vinculá-la corretamente de volta à nvidia. Mais uma vez, tudo parece bem quando eu o ligo novamente à nvidia, mas o torch não consegue mais detectar a GPU. Alguma ideia?

Minha solução alternativa funciona bem por enquanto, mas requer reinicialização se eu quiser iniciar minha VM. O ideal é poder vincular/desvincular minha GPU nvidia sob demanda quando quiser alternar entre usá-la no host ou na VM do Windows 11. Exemplo de ligação ao script VFIO:

#!/bin/bash
set -x

# Stop display manager
systemctl stop display-manager

# Unbind VTconsoles: might not be needed
echo 0 > /sys/class/vtconsole/vtcon0/bind
echo 0 > /sys/class/vtconsole/vtcon1/bind

# Unload NVIDIA kernel modules
modprobe -r nvidia_drm 
modprobe -r nvidia_modeset
modprobe -r nvidia_uvm 
modprobe -r nvidia

# Detach GPU devices from host
# Use your GPU and HDMI Audio PCI host device
sudo virsh nodedev-detach pci_0000_01_00_0
sudo virsh nodedev-detach pci_0000_01_00_1

# Load vfio module
modprobe vfio-pci

Se eu correr

lspci -nnk -d 10de:2684
lspci -nnk -d 10de:22ba

Parece corretamente vinculado ao vfio-pci:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2684] (rev a1)
        Subsystem: Gigabyte Technology Co., Ltd Device [1458:40e5]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22ba] (rev a1)
        Subsystem: Gigabyte Technology Co., Ltd Device [1458:40e5]
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel

Se eu reiniciar com vfio.conf aplicado e inspecionar as coisas, parece o mesmo, mas estranhamente funciona ao iniciar minha VM do Windows 11:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2684] (rev a1)
        Subsystem: Gigabyte Technology Co., Ltd Device [1458:40e5]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22ba] (rev a1)
        Subsystem: Gigabyte Technology Co., Ltd Device [1458:40e5]
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel

Mas se eu desvincular do vfio e vincular à nvidia:

#!/bin/bash
set -x

# Attach GPU devices to host
# Use your GPU and HDMI Audio PCI host device
sudo virsh nodedev-reattach pci_0000_01_00_0
sudo virsh nodedev-reattach pci_0000_01_00_1

# Unload vfio module
modprobe -r vfio-pci

#stop race condition
sleep 2

# Load NVIDIA kernel modules
modprobe nvidia
modprobe nvidia_modeset
modprobe nvidia_uvm
modprobe nvidia_drm

# Bind VTconsoles: might not be needed
echo 1 > /sys/class/vtconsole/vtcon0/bind
echo 1 > /sys/class/vtconsole/vtcon1/bind

nvidia-smifunciona bem:

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4090        Off | 00000000:01:00.0 Off |                  Off |
|  0%   49C    P0              67W / 450W |      0MiB / 24564MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

Mas quando executo algo no Docker que usa pytorch:

RuntimeError: Torch is not able to use GPU

Pior ainda, quando tento religar ao vfio ele funciona como se eu não tivesse habilitado vfio.confe recebo o mesmo erro ao iniciar a VM do Windows 11:

2024-04-09T16:04:45.089687Z qemu-system-x86_64: -device vfio-pci,host=0000:01:00.0,id=hostdev0,bus=pci.5,addr=0x0: Failed to mmap 0000:01:00.0 BAR 1. Performance may be slow
2024-04-09T16:04:55.682373Z qemu-system-x86_64: vfio_region_write(0000:01:00.0:region1+0x8c, 0x1,4) failed: Cannot allocate memory

Parece bastante claro para mim que algo ainda está usando a nvidia de alguma forma, mesmo que esteja usando o driver do kernel vfio-pci e lsof /dev/nvidia0retorne uma string em branco. Alguma ideia? Estou ficando um pouco louco aqui!

virtualization
  • 1 respostas
  • 29 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve