张国伟 发表于 2025-3-24 15:52:11

终于可以在本地玩大模子了!Docker+Ollama+Dify,分分钟带你构建Llama模子本地服务,CPU也能玩的大模子教程!

前言

如今越来越多的伙伴们开始借助 Ollama 来把玩模子。Ollama是一款开源工具,它允许用户在本地便捷地运行多种大型开源模子,包罗清华大学的ChatGLM、阿里的千问以及Meta的llama等等。但多数情况下,我们看到的都是那种拿来就用的“预制菜”模式,假如我们想要利用本身微调的模子,那又该怎么搞定呢?
今天这篇文章就来带大家看看怎样通过 Ollama 来搭建“个性化”的模子服务,特殊是针对那些颠末微调、预备用于推理的模子,这个过程中我们还会借助到另外一个王炸工具辅助,Dify。
Dify作为一个开源的大语言模子(LLM)应用开发平台,能够简化和加速生成式AI应用的创建和部署,Dify的开源性质让用户可以轻松将其部署到本身的环境中,支持各种大模子的集成与自界说。
假如我们需要Ollama 官方不支持的模子跑起来,大概需要把最新版 llama.cpp 转换的模子投入利用,同时还想用 Dify 轻松构建 AI 应用,那这篇文章正是可以带你入门和手把手实践的教程!
接下来我们就开始,基于Ollama、Dify 与 Docker 的组合,在本地搭建起 Llama 3.1 模子服务的全过程。
1. 预备工作-模子
模子文件动辄好几个G,下得慢、下不下来每每是把玩模子的第一道坎儿, 特殊是要把模子倒腾到本地大概国内服务器上举行微调,模子下载都是第一步,所以得有个妥当快速的下载方法是非常刚需的。这里先推荐一个快速的镜像方法:
修改 /etc/docker/daemon.json 文件为Docker配置镜像源
{

    "registry-mirrors": \[

      "https://dockerproxy.com",

      "https://dockerhub.icu",

    \]

}
后面再来给大家单独一篇来介绍下载加速的办法。
我们也可以用一个轻量化、好管理的Docker Python镜像作为基础执行环境。这么一来,安装下载工具的时间就省心了,既不用担心错过工具的最新版更新导致下载速率慢大概出岔子,也不用担心下载工具的更新会搅和到本地环境中其他 Python 步伐的依赖关系。
所以,为了不影响到咱们的服务器大概本地环境,我们来通过下面的下令,用一个独立的可持续运行的容器镜像环境,专门用来下载模子:
docker pull dockerproxy.cn/library/python:3.10-slim
https://i-blog.csdnimg.cn/img_convert/e5b468c9e582a86491a39b4e0607eeda.png
将python:3.10-slim下载到本地后,我们来执行下面的下令,启动一个名为 downloader 的背景容器:
docker run -d --name=downloader -v `pwd`:/models python:3.10-slim tail -f /etc/hosts
https://i-blog.csdnimg.cn/img_convert/1d985f0979f7d077a7d38ce7a1f4c4c8.png
这个 docker run 下令用于创建并启动一个新的 Docker 容器,详细参数解释如下:
1. docker run:这是 Docker CLI 的下令,用来创建并运行一个新的容器。
2. -d:这个选项告诉 Docker 在背景运行容器,也就是以守护进程模式运行。
3. --name=downloader:这个选项为新容器指定一个名称。在这里,容器的名称被设置为 downloader。
4. -v \pwd`:/models:-v 是用于挂载卷的选项,它将宿主机的目录挂载到容器内部。这里利用了反引号 `` `` 来执行 pwd 下令,它会打印出当前工作目录的完整路径。/models 是容器内部的挂载点。这意味着宿主机的当前目录被挂载到容器的 /models 目录。
5. python:3.10-slim:指定要利用的 Docker 镜像。这里指定的是标签为 3.10-slim 的 python 官方镜像,slim 表示该镜像是一个精简版,只包罗运行 Python 3.10 所需的最小文件集。
6. tail -f /etc/hosts:这是容器启动后要执行的下令。tail -f 通常用于实时检察文件的新增内容,但在这里,它实际上是一个保持容器运行的小技巧。/etc/hosts 是一个系统文件,tail -f /etc/hosts 下令会让容器持续运行,由于它不绝监视 /etc/hosts 文件的厘革。由于这个文件通常不会厘革,所以这个下令会无穷期地等待,从而使容器保持运行状态。
https://i-blog.csdnimg.cn/img_convert/cf7c1df160c1048133ead216782fc792.jpeg
接下来利用下面的下令,进入容器的下令行环境:
docker exec -it downloader bash
https://i-blog.csdnimg.cn/img_convert/5e84c2c7b8d2a29f295676eb1dc2cb7a.png
https://i-blog.csdnimg.cn/img_convert/9bd786809ed916ff739240d8739faf6d.png
举行一些简单的软件源加速配置(mac系统)
echo ‘export BREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/’ >> ~/.zshrc
source ~/.bash_profile
https://i-blog.csdnimg.cn/img_convert/88c74eeca40ec3a9de2ab8cdfa164b0d.png
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
cd /models
https://i-blog.csdnimg.cn/img_convert/0acc43daeb28baaa89064289c93f0e40.png
安装阿里云modelscope,pip install modelscope,可以看到我们制定的tsinghua的镜像已经生效。modelscope为我们提供模子下载功能的 Python 包
https://i-blog.csdnimg.cn/img_convert/4951a10b2d9b265a5c97fb15563999f6.png
python -c “from modelscope import snapshot_download;snapshot_download(‘LLM-Research/Meta-Llama-3.1-8B-Instruct’, cache_dir=‘./models/’)”
https://i-blog.csdnimg.cn/img_convert/be4066f702ec6e02f2abe9a98e811e66.png
整个下令的作用是,调用 Python 解释器的下令,-c 后面的字符串作为 Python 代码,这行代码从 modelscope 模块中导入了 snapshot_download 函数,阿里云的modelscope是为我们提供模子下载功能的 Python 包,而 snapshot_download 函数用于下载模子。在当前目录下创建一个名为 models 的文件夹(假如它还不存在的话),并下载名为 LLM-Research/Meta-Llama-3.1-8B-Instruct 的模子到这个目录中。
假如看到下面的内容,就代表乐成了
https://i-blog.csdnimg.cn/img_convert/5794972970dc4ee04e08b6e85d76532c.png
https://i-blog.csdnimg.cn/img_convert/8be67e25760eaabc3be2174610102366.png
2. 预备工作-Ollama

2.1. 下载 Ollama 的 Docker 镜像
Ollama是一款开源工具,它允许用户在本地便捷地运行多种大型开源模子,包罗清华大学的ChatGLM、阿里的千问以及Meta的llama等。目前,Ollama兼容macOS、Linux和Windows三大主流操作系统。下面的部分将介绍怎样通过Docker安装Ollama,并将其部署以利用本地大模子。
官网地址:https://hub.docker.com/r/ollama/ollama
https://i-blog.csdnimg.cn/img_convert/2cc201de4378f9211556d4203f3f4d8d.png
docker pull ollama/ollama
https://i-blog.csdnimg.cn/img_convert/b4ba1f40cdbe8c9669d53886134ffdcd.png
2.2. 创建Ollama的Docker容器
通过 docker run 创建容器
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
这个下令会从 Docker Hub 或其他配置的镜像仓库下载 ollama/ollama 镜像(假如本地没有的话),并基于这个镜像创建一个名为 ollama 的容器,参数详细寄义如下:
1. docker run:Docker 的下令,用来创建并启动一个新的容器。
2. -d:表示以守护进程模式运行容器,即在背景运行。
3. -v ollama:/root/.ollama:表示挂载卷(Volume),将宿主机的 ollama 目录挂载到容器内的 /root/.ollama 目录。如许,容器内生成的数据可以持久化存储在宿主机上,纵然容器被删除,数据也不会丢失。
4. -p 11434:11434:表示端口映射,将容器内的 11434 端口映射到宿主机的 11434 端口。如许,可以通过宿主机的 IP 地址和端口 11434 访问容器内的应用。
5. --name ollama:为容器指定一个名称,这里定名为 ollama。
6. ollama/ollama:指定要利用的 Docker 镜像名称,这里利用的是 ollama 官方镜像。
2.3. 进入容器并启动llama3
纵然我们通过 docker run 下令启动了 Ollama 的 Docker 容器,它也不会主动将 ollama 下令添加到你的 PATH 中。我们需要利用 docker exec 下令进入正在运行的容器
docker exec -it ollama ollama run llama3
寄义如下:
1. docker exec:这是 Docker 的一个下令,用于在正在运行的 Docker 容器内执行新的下令。
2. -it:这是两个选项的组合:
3. -i 或 --interactive:保持容器的标准输入(STDIN)打开,纵然不附加到容器终端。
4. -t 或 --tty:分配一个伪终端。这使得你可以与容器内运行的进程举行交互。
5. ollama:这是容器的名称,docker exec 将在名为 ollama 的容器内执行后续的下令。
6. ollama run llama3:这是要在容器内执行的下令。
7. ollama:这是在容器内运行的步伐,它是用于管理大型语言模子的工具。
8. run:这是 ollama 步伐的一个子下令,用于运行指定的模子。
9. llama3:这是要运行的模子的名称。
整个下令的意思是:在名为 ollama 的 Docker 容器内,以交互模式执行 ollama run llama3 下令。这通常是为了启动或运行名为 llama3 的大型语言模子,以便举行推理或其他操作。
假如 llama3 模子还没有在容器内,Ollama 可能会实验从长途仓库下载它。下载和运行模子的过程可能会需要一些时间,详细取决于模子的大小和你的网络速率。如下图所示
https://i-blog.csdnimg.cn/img_convert/d2002a54215b3502067b3859adce870c.png
这里发生的下载可能包罗:
1. 模子数据:假如本地没有存储该模子的数据大概模子版本不是最新的,Ollama 会实验从长途仓库下载所需的模子文件。
2. 模子更新:假如已经下载过模子,但模子有更新,Ollama 可能会下载更新的模子文件。
3. 依赖组件:有时间,模子运行可能需要一些额外的依赖或组件,这些也可能在执行下令时被下载。
4. 初始化过程:对于某些服务,首次运行时会执行初始化过程,这可能包罗下载必要的文件。
5. Ollama 利用 Docker 容器来提供服务,所以当它需要模子文件时,它会利用 Docker 的能力来下载所需的内容。下载过程的耗时取决于多种因素,包罗我们的网络连接速率、长途仓库的响应速率以及模子文件的大小。
执行完成后,就可以直接在控制台和llama3对话啦
https://i-blog.csdnimg.cn/img_convert/f2ae80235df2091e185cac0b6e6d5bbd.png
2.4. 换一种方式启动Qwen2
在通过run下令创建好ollama的docker容器后,我们可以利用 docker exec 下令在已经运行的容器内执行下令:
docker exec -it ollama /bin/bash
这个下令会启动一个交互式的 Bash shell,允许你在容器内执行下令。这里的 ollama 是容器的名称,docker exec 会找到名为 ollama 的容器,并在其内部启动 Bash。
进入了容器的 Bash shell,你就可以执行任何下令,好比运行qwen2
ollama run qwen2
这个下令会在容器内执行,由于容器是基于 ollama/ollama 镜像创建的,所以它知道要利用这个镜像中的环境和配置,执行过后会出现下面的进度条,加载完成后就会看到和上面一样的qwen的对话窗口啦
https://i-blog.csdnimg.cn/img_convert/5599ade565e2e4b7a03d55cd90ba404e.png
3. 启动 Dify IDE
Dify作为一个开源的AI应用开发平台,以其模块化设计、强大的提示工程工具、丰富的功能组件以及支持多种大语言模子而受到开发者的青睐。它联合了后端即服务和LLMOps的理念,提供了低代码/无代码开发环境,使得纵然是非技能职员也能轻松参与AI应用的界说和数据操作。Dify的灵活性和易用性,以及其强大的模子支持和应用编排能力,使得它能够明显低落模子能力对比和选择的成本,同时加速从原型到生产的开发流程。别的,Dify还提供了智能体功能,允许用户快速创建和部署基于LLM的应用步伐,满足特定需求。所有这些特点使得Dify成为开发者构建和部署大语言模子应用的优秀选择。
我们先将Dify clone到本地
git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d
https://i-blog.csdnimg.cn/img_convert/5c0bbed4e8eac71fcff9ed10aa35cbe4.png
默认的配置中包罗了下面几种应用服务:
1. dify,应用的前后端服务。
2. postgres 作为数据库利用。
3. redis 作为缓存服务利用。
4. weaviate 作为向量数据库利用。
5. nginx 作为应用网关利用,默认端口是 80,我们可以根据本身的需求修改调整。
6. docker中也可以看到各种依赖正在精确的运行
https://i-blog.csdnimg.cn/img_convert/9cfb8c330945788615a5760741ac9056.png
接着我们就可以本地访问到启动好的Dify啦
https://i-blog.csdnimg.cn/img_convert/f837dd1e6ac911725653873598b468e7.png
注册好了之后,就可以看到 Dify 的 Dashboard 啦。
https://i-blog.csdnimg.cn/img_convert/2231f22d3ba7ff9348de3060adb736ea.png
想要在 Dify 中愉快的利用 Ollama 的 API,我们需要先打开“设置”中的“添加模子”界面,选择 Ollama。
https://i-blog.csdnimg.cn/img_convert/04e9ee85ea48675cd5b372e9a2674d81.png
参考下面的内容,我们完成包罗模子名称、模子配置参数的填写,点击“保存”,完成新模子的添加。
https://i-blog.csdnimg.cn/img_convert/cd3e7659beb0343478fe914ad9111ba3.png
返回 Dify 的主界面,创建一个新的 AI 应用。
https://i-blog.csdnimg.cn/img_convert/be5b71db67bb6e4dcbaf2a4b2ba030f3.png
创建完成后,就可以基于Agent与本地的llama3举行对话啦
https://i-blog.csdnimg.cn/img_convert/6183bd188fcf17ff445421b026cd0966.png
4. 选修-模子转换

Ollama 的模子仓库(https://ollama.com/library)默认提供了几十种可以直接运行的模子,我们可以通过类似ollama run llama3的下令快速获取预制好的模子。不外,在真正的利用场景下,我们更多的还是要运行本身微调后的模子,所以这里我们的选修部分,来带着大家实验利用 Llama.cpp 来量化本身的模子为 Ollama 可以运行的格式。
llama.cpp 是一款优秀的开源软件,是一个专为大型语言模子(LLM)设计的C++推理库,它通过一系列优化步伐,使得在各种硬件平台上高效运行LLM成为可能。它几乎是伴随着 llama 大模子的成长、爆火、出圈而一起出现在了环球开发者和范畴爱好者面前。
那我们就来实验下手动构建适合本身设备的 llama.cpp 步伐。
4.1. 环境预备
下载代码:
git clone https://github.com/ggerganov/llama.cpp.git --depth=1

切换工作目录:

cd llama.cpp

常规模式构建 llama.cpp:

cmake -B build
4.2. 常规模式构建 llama.cpp
cmake --build build --config Release

如果是 macOS,希望使用 Apple Metal:

GGML\_NO\_METAL=1 cmake --build build --config Release

如果使用 Nvidia GPU:

apt install nvidia-cuda-toolkit -y

cmake -B build -DGGML\_CUDA=ON

cmake --build build --config Release
https://i-blog.csdnimg.cn/img_convert/d3c9eb67ec4b2fbeab1335a4712aa373.png
构建完毕 llama.cpp 后,我们就能够对转换后的模子举行运行验证了。
4.3. 通过 llama.cpp 转换模子格式
为了能够转换模子,我们还需要安装一个简单的依赖
https://i-blog.csdnimg.cn/img_convert/22dc45df57407af74ea710f3c1aaf70d.png
接下来,就可以利用官方的新的转换脚本,来完成模子从 Huggingface Safetensors 格式到通用模子格式 GGML 的转换啦。
/convert_hf_to_gguf.py …/LLM-Research/Meta-Llama-3___1-8B-Instruct
验证转换后模子:
./build/bin/llama-lookup-stats -m …/LLM-Research/Meta-Llama-3___1-8B-Instruct/Meta-Llama-8B-3___1-Instruct-F16.gguf
用模子跑个分:
./build/bin/llama-bench -m …/LLM-Research/Meta-Llama-3___1-8B-Instruct/Meta-Llama-8B-3___1-Instruct-F16.gguf
利用 simple 步伐,来完成上面两个下令的“打包操作”:
./build/bin/llama-simple -m …/LLM-Research/Meta-Llama-3___1-8B-Instruct/Meta-Llama-8B-3___1-Instruct-F16.gguf
验证完转换的模子是精确,并且能够运行的之后,这里我们可以选择根据本身的硬件情况,举行一些量化操作,来低落模子运行对硬件的需求。
4.4. 对转换后的通用模子举行量化
默认情况下,llama.cpp 支持以下的量化方式:
https://i-blog.csdnimg.cn/img_convert/5578c305990a4beea406096480b7ed93.png
好比利用Q4_K_M 一类的量化范例,保持小巧,又不会太掉性能,下令如下:
./build/bin/llama-quantize …/LLM-Research/Meta-Llama-3___1-8B-Instruct/Meta-Llama-8B-3___1-Instruct-F16.gguf Q4_K_M
4.5. 构建 Ollama镜像
1.下载仓库代码
git clone https://github.com/ollama/ollama.git ollama-src
2.切换代码目录
cd ollama-src
3.进入焦点组件目录
cd llm
4.更新组件代码
git submodule update --init --recursive
5.更新 llama.cpp 主分支相关代码
cd llama.cpp
git checkout master
git pull
完成代码的获取后,我们可以根据需要举行容器的构建:
1.回到代码根目录
cd …/…/
2.构建修补后或调整后的步伐docker镜像
bash scripts/build_docker.sh
3.也可以在下令前添加你盼望构建的架构,淘汰构建时间
BUILD_ARCH=amd64 bash scripts/build_docker.sh
https://i-blog.csdnimg.cn/img_convert/b975e3b22f975fb3f926b34d2886b557.png
4.完成构建后,可以看到上面输出的几个拥有很长名称的 Docker 镜像,为了更好的维护和利用,我们可以给镜像起个合适的名字:
docker tag ollama/release:0.3.0-12-gf3d7a48-dirty-amd64 【新的名字】
搞定 Ollama 可以导入的模子文件之后,就可以用上面正文一样的方式基于Ollama去利专心得模子了。
启动模子服务,创造一个ollama-llama3 的环境,并且进入 ollama 容器交互下令行环境
docker run -d --gpus=all -v `pwd`:/root/.ollama -p 11434:11434 --name ollama-llama3 【新的名字】
后面的步骤就是接入Dify,基于我们量化过后的模子举行各种建设了~
最后的最后

感谢你们的阅读和喜欢,作为一位在一线互联网行业奋斗多年的老兵,我深知在这个瞬息万变的技能范畴中,持续学习和进步的重要性。
为了资助更多热爱技能、渴望成长的朋侪,我特殊整理了一份涵盖大模子范畴的宝贵资料集。
这些资料不但是我多年积聚的心血结晶,也是我在行业一线实战经验的总结。
这些学习资料不但深入浅出,而且非常实用,让大家系统而高效地把握AI大模子的各个知识点。假如你乐意花时间沉下心来学习,相信它们一定能为你提供实质性的资助。
这份完整版的大模子 AI 学习资料已经上传CSDN,朋侪们假如需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
https://i-blog.csdnimg.cn/img_convert/c0de40bbeef6103a8fa089555b4a372c.jpeg 大模子知识脑图

为了成为更好的 AI大模子 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证本身学得较为全面。
https://i-blog.csdnimg.cn/direct/5cac48273d614c9996c485fe32ce82f9.png
经典书籍阅读

阅读AI大模子经典书籍可以资助读者提高技能程度,开拓视野,把握焦点技能,提高办理题目标能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模子开发的读者来说,阅读经典书籍是非常有必要的。
https://i-blog.csdnimg.cn/direct/209b04165a2a4e5dba7f9274cf7abacb.png
实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将本身的所学运用到实际当中去,这时间可以搞点实战案例来学习。
https://i-blog.csdnimg.cn/direct/98e60092860742049149a5eb4dbd5496.png
面试资料

我们学习AI大模子一定是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
https://i-blog.csdnimg.cn/direct/c2c70128a0ed46f39d5a89320c66d76f.png
640套AI大模子陈诉合集

这套包罗640份陈诉的合集,涵盖了AI大模子的理论研究、技能实现、行业应用等多个方面。无论您是科研职员、工程师,还是对AI大模子感爱好的爱好者,这套陈诉合集都将为您提供宝贵的信息和启示。
https://i-blog.csdnimg.cn/direct/5ce90b1d8ef843fb8db8d74fa53cb276.png
这份完整版的大模子 AI 学习资料已经上传CSDN,朋侪们假如需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
https://i-blog.csdnimg.cn/img_convert/c0de40bbeef6103a8fa089555b4a372c.jpeg
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 终于可以在本地玩大模子了!Docker+Ollama+Dify,分分钟带你构建Llama模子本地服务,CPU也能玩的大模子教程!