在Linux上如何让ollama在GPU上运行模子

火影  金牌会员 | 2025-2-14 17:38:25 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 981|帖子 981|积分 2943

之前一直在 Mac 上使用 ollama 所以没注意,近来在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了,因为 Mac 上如果超内存的话,那么就只用 CPU,但是我发现 Llama3.2 3B 只占用 3GB,这远没有超。看了一下命令没发现有相干的选项。所以我查了一下。
运气很好,找到了一篇博客写了可以逼迫在 GPU 上的方法:用容器跑。我找了一下,官方确实说过 Linux 上要用容器(见下图)。需要注意 macOS刚好是反过来,容器里不支持 GPU。

准备工作

这里使用容器的时候,你不但要安装 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:
  1. # 这里要删除发行版可能自带的
  2. for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  3. # 添加Docker官方GPG key
  4. sudo apt-get update
  5. sudo apt-get install ca-certificates curl
  6. sudo install -m 0755 -d /etc/apt/keyrings
  7. sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  8. sudo chmod a+r /etc/apt/keyrings/docker.asc
  9. # 添加仓库到APT源
  10. echo \
  11.   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  12.   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  13.   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  14. sudo apt-get update
  15. # 安装
  16. 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
安装

起首是配置包:
  1. curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  2.   && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  3.     sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  4.     sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
复制代码
配置完更新一下就加好了:
  1. sudo apt-get update
复制代码
然后就可以和其他软件一样安装了:
  1. sudo apt-get install -y nvidia-container-toolkit
复制代码
配置

这里是使用 root 配置,如果你想用其他模式,那么看看文档 Installing the NVIDIA Container Toolkit - Nvidia Docs
安装好需要配置一下:
  1. sudo nvidia-ctk runtime configure --runtime=docker
复制代码
然后重启一下 Docker 服务:
  1. sudo systemctl restart docker
复制代码
好了,现在就做好所有的前置准备了。
部署 Ollama 到 GPU 上

需要注意在下面的步骤之前,要确定当前主机体系的 Ollama 已经关闭了,不然端口会显示占用,你如果需要同时使用,那么换个端口号,后面代码中也要进行相应的修改。
起首看看有没有背景运行:
  1. $ ps -A |grep ollama
  2.    1321 ?        00:02:50 ollama
复制代码
发现还在,那么关闭它:
  1. sudo kill 1321
复制代码
此时,使用下面的命令可以很轻松的实现部署:
  1. 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)的名称。
使用下面的命令进入容器:
  1. sudo docker exec -it ollama /bin/bash
复制代码
进入容器后,直接可以使用ollama,不消再次安装。这里使用 Llama3.1 8B 的:
  1. ollama run llama3.1 --verbose
复制代码
   --verbose选项可以让你看到生成速率。
  然后就会看到下载模子,等一会就进入 Ollama 了:
  1. root@b82bf49334f9:/# ollama run llama3.1 --verbose
  2. 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显示的的信息(我不记得是跑哪个模子的了),可以看到利用率还是不错的,功耗快满了:

如何在主机体系上和容器内的 Ollama 沟通使用,这个我想放在另一篇博客中。因为我在使用 Llama 3.2-Vision 的时候需要传递图片,这个例子更加全面,就不在这里说了。
再次使用

关机之后,如果想再次使用容器,那么需要换一个命令启动。如果你认识 Docker,这点你应该很清楚。不过由于 Ollama 是一个服务,会随开机启动,所以你需要先再次停止进程:
  1. $ ps -A | grep ollama
  2.    2060 ?        00:00:18 ollama
  3. $ sudo kill 2060
复制代码
然后启动前面创建的容器ollama:
  1. 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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表