时隔6年再次折腾这张580,没错6年都没换,中间挖了两个月以太坊。6年弹指一挥间技术更新迭代太快眼花缭乱,本次部署全程依托openclaw调用minmax-m2.7ssh连接远程服务器完成部署。中间尝试过ROCm,但是版本更替已经不支持这张老卡了。最终选用Vulkan方案。

适用显卡:AMD Radeon RX 470/480/570/580/590(Polaris 架构)
系统:Ubuntu 22.04
目标:让 Ollama 通过 Vulkan 调用 AMD GPU 跑 LLM 推理


一、背景

为什么选 Vulkan 而不是 ROCm?

对比项 ROCm Vulkan
支持架构 仅 GCN 5.0+(较新显卡) 几乎所有 AMD 显卡(包括 Polaris/RX 580)
安装难度 高(依赖复杂,版本匹配严格) 低(apt 一键安装)
内核模块 需要 KFD 模块 依赖已有的 amdgpu 驱动
适用场景 AMD 专业卡(MI系列) 普通游戏卡(RX 系列)
RX 580 ❌ 官方不支持 ✅ 支持

结论: RX 580(Polaris)官方不支持 ROCm,但 Vulkan 可以。实测 Vulkan 可以正常调用 GPU 加速。


二、环境确认

2.1 确认显卡被识别

lspci | grep -i "VGA\|AMD\|Radeon"

预期输出:

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]

2.2 确认 amdgpu 内核驱动已加载

lsmod | grep amdgpu

预期输出:

amdgpu  17190912  14

2.3 确认 Vulkan 可用

ls /usr/share/vulkan/icd.d/

预期输出(包含 AMD 的 ICD 文件):

...

三、安装步骤

3.1 安装 Mesa Vulkan 驱动

sudo apt-get update
sudo apt-get install -y mesa-vulkan-drivers

3.2 安装 Ollama

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

或手动安装(参考):

curl -L https://github.com/ollama/ollama/releases/download/v0.19.0/ollama-linux-amd64 -o /usr/local/bin/ollama
chmod +x /usr/local/bin/ollama

3.3 下载模型

ollama pull qwen2:7b

(可选其他模型:llama3、mistral、deepseek-r1 等)


四、GPU 加速验证

4.1 CPU 模式(无加速)

服务以 CPU 模式启动:

ollama serve

测试:

time curl -s http://localhost:11434/api/generate \
  -d '{"model":"qwen2:7b","prompt":"say hi in 5 words","stream":false}'

CPU 模式日志特征:

llama_context: CPU model buffer size = 4220.43 MiB
llama_kv_cache: CPU KV buffer size = 224.00 MiB
llama_context: CPU compute buffer size = 304.00 MiB

4.2 Vulkan 模式(GPU 加速)

启动服务时设置环境变量:

OLLAMA_VULKAN=1 ollama serve

测试:

time curl -s http://localhost:11434/api/generate \
  -d '{"model":"qwen2:7b","prompt":"say hi in 5 words","stream":false}'

Vulkan 模式日志特征:

llama_context: Vulkan0 KV buffer size = 224.00 MiB
llama_context: Vulkan0 compute buffer size = 304.00 MiB
llama_context: Vulkan_Host compute buffer size = 15.02 MiB

4.3 性能对比

模式 总耗时 生成 9 token GPU 占用
CPU ~5-10s ~0.8s/token
Vulkan ~3.7s ~0.02s/token 100%(GPU 在跑)

Vulkan 模式下 token 生成速度提升约 40 倍


五、原理说明

5.1 为什么 RX 580 用不了 ROCm?

ROCm(AMD 的官方 CUDA 替代品)对显卡架构有要求:

  • AMD Radeon RX 580 → Polaris(GCN 5.0)
  • ROCm 官方支持的最低架构是 GCN 5.0(理论上支持)
  • 但实际 ROCm 6.x 对内核版本、驱动版本要求极其严格
  • RX 580 的 Ellesmere 核心在 ROCm 6.2 中 KFD 模块无法编译,导致无法使用

5.2 Vulkan 为什么能行?

Vulkan 是图形 API,不依赖专有的 HSA 计算栈。

应用层:Ollama (ggml-vulkan)
        ↓
中间层:Mesa RADV (开源 Vulkan 驱动)
        ↓
