恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

三台机器四个模型:DeepSeek RAG环境搭建实战与避坑指南

  • 首页
  • 资讯中心
  • /
  • 三台机器四个模型:DeepSeek RAG环境搭建实战与避坑指南

相关资讯

数据在内存中的存储:从字节、地址到补码与大小端 2026/10/16 11:33:03
ResNet深度解析:从退化问题到残差块实现,掌握深度学习核心架构 2026/10/16 11:33:03
数据在内存中的存储:从字节序到内存对齐的底层原理与实战 2026/10/16 11:33:03

最新资讯

分隔符与背景:提升网页排版层次感的实战指南
智慧景区综合票务系统全拆解:模块设计、技术选型与落地避坑
grblHAL:面向32位MCU的CNC控制内核HAL架构解析
OpenCV图像去噪原理与工业级实战指南
Linux核心命令实战:从文件权限到进程与网络排查
CSP真题解析:曼哈顿距离与三键排序的防错实践

今日推荐

Java八种基本类型深度解析:从内存布局到实战选型
基础:常用快捷键——IDEA、VS Code、PyCharm 与 Linux 终端效率速查
解决ultraedit下verilog .v文件中文注释乱码:把编码配置改到TaoToken辅助排查

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

三台机器四个模型:DeepSeek RAG环境搭建实战与避坑指南

