分享好友 最新动态首页 最新动态分类 切换频道
Ollama 本地运行大模型(LLM)完全指南
2024-12-26 08:27

这一年来,我已经习惯了使用线上大模型 API 来工作,只要网络在,就可以很方便地使用, 同时还能享受比较好的性能。

不过前两周的时候和一个客户聊系统,他们虽然现在没有应用大模型相关的能力,也没有计划安排 GPU 算力, 不过他们还是执着地要在本地进行大模型的部署。我想这也是很多企业不可改变的现状。

对于这部分需求,社区自然是已经有了很好而且很多的解决方案,比如 Ollama,这个 Github 已经 80.3K 星标的项目。本来这类工具做的易用性非常好(简单,一般是拿来看官网文档直接用就好,不过我在使用的时候发现,他的官网是没有专门的文档页面, 只有连接到 Github 的 Markdown,搞得我连运行起来之后的默认端口都要问一下 AI。

所以我就想还是写篇文章,就把我看到的有用的信息都整理了一下,相信对大家也有点用,同时好让大家对 Ollama 有一个比较全面的了解。

文章包含以下内容

  • 软件安装以及使用容器运行

  • 模型下载、运行、对话

  • 导入自定义模型

  • 定制系统提示

  • CLI 命令全解

  • REST API 介绍

  • Python API 介绍

  • 日志和 Debug

  • Ollama 作为一个服务使用

  • 模型的存储

  • OpenAI 兼容性

  • 并发等常见问题

Ollama是一个专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计的开源工具。它让用户无需深入了解复杂的底层技术,就能轻松地加载、运行和交互各种LLM模型。

Ollama 的特点

  • 本地部署:不依赖云端服务,用户可以在自己的设备上运行模型,保护数据隐私。

  • 多操作系统支持:无论是 Mac、Linux 还是 Window,都能很方便安装使用。

  • 多模型支持:Ollama 支持多种流行的LLM模型,如Llama、Falcon等,用户可以根据自己的需求选择不同的模型,一键运行。

  • 易于使用:提供了直观的命令行界面,操作简单,上手容易。

  • 可扩展性:支持自定义配置,用户可以根据自己的硬件环境和模型需求进行优化。

  • 开源:代码完全开放,用户可以自由查看、修改和分发,虽然没有很多人会去修改。

MacOS

苹果电脑安装很简单,下载 Zip 解压,运行即可

https://ollama.com/download/Ollama-darwin.zip

安装运行 之后,系统任务栏上会有一个应用程序图标,点击可以关闭 Ollama 服务。

Windows

Windows 现在还处于预览版,官方也提供了安装包,安装过程不再赘述。

https://ollama.com/download/OllamaSetup.exe

Linux

Linux 直接 Shell 脚本执行

curl -fsSL https://ollama.com/install.sh | sh

Docker

除了直接安装,我们还可以通过 Docker 运行,官方提供了镜像 ollama/ollama[1], 可以直接运行。

由于 Docker 有一层封装,所以使用 CPU 和 GPU 需要不同的配置。

CPU 模式

先说 CPU 模式运行,这个不需要什么配置和驱动,直接就可以运行,这也是 Ollama 的优势。

 
NVIDIA GPU

前面的命令运行时直接使用 CPU 来进行推理的,适合普通电脑没有 GPU 资源的场景。如果想要在容器(Docker)内使用 GPU 进行推理,配置稍微麻烦一下。

在 Docker 中使用 Nvidia GPU 的过程大家可以参考 NVIDIA 容器工具包文件安装文档[2]。

首先是为 Linux 发行版安装 NVIDIA GPU 驱动程序,安装过程也不是很复杂,以 APT(Ubuntu、Debian 等系统适用)为例。

 

然后配置容器运行时,并重新启动容器服务进程(下面以 Docker 为例,Containerd/Kubernetes 可以参考文末文档

 

然后增加启动参数 使用 GPU 模式启动容器

 
AMD GPU

如果使用 AMD GPUs 来运行 Ollama, 使用 版本的镜像和以下命令运行

 
 

本地运行

先运行服务

 

打开新窗口,运行模型只需要简单的一句命令

 

如果是第一次运行, Ollama 会先从网络上下载模型(5个G左右,比如我下载速度是 2-5M/s,半个多小时之后就可以下载完成了。等待过程大家可以泡个茶休息下。

容器运行

在容器里面运行模型和在本机运行一样,使用 命令

 
 

使用 来运行模型,第一次运行会先下载模型哦。

比如下载 「Llama 3.1」, 那么执行下面命令即可

 

下面列出常用的模型,以及其参数数量、文件大小、在 Ollama 中的模型名,比如 Meta 公司的 Llama 模型, 谷歌公司的 Gemma 模型,以及国内智谱的 GLM 模型、阿里云的千问模型。。

模型参数大小Llama3.18B4.7GLlama3.1405B231GGLM49B5.5GQwen27B4.4GQwen272B41GLlama38B4.7GLlama370B40GPhi33.8B2.3GPhi314B7.9GGemma29B5.5GGemma227B16GMistral7B4.1GStarling7B4.1GCodeLlama7B3.8GLLaVA7B4.5GSolar10.7B6.1G

完整的模型大家可以去 Ollama Library[3] 去搜索和查看。

点击模型可以看到模型的介绍、参数列表、下载命令,等详细信息。

部分模型的 Readme 里面还可以看到模型的评估报告

除了内置支持的模型,你也可以使用 Ollama 来运行自定义模型。支持下面三种方式导入模型

  • GGUF

  • PyTorch

  • Safetensors

从 GGUF 导入

GGUF 是一种文件格式,用于存储使用 GGML 进行推理的模型以及基于 GGML 的执行器。

GGUF 是一种二进制格式,旨在快速加载和保存模型,并且易于读取。一般情况下,模型是使用 PyTorch 或其他框架开发的,然后转换为 GGUF 以在 GGML 中使用。

GGUF 的更多介绍和特点我们不过多介绍,您可以访问 GGUF Github 站点[4]来获取相关信息。

使用 Ollama 导入 GGUF 模型非常简单,只需要如下三步

  1. 创建一个名为 的文件Modelfile,其中包含FROM要导入的模型的本地文件路径的指令。
 
  1. 在 Ollama 中创建模型,这一步我们可以指定模型的名称,比如
 
  1. 经过上面两个步骤,我们就可以像运行内置模型一样运行刚刚导入的自定义模型了。
 

从 PyTorch 或 Safetensors 导入

如果导入的模型是以下架构之一,则可以通过 Modelfile 直接导入 Ollama

  • LlamaForCausalLM

  • MistralForCausalLM

  • GemmaForCausalLM

 

如果不能支持的话,需要先使用 llama.cpp 转换成 GGUF 格式[5]
常见的格式比如 HuggingFace、GGML、Lora 都支持,并提供了转换文件。

使用也很简单,比如转换 HuggingFace 模型。

首先克隆仓库

 

安装必要的 Python 依赖

 

使用也很简单,传入 HuggingFace 的模型和输出位置等参数即可

 
 

Ollama 支持运行系统模型时候,为每个模型定制系统提示(System Prompt)。

以智谱的 GLM 为例,来看看如何定制系统提示语。

首先确保我们下载了该模型

 

创建一个模型文件

 

然后运行模型

 

然后问问他「今天我要做什么」,看看大模型怎么回答

前面已经用到了很多 Ollama 命令,我们下载系统的看一下 Ollama 的 CLI 命令。

创建模型

用于从 Modelfile 创建模型。

 

拉取和更新模型

用于拉取模型,如果模型已经存在,那么则更新本地模型。

 

删除模型

如果模型不再使用,可以使用 从本机删除掉,以节省磁盘存储空间。下次使用的时候,仍然可以重新拉取。

 

复制模型

命令可以复制一个模型,复制模型会占用双倍的磁盘空间。

 

多行输入

在 Ollama 的命令行里面,回车表示发送指令,如果需要多行输入,可以使用单引号 ( ) 来完成。

 

多模态模型

使用多模态模型,只需要输入文件图片地址,即可表示上传了这个图片文件。

 

run 参数提问

我们可以把提示词直接通过参数传递给大模型,该命令不会进入交互式输入模式。比如

 
 

显示模型信息

 

注意,只有下载过之后的模型才能通过 命令来显示模型相关信息。

启动

当您想启动 Ollama 时可以使用 。这样就不需要使用 Ollama 的客户端程序了。比如我们在 Linux 服务器上就可以这样使用。

 

启动之后,我们需要新开一个 Shell 窗口来运行模型

 

由于 命令行和 APP 都使用 默认端口,我们再 GUI 工作的时候执行 会提示端口已占用。我们可以通过环境变量指定一个新的端口,来同时运行两个 ollama 实例

 

Serve 命令提供了很多环境变量,可以让你更自由的运行 Ollama 程序

  • 显示其他调试信息(例如 OLLAMA_DEBUG=1

  • ollama 服务器的 IP 地址(默认 127.0.0.1:11434

  • 模型在内存中保持加载状态的持续时间(默认“5 分钟”

  • 每个 GPU 加载的最大模型数量

  • 排队请求的最大数量

  • 模型目录的路径

  • 并行请求的最大数量

  • 启动时不修剪模型 blob

  • 允许来源的逗号分隔列表

  • 临时文件的位置

  • 启用闪存注意

  • 设置 LLM 库以绕过自动检测

Ollama 启动之后,会自动运行一个执行和管理模型的 API。

回答 API

 

聊天 API

 

除了上述最基本的用法,我们还可以指定响应格式、使用流式响应等。

比如使用流式 API

 

或者非流式 API,直接返回结果

 

更多用法可以参考 Ollama API 文档[6]。

Ollama 提供了 Python API,可以让 Python 程序快速与 Ollama 集成起来。

首先安装依赖库

 

聊天

 

使用流式API

 

另外,CLI 提供的指令在 Python 里面都有 API 对应。

聊天

 

生成文本

 

列出模型

 

显示模型信息

 

创建模型

 

拉取模型

 

拷贝模型

 

删除模型

 

自定义客户端

创建客户端的时候可以指定 和 两个参数

 

错误处理

一般使用 来捕获异常,处理错误

 
 

Ollama 的日志文件存储在 ,我们可以通过查看 这个日志文件来获取 Ollama 的运行信息,以及排查错误。

在 Mac 上直接打开文件即可查看日志

也可以通过命令行来查看

 
 

如果是容器运行的话,更简单,直接查看容器的输出即可

 

调试

默认情况下,Ollama 使用 2048 个标记的上下文窗口大小。

要在使用 的时候更改此设置,请使用

 

使用API时,指定num_ctx参数

 
 

通过 PS 命令查看 模型是否加载到了 GPU 上。

PS 命令会返回当前内存中已经加载的模型

列显示模型被加载到哪个内存中

  • 表示模型已完全加载到 GPU 中

  • 表示模型已完全加载到系统内存中

  • 表示模型已部分加载到 GPU 和系统内存中

一直到前面为止, Ollama 运行起来都只能在本机使用,可以通过设置环境变量来让其他客户端访问。

Serve 命令

如果是使用 Serve 命令启动,那就比较简单,和我们前面改端口一样

 

MacOS 应用程序

如果 Ollama 作为 macOS 应用程序运行,则应使用以下命令设置环境变量launchctl

使用 设置环境变量,然后重新运行程序。

 
 

Ollama 支持使用 和 来配置代理。

如果是 Docker 运行,那么使用 来设置环境变量即可。

Ollama 会下载模型到本地,不同操作系统的模型位置分别是

  • MacOS

  • Linux

  • Windows

如果你想将模型存储到不同位置,可以使用 环境变量来指定不同的目录。

以下服务器设置可用于调整 Ollama 在大多数平台上处理并发请求的方式

  • 可同时加载的最大模型数量(前提是它们适合可用内存)。默认值为 3 * GPU 数量或 3(用于 CPU 推理)。

  • 每个模型同时处理的最大并行请求数。默认将根据可用内存自动选择 4 或 1。

  • Ollama 在繁忙时排队的最大请求数,在拒绝其他请求之前。默认值为 512

Ollama 处理并发请求的逻辑是

  • 如果有足够内存,则可以同时加载多个模型

  • 对于某个模型,如果有足够内存,则可以并发处理请求

  • 如果内存不足以加载新模型:所有请求都排队,直至新模型加载

  • 之前的模型空闲时,会写在一个或多个模型腾出空间给新模型

  • 排队的请求按顺序处理

Ollama 与OpenAI API的部分内容提供了实验性的兼容性, 以帮助将现有应用程序连接到 Ollama。

使用 OpenAI Python 库

用法和 OpenAI 的客户端用法一样。

 

OpenAI JavaScript

 

CURL 工具

 

模型名称

有些程序依赖 OpenAI 默认的模型名称(例如 , 无法修改或者指定模型,可以使用如下方法来解决。

复制一个你喜欢的模型为

 

这样我们就可以李代桃僵来保证原有程序不变,依然传递 作为模型名称

 
 

社区有大量工具和类库都对 Ollama 做了集成,或者说基于 Ollama 进行构建, 我们可以在官网文档[7]上查看具体的项目列表

最新文章
百度发布大数据众智开放平台“点石” 携手行业伙伴加速产业发展
数据是AI时代的燃料。7月4日,百度AI开发者大会(Baidu Create 2018)在北京召开。百度大脑论坛上,百度大数据部高级总监郭谢介绍了基于百度大数据技术的产品生态圈,并发布大数据众智开放平台“点石”(dianshi.baidu.com),提升数据处理效
高清美女写真生成攻略:用搜狐简单AI打造你的虚拟偶像
打开你手机上的微信,搜索“搜狐简单AI”小程序,或者直接访问其官网。步骤2:选择生成类型在主页选择“美女写真”选项,系统会引导你到生成界面。步骤3:上传或选择基础素材你可以选择从图库中上传一张照片,或者使用系统自带的模板。步骤
苹果大动作!全新苹果智能来了!OpenAI重磅官宣:将ChatGPT全面接入苹果设备
每经编辑 杜宇据中证金牛座,当地时间12月11日,苹果发布iOS 18.2、iPadOS 18.2和macOS Sequoia 15.2,同时推出一组全新苹果智能功能,在此前已推出的首批功能基础上,进一步提升用户的iPhone、iPad和Mac使用体验。苹果称,苹果智能是一套
重点建设学科软件投入与执行情况验收表模板
《重点建设学科软件投入与执行情况验收表模板》由会员分享,可在线阅读,更多相关《重点建设学科软件投入与执行情况验收表模板(1页珍藏版)》请在装配图网上搜索。
警惕!手机里的这些APP一定要卸载!!!
国家计算机病毒应急处理中心近期通过互联网监测发现,这些移动App存在隐私不合规行为。1、未声明App运营者的基本情况、未声明隐私政策时效。涉及10款App如下:《医家助手》(版本1.11,应用宝)、《乐护》(版本1.08,)、《亲亲熊识字》(
百度地图修改店铺名称
实体店为什么要在微信上做?现在很多聚餐约会,都会提前在美团或者其他平台选择好门店,在微信发送位置给朋友,这个时候要是你的门店在微信发送位置时搜索不到,可能就会损失一定的客户,微信位置看似小,但却很重要,能给客户带来很多便利
无需插件即可优化 WordPress 速度的 12 种策略
为什么要尝试在没有插件的情况下优化 WordPress 网站的速度?缓慢的网站不仅仅会带来一些小不便,而且当您尝试建立在线成功时,它是一个重大障碍。事实上,根据Portent2022 年的一项研究,在加载页面的前五秒内,每增加一秒,网站转化率平
精品与普通商品之间的差异究竟体现在哪些方面?
在现今的商品市场中,我们经常听到“精品”一词,而这一词汇正是消费者对高质量、高价值的商品所做的总结性描述。那么,精品与普通商品之间的差异究竟体现在哪些方面呢?以下为您进行详细的解析。精品往往在设计中融入了独特的创意和设计理
全球十大购物网站排行榜(转)
  现今社会所有都计算机化,你只需拥有一台计算机,连接互联网,便可以轻轻松松地把所有事情处理妥当,大至个人财务金融管理、小至买本书或买件衫,都可于网络上完成交易。话虽如此,但对于fashion人来讲,最大乐趣莫过于逛街试衫,享受
相关文章
推荐文章
发表评论
0评