矿卡P104-100在PVE 8.0.4上部署Ollama全流程:从显卡直通到模型推理实战

矿卡的高性价比让它成为许多技术爱好者搭建本地AI环境的首选硬件。NVIDIA P104-100作为一款没有显示输出接口的纯计算卡,在二手市场的价格往往只有同性能游戏显卡的1/3。本文将手把手带你完成从PVE环境配置、显卡直通到Ubuntu虚拟机内驱动安装的全过程,最终实现Ollama大模型的流畅运行。

1. 硬件准备与PVE基础配置

1.1 矿卡特性与兼容性验证

P104-100基于GP104核心,与GTX 1080同代架构,但去掉了显示输出模块。购买时需注意:

  • 核心版本 :GP104-200-A1(可通过GPU-Z验证)
  • 显存容量 :8GB GDDR5X(大模型运行的关键)
  • 散热改造 :多数矿卡采用暴力扇,建议更换为 Arctic Accelero散热器

在PVE宿主机上执行以下命令验证设备识别:

lspci -nn | grep -i nvidia

正常应输出类似:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [10de:1b84] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GP104 High Definition Audio Controller [10de:10f0] (rev a1)

1.2 BIOS关键设置

进入服务器BIOS进行以下调整:

  • 虚拟化支持 :启用VT-x/d(Intel)或SVM(AMD)
  • Above 4G Decoding :必须开启
  • CSM支持 :建议关闭
  • PCIe速度 :设置为Gen3(矿卡通常不支持Gen4)

1.3 PVE 8.0.4系统优化

更新源并安装必要工具:

apt update && apt install -y pve-headers-$(uname -r) build-essential dkms

禁用nouveau驱动:

echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf

2. PVE显卡直通详细配置

2.1 IOMMU组分析与隔离

首先检查IOMMU分组情况:

#!/bin/bash
for d in /sys/kernel/iommu_groups/*/devices/*; do
    n=${d#*/iommu_groups/*}; n=${n%%/*}
    printf 'IOMMU Group %s ' "$n"
    lspci -nns "${d##*/}"
done

若显卡与其他设备同组,需在GRUB配置中添加ACS补丁:

# /etc/default/grub修改项
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"

更新配置后重启:

update-grub && reboot

2.2 VFIO驱动绑定

获取显卡的PCI ID:

lspci -n -s 01:00

输出示例:

01:00.0 0300: 10de:1b84 (rev a1)
01:00.1 0403: 10de:10f0 (rev a1)

将ID添加到VFIO配置:

echo "options vfio-pci ids=10de:1b84,10de:10f0" > /etc/modprobe.d/vfio.conf
echo "softdep nvidia pre: vfio-pci" >> /etc/modprobe.d/vfio.conf

2.3 虚拟机XML配置技巧

创建Ubuntu 22.04虚拟机后,手动编辑配置文件:

<hostpci0>
  <rombar>0</rombar>
  <pcie>1</pcie>
  <x-vga>1</x-vga>
  <rom file='/usr/share/kvm/patched.rom'/>
</hostpci0>

注意:矿卡通常需要刷入修改版BIOS才能正常直通,可从TechPowerUp获取兼容版本

3. Ubuntu虚拟机内驱动安装

3.1 无输出接口显卡的特殊处理

由于P104-100没有显示输出,需通过SSH安装驱动。首先修改GRUB配置:

sudo nano /etc/default/grub

修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

更新后安装驱动:

sudo apt update && sudo apt install -y gcc make
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run
sudo bash NVIDIA-Linux-x86_64-550.54.14.run --no-opengl-files --no-x-check

3.2 CUDA Toolkit与性能调优

安装CUDA 12.4:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

功率限制调整(防止矿卡因长期高负载故障):

sudo nvidia-smi -pl 150

4. Ollama部署与模型运行

4.1 Ollama环境配置

官方一键安装:

curl -fsSL https://ollama.com/install.sh | sh

为矿卡添加环境变量:

echo 'export OLLAMA_GPU_METAL_DISABLE=1' >> ~/.bashrc
echo 'export OLLAMA_GPU_CUDA_DISABLE=0' >> ~/.bashrc
source ~/.bashrc

4.2 模型运行实战

拉取并运行Llama3 8B模型:

ollama pull llama3:8b
ollama run llama3:8b

性能监控命令:

watch -n 1 nvidia-smi

4.3 常见问题解决方案

问题1 :PCIe BAR 3报错

# 在PVE虚拟机配置中添加:
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=proxmox'

问题2 :VRAM不足 修改Ollama配置:

# /etc/ollama/config.json
{
  "num_gpu_layers": 20,
  "main_gpu": 0,
  "tensor_split": ""
}

问题3 :温度过高 安装lm-sensors监控:

sudo apt install lm-sensors
sudo sensors-detect --auto
watch -n 1 sensors
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