1. 项目背景与目标
最近在尝试将ollama 0.15.2版本部署到openi启智社区的DCU环境时遇到了一系列挑战。ollama作为一个开源的本地大模型运行框架,能够帮助开发者在本地轻松部署和运行各种开源大语言模型。而openi启智社区提供的DCU(Deep Computing Unit)环境,是基于AMD ROCm技术栈的国产加速计算平台。
我的初衷是想测试ollama在国产计算硬件上的兼容性表现,特别是想验证:
- ollama能否利用DCU的算力加速模型推理
- ROCm生态对大模型推理的支持程度
- 在国产计算平台上运行ollama的可行性
2. 环境准备与基础配置
2.1 openi启智社区DCU环境概览
openi启智社区提供的DCU环境基于以下技术栈:
- 操作系统:Ubuntu 20.04 LTS
- 计算架构:AMD CDNA2
- ROCm版本:5.4.3
- 驱动版本:5.4.3-63
- 显存容量:32GB HBM2
环境预装了常用的深度学习框架如PyTorch、TensorFlow的ROCm版本,并配置了相应的开发工具链。
2.2 ollama的安装前准备
按照ollama官方文档,安装前需要确保:
- 系统已安装curl工具
- 有足够的磁盘空间(建议至少50GB空闲)
- 网络连接正常(特别是访问GitHub和Docker Hub)
在DCU环境中,还需要额外检查:
bash复制/opt/rocm/bin/rocminfo # 验证ROCm环境状态
lsmod | grep amdgpu # 检查AMD GPU驱动加载情况
3. ollama安装过程实录
3.1 标准安装流程尝试
首先尝试官方推荐的一键安装命令:
bash复制curl -fsSL https://ollama.com/install.sh | sh
安装脚本执行后出现以下问题:
- 检测到系统架构为x86_64,但未识别出DCU加速器
- 自动下载的ollama二进制文件是CPU-only版本
- 安装完成后运行
ollama serve时提示缺少CUDA环境
3.2 手动安装尝试
转而尝试下载预编译的Linux版本:
bash复制wget https://ollama.com/download/ollama-linux-amd64
chmod +x ollama-linux-amd64
./ollama-linux-amd64
遇到的核心问题:
- 程序启动后无法检测到可用的GPU设备
- 日志显示"no compatible GPU detected, falling back to CPU"
- 尝试设置环境变量
HSA_OVERRIDE_GFX_VERSION=10.3.0(模拟MI200系列)无效
3.3 ROCm兼容性调试
专门针对ROCm环境进行配置尝试:
- 安装ROCm版的PyTorch:
bash复制pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
- 验证PyTorch能否识别DCU:
python复制import torch
print(torch.cuda.is_available()) # 返回False
print(torch.backends.roc.is_available()) # 返回True
- 尝试通过Docker运行:
bash复制docker run --device=/dev/kfd --device=/dev/dri --group-add=video \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v $(pwd):/workspace -it rocm/pytorch:latest
在Docker内部安装ollama后,仍然无法利用DCU加速。
4. 问题分析与技术难点
4.1 ollama的硬件加速支持现状
通过分析ollama源码和文档,发现:
- 当前版本(0.15.2)主要依赖CUDA进行GPU加速
- 对ROCm的支持仍处于实验阶段
- 核心计算部分使用ggml库,其对AMD GPU的支持有限
4.2 DCU环境特殊性
openi启智社区的DCU环境有几个特点:
- 使用定制化的ROCm驱动栈
- 缺少NVIDIA兼容层
- 计算指令集与消费级AMD GPU不同
4.3 依赖关系冲突
主要依赖问题包括:
- ollama依赖的llama.cpp默认编译选项不支持ROCm
- ggml的ROCm后端需要手动启用编译标志
- 缺少必要的ROCm运行时库(如rocBLAS、rocRAND)
5. 替代方案探索
5.1 源码编译尝试
从源码构建支持ROCm的ollama:
bash复制git clone https://github.com/jmorganca/ollama
cd ollama
export ROCM_PATH=/opt/rocm
export LLAMA_HIPBLAS=1
make
遇到编译错误:
code复制fatal error: hip/hip_runtime.h: No such file or directory
5.2 使用ROCm支持的替代框架
考虑其他支持ROCm的推理框架:
- vLLM:通过
--device=hip参数支持AMD GPU - Text Generation Inference:需要手动编译HIP版本
- llama-cpp-python:启用
LLAMA_HIPBLAS=1编译
5.3 容器化方案评估
尝试使用预构建的ROCm容器:
bash复制docker run --device=/dev/kfd --device=/dev/dri --group-add=video \
-v $(pwd):/data -it rocm/llama:latest
但发现:
- 容器内缺少ollama的运行时依赖
- 模型文件格式需要转换
6. 经验总结与建议
经过多次尝试,总结出以下经验:
- 当前ollama版本(0.15.2)对ROCm/DCU的支持尚不完善
- 在纯CPU模式下可以运行,但性能无法满足生产需求
- 需要等待ollama官方或社区提供完整的ROCm支持
临时解决方案建议:
- 使用CPU模式运行小型模型
- 考虑其他支持ROCm的推理框架
- 关注ollama的GitHub issue跟踪ROCm支持进展
对于想在国产计算平台上部署大模型的开发者,我的建议是:
- 优先选择明确支持ROCm的推理框架
- 准备充分的环境调试时间
- 考虑模型转换方案(如ONNX Runtime的ROCm支持)
这次尝试虽然未能成功,但揭示了国产计算生态与大模型推理栈对接的实际挑战,为后续的适配工作提供了有价值的参考。
