动态监视docker容器中Ollama的透传过去的英伟达显卡记录
sudo docker exec -it ollama watch -n 1 nvidia-smi
查看ollama正在运行模型的情况:
sudo docker exec -it ollama ollama ps
动态监视英伟达显卡记录
sudo watch -n 1 nvidia-smi
发现记录虽然有cuda版本,但并不代表已经安装了cuda:
nvidia-smi
显示的CUDA Version
指的是这个驱动支持的最新版本的CUDA
,而非安装的CUDA
,下载英伟达驱动的时候CUDA不会默认安装,需要手动安装
验证宿主机上CUDA是否安装
nvcc --version
报错:
由于ollama官网是只让下载了,docker运行ollama只需要NVIDIA Container Toolkit就可以了,但是只有NVIDIA Container Toolkit 确实能实现GPU的透传,能够使用宿主机的GPU,却无法调用宿主机的CUDA 核心做加速计算,因为宿主机的cuda没有安装,使用 NVIDIA Container Toolkit 时,不需要在容器内部单独安装 CUDA,因为容器可以利用宿主机上的 NVIDIA 驱动和 CUDA 环境,所以我们再宿主机上安装CUDA即可
正确的顺序是先装驱动,再装cuda工具包,然后装容器工具包
Ollama is now available as an official Docker image · Ollama Blog
如何下载NVIDIA Container Toolkit:
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit
CUDA是GPU加速计算的核心依赖,发现并没有安装CUDA Toolkit ,需要安装相应驱动的CUDA:
使用以下命令查看当前驱动CUDA的版本,安装驱动支持的最新版本的CUDA
sudo nvidia-smi
nvidia-smi
显示的CUDA Version
指的是这个驱动支持的最新版本的CUDA
,而非安装的CUDA
这里nvidia-smi
显示的CUDA Version
是12.8,你需要修改为你自己驱动对应的CUDA版本
# 添加NVIDIA CUDA仓库
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/ /"
# 安装CUDA 12.8
sudo apt update
sudo apt install -y cuda-toolkit-12-8
配置环境变量
如何添加环境变量?
# 编辑 ~/.bashrc
(仅影响当前用户)
vi ~/.bashrc
# CUDA 12.8
export PATH=/usr/local/cuda-12.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH
然后运行:
source ~/.bashrc
验证是否生效:
nvcc --version
重启 Docker 服务
# 重启 Docker 服务
sudo systemctl restart docker
在容器内运行 CUDA 示例程序验证计算能力:
docker run --gpus all -it --rm nvidia/cuda:12.8.0-runtime-ubuntu22.04 /bin/bash
也可进入ollama容器使用
nvcc --version
显示如下,说明宿主机上的CUDA程序也被透传到了容器内 ,可以做CUDA并行加速计算了
如何宿主机内的CUDA已经安装,但是容器内nvcc 仍然 检查不到cuda版本,可能是安装顺序错了,NVIDIA CUDA Toolkit和NVIDIA Container toolkit能同时安装,都是装在宿主机上,正确的顺序是先装英伟达驱动,再装cuda工具包 NVIDIA CUDA Toolkit,然后装容器工具包NVIDIA Container Toolkit
可以在宿主机内重新安装一遍NVIDIA Container Toolkit,然后重启docker服务,再进入docker即可看到cuda已经成功透传,Ollama 会自动使用 CUDA 进行 GPU 加速,所以docker容器内cuda能被检测到即可
后续还可以在宿主机上安装cudnn(CUDA Deep Neural Network library),继续透传,进一步加速计算
PS:驱动、CUDA、 cudnn的关系:
CUDA依赖于驱动运行,而cudnn有依赖于CUDA 运行,所以安装顺序是先安装驱动再安装CUDA再安装cudnn
CUDA 相当于工作台,cudnn相当于工作台上的螺丝刀,运行ollama等大语言模型相当于拧螺丝的工作,有了CUDA 工作更快,但是还是用手上螺丝,有了cudnn就更快了