前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转 AIGC:打造本地大模型地基,PVE 配置显卡直通

玩转 AIGC:打造本地大模型地基,PVE 配置显卡直通

原创
作者头像
运维有术
发布2024-05-04 22:32:53
1850
发布2024-05-04 22:32:53
举报
文章被收录于专栏:运维有术运维有术

玩转 AIGC:打造本地大模型地基,PVE 配置显卡直通

2024 年云原生运维实战文档 99 篇原创计划 第 012 篇 |玩转 AIGC「2024」系列 第 002 篇

你好,欢迎来到运维有术

今天分享的内容是 玩转 AIGC「2024」 系列文档中的 打造本地大模型地基,PVE 配置显卡直通

本文将详细介绍如何在虚拟化平台 Proxmox Virtual Environment(PVE)配置显卡直通,将宿主机上的物理显卡直接分配给 AI 虚拟机使用。

1. 环境介绍

1.1 硬件环境

  • 服务器: 科脑 X99-D4、2*32G DDR4 内存、Intel E5-2683 v4
  • 显卡:NVIDIA P104-100
  • BIOS:开启 VT-x/VT-d 类似的虚拟化扩展

本文选择纯矿卡 NVIDIA P104-100 作为演示,配置方法同样适用于其他型号显卡。

1.2 软件环境

  • 虚拟化平台:Proxmox Virtual Environment 8.0.4
  • AI 虚拟机: ubuntu 22.04

本文选择 ubuntu 22.04 作为演示,配置方法同样适用于其他操作系统。

2. 配置 PVE 开启显卡直通

2.1 开启 IOMMU 功能

  • 配置 Grub 配置文件,vi /etc/default/grub
代码语言:bash
复制
# 修改 GRUB_CMDLINE_LINUX_DEFAULT 配置为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"

#注意:pve 7.2 以前版本使用
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off pcie_acs_override=downstream"

说明:

intel_iommu=on 开启IOMMU iommu=pt 让内核驱动设备性能更高,并且防止Linux将不能直通的设备直通 initcall_blacklist=sysfb_init 替代老版本中的 video=efifb:off,vesafb:off 参考文档 pcie_acs_override=downstream 用于将iommu groups拆分,方便一些板载设备的直通。参考文档

  • 更新 GRUB
代码语言:bash
复制
update-grub

# 正确的结果如下
root@pve9:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.2.16-8-pve
Found initrd image: /boot/initrd.img-6.2.16-8-pve
Found linux image: /boot/vmlinuz-6.2.16-3-pve
Found initrd image: /boot/initrd.img-6.2.16-3-pve
Found memtest86+x64 image: /boot/memtest86+x64.bin
done
  • 加载对应的内核模块
代码语言:bash
复制
echo vfio >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
# echo vfio_virqfd >> /etc/modules # pve8 不需要配置
  • 重启 PVE 系统
代码语言:bash
复制
reboot
  • 验证是否成功 启用IOMMU
代码语言:bash
复制
dmesg | grep -E "DMAR|IOMMU"

# 正确的关键结果如下
root@pve9:~# dmesg | grep -E "DMAR|IOMMU"
[    0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
[    0.142816] DMAR: IOMMU enabled
[    1.036519] DMAR: Intel(R) Virtualization Technology for Directed I/O
  • 验证 VFIO 模块
代码语言:bash
复制
dmesg | grep -i vfio

# 正确的结果如下
root@pve9:~# dmesg | grep -i vfio
[    3.759097] VFIO - User Level meta-driver version: 0.3
  • 验证是否支持 中断重映射
代码语言:bash
复制
dmesg | grep 'remapping'

# 正确的结果如下
# intel
[    0.175675] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.177198] DMAR-IR: Enabled IRQ remapping in x2apic mode

# 但是我的环境比较特殊,即使 BIOS 里开启了 X2APIC,也会报错,所以启用了 2.3 小节的 允许不安全的中断设置。不影响显卡的直通使用。
root@pve9:~# dmesg | grep 'remapping'
[    0.390774] DMAR-IR: Enabled IRQ remapping in xapic mode
[    0.390775] x2apic: IRQ remapping doesn't support X2APIC mode

