虚拟机里面的Ubuntu系统如何调用主机的显卡

本文探讨了在虚拟机环境下尝试使用CUDA进行深度学习实践所遇到的问题,即无法调用主机显卡。文中给出了解决方案——安装双系统,并介绍了几个主流深度学习框架在不同操作系统上的支持情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来准备在虚拟机里面的ubuntu 装一下CUDA,用来做一下深度学习练习的,

但是发现一直调用不了主机的显卡,懵逼……

在网上搜到的答案如下 :可以在在虚拟机上使用CUDA吗?

答案是目前不能在虚拟机里面调用主机的显卡

最终解决办法是装双系统:

教程点我 

现在主流的深度学习框架也支持windows系统了,可以直接用了

例如 1   pytorch 

 

2  安装 TensorFlow

 

我们在以下 64 位系统上测试过 TensorFlow 并且这些系统支持 TensorFlow:

  • Ubuntu 16.04 或更高版本
  • Windows 7 或更高版本
  • macOS 10.12.6 (Sierra) 或更高版本(不支持 GPU)
  • Raspbian 9.0 或更高版本

 

3 安装MXNet

 

 

 

<think>我们正在解决用户的问题:如何在KVM Ubuntu虚拟机中配置以识别和使用主机显卡(即GPU直通)。 根据引用内容,我们需要注意以下几点: 1. 环境准备:Ubuntu 20.04或22.04,删除宿主机上的显卡驱动(注意1),需要至少两张显卡(注意2),因为一张显卡无法同时给宿主机虚拟机使用。 2. 显卡上可能还有声卡、USB等功能,需要将所有相关设备都添加到虚拟机(注意3)。 3. 步骤包括:确认BIOS开启虚拟化(VT/d),安装必要的软件包(引用3),配置虚拟机时指定显卡直通。 具体步骤: 步骤1:确认硬件和BIOS支持 - 确保CPU支持虚拟化(Intel VT-x 或 AMD-V)和IOMMU(Intel VT-d 或 AMD-Vi)。 - 在BIOS中开启这些功能。 步骤2:宿主机系统准备 - 安装Ubuntu 20.04/22.04(建议新系统)。 - 删除宿主机上已安装显卡驱动(如果是NVIDIA显卡,使用`sudo apt-get purge nvidia*`)。 - 更新系统:`sudo apt update && sudo apt upgrade -y` 步骤3:启用IOMMU - 编辑`/etc/default/grub`文件: - Intel CPU:在`GRUB_CMDLINE_LINUX_DEFAULT`行添加`intel_iommu=on` - AMD CPU:添加`amd_iommu=on` - 更新grub:`sudo update-grub` - 重启系统:`sudo reboot` 步骤4:安装KVM和相关软件 ```bash sudo apt install qemu-kvm qemu-utils libvirt-daemon-system libvirt-clients bridge-utils ovmf ``` 步骤5:确认IOMMU分组 - 运行脚本检查IOMMU分组,确保显卡设备及其相关功能(如声卡)在同一个组(或可以独立分离): ```bash # 查看IOMMU分组 for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*} printf 'IOMMU Group %s ' "$n" lspci -nns "${d##*/}" done ``` - 记录下显卡及其相关设备的ID(例如:01:00.0和01:00.1)。 步骤6:将显卡从宿主机解绑 - 编辑`/etc/modprobe.d/vfio.conf`,添加以下内容(以NVIDIA显卡为例,设备ID通过lspci -n获取): ``` options vfio-pci ids=10de:13c2,10de:0fbb disable_vga=1 ``` 这里ids是显卡和声卡的设备ID(用逗号分隔),disable_vga=1表示禁用VGA兼容。 - 强制加载vfio-pci驱动,编辑`/etc/modules-load.d/vfio-pci.conf`: ``` vfio vfio_iommu_type1 vfio_pci vfio_virqfd ``` - 更新initramfs:`sudo update-initramfs -u` - 重启宿主机。 步骤7:配置虚拟机XML - 使用virt-manager图形界面或编辑虚拟机XML文件。 - 在虚拟机XML的`<devices>`部分添加显卡直通设备,例如: ```xml <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </source> </hostdev> <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/> </source> </hostdev> ``` 这里添加了显卡(function 0x0)和其声卡(function 0x1)。 步骤8:安装虚拟机操作系统 - 安装Ubuntu虚拟机安装完成后,在虚拟机安装对应的显卡驱动(如NVIDIA驱动)。 步骤9:验证 - 在虚拟机内运行`nvidia-smi`(对于NVIDIA显卡)或`lspci`查看是否识别显卡。 注意事项: - 如果使用NVIDIA显卡,可能需要处理虚拟机检测(Error 43)问题,在虚拟机XML的`<features>`部分添加: ```xml <hyperv> <vendor_id state='on' value='random'/> </hyperv> ``` 以及 ```xml <kvm> <hidden state='on'/> </kvm> ``` 引用说明: - 注意1、2、3来自引用[1]。 - 安装软件包步骤参考引用[3]。 - 禁用nouveau驱动(在宿主机上)是必要的,但引用[2]提到在虚拟机中也可能需要,不过我们这里是在宿主机上删除驱动,虚拟机安装官方驱动。 因此,按照上述步骤,用户可以在KVM Ubuntu虚拟机中配置显卡直通,使虚拟机识别并使用主机显卡。</think>要在 KVM Ubuntu 虚拟机中配置主机显卡直通(GPU Passthrough),使虚拟机能够直接识别和使用物理显卡,请按照以下专业步骤操作: ### 🛠️ 准备工作(关键) 1. **硬件要求**: - **双显卡配置**:宿主机必须配备至少两块显卡(如:集显+独显或两块独显),一块用于宿主机显示输出,另一块直通给虚拟机[^1] - **BIOS设置**:开启 CPU 虚拟化(Intel VT-x/AMD-V)和 IOMMU(Intel VT-d/AMD-Vi)功能[^3] - 确认显卡支持直通(NVIDIA Tesla/Quadro 系列支持较好) 2. **宿主机环境**: ```bash # 安装必要组件(Ubuntu 20.04/22.04) sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virt-manager ovmf ``` ### 🔧 配置步骤 #### 步骤 1:启用 IOMMU 编辑 GRUB 配置文件: ```bash sudo nano /etc/default/grub ``` - **Intel CPU** 添加: ```ini GRUB_CMDLINE_LINUX_DEFAULT="... intel_iommu=on iommu=pt" ``` - **AMD CPU** 添加: ```ini GRUB_CMDLINE_LINUX_DEFAULT="... amd_iommu=on iommu=pt" ``` 更新并重启: ```bash sudo update-grub && sudo reboot ``` #### 步骤 2:隔离显卡设备 1. 查找设备 ID: ```bash lspci -nn | grep -iE 'VGA|3D' ``` 输出示例: ``` 01:00.0 VGA [0300]: Matrox ... [1234:5678] 0b:00.0 3D [0300]: NVIDIA ... [10de:13c2] ``` 2. 屏蔽宿主机驱动: ```bash sudo nano /etc/modprobe.d/vfio.conf ``` 添加(替换为你的设备 ID): ```ini options vfio-pci ids=10de:13c2,1234:5678 blacklist nouveau blacklist nvidia ``` #### 步骤 3:配置虚拟机 XML 1. 使用 `virsh edit <vm-name>` 编辑虚拟机配置 2. 添加显卡直通设备(示例): ```xml <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x0b' slot='0x00' function='0x0'/> </source> </hostdev> ``` > 注意:`bus/slot/function` 值需匹配 `lspci` 输出 3. 添加 EFI 支持(解决 NVIDIA 43 错误): ```xml <features> <hyperv> <vendor_id state='on' value='random'/> </hyperv> <kvm> <hidden state='on'/> </kvm> </features> <os> <loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader> </os> ``` ### ⚙️ 虚拟机内操作 1. 安装显卡驱动: ```bash # 对于 NVIDIA 显卡 sudo apt install nvidia-driver-535 ``` 2. 验证识别: ```bash nvidia-smi # 应显示 Tesla K20m 信息 lspci | grep -i nvidia # 确认设备存在 ``` ### ⚠️ 常见问题解决 1. **黑屏问题**: - 宿主机彻底卸载显卡驱动:`sudo apt purge nvidia-*`[^1] - 在虚拟机 XML 中添加 `<video> <model type='none'/> </video>` 2. **Error 43 (NVIDIA)**: - 确保已添加 `<hidden state='on'/>` 和 `<vendor_id>` 配置 - 禁用内存气球:`<memballoon model='none'/>` 3. **设备功能不全**: ```bash # 直通所有相关功能(声卡/USB控制器) virsh nodedev-list --cap pci | grep 0b:00 # 查找关联设备 ``` 将关联设备全部添加到虚拟机 XML 配置[^1] ### 📊 验证成功标志 | 项目 | 预期输出 | |------|----------| | `nvidia-smi` | 显示正确的 GPU 型号和利用率 | | `glxinfo -B` | 显示直通显卡的 OpenGL 渲染器 | | CUDA 测试 | `cuda-samples/deviceQuery` 通过 | > 提示:首次配置建议使用 Ubuntu 22.04 + QEMU 6.2+ 组合,对直通支持更完善[^3]。直通成功后,虚拟机可获得接近原生 95% 的 GPU 性能。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值