本文原文链接
尼恩:LLM大模型学习圣经PDF的起源
在40岁老架构师 尼恩的读者交流群(50+)中,经常性的指导小伙伴们改造简历。
经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会,拿到了大厂机会。
然而,其中一个成功案例,是一个9年经验 网易的小伙伴,当时拿到了一个年薪近80W的大模型架构offer,逆涨50%,那是在去年2023年的 5月。
不到1年,小伙伴也在团队站稳了脚跟,成为了名副其实的大模型 应用 架构师。
接下来,尼恩架构团队,通过 梳理一个《LLM大模型学习圣经》 帮助更多的人做LLM架构,拿到年薪100W, 这个内容体系包括下面的内容:
- 《LLM大模型学习圣经:从0到1吃透Transformer技术底座》
- 《LangChain学习圣经:从0到1精通LLM大模型应用开发的基础框架》
- 《LLM大模型学习圣经:从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》
- 《SpringCloud + Python 混合微服务架构,打造AI分布式业务应用的技术底层》
- 《LLM大模型学习圣经:从0到1吃透大模型的顶级架构》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的架构 与实操》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的 中台 架构 与实操》
以上学习圣经 的 配套视频, 2025年 5月份之前发布。
需要准备的工具列表
基于Dify + Qwen2 完成本地 LLM 大模型应用实操, 需要准备的工具列表有:
- windows11
- vmware
- centos
- docker
- docker-compose
- dify
- vscode
- python 3.10.x
- node.js 18.x
- final shell
一、系统虚拟化
如果不想使用虚拟机CentOS+VM搭建Docker,可以在Window’s系统快速搭建Docker简化开发工作。
1.1 启用虚拟化
任务管理器(CTRL+Shift+Esc), 选择性能,查看CPU虚拟化,确认是否已启用(默认启用)。
1.2 启用Hyper-v并开启虚拟任务
按住键盘Win+R,输入control
二、安装 wsl
2.1 WSL简介
WSL(Windows Subsystem for Linux,Windows 下的 Linux 子系统)是微软在 Windows 10 和 Windows 11 中推出的一项功能,允许用户在 Windows 系统中运行完整的 Linux 环境,而无需 安装虚拟机 或双系统。
以下是关于 WSL 的详细介绍:
2.1.1 WSL 的主要功能
WSL 提供了一种在 Windows 系统中运行 Linux 环境的方法,特点如下:
- 可以运行大多数 Linux 命令行工具、脚本和应用程序。
- 兼容大多数 Linux 发行版(如 Ubuntu、Debian、Kali Linux 等)。
- 无需启动虚拟机或双系统,性能接近原生。
- 能直接访问 Windows 文件系统(通过
/mnt/c/
等目录)。
2.1.2 WSL 的版本
WSL 有两个主要版本:
WSL 1
- 特点:使用 Linux 系统调用翻译层,与 Windows 内核交互。
- 优点:启动速度快,占用少量资源,兼容性高。
- 缺点:不支持完整的 Linux 内核功能,如 Docker 等依赖内核功能的软件。
WSL 2
- 特点:使用轻量级虚拟机运行完整的 Linux 内核。
- 优点:性能更强,兼容性更好,可以运行 Docker 等复杂的应用程序。
- 缺点:启动速度较慢,占用更多内存(但仍比传统虚拟机轻量)。
你可以通过以下命令检查 WSL 版本:
wsl --list --verbose
2.1.3 为什么使用 WSL?
WSL 对开发者和 Linux 用户特别有吸引力,原因包括:
开发者友好
- 可直接在 Linux 环境中运行 Node.js、Python、Ruby、Go 等开发工具。
- 使用
git
进行版本控制,支持 Linux 下的开发流程。
系统兼容
- 直接访问 Windows 文件和工具(如 VS Code、PowerShell 等)。
- 无需配置复杂的网络桥接即可在 Linux 和 Windows 应用之间传输数据。
无需虚拟机或双系统
- 与传统虚拟机相比,占用更少的系统资源。
- 不需要重新启动或切换系统。
2.1.4 WSL 的工作原理
WSL 在 Windows 上运行 Linux 的方式包括:
- WSL 1:通过翻译层将 Linux 系统调用转化为 Windows 系统调用。
- WSL 2:使用轻量级虚拟机运行完整的 Linux 内核,并通过快速文件传输机制与 Windows 文件系统交互。
2.1.5 WSL 的常见使用场景
- Web 开发:使用 Linux 下的工具(如 Nginx、MySQL、Node.js 等)进行开发。
- 学习 Linux:提供一个无风险的环境来学习 Linux 命令和工具。
- 运行脚本和工具:如 Bash 脚本、Python 脚本等。
- 系统集成:将 Linux 工具与 Windows 应用程序无缝结合。
2.1.6 与虚拟机的区别
特性 | WSL | 虚拟机 |
---|---|---|
性能 | 接近原生 | 较高但略慢 |
启动速度 | 几乎瞬间启动 | 需要完整虚拟机启动 |
系统资源占用 | 很低 | 较高 |
兼容性 | 限于 Linux 命令行环境 | 完整的 Linux 桌面或服务器环境 |
文件系统访问 | 无缝访问 Windows 文件系统 | 需要配置共享文件夹 |
2.1.7 适合使用 WSL 的人群
- Windows 用户,需要偶尔运行 Linux 工具或脚本
- Web 开发者,特别是使用 Linux 环境作为部署目标的开发者。
- 想学习 Linux,但又不想安装双系统或虚拟机的用户。
2.2 启用 WSL
2.2.1 打开 PowerShell(管理员模式)
2.2.2 输入以下命令来启用 WSL 和虚拟机平台:
wsl --install
该命令将自动启用所需的功能,包括 WSL 1、 WSL 2 和虚拟机平台。
若系统未安装虚拟机平台,安装过程中会提示你重启计算机。
如果 wsl --install
命令不可用,可以尝试以下单独的命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
尼恩的 启用 WSL 过程如下:
<无法加载 Snipaste_2025-01-12_23-15-16.png,点击修复>
启用 WSL 命令解释
dism.exe
:
是 Windows 操作系统中的一个命令行工具,全称为 Deployment Image Servicing and Management Tool,用于服务和管理 Windows 映像,包括安装、卸载、配置 Windows 功能、驱动程序和更新等。/online
:
表示对当前正在运行的 Windows 操作系统进行操作,而不是针对脱机的 Windows 映像文件。
第一条命令:
/enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
/enable-feature
:此参数指示 DISM 启用指定的 Windows 功能。/featurename:Microsoft-Windows-Subsystem-Linux
:指定要启用的功能名称为Microsoft-Windows-Subsystem-Linux
。该功能是 Windows Subsystem for Linux(WSL),它允许用户在 Windows 系统上运行 Linux 环境,无需安装虚拟机或双启动系统。通过启用此功能,用户可以从 Microsoft Store 安装不同的 Linux 发行版,并在 Windows 系统中运行 Linux 命令行工具和应用程序,提高开发和运维的便利性,例如使用 Linux 命令进行开发、测试或管理服务器等。/all
:表示启用该功能的所有子功能(如果有的话),确保启用完整的功能集。/norestart
:指示 DISM 在完成操作后不要自动重启计算机。在某些情况下,用户可能不希望立即重启计算机,可以使用此参数,在完成其他操作后手动重启。
第二条命令:
/enable-feature /featurename:VirtualMachinePlatform /all /norestart
/featurename:VirtualMachinePlatform
:该参数指示 DISM 启用名为VirtualMachinePlatform
的功能。这个功能与 Windows 的虚拟机平台相关,可能是为了支持某些虚拟机功能或增强 Windows 对虚拟机的兼容性和性能。在 WSL 2 的环境中,启用VirtualMachinePlatform
是一个重要的步骤,因为 WSL 2 是基于 Hyper-V 虚拟机技术构建的,所以启用此功能有助于 WSL 2 的正常运行。/all
和/norestart
的含义与第一条命令中的相同,即启用该功能的所有子功能并避免自动重启计算机。
执行步骤
打开命令提示符(以管理员身份运行):
按下
Win + X
组合键,选择命令提示符(管理员)
或Windows PowerShell(管理员)
。输入命令:
依次输入上述两条命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
等待命令执行:
DISM 会开始启用相应的功能,根据系统性能和功能大小,可能需要一段时间。你可以在命令提示符中看到操作的进度信息。
手动重启(可选):
由于使用了
/norestart
参数,如果你需要启用的功能在下次启动时才能生效,可在完成所有操作后手动重启计算机。
注意事项
管理员权限:
务必以管理员身份运行命令提示符或 Windows PowerShell,否则将无法使用 DISM 进行这些操作,会收到权限错误信息。
系统兼容性:
确保你的 Windows 版本支持上述功能,不同的 Windows 版本可能对这些功能的支持有所不同。一般来说,这些功能在 Windows 10 及以上版本可用,但具体的特性和要求可能会因 Windows 版本而异。
WSL 版本:
如果你打算使用 WSL 2,在执行上述操作后,可能还需要进一步的步骤,例如从 Microsoft Store 安装 Linux 发行版,并设置 WSL 版本为 2。你可以使用
wsl --set-version <DistributionName> 2
命令将已安装的 Linux 发行版设置为 WSL 2,其中<DistributionName>
是你安装的 Linux 发行版的名称。
这两条命令通常是为了在 Windows 系统上使用 Windows Subsystem for Linux 做准备工作。你是否在尝试安装 WSL 或者遇到了执行这些命令时的问题呢 可以告诉我你遇到的具体情况,我会尽力帮助你解决问题
2.3.安装Ubuntu 虚拟机
2.3.1 查看可安装发行版
2.3.1.1 查看可用的虚拟机
使用以下命令查看支持的 Linux 发行版:
wsl --list --online
2.3.1.2 输出示例
C:\Users\32956>wsl --list --online以下是可安装的有效分发的列表。 使用 'wsl.exe --install <Distro>' 安装。 NAME FRIENDLY NAMEUbuntu UbuntuDebian Debian GNU/Linuxkali-linux Kali Linux RollingUbuntu-18.04 Ubuntu 18.04 LTSUbuntu-20.04 Ubuntu 20.04 LTSUbuntu-22.04 Ubuntu 22.04 LTSUbuntu-24.04 Ubuntu 24.04 LTSOracleLinux_7_9 Oracle Linux 7.9OracleLinux_8_7 Oracle Linux 8.7OracleLinux_9_1 Oracle Linux 9.1openSUSE-Leap-15.6 openSUSE Leap 15.6SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6openSUSE-Tumbleweed openSUSE Tumbleweed
2.3.2 安装虚拟机
2.3.2.1 安装指定的 Linux 发行版:
wsl --install -d <虚拟机名称>
2.3.2.2 例如安装 Ubuntu 20.04:
wsl --install -d Ubuntu-22.04
2.3.2.3 首次启动
安装完成后,首次启动时会提示设置用户名和密码。
设置完成后即可进入新的 WSL 环境。列如:
Enter new UNIX username: fhy
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
2.3.3 验证虚拟机状态
2.3.3.1 验证虚拟机是否安装成功并启动
wsl --list --verbose
2.3.3.2 启动虚拟机
wsl
在 Windows 的命令提示符(CMD)或 PowerShell 中,可以使用wsl --shutdown
命令来停止所有正在运行的 WSL 虚拟机。
如果只想停止特定的发行版,可以使用wsl --shutdown <发行版名称>
,例如wsl --shutdown Ubuntu-20.04
。
wsl --shutdown Ubuntu-20.04
2.3.4 删除现有虚拟机
2.3.4.1 查看已安装的虚拟机
使用以下命令列出当前已安装的 Linux 发行版:
wsl --list --verbose
输出示例:
C:\Users\32956>wsl --list --verbose NAME STATE VERSION* Ubuntu-22.04 Running 1
2.3.4.2 注销或删除虚拟机
如果确定不需要某个虚拟机,可以删除它。
(1)注销虚拟机(保留文件): 仅删除 WSL 环境配置,不会删除对应的文件:
wsl --unregister <虚拟机名称>
例如:
wsl --unregister Ubuntu-22.04
(2)完全删除虚拟机(包括文件):
- 找到虚拟机的文件存储位置(默认在
C:\Users\<用户名>\AppData\Local\Packages
)。 - 手动删除对应的文件夹。
2.4. 设置 WSL 版本(可选)
WSL 支持两种版本,WSL 1 和 WSL 2。可以设置虚拟机使用的版本。
2.4.1 查看当前版本:
wsl --list --verbose
2.4.2 切换到 WSL 2(推荐):
wsl --set-version <虚拟机名称> 2
例如:
wsl --set-version Ubuntu-20.04 2
2.4.3 设置默认版本(新安装的虚拟机使用此版本):
wsl --set-default-version 2
2.4.4 注意事项
当安装了vmware时,不要启动WSL2,可能导致虚拟化问题。
三、ubuntu Docker安装
Docker CE 在 17.03 版本之前叫 Docker Engine, Docker Engine 的版本号范围: 0.1.0 ~ 1.13.1 在 2017 年 3 月 2 日, docker 团队宣布企业版 Docker Enterprise Edition ( EE ) 发布.
为 了一致, 免费的 Docker Engine 改名为 Docker Community Edition ( CE ), 并且采用基于 时间的版本号方案. 就在这一天, Docker EE 和 Docker CE 的 17.03 版本发布, 这也是第一 个采用新的版本号方案的版本.
Docker CE/EE 每个季度发布一次 季度版本, 也就是说每年会发布 4 个季度版本, 17.03, 17.06, 17.09, 17.12 就是 2017 年的 4 个季度版本的版本号,
同时 Docker CE 每个月还会 发布一个 EDGE 版本,比如 17.04, 17.05, 17.07, 17.08, 17.10, 17.11 … Docker CE 季度版本自发布后会有 4 个月的维护期.
在基于时间的发布方案中,版本号格式为: YY.MM.,YY.MM 代表年月,patch 代表补丁 号,从 0 开始,在季度版本 (如 17.03) 的维护期内,bug 修复相关的更新会以 patch 递 增的方式发布, 比如 17.03.0 -> 17.03.1 -> 17.03.2
docker.io是很早之前的版本,Ubuntu系统一般默认安装的是docker-ce,就是docker的社区版本。
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs) stable"
sudo apt-get update
最后一步重点:不能直接安装最新版本的 docker!!!!(否则可能会有一堆bug等着你)
先运行如下命令,看一下有哪些包适合自己的系统的
apt-cache madison docker-ce
apt-cache madison docker-ce-cli
然后,选一个较低的版本安装即可,例如:
sudo apt-get install docker-ce=5:19.03.9~3-0~ubuntu-focal docker-ce-cli=5:19.03.9~3-0~ubuntu-focal containerd.io
操作解释
安装 docker
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
最后一步重点:不能直接安装最新版本的 docker!!!!(否则可能会有一堆bug等着你)
先运行如下命令,看一下有哪些包适合自己的系统的
apt-cache madison docker-ce
apt-cache madison docker-ce-cli
然后,选一个较低的版本安装即可,例如:
sudo apt-get install docker-ce=5:19.03.9~3-0~ubuntu-focal docker-ce-cli=5:19.03.9~3-0~ubuntu-focal containerd.io
安装过程常见错误:
1)如果报错误:sleep: cannot read realtime clock: Invalid argument,则
sudo mv /bin/sleep /bin/sleep~
touch /bin/sleep
chmod +x /bin/sleep
2)如果报错误:gpg: can't connect to the agent: IPC connect call failed,则
sudo apt remove gpg
sudo apt-get update -y
sudo apt-get install -y gnupg1
如果还是不行,则
wget https://launchpad.net/~rafaeldtinoco/+archive/ubuntu/lp1871129/+files/libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb
sudo dpkg --install libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb
sudo apt-mark hold libc6 #to avoid further update
3)如果报错误:sudo: add-apt-repository: command not found,则
sudo apt install software-properties-common
六、docker 用户组
安装完之后,一般会提示
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker tiac
Remember that you will have to log out and back in for this to take effect!
注:意思是说,你好像不是用root来安装的docker的,需要添加当前用户到docker用户组;tiac是我的用户名,换成自己的用户名就好
sudo usermod -aG docker your_name
七、启动 docker
启动 docker 服务
sudo service docker start
启动之后,看一下服务状态
sudo service docker status
如果提示“Docker is not running”,则关掉 ubuntu,以管理员身份重启 ubuntu
启动后,重新执行一下
sudo service docker start
sudo service docker status
如果显示“Docker is running”,则基本没什么问题了,如果还有错,请参考下面步骤八
八、docker 测试
sudo docker run hello-world
如果提示“docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.”,则
sudo usermod -aG docker $USER
sudo usermod -g docker $USER
sudo service docker restart
如果pull超时,则更换 docker hub镜像地址
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
详情:https://www.daocloud.io/mirror#accelerator-doc
排除所有异常,最后效果(为了这个Hello World 不容易啊...)
总结:
1)windows 内部版本要升级到19041(或更高版本);
2)升级wsl1到wsl2(开启 VirtualMachinePlatform),wsl --set-default-version 2;
3)BIOS开户cpu虚拟化功能,Intel Virtualization Technology : Enable;
4)以管理员身份启动 ubuntu;
5)看docker官方的安装教程
6)不要安装最新版本docker
修改配置文件
sudo vim
完整的配置文件为
{
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [
"https://docker.m.daocloud.io/",
"https://huecker.io/",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru/",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://xx4bwyg2.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
完了之后 配置重新加载
sudo systemctl daemon-reload
docker 重新启动
sudo systemctl restart docker
大功告成!
修改镜像文件的路径
c盘 空间不够,换成 d盘的目录 : d:/dev2/docker-image/
{
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [
"https://docker.m.daocloud.io/",
"https://huecker.io/",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru/",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://xx4bwyg2.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"data-root": "/mnt/d/dev2/docker-image/"
}
通过 "data-root": 去配置
3.1.安装 Docker Compose
Docker Compose是一个用来定义和运行复杂应用的Docker工具。
一个使用 Docker容器 的应用,通常由多个容器组成。
使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
Compose和Docker兼容性
Compose版本 | Docker版本 |
---|---|
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
Docker版本变化说明:
Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。
3.2 安装docker-compose
两种最新的docker安装方式
1.从github上下载docker-compose二进制文件安装
下载最新版的docker-compose文件
sudo curl -L https://github.com/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
若是github访问太慢,可以用daocloud下载 (经2023-06-17,验证此链接出现502,此方法失效)
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
由于国内链接失效,以get.daocloud.io 为例,也不行
curl -L https://get.daocloud.io/docker/compose/releases/download/2.21.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
说明:
docker-compose-uname -s-uname -m`:文件名部分,其中:
``uname -s```是一个反引号括起来的命令,uname -s会返回当前操作系统的名称(如 Linux、Darwin 等)。
``uname -m```也是反引号括起来的命令,uname -m会返回当前系统的硬件架构(如 x86_64、arm64 等)。所以最终文件名会根据当前系统的类型和架构而确定,比如docker-compose-Linux-x86_64。
https://github.com/docker/compose/releases/download/2.21.0/docker-compose-Linux-x86_64
直接从 github 用梯子下载, 无奈之举
https://github.com/docker/compose/releases 离线下载linux-x86_64 执行包docker-compose-linux-x86_64
下载完放到服务器
sudo cp /mnt/e/tool/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
确保which docker-compose显示/usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose --version
docker-compose version v2.27.3 ,
以上安装包,可以找尼恩,网盘获取。省得大家麻烦。
四、NVIDIA-container-toolkit 的安装
序号 | 软件 | 版本 | 备注 |
---|---|---|---|
1 | Windows | 1.版本:Windows 10 专业版2.版本号:21H23.操作系统内部版本:19044.1889 | |
2 | Docker Desktop | 4.24.2 (124339) | |
3 | WSL | Ubuntu 22.04 LTS | |
4 | Python | 3.10 | |
5 | CUDA | 12.1 | |
6 | Dify | 0.6.6 |
- 保证 CUDA 在机器上正确安装。可以使用
nvidia-smi
检查是否正确运行。 - 镜像中的 CUDA 版本为
12.6
。为了不出现预期之外的问题,请将宿主机的 CUDA 版本和 NVIDIA Driver 版本分别升级到12.6
和550
以上。
注意: 在安装之前可以先cmd执行一下 nvidia-smi 命令,看看本机的 gpu 版本多少的。按照官网的要求,CUDA和NVIDIA Driver的版本必须得12.6和550以上。
尼恩电脑上的 gpu 版本 如下
从 nvidia-smi`命令输出结果来看, 系统已经安装了NVIDIA驱动程序和CUDA,并且有一个NVIDIA GeForce RTX 4060 GPU显卡。
驱动程序版本为560.94,CUDA版本为12.6。
这表明尼恩的硬件环境基本符合运行Xinference的要求,因为Xinference需要GPU加速和CUDA支持。
需要 确认CUDA版本兼容性
虽然尼恩CUDA版本是12.6,而Xinference镜像推荐的CUDA版本是12.6,通常情况下,CUDA的小版本差异(如12.6与12.6)可能不会导致严重的问题, 为了确保最佳兼容性和避免潜在的错误,也许要将CUDA版本降级到12.6, 是否降级,后面再看。
安装NVIDIA Container Toolkit
要确保系统已经安装了NVIDIA Container Toolkit,并且配置了Docker的运行时为nvidia-container-runtime
。这一步是必要的,因为Xinference需要通过NVIDIA的容器技术支持来访问GPU资源。
在Windows系统上,确保已经安装了NVIDIA Container Toolkit,并且配置了Docker的运行时为nvidia-container-runtime
,可以按照以下步骤进行操作:
4.1.1 安装NVIDIA Container Toolkit
使用 nvcc -v
命令 显示NVIDIA CUDA编译器驱动(nvcc)的版本信息 ,
同时,此命令 可以确认CUDA Toolkit是否已经正确安装在 系统上 安装的是哪个版本的CUDA。
在Linux 子系统 wsl 2 运行nvcc --version命令
nvcc --version
提示,使用 apt install 安装 CUDA Toolkit , 尼恩电脑上,这个 toolkit 下载了很久。
执行 nvcc --version
命令并得到了输出。
这个输出表明 系统上安装的 CUDA 编译器驱动(nvcc
)版本是 11.5,具体版本号是 11.5.119 。
这是 NVIDIA 用于编译 CUDA 代码的工具,CUDA 是 NVIDIA 推出的用于并行计算的平台和编程模型,允许开发者利用 NVIDIA GPU 的并行计算能力加速应用程序。
4.1.2 NVIDIA Container Toolkit 与驱动的关系
NVIDIA Container Toolkit 是 NVIDIA 提供的一组工具,用于在容器化环境中支持 GPU 加速,特别是通过 Docker 或其他容器运行时,运行基于 NVIDIA GPU 的工作负载(如深度学习、科学计算等)。
NVIDIA 驱动的作用
- NVIDIA 驱动是基础软件,它的主要功能是让操作系统能够识别和使用 NVIDIA GPU(图形处理器)。驱动程序充当了操作系统和 GPU 硬件之间的接口,负责管理 GPU 的各种功能,如图形渲染、计算任务等。
- 例如,在进行 3D 游戏渲染或者使用 CUDA(NVIDIA 的并行计算平台)进行科学计算时,操作系统通过 NVIDIA 驱动向 GPU 发送指令,以完成相应的任务。没有安装合适的 NVIDIA 驱动,GPU 将无法正常工作,计算机只能使用 CPU 进行图形处理和计算,这会导致性能大幅下降。
NVIDIA Container Toolkit 的作用
- NVIDIA Container Toolkit 是专门为容器化环境设计的工具。它允许在容器(如 Docker 容器)中无缝地使用 NVIDIA GPU 资源。
- 当运行一个需要 GPU 加速的容器应用时,NVIDIA Container Toolkit 会协调容器内的应用和主机系统上的 GPU 资源。它能够将主机系统中的 GPU 设备暴露给容器,并且配置容器内的环境,使得容器中的应用能够像在主机系统上直接运行一样使用 GPU。
两者之间的关系
- 依赖关系:NVIDIA Container Toolkit 依赖于 NVIDIA 驱动。只有在主机系统上安装了合适的 NVIDIA 驱动,NVIDIA Container Toolkit 才能正确地将 GPU 资源暴露给容器。例如,如果没有安装驱动,容器内的应用无法与 GPU 硬件进行通信,即使安装了 NVIDIA Container Toolkit,也无法实现 GPU 加速。
- 协同工作:它们共同实现了在容器环境中利用 GPU 资源。NVIDIA 驱动提供了 GPU 硬件的底层支持,而 NVIDIA Container Toolkit 在此基础上构建了容器与 GPU 之间的桥梁。在运行需要 GPU 的容器应用时,首先由 NVIDIA 驱动初始化 GPU 并提供基本的功能支持,然后 NVIDIA Container Toolkit 负责将 GPU 资源引入容器环境,使得容器内的应用可以调用 GPU 进行计算、图形处理等操作。
- 版本兼容性:NVIDIA Container Toolkit 的版本通常需要与 NVIDIA 驱动的版本相匹配。不同版本的驱动和 Container Toolkit 可能会有不同的功能和兼容性要求。例如,较新的 Container Toolkit 版本可能需要较新的驱动版本来支持新的 GPU 架构或功能,否则可能会出现兼容性问题,如容器无法正确识别 GPU 或在运行过程中出现错误。
4.2 安装NVIDIA-container-toolkit
1. 下载安装包
链接:https://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/
选择对应系统版本后下载文件(没有ubuntu24我下载的最新的ubuntu20.04)
上述链接不需要翻墙
文件包括:
libnvidia-container1_xxx_amd64.deb
libnvidia-container-tools_xxx_amd64.deb
nvidia-docker2_xxx_all.deb
nvidia-container-runtime_xxx_all.deb
nvidia-container-toolkit_xxx_amd64.deb
2. 安装下载包
dpkg -i ./lib* ./nvidia*
1
3. 重新加载daemon文件和docker
systemctl daemon-reload
systemctl restart docker
12
4. 查看nvidia-docker 版本
nvidia-docker -v #查看版本
nvidia-docker version
dpkg -l | grep nvidia-docker #是否已安装
5. 配置daemon.json
修改/etc/docker/daemon.json文件内容
“default-runtime”: "nvidia"设置docker默认运行环境为nvidia
“registry-mirrors”:镜像源代理地址(可自行百度最新地址)
{
"dns": ["8.8.8.8", "8.8.4.4"],
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"registry-mirrors": [
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn"
"https://docker.1panel.live",
"https://hub.rat.dev/",
"https://docker.chenby.cn",
"https://docker.m.daocloud.io",
"https://docker.m.daocloud.io/",
"https://huecker.io/",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru/",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://xx4bwyg2.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
重新加载daemon文件和docker
sudo systemctl daemon-reload
sudo systemctl restart docker
五、Dify入门和安装
在全球科技舞台上,越来越多的开源项目正在涌现,其中不乏一些独树一帜的创新力量。
Dify.AI,作为一款由中国团队开发的,开源大语言模型(LLM)应用开发平台,正在悄然崛起,并在全球技术社区中激起了层层波澜。
它不仅是中国在GitHub上备受关注的热门框架之一,更是全球开发者眼中解锁生成式AI应用开发的利器。
但Dify的火爆并非偶然。它打破了传统AI开发框架的复杂性,以简洁、灵活、可扩展的方式,重新定义了LLM应用开发的门槛。
这背后,不仅有技术上的突破,更有对开发者痛点的深刻洞察。
那么,Dify究竟为何能在全球范围内获得如此高度的关注?它的真正优势在哪里?它又是如何通过创新设计,打破技术壁垒、解决行业痛点的?
5.1.Dify介绍
Dify 的背景诞生
要理解Dify的成功,首先要从AI应用开发的复杂性说起。
过去,开发者想要将大型语言模型(如GPT系列、Claude等)与自己的应用结合,往往需要面对繁杂的底层技术架构和高度抽象的算法细节。
即便是像Langchain这类框架,虽然提供了灵活的功能,但对于很多开发者来说,学习曲线依然陡峭,开发过程充满了不确定性。
而Dify正是在这样的背景下诞生。
Dify这个名字来源于“Define + Modify”两个词的结合,象征着平台的核心理念:定义并持续改进AI应用。
这个团队还有一个更有意思的解释,分拆成四个单词,Do it for you。
它的核心目标是降低AI应用开发的门槛,让开发者能够快速将创意转化为实际应用。
通过Dify,开发者不仅可以轻松地编排Prompt,还能够实现长上下文管理、数据集管理、API集成等功能,所有这些都可以通过可视化界面实现。
这种简化的操作方式大大减少了开发者在开发过程中的技术障碍,使得无论是新手开发者,还是企业级开发团队,都能在短时间内交付高质量的AI应用。
Dify的成功,源自其精准地抓住了AI应用开发中的“痛点”,并通过创新设计来破解这些问题。
Dify 是一个生成式 AI 应用 创新引擎,开源的 LLM 应用开发平台。
Dify提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用,比 LangChain 更易用。
一个平台,接入全球大型语言模型。不同应用场景,自由体验、无缝切换,实现业务层和模型层解耦。
1. 开放灵活的生成式 AI应用开发框架。
Dify 涵盖了构建生成式 AI 原生应用所需的核心技术栈,开发者可以聚焦于创造应用的核心价值。
(1)Dify Orchestration Studio:可视化编排生成式 AI 应用的专业工作站,All in One Place。
(2)RAG Pipeline:安全构建私有数据与大型语言模型之间的数据通道,并提供高可靠的索引和检索工具。
(3)Prompt IDE:为提示词工程师精心设计,友好易用的提示词开发工具,支持无缝切换多种大型语言模型。
(4)Enterprise LLMOps:开发者可以观测推理过程、记录日志、标注数据、训练并微调模型;使应用效果脱离黑盒,持续迭代优化。
(5)BaaS Solution:基于后端及服务理念的 API 设计,大幅简化生成式 AI 应用研发流程。
(6)LLM Agent:定制化 Agent ,自主调用系列工具完成复杂任务。
(7)Workflow:编排 AI 工作流,使其输出更稳定可控。
2. 开箱即用,为快速增长而设计
Dify 为开发者提供了健全的应用模版和编排框架,你可以基于它们快速构建大型语言模型驱动的生成式 AI 应用,将创意变为现实,也可以随时按需无缝扩展,驱动业务增长。
(1)特定领域的聊天机器人和 AI 助理
通过可视化的提示词编排和数据集嵌入,零代码即可快速构建对话机器人或 AI 助理,并可持续优化对话策略,革新人机交互体验。
(2)不限的长度创意文档生成
既可以基于知识库和风格要求,自动组织语言,生成逻辑清晰、结构完整的工作文档。 也可以自动解析工作文档,对无限长度的文档进行提取、总结和重构。
(3)自由链接的知识库问答和搜索
通过自定义 API 接入外部知识源,让大型语言模型深入理解企业知识和业务,助力每个成员获得深度洞察,同时严格保障数据和隐私安全。
(4)低代码的构建面向的半自主 Agent
通过可视化且低代码的流程编排,整合提示词、业务数据集和插件工具,构建面向特定业务场景的半自主智能体,释放个人和企业的生产力。
3. 私有化部署,LLMs 再造企业效能
高可靠性、合规、数据安全,通过 Dify 的私有化部署解决方案,将 LLMs 深度嵌入到企业的内部系统和业务流程中,实现对流程和工具的智能升级,实现千人千面的客户体验。
(1)企业私有化知识库及 AI 助理
通过自主可控的方式安全接入企业内部知识库,将企业多年沉淀的业务数据,快速转换成智能的搜索或问答服务,可深度集成到企业的 IM 和工作流中,全面提升客户服务和内部办公效率。
(2)企业级LLMOps 平台
与企业其他系统集成,通过可视化的工具和流程,让大型语言模型驱动的系统不在黑盒中运行,并对其进行可视化的运维、监控、标注和持续优化。
(3)编排端到端 AI 工作流
灵活编排 AI 工作过程,接入企业现有系统工具。实时监控运行状态,让 AI 落地业务场景更可靠。
(4)零代码构建自主 AI Agent
轻松点击几下即可构建 AI Agents,自主调用企业定义的工具与数据,解决复杂任务。
5.2 Dify架构图
5.3 Dify容器部署
1.下载代码
从github
git clone https://github.com/langgenius/dify.git
下载不了的,以上安装包,可以找尼恩,网盘获取。
省得大家麻烦。
2.docker运行 dify
cd /usr/local/dify0.6.10/docker
sudo docker-compose up -d
开始拉取镜像
镜像下不来。 因为国内docker限制的原因,如果不能直接通过docker将官方的镜像拉取下来,则可利用github action 同步到阿里云或国内其他云使用。
然后, 把编排文件里里边的 镜像,换成自己的阿里云 仓库的镜像。
langgenius/dify-api:0.6.10 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/dify-api:0.6.10
langgenius/dify-web:0.6.10 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/dify-web:0.6.10
postgres:15-alpine crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/postgres:15-alpine
redis:6-alpine crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/redis:6-alpine
semitechnologies/weaviate:1.19.0 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/weaviate:1.19.0
langgenius/dify-sandbox:0.2.1 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/dify-sandbox:0.2.1
ubuntu/squid:latest crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/squid:latest
3. 更新Dify
cd dify/docker
git pull origin main
docker compose down
docker compose pull
docker compose up -d
4. 访问Dify
访问 Difyll在浏览器中输入 http://localhost
访问 Dify。
六、Dify 添加Ollama模型问答
6.1 Ollama 简介
Ollama 可以很好地支持 阿里巴巴出品的 Qwen 1.5 和 Qwen 2.0 大模型,让我们看看如何使用 Ollama 运行 Qwen 吧。
Ollama 是一个开源的、轻量级的模型推理平台,旨在简化大型语言模型(LLM)的部署和使用。它通过提供一个简单、高效的接口,使得用户可以在本地或服务器上快速部署和运行各种预训练语言模型,而无需深入了解复杂的底层技术细节。以下是 Ollama 的一些关键特点和功能:
Ollama 功能
- 模型部署与推理:Ollama 支持多种流行的大型语言模型(如 LLaMA、Qwen、Alpaca 等),用户可以通过简单的命令快速下载和运行这些模型。
- 本地化部署:用户可以在本地机器或服务器上运行 Ollama,无需依赖云端服务,从而保证数据隐私和安全性。
- 高效推理:Ollama 优化了模型的推理性能,支持 GPU 加速(如果硬件支持),能够快速响应用户请求。
6.2 Ollama 安装Qwen 大模型的硬件要求
RAM:获得良好体验的最低要求:16GB 是有效运行 7B 参数等模型的起点。它足以舒适地运行较小的模型或谨慎地管理较大的模型。
磁盘空间:实际最小值:大约 50GB 就足够了。
GPU:非强制性但建议增强性能,GPU 可以显着提高模型推理性能。但是,运行量化模型的能力和对 VRAM 的要求取决于 GPU 的性能。对于运行量化模型:支持 4 位量化格式的 GPU 可以更有效地处理大型模型,所需的 VRAM 明显更少,如 7B 模型需要 4 GB,13B 模型需要 8 GB,30B 模型需要 16 GB,65B 模型需要 32 GB。
6.3 Windows 如何使用 Ollama 运行 Qwen
Ollama 下载地址:https://ollama.com/download,在下载页面选择 Windows 平台,然后点击下载按钮。
这玩意要不好下载, 尼恩搞了半天,需要的小伙伴,可以找尼恩网盘获取。
下载完成后,双击下载的安装程序,点击 Install 进行安装。
安装完成没有提示,我们打开一个终端,本文以 CMD 为例,现在 Ollama 已经安装完了。
安装完成后,您可以通过运行以下命令来验证Ollama是否正确安装:
ollama --version
如果安装正确,该命令将输出Ollama的版本信息。
启动ollama
ollama serve
在 cmd 窗口输入 ollama,即可了解常用的 Ollama 命令。
6.4 Qwen2 大语言模型 介绍
Qwen2 是阿里云最新推出的大语言模型系列,提供基础模型和指令调优版本,参数范围从 5 亿到 720 亿,其中包括一个 Mixture-of-Experts 模型。
Qwen2 模型已经在 Hugging Face 上开源了。
Qwen2 开源后, Hugging Face 的联合创始人兼首席执行官就发文宣布,Qwen2-72B 冲上HuggingFace 开源大模型榜单 Open LLM Leaderboard 第一名,全球排名最高!
Qwen2 与其他开源模型如 Qwen1.5 相比,Qwen2在各种基准测试中通常表现更好,包括语言理解、生成、多语言能力、编码、数学和推理。
Qwen2 系列基于 Transformer 架构,并具有如 SwiGLU 激活、注意力 QKV 偏差、组查询注意力和改进的分词器等增强功能,适用于多种语言和代码。
此外,据说 Qwen2-72B 在所有测试的基准测试中都以很大的优势超过了 Meta 的 Llama3-70B。
下面这张图显示了 Qwen2-72B 在各种基准测试中的性能,它在多个领域进行了 16 项基准测试的全面评估。
这个模型在增强能力和与人类价值观的一致性之间取得了平衡。
此外,Qwen2 模型在所有基准测试中显著优于 Qwen1.5-72B-Chat,并与 Llama-3-70B-Instruct 相比甚至更胜一筹。
即使是较小的 Qwen2 模型也超越了与之类似或更大的一些模型。Qwen2-7B-Instruct 在基准测试中“遥遥领先”,特别是在编码和与中文相关的指标上表现出色。
6.5 Qwen2 可用型号
Qwen2 的训练涵盖了包括英语和中文在内的 29 种语言。 它有五种参数大小:0.5B、1.5B、7B、57B 和 72B。
Qwen2 有 4 种参数大小可供选择:0.5B、1.5B、7B、72B。
在 7B 和 72B 模型中,上下文长度已扩展到 128k 个标记。
图:Qwen2系列包括五个不同大小的基础和指令调整模型
6.6 Windows 平台 运行 Qwen
Qwen2 使用 29 种语言的数据进行训练,包括英语和中文。
Windows 平台,在 CMD 中输入如下命令运行 qwen 大语言模型:
📎# 运行 Qwen 1.5,默认 4b
ollama run qwen
# 运行 Qwen2,默认 7b
ollama run qwen2
初次运行过程稍长,需要下载几个 G 的模型文件到本地。下载完成后就可以直接在终端与 qwen 模型交互了。
尼恩 要 qwen2 写一个 Java demo,如下:
在使用 Ollama 下载大模型时,可以通过以下几种方式获取模型:
1. 从 Ollama 官方仓库 下载 模型
Ollama 提供了一个丰富的模型库,支持直接从其远程仓库下载大模型。你可以使用以下命令下载模型:
ollama pull <模型名称>:<参数规格>
例如,下载 Qwen2 的 7B 模型:
ollama pull qwen2:7b
如果模型的参数规格为 latest
,可以直接省略参数规格,例如:
ollama pull qwen2
这种方式是最推荐的,因为它简单且直接。
2. 手动下载并导入模型
如果你已经从其他来源(如 Hugging Face 或 ModelScope)下载了模型文件,可以手动导入到 Ollama 中。
以下是支持的格式和步骤:
可以使用阿里的modelscope 去下载模型,由于 modelscope 是国内的网站,下载速度是杠杠的,一点也不用担心下载慢的问题。
具体参考后面的章节。
6.7 Windows 平台 启动 Ollama 服务
根据搜索结果,ollama serve
命令不支持直接通过 --host
和 --port
参数来配置绑定地址和端口。这是因为 Ollama 默认绑定到 127.0.0.1:11434
,并且需要通过环境变量 OLLAMA_HOST
来修改绑定地址。
要让 Ollama 服务监听所有网络接口(如 0.0.0.0
),Windows 可以通过以下步骤配置:
1. 设置环境变量
Windows设置 OLLAMA_HOST
环境变量:
- 打开 设置,搜索 环境变量。
- 点击 编辑账户环境变量。
- 添加或修改变量
OLLAMA_HOST
,值为0.0.0.0:11434
。
2. 启动 Ollama 服务
在终端中运行以下命令启动 Ollama:
ollama serve
此时,Ollama 会绑定到 0.0.0.0:11434
,从而允许从其他设备访问。
3. 验证配置
从另一台设备访问 Ollama 服务:
curl http://192.168.10.7:11434/api/version
如果配置正确,你应该能够看到 Ollama 的版本信息。
注意事项
- 防火墙设置:确保防火墙允许端口
11434
的流量。 - 端口冲突:如果端口
11434
已被占用,可以通过修改OLLAMA_PORT
环境变量来指定其他端口。
6.8 Windows 平台 重启 ollama Restart-OllamaServer
$ollamaPath = "C:\Users\29933\AppData\Local\Programs\Ollama\ollama.exe"
function Restart-OllamaServer {
Get-Process -Name "ollama" -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Process -FilePath $ollamaPath -ArgumentList "serve"
}
Restart-OllamaServer
6.9 WS2 启动 OllamaServer
由于 window 的ollama 服务,在 wsl2 里边无法http访问,怎么实验都不行,
尼恩也不纠结了,直接 决定在 WS2 中,使用docker 跑 ollama
WS2 中 运行如下命令启动ollama,只用GPU的话把--gpus=all这个去掉就行:
docker run -d --gpus=all -v /dockerdata/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
尼恩弄了一个 docker-compose文件, 可以一键 docker-compose up 启动
version: '3.5'
services:
ollama:
container_name: ollama
environment:
- OLLAMA_HOST=0.0.0.0:11434
- OLLAMA_ORIGINS=*
- OLLAMA_MODELS=/data/models
image: crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/ollama
ports:
- 11436:11434
tty: true
volumes:
- ./models/:/data/models
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
count: 1
driver: nvidia
# 命令启动 serve
command: serve
docker-compose up -d
启动问题:cgroup的挂载点不存在
Docker启动提示:Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown
错误信息指出:cgroup的挂载点不存在
临时解决:
执行命令一:sudo mkdir /sys/fs/cgroup/systemd
执行命令二:sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
进入容器,拉取想要的模型
如下命令拉取想要的模型
docker exec -it ollama ollama pull llama3.1
docker exec -it ollama ollama pull qwen2:7b
然后运行如下命令就可以对话了
docker exec -it ollama ollama run llama3.1
docker exec -it ollama ollama run qwen2:7b
docker exec -it ollama ollama run modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GGUF
6.10 Ollama运行任意 国内 魔搭GGUF模型
GGUF 格式在 Hugging Face 等开源社区中广受欢迎,浪潮信息的源 2.0、谷歌的 Gemma、阿里的 Qwen 等模型都有提供 GGUF 格式文件,在 HuggingFace 上已有 6000 多个这类模型CSDN博客。
GGUF 简介
GGUF(GPT-Generated Unified Format)是由 Georgi Gerganov(著名开源项目llama.cpp的创始人)定义发布的一种大模型文件格式。
GGUF 继承自其前身 GGML,但 GGML 格式有一些缺点,已被完全弃用并被 GGUF 格式取代。
GGUF 是一种二进制格式文件的规范,原始的大模型预训练结果经过转换后变成 GGUF 格式可以更快地被载入使用,也会消耗更低的资源。
原因在于 GGUF 采用了多种技术来保存大模型预训练结果,包括采用紧凑的二进制编码格式、优化的数据结构、内存映射等。
综上所述,GGUF 可以理解为一种格式定义,采用相应的工具将原始模型预训练结果转换成GGUF之后可以更加高效的使用。
GGUF 前身 GGML 格式介绍
GGML 格式是一种用于存储机器学习模型,特别是大型语言模型的二进制文件格式CSDN博客CSDN博客。以下是其详细介绍CSDN博客:
- 名称来源:GGML 全称是 Georgi Gerganov Machine Learning,由 Georgi Gerganov 开发,最早于 2023 年 2 月在 GitHub 上提交更新。
- 设计目的:为大型语言模型提供基础设施,使大模型能在消费级硬件上高效运行,通过量化技术和特定的二进制编码,让模型可以在 CPU 或 CPU+GPU 上运行。
为什么GGUF格式对大模型文件性能很好
GGUF文件格式能够更快载入模型的原因主要归结于以下几个关键特性:
- 二进制格式:GGUF作为一种二进制格式,相较于文本格式的文件,可以更快地被读取和解析。二进制文件通常更紧凑,减少了读取和解析时所需的I/O操作和处理时间。
- 优化的数据结构:GGUF可能采用了特别优化的数据结构,这些结构为快速访问和加载模型数据提供了支持。例如,数据可能按照内存加载的需要进行组织,以减少加载时的处理。
- 内存映射(mmap)兼容性:GGUF支持内存映射(mmap),这允许直接从磁盘映射数据到内存地址空间,从而加快了数据的加载速度。这样,数据可以在不实际加载整个文件的情况下被访问,特别是对于大模型非常有效。
- 高效的序列化和反序列化:GGUF使用高效的序列化和反序列化方法,这意味着模型数据可以快速转换为可用的格式。
- 少量的依赖和外部引用:如果GGUF格式设计为自包含,即所有需要的信息都存储在单个文件中,这将减少解析和加载模型时所需的外部文件查找和读取操作。
- 数据压缩:GGUF格式采用了有效的数据压缩技术,减少了文件大小,从而加速了读取过程。
- 优化的索引和访问机制:文件中数据的索引和访问机制经过优化,使得查找和加载所需的特定数据片段更加迅速。
总之,GGUF通过各种优化手段实现了快速的模型加载,这对于需要频繁载入不同模型的场景尤为重要。
GGUF文件结构
一个GGUF文件包括文件头、元数据键值对和张量信息等。这些组成部分共同定义了模型的结构和行为。具体如下所示:
同时,GGUF支持多种数据类型,如整数、浮点数和字符串等。这些数据类型用于定义模型的不同方面,如结构、大小和参数。
GGML 的缺陷
GGUF 继承自其前身 GGML,而 GGML 有以下缺点:
- 无版本信息,导致无法管理和向后兼容
- 增加或者修改信息非常不灵活
- 手动修改模型信息很困难
GGUF 特性
GGUF 是一种基于现有 GGJT 的格式(这种格式对张量进行对齐,以便能够使用内存映射(mmap)),但对该格式进行了一些更改,使其更具可扩展性且更易于使用。GGUF 具有如下特性:
- 单文件部署:它们可以轻松分发和加载,并且不需要任何外部文件来获取附加信息。
- 可扩展性:可以将新特征添加到基于 GGML 的执行器中/可以将新信息添加到 GGUF 模型中,而不会破坏与现有模型的兼容性。
mmap
兼容性:可以使用mmap
加载模型,以实现快速地加载和保存。- 易于使用:无论使用何种语言,都可以使用少量代码轻松加载和保存模型,无需外部库。
- 信息完整:加载模型所需的所有信息都包含在模型文件中,用户不需要提供任何额外的信息。这大大简化了模型部署和共享的流程。
GGJT 和 GGUF 之间的主要区别在于:超参数(现称为元数据)使用键值结构,而不是非类型化的值列表。这允许在不破坏与现有模型的兼容性的情况下添加新的元数据,这使得可以添加对推理或识别模型有用的附加信息来注释模型。
Ollama运行任意 国内 魔搭GGUF模型
- 设置ollama下启用
ollama serve
- ollama run ModelScope任意GGUF模型
ollama run modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GGUF
在安装了Ollama的环境上(建议使用>=0.3.12版本),直接通过上面的命令行,就可以直接在本地运行 Qwen2.5-3B-Instruct-GGUF模型。
命令行的具体格式为:
ollama run modelscope.cn/{model-id}
其中model-id的具体格式为{username}/{model},例如:
ollama run modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GGUF
ollama run modelscope.cn/second-state/gemma-2-2b-it-GGUF
ollama run modelscope.cn/Shanghai_AI_Laboratory/internlm2_5-7b-chat-gguf
关于如何安装Ollama,可参考Ollama官方文档(https://ollama.com/download),建议使用>=0.3.12版本。
或者参见这个ModelScope Notebook来完成安装:https://modelscope.cn/notebook/share/ipynb/4a85790f/ollama-installation.ipynb
6.11 ollama pull失败,手动构建Docker 镜像的方案
但是, 尼恩环境出来一个诡异的问题,
ollama pull Qwen2 总是失败
具体来说, 就是 下载到中间,老是从头开始, 真实 鬼打墙。
解决方案:Docker pull qwen2大模型失败, 手工从 魔塔下载 qwen2,手动构建方案, 然后构建 docker ollama 镜像运行
1. 制作镜像前,开始创建工作目录
sudo mkdir -p /home/vagrant/qwen2 && cd /home/vagrant/qwen2
2. 上传或从模型库网站下载qween2 量化模型 文件
去魔塔网站,下载模型文件qwen2-7b-instruct-q5_k_m.gguf到本地, 再上传qwen2-7b-instruct-q5_k_m.gguf文件到服务器工作目录下
https://modelscope.cn/models/qwen/Qwen2-7B-Instruct-GGUF/files
qwen2-7b-instruct-q5_k_m.gguf 是阿里云通义千问团队发布的 Qwen2-7B 模型的一种 GGUF 格式的量化文件CSDN博客。以下是具体介绍:
所属模型系列
Qwen2-7B 是 Qwen2 系列中的一个 70 亿参数规模的模型,该系列还包括 Qwen2-0.5B、Qwen2-1.5B、Qwen2-57B-A14B 以及 Qwen2-72B 等CSDN博客。
量化参数含义
q5_k_m:表示该模型采用了 INT5 量化方式,并且在量化过程中使用了特定的参数或方法来平衡模型的精度和性能。量化可以将模型的权重数据以较低的精度表示,在这个例子中就是以 5 位整数来表示权重等数据,这样可以大大减少模型文件的大小,同时在一定程度上保持模型的性能,便于在各种设备上进行部署和运行。
特点及优势
- 高效部署:GGUF 格式的 qwen2-7b-instruct-q5_k_m.gguf 文件使得 Qwen2-7B 模型能够更方便地在不同的硬件环境中部署,尤其是在消费级的 CPU 或 GPU 设备上,用户可以更轻松地运行该模型进行各种自然语言处理任务。
性能表现:Qwen2-7B-Instruct 在多个评测上相比同等规模的开源模型如 Llama3-8B、GLM4-9B 等具有显著优势,尤其是在代码及中文理解方面CSDN博客。
应用场景
可以应用于多种自然语言处理场景,如对话系统、文本生成、知识问答、代码生成与分析等。
在对话系统中,能够根据用户输入的指令生成合理、准确且有价值的回答;在代码生成与分析方面,凭借其对代码的良好理解能力,可以帮助开发者进行代码编写、代码审查等工作。
或者用 modelscope 网站的命令行工具下载:
modelscope download --model=qwen/Qwen2-7B-Instruct-GGUF --local_dir . qwen2-7b-instruct-q5_k_m.gguf
记得 先安装 modelscope 。
尼恩是直接 浏览器下载。 然后cp 到虚拟机中去。
sudo mkdir -p /home/vagrant/qwen2/src && cd /home/vagrant/qwen2/src
复制文件到 wls2
sudo cp /mnt/d/qwen2-7b-instruct-q5_0.gguf .
3. 在qwen2/src 目录下创建Modelfile文件
sudo cat > Modelfile <<EOF
# 注意GGUF模型文件的地址要与Dockerfile中保持一致
FROM /tmp/qwen2-7b-instruct-q5_0.gguf
TEMPLATE "{
{ if .System }}<|im_start|>system
{
{ .System }}<|im_end|>
{
{ end }}{
{ if .Prompt }}<|im_start|>user
{
{ .Prompt }}<|im_end|>
{
{ end }}<|im_start|>assistant
{
{ .Response }}<|im_end|>"
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
EOF
4. 创建Dockerfile
cd /home/vagrant/qwen2
创建Dockerfile
sudo cat > Dockerfile <<EOF
# 注意Modelfile 、 GGUF模型文件的地址要与Dockerfile中保持一致
FROM crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/ollama:latest
EXPOSE 11434
ADD ./src/Modelfile /tmp/Modelfile
ADD ./src/qwen2-7b-instruct-q5_0.gguf /tmp/qwen2-7b-instruct-q5_0.gguf
ENTRYPOINT ["sh","-c","/bin/ollama serve"]
EOF
5. 创建镜像qwen2镜像
docker build -t ollama_qwen2_7b:1.0 .
docker tag ollama_qwen2_7b:1.0 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/ollama_qwen2_7b:1.0
6. 运行启动容器
docker run -itd --name ollama_qwen2 -p 11434:11434 ollama_qwen2_7b:1.0
或者
docker run -itd --gpus=all --name ollama_qwen2 -p 11434:11434 crpi-mhnd10ix36e3lzjr.cn-hangzhou.personal.cr.aliyuncs.com/crazymaker/ollama_qwen2_7b:1.0
后面重新启动
docker restart ollama_qwen2
7. 进入容器,加载qwen2模型文件
docker exec -it ollama_qwen2 /bin/bash
容器内执行:
ollama create qwen2:7b -f /tmp/Modelfile
退出容器:
exit
8. api 测试
curl http://192.168.10.7:11434/api/generate -d '{"model":"qwen2:7b","prompt":"你是谁?","stream":false}'
curl http://172.24.156.200:11434/api/generate -d '{"model":"qwen2:7b","prompt":"你是谁?","stream":false}'
9. 对话测试
curl http://192.168.10.7:11434/api/chat -d '{"model": "qwen2:7b","messages": [{"role": "user", "content": "你是谁?" }],"stream": false}'
如果出现类似以下的结果,则表示已经成功部署千问2开源大模型
6.12 ollama 常用命令
运行一个指定大模型:ollama run llama3:8b-text
查看本地大模型列表:ollama list
查看运行中的大模型:ollama ps
删除本地指定大模型:ollama rm llama3:8b-text
七、Dify 添加Ollama模型问答
docker运行 dify
sudo cd /usr/local/dify0.6.10/docker
sudo docker-compose up -d
开始拉取镜像
访问 Difyll在浏览器中输入 http://localhost 访问 Dify, 登录Dify主页,
http://192.168.10.7
通过管理员账号登录。
点击用户-设置。
添加Ollama模型。
添加qwen2:7b
模型,因为Ollama是在本机启动,所以设置URL为本地IP地址,端口为114341
,
“
qwen2-7b-instruct 利用YARN(一种增强模型长度外推的技术)支持 131,072 tokens上下文,为了保障正常使用和正常输出,建议API限定用户输入为 128,000 ,输出最大 6,144。[3]
qwen2:7b
启动成功后,ollama 在本地 11434 端口启动了一个 API 服务,可通过http://localhost:11434
访问。
curl http://172.24.156.200:11434
http://host.docker.internal:11434
7.1 在 Dify 中接入 Ollama
在 设置 > 模型供应商 > Ollama 中填入:
为Dify是docker起的服务,所以如果ollama是宿主机上的,需要输入地址为:
http://host.docker.internal:11434
模型名称:llava
基础 URL:http://:11434
此处需填写可访问到的 Ollama 服务地址。
若 Dify 为 docker 部署,建议填写局域网 IP 地址,如:http://192.168.1.100:11434 或 docker 宿主机 IP 地址,如:http://172.17.0.1:11434。若为本地源码部署,可填写 http://localhost:11434。
模型类型:对话
模型上下文长度:4096
模型的最大上下文长度,若不清楚可填写默认值 4096。最大 token 上限:4096
模型返回内容的最大 token 数量,若模型无特别说明,则可与模型上下文长度保持一致。是否支持 Vision:是
当模型支持图片理解(多模态)勾选此项,如 llava。
点击 “保存” 校验无误后即可在应用中使用该模型。
7.2 尼恩的 智能聊天 工程,顺利 完工
接下来,给大家介绍 智能聊天 工程的架构,开发
尼恩架构团队的大模型《LLM大模型学习圣经》
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系列, 包括下面的内容:
内容体系包括下面的内容:
- 《LLM大模型学习圣经:从0到1吃透Transformer技术底座》
- 《LangChain学习圣经:从0到1精通LLM大模型应用开发的基础框架》
- 《LLM大模型学习圣经:从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》
- 《SpringCloud + Python 混合微服务架构,打造AI分布式业务应用的技术底层》
- 《LLM大模型学习圣经:从0到1吃透大模型的顶级架构》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的架构 与实操》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的 中台 架构 与实操》
以上学习圣经 的 配套视频, 2025年 5月份之前发布。
尼恩技术圣经系列PDF
- 《NIO圣经:一次穿透NIO、Selector、Epoll底层原理》
- 《Docker圣经:大白话说Docker底层原理,6W字实现Docker自由》
- 《K8S学习圣经:大白话说K8S底层原理,14W字实现K8S自由》
- 《SpringCloud Alibaba 学习圣经,10万字实现SpringCloud 自由》
- 《大数据HBase学习圣经:一本书实现HBase学习自由》
- 《大数据Flink学习圣经:一本书实现大数据Flink自由》
- 《响应式圣经:10W字,实现Spring响应式编程自由》
- 《Go学习圣经:Go语言实现高并发CRUD业务开发》
……完整版尼恩技术圣经PDF集群,请找尼恩领取