2.2 开启显卡直通

  • 屏蔽默认驱动
代码语言:bash
复制
# 直通 NVIDIA 显卡,请使用下面命令
echo "# NVIDIA" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf
echo "" >> /etc/modprobe.d/blacklist.conf

# 直通 AMD 显卡,请使用下面命令
echo "# AMD" >> /etc/modprobe.d/blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf

# 本文服务器 NVIDIA 和 AMD 显卡各有一块,因此都执行

2.3 其他有用的配置

  • 允许不安全的中断
代码语言:bash
复制
## 其他参数配置
# 允许不安全的中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
  • 为 NVIDIA 卡添加稳定性修复和优化
代码语言:bash
复制
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf
# 忽略异常,防止虚拟机异常导致宿主机崩溃
#   ignore_msrs             :   忽略异常
#   report_ignored_msrs     :   是否报告异常

2.4 更新内核引导文件

  • 更新内核引导文件
代码语言:bash
复制
update-initramfs -k all -u

# 正确的执行结果如下
root@pve9:~# update-initramfs -k all -u
update-initramfs: Generating /boot/initrd.img-6.2.16-8-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
update-initramfs: Generating /boot/initrd.img-6.2.16-3-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
  • 重启系统
代码语言:bash
复制
reboot

3. 创建虚拟机验证测试

3.1 创建虚拟机并添加显卡

在 PVE 系统中创建 ubuntu 虚拟机,过程略。

添加 NVIDIA P104-100 显卡到虚拟机。

  • 选择要添加显卡的虚拟机
  • 「硬件」->「添加」,选择 PCI 设备
pve-passthrough-add
pve-passthrough-add
pve-passthrough-add-pci
pve-passthrough-add-pci
  • 选择对应的显卡设备,并勾选所有功能
pve-passthrough-add-pci-2
pve-passthrough-add-pci-2
pve-passthrough-add-pci-3
pve-passthrough-add-pci-3
  • 配置完成后,点击「添加」按钮,最后启动虚拟机。

3.2 虚拟机内部验证

虚拟机启动后需要安装显卡驱动,本文仅为了演示 PVE 开启显卡直通功能。至于如何在虚拟机里安装显卡驱动,后续会有专文介绍。

显卡驱动安装完成后,执行 NVIDIA 自带的管理命令,查看显卡信息。

代码语言:bash
复制
ubuntu@ubuntu:~$ nvidia-smi 
Sat May  4 09:42:36 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| 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 P104-100                On  |   00000000:00:10.0 Off |                  N/A |
| 72%   35C    P8              6W /  180W |       2MiB /   8192MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

以上,就是今天分享的内容,后续我会分享更多关于大模型、Ollama 的内容。请持续关注。

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

Get 本文实战视频(请注意,文档视频异步发行,请先关注)

如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!

欢迎加入 「知识星球|运维有术」 ,获取更多的 KubeSphere、Kubernetes、云原生运维、自动化运维、AI 大模型等实战技能。未来运维生涯始终有我坐在你的副驾

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 玩转 AIGC:打造本地大模型地基,PVE 配置显卡直通
    • 1. 环境介绍
      • 1.1 硬件环境
      • 1.2 软件环境
    • 2. 配置 PVE 开启显卡直通
      • 2.1 开启 IOMMU 功能
      • 2.2 开启显卡直通
      • 2.3 其他有用的配置
      • 2.4 更新内核引导文件
    • 3. 创建虚拟机验证测试
      • 3.1 创建虚拟机并添加显卡
      • 3.2 虚拟机内部验证
相关产品与服务
大模型知识引擎
大模型知识引擎(LLM Knowledge Engine),是面向企业客户及合作伙伴的,基于大语言模型的知识应用构建平台,结合企业专属数据,提供知识问答等应用范式,更快更高效地完成大模型应用的构建,推动大语言模型在企业服务场景的应用落地。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com