Created
Jul 30, 2024 10:37 AM
Favorite
Favorite
Priority
备注
推荐
类型
本篇文章聊聊,如何使用 Ollama、Dify 和 Docker 来完成本地 Llama 3.1 模型服务的搭建。
如果你需要将 Ollama 官方不支持的模型运行起来,或者将新版本 llama.cpp 转换的模型运行起来,并且想更轻松的使用 Dify 构建 AI 应用,那么本文或许会对你有所帮助。

写在前面

最近这阵比较忙,线下见了非常多不同地区的朋友,围绕 Dify 和开源社区做了不少应用和实践分享。
notion image
可爱的 Ollama 项目
不论是 Dify 生态还是其他的软件生态,越来越多的朋友开始使用 Ollama 来了解模型。不过更多时候,我们见到的是“下载预制菜”使用的玩法,如果我们本地有微调好的模型,又该如何运行呢?
以及,在最近 Llama.cpp 的一次版本发布中,支持了 Llama 3.1 的“rope scaling factors”[1]特性后,新换后的通用模型,其实并不能够被 Ollama 直接启动运行,那么又该怎么处理呢?
为了解决上面两个问题,以及最近忙于线下分享,没有写博客的问题,这篇文章就来聊聊,如何使用 Ollama 来完成“个性化的”模型服务搭建,适合微调后的模型的推理使用呢?
本文当然包含了上面这些问题的答案。
notion image
愉快的使用 Dify 来调用 Ollama
让我们开始实战。

准备工作

默认情况下,我们的准备工作只有两项,准备模型文件和准备 Ollama 运行程序。
本文中,我们以 Llama 最新发布的 3.1 版本原始模型为例,你可以参考这个方式,来转换你的本地微调好的模型,或者其他,Ollama 官方不支持的模型。

下载模型

先来聊聊下载模型。
下载模型可以参考《节省时间:AI 模型靠谱下载方案汇总[2]》中提到的方法。
如果你的服务器或本地服务在国内,可以使用 ModelScope,社区已经有同学将 HuggingFace 上的 Llama 3.1 搬运到了模型库中:8B[3]、70B[4]。
为了不影响我们的服务器或本地的环境,可以创建一个独立的容器镜像环境,来完成模型下载任务。
执行下面的命令,能够创建一个持续运行的容器镜像:
使用下面的命令,进入容器的命令行环境:
接着,进行一些简单的软件源加速配置:
最后,执行下面的命令,开始具体模型的下载。
以 8B 版本的模型为例,完整仓库尺寸在 30GB,如果你是千兆宽带,满速下载时间大概只需要几分钟。
下载后的目录内容、主要模型的校验结果、目录尺寸如下:

下载 Ollama 的 Docker 镜像

notion image
Ollama 的 DockerHub 有百万下载量
我们可以在 Ollama 的 Docker 页面[5]中找到所有可以下载的版本。
官方出于项目的可维护性(省的写如何升级),建议我们直接使用下面的命令来下载 ollama 的 Docker 镜像。
不过,我个人还是建议,我们始终使用具体的版本的镜像,来确保我们的运行环境是明确的,运行环境可维护性,使用类似下面的方式下载镜像。
针对不同的设备,我们的运行指令也需要有不同的调整:

使用 llama.cpp 转换模型程序

Ollama 的模型仓库[6]默认提供了几十种可以直接运行的模型,我们可以通过类似下面的命令快速获取预制菜。
不过,出于授人以渔的目的,以及在许多场景下,我们终究要运行自己 finetune 微调后的模型,这里我们选择使用 Llama.cpp 来量化自己的模型为 Ollama 可以运行的格式。
在《零一万物模型折腾笔记:官方 Yi-34B 模型基础使用[7]》文章中的“尝试对模型进行几种不同的量化操作”、《本地运行“李开复”的零一万物 34B 大模型[8]》中的“编译使用 GPU 的 llama.cpp”、《CPU 混合推理,非常见大模型量化方案:“二三五六” 位量化[9]》三篇文章中,我分别提到过 Llama.cpp 的 CPU 程序编译、GPU 程序编译、通用模型格式的量化操作。如果你感兴趣,可以自行翻阅。

构建新版本的 llama.cpp

简单来说,我们可以通过下面的方式,来手动构建适合自己设备的 llama.cpp 程序:
当我们构建完毕 llama.cpp 后,我们就能够对转换后的模型进行运行验证了。

通过 llama.cpp 转换模型格式

为了能够转换模型,我们还需要安装一个简单的依赖:
接下来,就可以使用官方的新的转换脚本,来完成模型从 Huggingface Safetensors 格式到通用模型格式 GGML 的转换啦。

验证转换后模型

转换完的模型,我们可以使用下面的命令,来查看基本状况:
当然,也可以“跑个分”:
或者使用 simple 程序,来完成上面两个命令的“打包操作”:
验证完转换的模型是正确,并且能够运行的之后,这里我们可以选择根据自己的硬件情况,进行一些量化操作,来降低模型运行对硬件的需求。

对转换后的通用模型进行量化

默认情况下,llama.cpp 支持以下的量化方式:
我个人通常会选择 Q4_K_M 一类的量化类型,保持小巧,又不会太掉性能,你可以根据自己的习惯来进行量化:
我们可以使用上文中的方式,对量化后的模型再次进行验证:
可以看到,默认情况下,使用 CPU 进行推理的速度就提升了 3 倍。
接下来,我们来使用 Docker 和 Ollama 来运行刚刚量化好的模型,完成服务的搭建。

Ollama 服务的启动