发布时间:2026/10/16 11:33:03
三台机器四个模型:DeepSeek RAG环境搭建实战与避坑指南 简介这份实战教程面向希望快速上手检索增强生成系统的开发者与运维人员围绕DeepSeek模型系统讲解RAG环境从零搭建的完整流程。内容涵盖技术栈概要、Dify服务器、Rerank与Embedding模型服务器、DeepSeek模型服务器三台ECS的分步部署并涉及CUDA驱动、vLLM推理库、Docker容器化、xinference框架及bge-reranker-large、bge-large-zh-v1.5等模型的具体安装与配置帮助读者解决多机协作、环境版本匹配与模型调用等实际问题。资源包为1个docx文档约580KB以图文步骤与目录结构呈现便于按章节查阅。目前已有326人学习。通过这份教程读者可掌握从服务器环境准备到模型部署验证的完整链路获得可复用的部署思路与排错参考适合具备一定Linux与深度学习基础、希望深入RAG系统落地的技术人员。1. 三台机器、四个模型这套 RAG 环境搭建方案到底值不值得跑一遍如果你最近在折腾本地知识库大概率绕不开一个尴尬模型能跑起来但检索结果答非所问或者检索准了生成又慢得像挤牙膏。这套基于 DeepSeek 的 RAG 环境搭建教程核心思路就是把「生成」和「检索」拆到不同机器上用三台服务器分别扛 Dify 平台、向量化/重排模型、大模型推理避免一张卡上什么都想干、什么都干不好。它适合手头有两三张卡、想把 RAG 链路完整跑通的人也适合已经用过现成平台、但想搞清楚底层模型怎么注册、怎么启动的从业者。整套流程覆盖 CUDA 驱动、vLLM 推理、Docker 部署和 Xinference 模型管理踩坑密度不低但跑通之后你对 RAG 环境搭建的理解会从「点按钮」变成「知道按钮背后在干什么」。2. 技术栈选型为什么是 Dify Xinference vLLM 这套组合2.1 三个模块各管一摊别混在一台机器上这套方案最值得先讲清楚的是分工逻辑。Dify 负责应用层编排——知识库管理、对话流程、智能体配置它本身对显卡没要求所以放在一台普通 ECS 上跑 Docker 就行。Embedding 和 Rerank 模型放在第二台机器用 Xinference 统一管理前者把文档切片转成向量后者对检索回来的候选段落做二次排序。DeepSeek 蒸馏模型放在第三台机器用 vLLM 做推理后端专门负责根据检索结果生成回答。为什么非要拆开因为 Embedding 和 Rerank 是高频调用、低延迟需求而大模型推理是低频调用、高显存占用。混在一起最直接的后果就是显存打架——T4 的 16GB 显存跑 bge-large-zh-v1.5 和 bge-reranker-large 刚好够用但再塞一个 14B 模型进去必然 OOM。分开之后每台机器只需要关注自己的资源水位排查问题也简单得多。常见做法是至少准备两张卡一张 T4 或同级别卡给 Embedding/Rerank一张 V100 32GB 或更高给大模型。如果只有一张卡这套方案跑起来会非常勉强建议先砍掉 Rerank 环节或者换更小的模型。2.2 模型选型bge 系列 DeepSeek 蒸馏版的组合逻辑Embedding 模型选的是BAAI/bge-large-zh-v1.5输出维度 768最大 token 数 512。这个模型在中文语义相似度任务上表现稳定社区验证充分而且 Xinference 对它的支持比较成熟。Rerank 模型选的是BAAI/bge-reranker-large它的作用是在向量检索召回一批候选文档后用交叉编码的方式重新打分排序把真正相关的段落顶到前面。大模型选的是deepseek-ai/DeepSeek-R1-Distill-Qwen-14B基于 Qwen-2.5 系列蒸馏而来。选 14B 而不是更大的版本主要是显存约束——V100 32GB 用 half 精度加载 14B 模型权重占用大约 28GB留给 KV Cache 的空间只剩几个 GB。如果换成 32B 或 70B单卡基本放不下需要多卡张量并行部署复杂度会明显上升。这里有个容易忽略的点DeepSeek 蒸馏版对中文知识问答的适配不错但它的输出风格偏「推理型」有时候会在回答里带上思考过程。如果下游应用对输出格式有严格要求可能需要在 Dify 的提示词环节做后处理。2.3 版本锁定CUDA 12.1 Python 3.10 vLLM 0.4.3这套教程里版本号不是随便写的。CentOS 7.9 默认的 GCC 版本比较老直接装 vLLM 0.4.3 会遇到编译错误所以需要先升级开发工具链。CUDA 选 12.1 是因为 vLLM 0.4.3 官方 wheel 包就是按 cu121 编译的用 11.x 的驱动跑不起来。Python 选 3.10 是因为 vLLM 0.4.3 不支持 3.12而 3.8 又缺少一些类型注解特性。驱动版本选的是 530.30.02对应 CUDA 12.1。这里有个血泪经验驱动和 CUDA 版本必须匹配但安装顺序有讲究。如果先装了 CUDA Toolkit 再装驱动驱动安装程序可能会覆盖掉 CUDA 的部分库文件导致nvcc -V和nvidia-smi显示的版本不一致。正确做法是先装驱动重启验证nvidia-smi正常后再单独安装 CUDA Toolkit并且安装时取消勾选驱动选项。3. 三台服务器实操从驱动安装到模型注册的完整命令3.1 ECS-2Xinference 安装与自定义模型注册第二台机器是整条链路里最需要耐心的部分因为 Xinference 的自定义模型注册流程涉及多个配置文件少一步就会报「模型未找到」。先装 Xinference# 安装完整版包含所有推理后端依赖 pip install xinference[all] # 验证安装是否成功 xinference --help安装完成后配置环境变量并启动服务。这里端口号建议固定为 9997因为后续 Dify 配置模型地址时会用到# 设置模型存储路径避免默认路径磁盘空间不足 export XINFERENCE_HOME/tmp/xinference # 前台启动方便看日志 xinference-local --host 0.0.0.0 --port 9997 # 如果确认没问题改用后台启动 nohup xinference-local --host 0.0.0.0 --port 9997 nohup.out 参数说明--host 0.0.0.0让服务监听所有网卡否则 Dify 服务器无法远程调用--port 9997是 Xinference 默认端口改成其他端口的话 Dify 那边也要同步改。接下来注册 Rerank 模型。先准备config.json{ model_name: custom-bge-reranker-large, type: normal, language: [en, zh], model_id: BAAI/bge-reranker-large, model_uri: file:///root/models/bge-reranker-large }注意model_uri必须用file://前缀加绝对路径不能用相对路径。模型文件需要提前从 HuggingFace 下载好并上传到服务器下载时确认包含pytorch_model.bin、config.json、tokenizer.json这几个关键文件。注册命令# 将自定义模型注册到 Xinference xinference register --model-type rerank --file model.json --persist # 检查是否注册成功 xinference registrations --model-type rerank--persist参数的作用是把注册信息持久化到磁盘否则 Xinference 重启后注册记录会丢失。注册成功后启动模型xinference launch --model-name custom-bge-reranker-large --model-type rerankEmbedding 模型的注册流程类似但config.json多几个字段{ model_name: custom-bge-large-zh-v1.5, dimensions: 768, max_tokens: 512, language: [zh], model_id: BAAI/bge-large-zh-v1.5, model_uri: file:///root/models/bge-large-zh-v1.5 }dimensions必须和模型实际输出维度一致bge-large-zh-v1.5 是 768 维写错了 Dify 那边建知识库时会报维度不匹配。max_tokens设为 512 是因为这个模型的最大输入长度就是 512超过部分会被截断。启动 Embedding 模型xinference launch --model-name custom-bge-large-zh-v1.5 --model-type embedding两个模型都启动后可以用 curl 快速验证服务是否正常# 测试 Embedding 接口 curl http://localhost:9997/v1/embeddings \ -H Content-Type: application/json \ -d {model: custom-bge-large-zh-v1.5, input: 测试文本}如果返回结果里包含 768 维的向量数组说明 Embedding 服务正常。Rerank 接口的测试类似把路径换成/v1/rerank即可。3.2 ECS-3vLLM 部署 DeepSeek 蒸馏模型第三台机器负责大模型推理环境版本要求更严格CentOS 7.9 CUDA 12.1 Python 3.10 vLLM 0.4.3。先处理驱动和 CUDA。驱动选 530.30.02 版本安装后重启验证# 验证驱动是否正常加载 nvidia-smi # 输出应该显示 Driver Version: 530.30.02 和 CUDA Version: 12.1CUDA Toolkit 单独安装安装时取消勾选驱动组件# 下载 CUDA 12.1 runfile wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run # 安装取消勾选 Driver sh cuda_12.1.0_530.30.02_linux.run安装完成后配置环境变量# 编辑 ~/.bashrc vim ~/.bashrc # 在文件末尾添加 export PATH/usr/local/cuda-12.1/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH # 刷新环境变量 source ~/.bashrc # 验证 nvcc -Vnvcc -V和nvidia-smi显示的 CUDA 版本可能略有差异只要主版本号一致都是 12.x就没问题。接下来创建 Python 虚拟环境并安装 PyTorch。这里必须指定 cu121 的 index-url否则 pip 会默认装 CPU 版本# 创建虚拟环境 conda create -n myenv python3.10 -y conda activate myenv # 安装 PyTorch版本必须和 vLLM 0.4.3 匹配 pip install torch2.3.0 torchvision0.18.0 torchaudio2.3.0 --index-url https://download.pytorch.org/whl/cu121PyTorch 装完后安装 vLLMpip install vllm0.4.3安装过程中如果报依赖版本冲突按照报错信息里提示的版本号逐个安装即可。常见的是pydantic和fastapi版本不兼容手动指定版本后重试。模型文件提前下载并上传到服务器然后启动推理服务python -m vllm.entrypoints.openai.api_server \ --model /root/work/ds/pretrained \ --dtype half \ --trust-remote-code \ --tensor-parallel-size 1 \ --max-model-len 5120 \ --enforce-eager \ --gpu-memory-utilization 0.95 \ --max-num-batched-tokens 5120 \ --max-num-seqs 5 \ --host 0.0.0.0 \ --served-model-name DeepSeek-R1-14B \ --port 8008 逐个参数解释--dtype half用 FP16 精度加载比 FP32 省一半显存--tensor-parallel-size 1表示单卡推理多卡的话改成卡数--max-model-len 5120限制上下文长度设太大 KV Cache 会撑爆显存--enforce-eager禁用 CUDA Graph虽然损失一点性能但能避免某些驱动兼容性问题--gpu-memory-utilization 0.95让 vLLM 尽可能多地占用显存留给 KV Cache 用--max-num-seqs 5限制并发请求数防止高并发时 OOM。启动后验证服务curl http://localhost:8008/v1/models返回模型列表里包含DeepSeek-R1-14B就说明服务正常。3.3 ECS-1Dify 对接三个模型端点Dify 用 Docker 部署官方文档里有 docker-compose 方案这里不展开。重点讲模型对接环节。登录 Dify 后台后进入「设置」→「模型供应商」分别添加三个模型模型类型供应商接口地址模型名称EmbeddingXinferencehttp://ECS-2-IP:9997/v1custom-bge-large-zh-v1.5RerankXinferencehttp://ECS-2-IP:9997/v1custom-bge-reranker-largeLLMOpenAI-API-compatiblehttp://ECS-3-IP:8008/v1DeepSeek-R1-14BEmbedding 和 Rerank 的 API Key 可以随便填Xinference 默认不校验。LLM 的 API Key 也随便填vLLM 的 OpenAI 兼容接口同样不校验。配置完成后建一个测试知识库上传一份文档看能否正常完成向量化和检索。如果检索结果为空优先检查 Embedding 模型是否正常返回向量。4. 避坑指南这套环境搭建最容易翻车的五个地方4.1 现象Xinference 注册模型时报「model_uri not found」原因config.json里的model_uri路径写错了或者模型文件没有上传到对应目录。Xinference 不会自动下载模型必须手动把 HuggingFace 上的文件完整下载后上传。解决用ls -la确认模型目录下包含pytorch_model.bin、config.json、tokenizer.json、vocab.txt这几个文件。如果缺少pytorch_model.bin说明下载的是 LoRA 适配器而不是完整模型。4.2 现象vLLM 启动时报「CUDA out of memory」原因--gpu-memory-utilization设得太高或者--max-model-len设得太大导致 KV Cache 占用过多。14B 模型 half 精度权重约 28GBV100 32GB 只剩 4GB 给 KV Cachemax-model-len设 5120 时如果并发请求多很容易 OOM。解决先把--gpu-memory-utilization降到 0.90--max-model-len降到 4096--max-num-seqs降到 3启动成功后再逐步往上调找到稳定运行的临界值。4.3 现象Dify 调用 Embedding 接口超时原因ECS-2 的安全组没有开放 9997 端口或者 Xinference 启动时--host设的是127.0.0.1而不是0.0.0.0。解决检查安全组入方向规则确保 9997 端口对 ECS-1 的内网 IP 开放。同时确认 Xinference 启动命令里--host 0.0.0.0没有写错。4.4 现象Rerank 模型返回的分数全是 0 或负数原因输入文本格式不对。bge-reranker-large 期望的输入是 query 和 document 的配对如果只传了 document 没传 query或者两个字段顺序反了打分就会异常。解决检查 Dify 里 Rerank 节点的配置确认 query 字段填的是用户问题document 字段填的是检索召回的段落。用 curl 单独测试 Rerank 接口时请求体里必须同时包含query和documents两个字段。4.5 现象vLLM 服务启动后 curl 能通但 Dify 调用报 404原因Dify 配置 LLM 时接口地址填的是http://ECS-3-IP:8008但 vLLM 的 OpenAI 兼容接口路径是/v1少写了这一层。解决把接口地址改成http://ECS-3-IP:8008/v1模型名称填DeepSeek-R1-14B和--served-model-name参数保持一致。5. 跑通之后怎么验证整条链路真的在工作环境搭完只是第一步更关键的是确认「检索→重排→生成」这条链路每个环节都在正常出力。我一般会用一个固定测试集来验证而不是随便问一句「你好」看有没有回复。先准备三个测试问题分别对应知识库里明确有答案、部分相关、完全无关三种情况。然后在 Dify 的对话日志里看每个环节的耗时和输出。Embedding 环节的验证方法是在 Dify 知识库里搜一个关键词看返回的段落是否和关键词语义相关。如果返回结果明显不相关说明 Embedding 模型没有正确加载或者知识库文档切片粒度太粗。Rerank 环节的验证方法是对比开启 Rerank 前后同一个 query 返回的 Top-3 段落排序是否变化。如果排序完全没变可能是 Rerank 模型没生效或者候选段落数量太少少于 3 个时 Rerank 没有发挥空间。LLM 环节的验证方法是把检索到的段落和用户问题一起发给 vLLM看生成的回答是否引用了段落里的内容。如果回答完全脱离检索结果说明 Dify 的提示词模板里没有正确注入上下文变量。这里有个我踩过的坑Dify 默认的提示词模板里上下文变量名是{{context}}但如果你在知识库配置里改了变量名提示词里也要同步改否则 LLM 收到的上下文是空的生成结果自然和知识库无关。最后一个技巧是关于模型卸载的。Xinference 启动的模型会一直占用显存如果只是临时测试用完记得注销# 注销 Rerank 模型 xinference unregister --model-type rerank --model-name custom-bge-reranker-large # 注销 Embedding 模型 xinference unregister --model-type embedding --model-name custom-bge-large-zh-v1.5不注销的话下次启动同类型模型时 Xinference 会报「模型已存在」还得手动去删注册记录。从那以后我每次做完测试都强制走一遍注销流程省得下次启动时对着报错发呆。希望这套流程能帮你少走几个弯路。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号