在恒源云GPU服务器上部署ollama时,很多用户遇到了一个典型问题:按照常规流程安装完成后,启动ollama服务时控制台没有任何关于GPU型号的识别输出。这意味着ollama可能没有正确调用GPU资源,导致计算性能无法充分发挥。
这个问题通常表现为以下几个特征:
ollama list等基础命令可以执行nvidia-smi查看GPU使用率为0%首先需要确认恒源云GPU实例的硬件配置:
bash复制lspci | grep -i nvidia
nvidia-smi -L
预期应该能看到类似输出:
code复制GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-xxxx)
检查驱动版本和CUDA环境:
bash复制nvidia-smi
nvcc --version
常见问题包括:
如果使用Docker容器,需要确认:
bash复制docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
创建fix_ollama_gpu.sh脚本:
bash复制#!/bin/bash
# 步骤1:验证NVIDIA驱动
if ! command -v nvidia-smi &> /dev/null; then
echo "[错误] NVIDIA驱动未安装"
exit 1
fi
# 步骤2:安装CUDA工具包(如果缺失)
if ! command -v nvcc &> /dev/null; then
echo "安装CUDA工具包..."
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-11-8
fi
# 步骤3:配置环境变量
echo "配置环境变量..."
cat <<EOF >> ~/.bashrc
export PATH=/usr/local/cuda-11.8/bin:\$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:\$LD_LIBRARY_PATH
EOF
source ~/.bashrc
# 步骤4:重新安装ollama(强制GPU版本)
echo "重装ollama..."
curl -fsSL https://ollama.ai/install.sh | OLLAMA_CUDA=1 sh
# 步骤5:验证安装
echo "验证GPU支持..."
ollama run llama2 "test" | grep -i cuda
OLLAMA_CUDA环境变量:
强制安装支持CUDA的版本,这是最关键的参数
LD_LIBRARY_PATH设置:
确保运行时能找到CUDA库文件
用户组权限:
需要将当前用户加入video和render组:
bash复制sudo usermod -aG video $USER
sudo usermod -aG render $USER
启用详细日志输出:
bash复制OLLAMA_DEBUG=1 ollama serve
关键日志标记:
"CUDA available: true" 表示GPU检测成功"loading CUDA kernels" 表示模型正在使用GPU创建测试脚本gpu_test.py:
python复制import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"Current device: {torch.cuda.current_device()}")
print(f"Device name: {torch.cuda.get_device_name(0)}")
对于Docker部署,需要确保:
dockerfile复制FROM nvidia/cuda:11.8.0-base
--gpus all参数bash复制-v /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1:/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
排查步骤:
/usr/local/cuda符号链接是否正确ldconfig -p | grep cuda输出bash复制export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
解决方法:
bash复制sudo apt remove --purge '^nvidia-.*'
sudo apt remove --purge '^libnvidia-.*'
sudo apt install cuda-11-8
处理方案:
bash复制sudo setcap cap_sys_admin+ep /usr/bin/ollama
sudo chmod a+rw /dev/nvidia*
bash复制export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
python复制torch.backends.cuda.matmul.allow_tf32 = True
~/.ollama/config.json中添加:json复制{
"batch_size": 8,
"gradient_accumulation_steps": 4
}
组合监控面板:
bash复制watch -n 1 "nvidia-smi && echo && ollama stats"
创建定期检查脚本check_gpu.sh:
bash复制#!/bin/bash
STATUS=$(ollama health | grep -c "GPU active")
if [ "$STATUS" -eq 0 ]; then
systemctl restart ollama
echo "$(date) - Restarted ollama" >> /var/log/ollama_monitor.log
fi
添加到crontab:
bash复制*/5 * * * * /path/to/check_gpu.sh
修改启动配置:
json复制{
"parallel_workers": 2,
"gpu_mapping": {
"0": "A100",
"1": "A100"
}
}
启用方法:
bash复制export OLLAMA_FORCE_FP16=1
调整系统参数:
bash复制echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p