内核层:amdgpu (已有的开源内核驱动)
        ↓
硬件层:AMD RX 580 (Polaris)

工作流程:

  1. Ollama 内置的 ggml 库通过 Vulkan API 向 GPU 提交计算任务
  2. Mesa 的 RADV 驱动将 Vulkan 命令翻译成 GPU 指令
  3. amdgpu 内核驱动负责显存分配和 GPU 调度
  4. GPU 执行矩阵乘法等 LLM 推理计算

关键点: Vulkan 不需要 KFD(Kernel Fusion Driver),直接复用已有的 amdgpu 图形驱动即可。

5.3 架构图

┌─────────────────────────────────────────────┐
│           Ollama (用户空间)                  │
│  ┌─────────────┐  ┌──────────────────────┐  │
│  │ llama.cpp   │  │  ggml-vulkan         │  │
│  │ (模型推理)  │→ │  (Vulkan 计算接口)   │  │
│  └─────────────┘  └──────────┬───────────┘  │
└──────────────────────────────┼───────────────┘
                               │ Vulkan API
┌──────────────────────────────┼───────────────┐
│         Mesa (用户空间)       ↓               │
│  ┌────────────────────────────────────────┐   │
│  │     RADV 开源 Vulkan 驱动              │   │
│  │     (将 Vulkan 命令转为 GPU 指令)     │   │
│  └────────────────────────────────────────┘   │
└──────────────────────────────┬───────────────┘
                               │
┌──────────────────────────────┼───────────────┐
│         amdgpu (内核)         ↓               │
│  ┌────────────────────────────────────────┐   │
│  │ 显存分配 / GPU 调度 / 中断处理         │   │
│  └────────────────────────────────────────┘   │
└──────────────────────────────┬───────────────┘
                               │
                    ┌──────────┴──────────┐
                    │   AMD Radeon RX 580 │
                    │   (Polaris Ellesmere)│
                    └─────────────────────┘

六、故障排查

6.1 vulkaninfo 命令不存在

sudo apt-get install -y mesa-vulkan-drivers

6.2 服务启动时 GPU 未被检测到

确保环境变量在服务启动前设置:

OLLAMA_VULKAN=1 ollama serve

已在运行的服务需要重启才能加载环境变量。

6.3 下载速度极慢(几十 KB/s)

Ollama 模型托管在 GitHub蓉jr,国内下载慢。可尝试:

  • 使用代理:HTTPS_PROXY=http://127.0.0.1:7890 ollama pull qwen2:7b
  • 使用 ModelScope 镜像(如果有)
  • 手动下载 blob 文件

七、一键部署脚本

ollama-vulkan-rx580-deploy.sh

#!/bin/bash
#
# ollama-vulkan-rx580-deploy.sh
# 一键部署 Ollama + Vulkan GPU 加速(AMD RX 580 / Polaris 架构)
#
# 适用系统:Ubuntu 22.04
# 适用显卡:AMD Radeon RX 470/480/570/580/590 (Polaris)
#
# 用法:chmod +x ollama-vulkan-rx580-deploy.sh && ./ollama-vulkan-rx580-deploy.sh
#

set -e

echo "=========================================="
echo " Ollama Vulkan GPU 加速一键部署"
echo " 适用:AMD RX 580 / Polaris 架构"
echo "=========================================="
echo ""

# 检测是否为 root 用户
if [ "$EUID" -ne 0 ]; then
  echo "请使用 sudo 运行此脚本:"
  echo "  sudo ./ollama-vulkan-rx580-deploy.sh"
  exit 1
fi

# 检测系统
if [ ! -f /etc/lsb-release ]; then
  echo "仅支持 Ubuntu/Debian 系统"
  exit 1
fi

echo "[1/5] 检查显卡..."
GPU=$(lspci | grep -i "VGA.*AMD\|Radeon.*RX" | head -1)
if [ -z "$GPU" ]; then
  echo "未检测到 AMD Radeon 显卡"
  exit 1
fi
echo "  ✓ $GPU"

# 提取显卡型号
GPU_NAME=$(echo "$GPU" | grep -o "RX [0-9]*[0-9]" | head -1)
echo "  检测到显卡:AMD $GPU_NAME"

