在Linux上如何让ollama在GPU上运行模子
之前一直在 Mac 上使用 ollama 所以没注意,近来在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了,因为 Mac 上如果超内存的话,那么就只用 CPU,但是我发现 Llama3.2 3B 只占用 3GB,这远没有超。看了一下命令没发现有相干的选项。所以我查了一下。运气很好,找到了一篇博客写了可以逼迫在 GPU 上的方法:用容器跑。我找了一下,官方确实说过 Linux 上要用容器(见下图)。需要注意 macOS刚好是反过来,容器里不支持 GPU。
https://i-blog.csdnimg.cn/direct/fbf5dbeb699140e597c5046e7543100b.png
准备工作
这里使用容器的时候,你不但要安装 Docker,还要安装 NVIDIA Container Toolkit,这样才气在容器中支持使用 GPU。
最新、最全面的介绍当然是官方文档,这里只记录一下 APT 的安装方法,也就是 Ubuntu 这种 Debian 上最常使用的方法。如果你是其他发行版,可以看看官方文档中的相干介绍,我会在相干部分贴上官方文档的地点,这里无意成为某些文档的翻译。
如果你 Ollama 安装模子、下载 NVIDIA Container Toolkit 等工具的时候很卡很慢,可以实验把 DNS 换成阿里公共 DNS 223.5.5.5,然后重启体系,过段时间就快了。我当时等了半天,到下午下载速率就能满速了。
安装 Docker
然后安装 Docker,由于我并不使用 GUI,所以安装的是 Docker Engine(docker-ce),如果你要使用 GUI,那么自行搜索 Docker Desktop,这个安装方法随处都是。其他版本请见官方文档 Install Docker Engine - Docker Docs:
# 这里要删除发行版可能自带的
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 添加Docker官方GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库到APT源
echo \
"deb https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装完之后建议去华为云弄一个镜像加速器,不然拉取容器的时候真的太费劲了。文档地点是设置镜像加速器 - 华为云,里面介绍了相干步骤和使用方法,需要注意的是,需要实名认证,不然会显示无法使用(说这个是因为显示无法使用之后,并不会弹出实名认证的窗口,我找了半天才发现是因为这个)。
安装 NVIDIA Container Toolkit
安装 NVIDIA Container Toolkit 的时候,你需要提前安装好驱动。
其他版本请见官方文档 Installing the NVIDIA Container Toolkit - Nvidia Docs
安装
起首是配置包:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
配置完更新一下就加好了:
sudo apt-get update
然后就可以和其他软件一样安装了:
sudo apt-get install -y nvidia-container-toolkit
配置
这里是使用 root 配置,如果你想用其他模式,那么看看文档 Installing the NVIDIA Container Toolkit - Nvidia Docs
安装好需要配置一下:
sudo nvidia-ctk runtime configure --runtime=docker
然后重启一下 Docker 服务:
sudo systemctl restart docker
好了,现在就做好所有的前置准备了。
部署 Ollama 到 GPU 上
需要注意在下面的步骤之前,要确定当前主机体系的 Ollama 已经关闭了,不然端口会显示占用,你如果需要同时使用,那么换个端口号,后面代码中也要进行相应的修改。
起首看看有没有背景运行:
$ ps -A |grep ollama
1321 ? 00:02:50 ollama
发现还在,那么关闭它:
sudo kill 1321
此时,使用下面的命令可以很轻松的实现部署:
docker run -d --gpus=all -v ./ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
这个命令的意思是:
[*]--gpus=all使用所有的 GPU。
[*]-v ./ollama:/root/.ollama把当前目次下的ollama目次加载到容器的/root/.ollama,这样可以实现一些文件的共享,比如 Llama3.2-Vision 需要使用的图片。 这里说明一下为什么选择/root/.ollama,因为这个是 Ollama 模子的存放处,这样如果删除重装 Docker 容器之后,不消重新下载容器。
[*]-p 11434:11434,把容器的端口11434和体系的端口11434对应起来。11434 是 Ollama 默认使用的端口号,官方示例也用的这个。
[*]--name ollama是这个容器的名称为ollama。
[*]ollama/ollama是映像(image)的名称。
使用下面的命令进入容器:
sudo docker exec -it ollama /bin/bash
进入容器后,直接可以使用ollama,不消再次安装。这里使用 Llama3.1 8B 的:
ollama run llama3.1 --verbose
--verbose选项可以让你看到生成速率。
然后就会看到下载模子,等一会就进入 Ollama 了:
root@b82bf49334f9:/# ollama run llama3.1 --verbose
pulling manifest pulling 667b0c1932bc... 100% ▕███████████████████████████████████████████████████████████████▏ 4.9 GB pulling 948af2743fc7... 100% ▕███████████████████████████████████████████████████████████████▏ 1.5 KB pulling 0ba8f0e314b4... 100% ▕███████████████████████████████████████████████████████████████▏12 KB pulling 56bb8bd477a5... 100% ▕███████████████████████████████████████████████████████████████▏ 96 B pulling 455f34728c9b... 100% ▕███████████████████████████████████████████████████████████████▏487 B verifying sha256 digest writing manifest success >>> 你好,请介绍一下你自己大家好!我是 LLaMA,一个由 Meta 研发的语境理解和生成模子。我的重要功能是理解自然语言并根据上下文生成相干响应或内容。total duration: 841.833803msload duration: 39.937882msprompt eval count: 17 token(s)prompt eval duration: 5msprompt eval rate: 3400.00 tokens/seval count: 42 token(s)eval duration: 795mseval rate: 52.83 tokens/s>>> 你可以给我讲个故事吗当然!这里有一个故事:有一只小猴子名叫李莫,住在一个美丽的雨林里。他非常好奇,一天到晚都在探索周围的天下。有一天,他迷路了,找不到回家的路。李莫沿着河道行走,盼望能找到认识的地方。但是,无论他走多远,都不能见到认识的树木和花卉。他开始感到害怕和孤独。就在这时,他碰到了一个智慧的鸟儿。鸟儿问李莫:“你在哪里?你想去哪里?”李莫告诉了鸟儿自己的情况,鸟儿笑着说:“我知道这里的路,你跟我走就可以找到回家的路。”李莫和鸟儿一起行走,他们谈天、玩耍,这让小猴子以为很开心。他慢慢地放下了担忧,感受到鸟儿的资助和伴随。最后,他们来到一个认识的地方,小猴子看到家里认识的树木和花卉,他高兴地冲向家门,鸟儿也跟着他一起欢笑。从那天起,李莫和鸟儿成为好朋侪,他们经常一起探索雨林里的秘密。这个故事告诉我们,即使在迷路时,我们也可以探求资助和伴随,而不是孤独地面对困难。total duration: 6.86419438sload duration: 35.787939msprompt eval count: 75 token(s)prompt eval duration: 9msprompt eval rate: 8333.33 tokens/seval count: 306 token(s)eval duration: 5.993seval rate: 51.06 tokens/s 在这种情况下不消担心性能损耗,因为 Docker 的实现模式和通例说的虚拟机不太一样,它实在就是基于主机体系的进行的。下面是我跑模子的时候nvidia-smi显示的的信息(我不记得是跑哪个模子的了),可以看到利用率还是不错的,功耗快满了:
https://i-blog.csdnimg.cn/direct/603d2f07297b45b182ffd0eff3ab6f50.png
如何在主机体系上和容器内的 Ollama 沟通使用,这个我想放在另一篇博客中。因为我在使用 Llama 3.2-Vision 的时候需要传递图片,这个例子更加全面,就不在这里说了。
再次使用
关机之后,如果想再次使用容器,那么需要换一个命令启动。如果你认识 Docker,这点你应该很清楚。不过由于 Ollama 是一个服务,会随开机启动,所以你需要先再次停止进程:
$ ps -A | grep ollama
2060 ? 00:00:18 ollama
$ sudo kill 2060
然后启动前面创建的容器ollama:
docker start ollama
需要注意不要用docker run,不然会显示Unable to find image 'ollama:latest' locally。
盼望能帮到有需要的人~
参考资料
How to deploy the llama3 large model in CPU and GPU environments with Ollama - Gen. David L.:我是在这篇文章知道要用容器的。
Ollama is now available as an official Docker image - Ollama:Ollama 官方介绍容器映像的时候,说了 Linux 要使用 GPU 必须用容器,macOS 是反过来的,要用 GPU 必须是独立程序。
https://hub.docker.com/r/ollama/ollama - DockerHub:Ollama Docker 官方映像的界面。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]