终于可以在本地玩大模子了!Docker+Ollama+Dify,分分钟带你构建Llama模子 ...

打印 上一主题 下一主题

主题 893|帖子 893|积分 2679

媒介

现在越来越多的伙伴们开始借助 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设置镜像源
  1. {
  2.     "registry-mirrors": \[
  3.         "https://dockerproxy.com",
  4.         "https://dockerhub.icu",
  5.     \]
  6. }
复制代码
背面再来给大家单独一篇来先容下载加速的办法。
我们也可以用一个轻量化、好管理的Docker Python镜像作为底子实行环境。这么一来,安装下载工具的时间就省心了,既不消担心错过工具的最新版更新导致下载速度慢或者出岔子,也不消担心下载工具的更新会搅和到本地环境中其他 Python 程序的依赖关系。
所以,为了不影响到咱们的服务器或者本地环境,我们来通过下面的下令,用一个独立的可连续运行的容器镜像环境,专门用来下载模子:
docker pull dockerproxy.cn/library/python:3.10-slim

将python:3.10-slim下载到本地后,我们来实行下面的下令,启动一个名为 downloader 的后台容器:
docker run -d --name=downloader -v `pwd`:/models python:3.10-slim tail -f /etc/hosts

这个 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 文件的变革。由于这个文件通常不会变革,所以这个下令会无限期地等候,从而使容器保持运行状态。

接下来利用下面的下令,进入容器的下令行环境:
docker exec -it downloader bash


举行一些简朴的软件源加速设置(mac体系)
echo ‘export BREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/’ >> ~/.zshrc
source ~/.bash_profile

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
cd /models

安装阿里云modelscope,pip install modelscope,可以看到我们制定的tsinghua的镜像已经生效。modelscope为我们提供模子下载功能的 Python 包

python -c “from modelscope import snapshot_download;snapshot_download(‘LLM-Research/Meta-Llama-3.1-8B-Instruct’, cache_dir=‘./models/’)”

整个下令的作用是,调用 Python 表明器的下令,-c 背面的字符串作为 Python 代码,这行代码从 modelscope 模块中导入了 snapshot_download 函数,阿里云的modelscope是为我们提供模子下载功能的 Python 包,而 snapshot_download 函数用于下载模子。在当前目录下创建一个名为 models 的文件夹(假如它还不存在的话),并下载名为 LLM-Research/Meta-Llama-3.1-8B-Instruct 的模子到这个目录中。
假如看到下面的内容,就代表成功了


2. 预备工作-Ollama

2.1. 下载 Ollama 的 Docker 镜像
Ollama是一款开源工具,它答应用户在本地便捷地运行多种大型开源模子,包括清华大学的ChatGLM、阿里的千问以及Meta的llama等。现在,Ollama兼容macOS、Linux和Windows三大主流操作体系。下面的部门将先容如何通过Docker安装Ollama,并将其部署以利用本地大模子。
官网地点:https://hub.docker.com/r/ollama/ollama

docker pull ollama/ollama

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 大概会实验从远程堆栈下载它。下载和运行模子的过程大概会须要一些时间,具体取决于模子的巨细和你的网络速度。如下图所示

这里发生的下载大概包括:
1. 模子数据:假如本地没有存储该模子的数据或者模子版本不是最新的,Ollama 会实验从远程堆栈下载所需的模子文件。
2. 模子更新:假如已经下载过模子,但模子有更新,Ollama 大概会下载更新的模子文件。
3. 依赖组件:有时间,模子运行大概须要一些额外的依赖或组件,这些也大概在实行下令时被下载。
4. 初始化过程:对于某些服务,初次运行时会实行初始化过程,这大概包括下载须要的文件。
5. Ollama 利用 Docker 容器来提供服务,所以当它须要模子文件时,它会利用 Docker 的本领来下载所需的内容。下载过程的耗时取决于多种因素,包括我们的网络毗连速度、远程堆栈的相应速度以及模子文件的巨细。
实行完成后,就可以直接在控制台和llama3对话啦

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的对话窗口啦

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

默认的设置中包含了下面几种应用服务:
1. dify,应用的前后端服务。
2. postgres 作为数据库利用。
3. redis 作为缓存服务利用。
4. weaviate 作为向量数据库利用。
5. nginx 作为应用网关利用,默认端口是 80,我们可以根据本身的需求修改调整。
6. docker中也可以看到各种依赖正在精确的运行

接着我们就可以本地访问到启动好的Dify啦

注册好了之后,就可以看到 Dify 的 Dashboard 啦。

想要在 Dify 中愉快的利用 Ollama 的 API,我们须要先打开“设置”中的“添加模子”界面,选择 Ollama。

参考下面的内容,我们完成包括模子名称、模子设置参数的填写,点击“生存”,完成新模子的添加。

返回 Dify 的主界面,创建一个新的 AI 应用。

创建完成后,就可以基于Agent与本地的llama3举行对话啦

4. 选修-模子转换

Ollama 的模子堆栈(https://ollama.com/library)默认提供了几十种可以直接运行的模子,我们可以通过类似ollama run llama3的下令快速获取预制好的模子。不过,在真正的利用场景下,我们更多的照旧要运行本身微调后的模子,所以这里我们的选修部门,来带着大家实验利用 Llama.cpp 来量化本身的模子为 Ollama 可以运行的格式。
llama.cpp 是一款良好的开源软件,是一个专为大型语言模子(LLM)设计的C++推理库,它通过一系列优化措施,使得在各种硬件平台上高效运行LLM成为大概。它险些是陪同着 llama 大模子的成长、爆火、出圈而一起出现在了举世开辟者和领域爱好者面前。
那我们就来实验动手动构建得当本身设备的 llama.cpp 程序。
4.1. 环境预备
下载代码:
  1. git clone https://github.com/ggerganov/llama.cpp.git --depth=1
  2. 切换工作目录:
  3. cd llama.cpp
  4. 常规模式构建 llama.cpp:
  5. cmake -B build
复制代码
4.2. 通例模式构建 llama.cpp
  1. cmake --build build --config Release
  2. 如果是 macOS,希望使用 Apple Metal:
  3. GGML\_NO\_METAL=1 cmake --build build --config Release
  4. 如果使用 Nvidia GPU:
  5. apt install nvidia-cuda-toolkit -y
  6. cmake -B build -DGGML\_CUDA=ON
  7. cmake --build build --config Release
复制代码

构建完毕 llama.cpp 后,我们就能够对转换后的模子举行运行验证了。
4.3. 通过 llama.cpp 转换模子格式
为了能够转换模子,我们还须要安装一个简朴的依赖

接下来,就可以利用官方的新的转换脚本,来完成模子从 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 支持以下的量化方式:

比如利用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

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%免费】
大模子知识脑图

为了成为更好的 AI大模子 开辟者,这里为大家提供了总的门路图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证本身学得较为全面。

经典册本阅读

阅读AI大模子经典册本可以资助读者提高技术程度,开拓视野,掌握核心技术,提高解决问题的本领,同时也可以鉴戒他人的经验。对于想要深入学习AI大模子开辟的读者来说,阅读经典册本黑白常有须要的。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才华将本身的所学运用到现实当中去,这时间可以搞点实战案例来学习。

面试资料

我们学习AI大模子必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

640套AI大模子报告合集

这套包含640份报告的合集,涵盖了AI大模子的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,照旧对AI大模子感爱好的爱好者,这套报告合集都将为您提供名贵的信息和启示。

这份完备版的大模子 AI 学习资料已经上传CSDN,朋侪们假如须要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表