当我们搞定 Ollama 可以导入的模型文件之后,就可以开始折腾 Ollama 啦。

完成 Ollama 模型的构建

我们可以创建一个干净的目录,将刚刚在其他目录中量化好的模型放进来,创建一个 ollama 模型配置文件,方便后续的操作:
然后,使用上文中提到的命令,将服务运行起来:
接着,使用下面的命令,进入 ollama 容器交互命令行环境:
执行下面的命令,完成 ollama 模型的导入:
正常情况下,我们将看到类似下面的日志输出:
导入模型后,我们可以通过 show 命令,来查看模型的基础状况:
转换完毕的模型,会保存在 ~/.ollama/models 目录中。
因为我们刚刚在启动服务的时候,已经在模型目录映射到了本地,所以接下来,我们只需要重新创建一个容器,携带合适的命令,就能够完成服务的搭建了,而无需再次构建 ollama 镜像。

启动 Ollama 模型服务

通常情况下,如果已经完成了模型的转换,我们可以结合上文中的命令进行调整,在命令后添加要执行的模型,来完成服务的启动:
不过,最近 llama.cpp 有更新,更新后的模型 ollama 是无法启动的,我们需要从源码重新构建 Ollama 镜像。
当然,为了更简单的解决问题,我已经将构建好的镜像上传到了 DockerHub,我们可以使用下面的命令,来下载这个 CPU 和 N 卡通用的镜像(AMD Rocm镜像比较大,如果有需要,我再上传吧)。
然后,将命令替换为:
接下来,我们就可以通过 API 来调用 Ollama 服务,运行我们的自定义模型啦(custom_llama_3_1)。
调用后的输出结果类似下面这样:
当然,为了更直观,我们可以使用 Dify 来调用 Ollama 的 API,构建 AI 应用。这个内容,我们在本文的下一小节展开。

从源码构建 Ollama 程序镜像

想要从源码构建 Ollama 并不复杂,但是我们需要做一些准备工作。
完成代码的获取后,我们可以根据需要进行容器的构建:
作者并没有针对 Docker 构建做优化,所以构建时间会相对的长一些:
完成构建后,我们将得到上面输出的几个拥有很长名称的 Docker 镜像,为了更好的维护和使用,我们可以给镜像起个合适的名字:
这个镜像,我已经上传到了 DockerHub,有需要的同学可以直接下载使用:

Ollama 在 Dify 中的使用

关于 Dify 的实战内容,我之前已经写过了一些,如果你感兴趣,可以阅读这里[10],了解各种有趣的使用方法。之前提到的一些内容,我就不再展开。
notion image
在 Dify 中找到添加模型界面
想要在 Dify 中愉快的使用 Ollama 的 API,我们需要先打开“设置”中的“添加模型”界面,选择 Ollama。
notion image
完成模型的参数配置填写
参考上文中的信息,我们完成包括模型名称、模型配置参数的填写,点击“保存”,完成新模型的添加。
notion image
使用 Dify 创建一个新应用
返回 Dify 的主界面,创建一个新的 AI 应用,随便起个名字,我这里使用的是“Llama 3.1 Ollama 接口验证”。
notion image
在模型列表中选择 Ollama 模型
在新建的 AI 应用界面,选择刚刚添加的 Ollama 模型。
对模型进行验证
接下来,就是愉快的 Dify 时间,根据你的需要来和 Ollama 模型进行交互啦。如果你对具体的应用玩法感兴趣,可以参考我之前写过的 Dify 相关的实战内容[11]。

最后

接下来的相关内容,让我们继续聊聊今年下半年“大模型”新赛季版本的一些有趣玩法升级吧。
下一篇文章见。
  • -EOF

引用链接

[1] 支持了 Llama 3.1 的“rope scaling factors”: https://github.com/ggerganov/llama.cpp/releases/tag/b3472
[2] 节省时间:AI 模型靠谱下载方案汇总: https://soulteary.com/2024/01/09/summary-of-reliable-download-solutions-for-ai-models.html
[3] 8B: https://modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct
[4] 70B: https://modelscope.cn/models/LLM-Research/Meta-Llama-3.1-70B
[5] Ollama 的 Docker 页面: https://hub.docker.com/r/ollama/ollama
[6] Ollama 的模型仓库: https://ollama.com/library
[7] 零一万物模型折腾笔记:官方 Yi-34B 模型基础使用: https://soulteary.com/2023/12/10/notes-on-the-01-ai-model-basic-use-of-the-official-yi-34b.html
[8] 本地运行“李开复”的零一万物 34B 大模型: https://soulteary.com/2023/11/26/locally-run-the-yi-34b-large-model-of-kai-fu-lee.html
[9] CPU 混合推理,非常见大模型量化方案:“二三五六” 位量化: https://soulteary.com/2023/12/12/cpu-hybrid-inference-unusual-large-language-model-quantization-2-3-5-6-bit-quantization.html
[10] 阅读这里: https://soulteary.com/tags/dify.html
[11] 之前写过的 Dify 相关的实战内容: https://soulteary.com/tags/dify.html
[12] 署名 4.0 国际 (CC BY 4.0): https://creativecommons.org/licenses/by/4.0/deed.zh
如果你觉得内容还算实用,欢迎点赞分享给你的朋友,在此谢过。
如果你想更快的看到后续内容的更新,请戳 “点赞”、“分享”、“喜欢” ,这些免费的鼓励将会影响后续有关内容的更新速度。
开源46
Docker45
Dify7
llama1
ollama1
开源 · 目录
上一篇福布斯 AI 50 榜单中唯一开源向量数据库:Weaviate
个人观点,仅供参考
Loading...