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

之前一直在 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:

# 这里要删除发行版可能自带的
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 [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 --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 需要使用的图片。
  • -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.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 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 官方映像的界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习 Git 的工作原理,而不仅仅是命令

Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的,用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此,如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用,那…

【MySQL实战】mysql_exporter+Prometheus+Grafana

要在Prometheus和Grafana中监控MySQL数据库,如下图: 可以使用mysql_exporter。 以下是一些步骤来设置和配置这个监控环境: 1. 安装和配置Prometheus: - 下载和安装Prometheus。 - 在prometheus.yml中配置MySQL通过添加以下内…

适配器模式案例

如果在这样的结构中 我们在Controller中注入,但我们后续需要修改Oss时,比如从minioService改成AliyunService时,需要改动的代码很多。于是我们抽象出一个FileService,让controller只跟fileservice耦合,这样我没只需要在…

AI大模型语音交互方案,ESP32-S3联网通信,设备智能化响应联动

在科技日新月异的当下,人工智能与物联网技术正以前所未有的速度重塑着我们的生活,玩具和潮玩领域也迎来了翻天覆地的变化。 AI语音交互在玩具和潮玩产品中的应用越来越广泛,ESP32-S3凭借其高性能、低功耗、丰富的外设接口和强大的AI能力&…

Android DataBinding 结合 ViewModel的使用

Android DataBinding 结合 ViewModel的使用 一、build.gradle引入对应的依赖 在build.gradle(app模块)里引入依赖,然后Sync Now一下: android {​viewBinding {enabled true}dataBinding {enabled true}} 完整的build.gradle代…

掌握Golang strings包:高效字符串处理指南

掌握Golang strings包:高效字符串处理指南 引言为什么要学习和掌握strings包本教程的目标 基本用法strings包概述导入strings包常用函数列表及简要介绍 字符串创建与基本操作创建字符串字符串连接:Join重复字符串:Repeat修改字符串&#xff1…

论文阅读:Searching for Fast Demosaicking Algorithms

今天介绍一篇有关去马赛克的工作,去马赛克是 ISP 流程里面非常重要的一个模块,可以说是将多姿多彩的大千世界进行色彩还原的重要一步。这篇工作探索的是如何从各种各样的去马赛克算法中,选择最佳的一种。 Abstract 本文提出了一种方法&…

自建RustDesk服务器

RustDesk服务端 下面的截图是我本地的一个服务器做为演示用,你自行的搭建服务需要该服务器有固定的ip地址 1、通过宝塔面板快速安装 2、点击【安装】后会有一个配置信息,默认即可 3、点击【确认】后会自动安装等待安装完成 4、安装完成后点击【打开…

JavaSE学习心得(反射篇)

反射 前言 获取class对象的三种方式 利用反射获取构造方法 利用反射获取成员变量 利用反射获取成员方法 练习 保存信息 跟配置文件结合动态创建 前言 接上期文章:JavaSE学习心得(多线程与网络编程篇) 教程链接:黑马…

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结,具体如下: 一、按芯片类型 CCD相机:采用电荷耦合器件(CC…

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日,深交所官网显示,浙江信凯科技集团股份有限公司(以下简称“信凯科技”)主板IPO提交注册。 自2022年递交上市申请,信凯科技的IPO之路已走过两年光景,尽管提交注册&#xff0…

1.15学习

web ctfhub-网站源码 打开环境,查看源代码无任何作用,但是其提醒就在表面暗示我们用dirsearch进行目录扫描,登录kali的root端,利用终端输入dirsearch -u 网址的命令扫描该网址目录,扫描成功后获得信息,在…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…

Android Studio历史版本包加载不出来,怎么办?

为什么需要下载历史版本呢? 虽然官网推荐使用最新版本,但是最新版本如果自己碰到问题,根本找不到答案,所以博主这里推荐使用历史版本!!! Android Studio历史版本包加载不出来? 下…

一招解决word嵌入图片显示不全问题

大家在word中插入图片的时候有没有遇到过这个问题,明明已经将图片的格式选为“嵌入式”了,但是图片仍然无法完全显示,这个时候直接拖动图片可能会使文字也乱掉,很难精准定位位置。 这个问题是由于行距设置导致的,行距…

C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14

目录 一.安装SQLServer 二.在SQLServer中创建一个数据库 1.打开SQL Server Manager Studio(SSMS)连接服务器 2.创建新的数据库 3.创建表 三.Visual Studio 配置 1.创建一个简单的VS项目(本文创建为一个简单的控制台项目) 2.添加数据库连接 四.简单连通代码示例 简单连…

CentOS 7 下 MySQL 5.7 的详细安装与配置

1、安装准备 下载mysql5.7的安装包 https://dev.mysql.com/get/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 下载后上传至/home目录下 2、mysql5.7安装 2.1、更新yum并安装依赖 yum update -y sudo yum install -y wget sudo yum install libaio sudo yum install perl su…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size 1): 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

TY1801 反激变换器PWM GaN功率开关

TY1801 是一款针对离线式反激变换器的多模式 PWM GaN 功率开关。TY1801 内置 GaN 功率管,它具备超宽 的 VCC 工作范围,非常适用于 PD 快充等要求宽输出电压的应用场合,系统不需要使用额外的绕组或外围降压电路,节省系统 BOM 成本。TY1801 支持 Burst&…

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论: Swgger 3.0 与Swagger 2.0 区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。 就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原…