echo ""
echo "[2/5] 检查 amdgpu 驱动..."
if lsmod | grep -q "^amdgpu"; then
  echo "  ✓ amdgpu 内核驱动已加载"
else
  echo "  ✗ amdgpu 未加载,尝试加载..."
  modprobe amdgpu || true
fi

echo ""
echo "[3/5] 安装 Mesa Vulkan 驱动..."
apt-get update -qq
apt-get install -y mesa-vulkan-drivers > /dev/null 2>&1
echo "  ✓ Vulkan 驱动安装完成"

# 验证 Vulkan ICD
ICD_COUNT=$(ls /usr/share/vulkan/icd.d/amdgpu*.json 2>/dev/null | wc -l)
if [ "$ICD_COUNT" -gt 0 ]; then
  echo "  ✓ 检测到 $ICD_COUNT 个 AMD Vulkan ICD 文件"
else
  echo "  ⚠ 未找到 AMD Vulkan ICD,请检查驱动"
fi

echo ""
echo "[4/5] 安装 Ollama..."
OLLAMA_VERSION="0.19.0"

# 检查是否已安装
if command -v ollama &> /dev/null; then
  CURRENT_VERSION=$(ollama --version 2>/dev/null || echo "unknown")
  echo "  Ollama 已安装 (版本: $CURRENT_VERSION)"
else
  # 手动安装 Ollama(比官方脚本更可控)
  echo "  下载 Ollama v${OLLAMA_VERSION}..."
  curl -fsSL "https://github.com/ollama/ollama/releases/download/v${OLLAMA_VERSION}/ollama-linux-amd64" \
    -o /usr/local/bin/ollama
  chmod +x /usr/local/bin/ollama
  
  # 创建用户(如果不存在)
  if ! id -u ollama &>/dev/null; then
    useradd -r -s /bin/false ollama || true
  fi
  chown ollama:ollama /usr/local/bin/ollama 2>/dev/null || true
  
  echo "  ✓ Ollama v${OLLAMA_VERSION} 安装完成"
fi

echo ""
echo "[5/5] 创建 Vulkan 启动脚本..."
# 创建 systemd service 文件
cat > /etc/systemd/system/ollama-vulkan.service << 'EOF'
[Unit]
Description=Ollama with Vulkan GPU acceleration (AMD RX 580)
After=network-online.target

[Service]
Type=simple
User=ollama
Group=ollama
Environment="OLLAMA_VULKAN=1"
ExecStart=/usr/local/bin/ollama serve
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 创建启动脚本(systemd 用)
cat > /usr/local/bin/ollama-vulkan-start.sh << 'EOF'
#!/bin/bash
# Ollama Vulkan 模式启动脚本
# 用于手动启动或调试
export OLLAMA_VULKAN=1
echo "启动 Ollama Vulkan 模式 (GPU: AMD RX 580)"
exec /usr/local/bin/ollama serve
EOF
chmod +x /usr/local/bin/ollama-vulkan-start.sh

echo "  ✓ systemd service: /etc/systemd/system/ollama-vulkan.service"
echo "  ✓ 启动脚本: /usr/local/bin/ollama-vulkan-start.sh"

echo ""
echo "=========================================="
echo " 部署完成!"
echo "=========================================="
echo ""
echo "启动方式:"
echo ""
echo "  方式一(systemd):"
echo "    sudo systemctl enable ollama-vulkan"
echo "    sudo systemctl start ollama-vulkan"
echo ""
echo "  方式二(手动):"
echo "    OLLAMA_VULKAN=1 ollama serve"
echo ""
echo "  方式三(快捷脚本):"
echo "    /usr/local/bin/ollama-vulkan-start.sh"
echo ""
echo "验证 GPU 加速:"
echo "  curl http://localhost:11434/api/generate \\"
echo "    -d '{\"model\":\"qwen2:7b\",\"prompt\":\"say hi\",\"stream\":false}'"
echo ""
echo "查看 Vulkan 日志:"
echo "  journalctl -u ollama-vulkan -f"
echo ""
echo "注意:如尚未下载模型,运行:"
echo "  OLLAMA_VULKAN=1 ollama pull qwen2:7b"
echo ""


测试日期:2026-04-02
测试环境:Ubuntu 22.04 / AMD RX 580 8GB / Ollama v0.19.0

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