Created
Jul 30, 2024 10:37 AM
Favorite
Favorite
Priority
备注
推荐
类型
模型部署
本篇文章聊聊,如何使用 Ollama、Dify 和 Docker 来完成本地 Llama 3.1 模型服务的搭建。
如果你需要将 Ollama 官方不支持的模型运行起来,或者将新版本 llama.cpp 转换的模型运行起来,并且想更轻松的使用 Dify 构建 AI 应用,那么本文或许会对你有所帮助。
写在前面
最近这阵比较忙,线下见了非常多不同地区的朋友,围绕 Dify 和开源社区做了不少应用和实践分享。
可爱的 Ollama 项目
不论是 Dify 生态还是其他的软件生态,越来越多的朋友开始使用 Ollama 来了解模型。不过更多时候,我们见到的是“下载预制菜”使用的玩法,如果我们本地有微调好的模型,又该如何运行呢?
以及,在最近 Llama.cpp 的一次版本发布中,支持了 Llama 3.1 的“rope scaling factors”[1]特性后,新换后的通用模型,其实并不能够被 Ollama 直接启动运行,那么又该怎么处理呢?
为了解决上面两个问题,以及最近忙于线下分享,没有写博客的问题,这篇文章就来聊聊,如何使用 Ollama 来完成“个性化的”模型服务搭建,适合微调后的模型的推理使用呢?
本文当然包含了上面这些问题的答案。
愉快的使用 Dify 来调用 Ollama
让我们开始实战。
准备工作
默认情况下,我们的准备工作只有两项,准备模型文件和准备 Ollama 运行程序。
本文中,我们以 Llama 最新发布的 3.1 版本原始模型为例,你可以参考这个方式,来转换你的本地微调好的模型,或者其他,Ollama 官方不支持的模型。
下载模型
先来聊聊下载模型。
下载模型可以参考《节省时间:AI 模型靠谱下载方案汇总[2]》中提到的方法。
如果你的服务器或本地服务在国内,可以使用 ModelScope,社区已经有同学将 HuggingFace 上的 Llama 3.1 搬运到了模型库中:8B[3]、70B[4]。
为了不影响我们的服务器或本地的环境,可以创建一个独立的容器镜像环境,来完成模型下载任务。
执行下面的命令,能够创建一个持续运行的容器镜像:
使用下面的命令,进入容器的命令行环境:
接着,进行一些简单的软件源加速配置:
最后,执行下面的命令,开始具体模型的下载。
以 8B 版本的模型为例,完整仓库尺寸在 30GB,如果你是千兆宽带,满速下载时间大概只需要几分钟。
下载后的目录内容、主要模型的校验结果、目录尺寸如下:
下载 Ollama 的 Docker 镜像
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],了解各种有趣的使用方法。之前提到的一些内容,我就不再展开。
在 Dify 中找到添加模型界面
想要在 Dify 中愉快的使用 Ollama 的 API,我们需要先打开“设置”中的“添加模型”界面,选择 Ollama。
完成模型的参数配置填写
参考上文中的信息,我们完成包括模型名称、模型配置参数的填写,点击“保存”,完成新模型的添加。
使用 Dify 创建一个新应用
返回 Dify 的主界面,创建一个新的 AI 应用,随便起个名字,我这里使用的是“Llama 3.1 Ollama 接口验证”。
在模型列表中选择 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
个人观点,仅供参考