网站程序风格,江苏省二级建造师考试网,加盟创业,房租 做网站之前一直在 Mac 上使用 ollama 所以没注意#xff0c;最近在 Ubuntu 上运行发现一直在 CPU 上跑。我一开始以为是超显存了#xff0c;因为 Mac 上如果超内存的话#xff0c;那么就只用 CPU#xff0c;但是我发现 Llama3.2 3B 只占用 3GB#xff0c;这远没有超。看了一下命…之前一直在 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 Enginedocker-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 ar /etc/apt/keyrings/docker.asc# 添加仓库到APT源
echo \deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] 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 [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] 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 --runtimedocker然后重启一下 Docker 服务
sudo systemctl restart docker好了现在就做好所有的前置准备了。
部署 Ollama 到 GPU 上
需要注意在下面的步骤之前要确定当前主机系统的 Ollama 已经关闭了不然端口会显示占用你如果需要同时使用那么换个端口号后面代码中也要进行相应的修改。
首先看看有没有后台运行
$ ps -A |grep ollama1321 ? 00:02:50 ollama发现还在那么关闭它
sudo kill 1321此时使用下面的命令可以很轻松的实现部署
docker run -d --gpusall -v ./ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama这个命令的意思是
--gpusall使用所有的 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 了
rootb82bf49334f9:/# 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.833803ms
load duration: 39.937882ms
prompt eval count: 17 token(s)
prompt eval duration: 5ms
prompt eval rate: 3400.00 tokens/s
eval count: 42 token(s)
eval duration: 795ms
eval rate: 52.83 tokens/s你可以给我讲个故事吗
当然这里有一个故事有一只小猴子名叫李莫住在一个美丽的雨林里。他非常好奇一天到晚都在探索周围的世界。有一天他迷路了找不到回家的路。李莫沿着河流行走希望能找到熟悉的地方。但是无论他走多远都不能见到熟悉的树木和花草。他开始感到害怕和孤独。就在这时他遇到了一个聪明的鸟儿。鸟儿问李莫“你在哪里你想去哪里”李莫告诉了鸟儿自己的情况鸟儿笑着说“我知道这里的路
你跟我走就可以找到回家的路。”李莫和鸟儿一起行走他们聊天、玩耍这让小猴子觉得很开心。他慢慢地放下了担忧感受到鸟儿的帮助和陪伴。最后他们来到一个熟悉的地方小猴子看到家里熟悉的树木和花草他高兴地冲向家门鸟儿也跟着他一起欢笑。从那天起李莫和鸟儿
成为好朋友他们经常一起探索雨林里的秘密。这个故事告诉我们即使在迷路时我们也可以寻找帮助和陪伴而不是孤独地面对困难。total duration: 6.86419438s
load duration: 35.787939ms
prompt eval count: 75 token(s)
prompt eval duration: 9ms
prompt eval rate: 8333.33 tokens/s
eval count: 306 token(s)
eval duration: 5.993s
eval rate: 51.06 tokens/s在这种情况下不用担心性能损耗因为 Docker 的实现模式和常规说的虚拟机不太一样它其实就是基于主机系统的进行的。下面是我跑模型的时候nvidia-smi显示的的信息我不记得是跑哪个模型的了可以看到利用率还是不错的功耗快满了 如何在主机系统上和容器内的 Ollama 沟通使用这个我想放在另一篇博客中。因为我在使用 Llama 3.2-Vision 的时候需要传递图片这个例子更加全面就不在这里说了。
再次使用
关机之后如果想再次使用容器那么需要换一个命令启动。如果你熟悉 Docker这点你应该很清楚。不过由于 Ollama 是一个服务会随开机启动所以你需要先再次终止进程
$ ps -A | grep ollama2060 ? 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 - OllamaOllama 官方介绍容器映像的时候说了 Linux 要使用 GPU 必须用容器macOS 是反过来的要用 GPU 必须是独立程序。
https://hub.docker.com/r/ollama/ollama - DockerHubOllama Docker 官方映像的界面。