如何为自研模型写一个Recipe?spark-vllm-docker配方YAML字段参考与参数替换教程

发布时间:2026/10/5 0:17:09

如何为自研模型写一个Recipe?spark-vllm-docker配方YAML字段参考与参数替换教程 如何为自研模型写一个Recipespark-vllm-docker配方YAML字段参考与参数替换教程【免费下载链接】spark-vllm-dockerDocker configuration for running VLLM on dual DGX Sparks项目地址: https://gitcode.com/gh_mirrors/sp/spark-vllm-docker想在 DGX Spark 上一键部署自研模型spark-vllm-docker 的Recipe配方系统就是为你准备的每个 Recipe 是一个简单的 YAML 文件声明要下载哪个 HuggingFace 模型、用哪个 Docker 容器镜像、应用哪些补丁mods、以及最终的vllm serve启动命令。写对 YAML 字段、掌握{参数}替换机制你的模型就能通过一条./run-recipe.sh命令完成「建镜像 下模型 起服务」的全流程。 一、30 秒认识 Recipe 系统在 spark-vllm-docker 中Recipe 位于recipes/目录由 run-recipe.py 解析执行。它的核心价值是一键部署# 列出所有可用配方 ./run-recipe.sh --list # 单节点跑一个配方 ./run-recipe.sh gemma4-26b-a4b --solo # 完整流程自动建镜像 下载模型 启动服务 ./run-recipe.sh gemma4-26b-a4b --solo --setup # 运行时覆盖参数 ./run-recipe.sh gemma4-26b-a4b --solo --port 9000 --gpu-mem 0.8首次使用集群前用./run-recipe.sh --discover自动发现节点并保存配置到.env之后的配方运行会自动读取。 二、Recipe YAML 字段完整参考表一个合法 Recipe 必须包含 4 个必填字段其余字段均可选run-recipe.py 中的校验逻辑会检查缺失字段并直接报错。字段必填类型作用name✅字符串配方的人类可读名称recipe_version✅字符串Schema 版本当前固定为1container✅字符串容器镜像标签如vllm-node、vllm-node-b12xcommand✅多行字符串vllm serve命令模板支持{占位符}description⬜字符串简要描述显示在--list列表中model⬜字符串HuggingFace 模型 ID供--setup自动下载mods⬜列表需要应用的 mod/补丁目录如mods/fix-gemma4-tool-parserdefaults⬜字典{占位符}的默认值可被 CLI 覆盖env⬜字典注入容器内的环境变量build_args⬜列表传给 build-and-copy.sh 的构建参数如--exp-b12xcluster_only⬜布尔为true时禁止 solo 模式模型太大solo_only⬜布尔为true时禁止集群模式以官方示例 recipes/minimax-m2-awq.yaml 为例recipe_version: 1 name: MiniMax-M2-AWQ description: vLLM serving MiniMax-M2-AWQ on a multi-node cluster model: QuantTrio/MiniMax-M2-AWQ container: vllm-node cluster_only: true mods: [] defaults: port: 8000 host: 0.0.0.0 tensor_parallel: 2 gpu_memory_utilization: 0.8 max_model_len: 128000 env: {} command: | vllm serve QuantTrio/MiniMax-M2-AWQ \ --port {port} \ --host {host} \ --gpu-memory-utilization {gpu_memory_utilization} \ -tp {tensor_parallel} \ --distributed-executor-backend ray \ --max-model-len {max_model_len} 更多范例可参考recipes/gemma4-26b-a4b.yaml、recipes/deepseek-v4-flash.yaml、recipes/glm-4.7-flash-awq.yaml。 三、参数替换机制{占位符}是怎么工作的这是 Recipe 最灵活的部分也是新手最容易踩坑的地方。替换规则在command中写{参数名}运行时它会被替换为「CLI 覆盖值 defaults 中的值」。例如--port {port}当你运行./run-recipe.sh my-recipe --port 9000时模板中的{port}就被替换成9000。内置的可覆盖参数包括--port、--host、--tp--tensor-parallel、--gpu-mem--gpu-memory-utilization、--max-model-len。但注意defaults可以定义任意自定义占位符如 recipes/qwen3.5-397b-int4-autoround.yaml 中的kv_cache_memory_bytes这些自定义参数只能写死在 YAML 里或改用命令行--追加参数。⚠️ 头号陷阱JSON 花括号必须双写命令里若出现 JSON比如投机解码配置speculative-config其中的花括号会被模板引擎误认为占位符。解决办法是把{和}双写成{{和}}官方配方 recipes/deepseek-v4-flash.yaml 正是这么做的command: | vllm serve deepseek-ai/DeepSeek-V4-Flash \ --speculative-config {{method:mtp,num_speculative_tokens:{num_speculative_tokens}}}上面这行里{{...}}是字面量 JSON 花括号而中间的{num_speculative_tokens}仍是占位符替换后输出为--speculative-config {method:mtp,num_speculative_tokens:2}记住口诀JSON 用双括号转义占位符用单括号替换。✍️ 四、手把手写你的第一个自研模型 Recipe完整流程只需 4 步第 1 步获取仓库代码git clone https://gitcode.com/gh_mirrors/sp/spark-vllm-docker cd spark-vllm-docker第 2 步创建 YAML 文件在recipes/下新建my-model.yaml填入最小可用骨架recipe_version: 1 name: My Custom Model description: vLLM serving my-org/my-model on DGX Spark model: my-org/my-model container: vllm-node defaults: port: 8000 host: 0.0.0.0 tensor_parallel: 1 gpu_memory_utilization: 0.8 max_model_len: 32768 command: | vllm serve my-org/my-model \ --port {port} \ --host {host} \ -tp {tensor_parallel} \ --max-model-len {max_model_len} \ --gpu-memory-utilization {gpu_memory_utilization}第 3 步按需追加可选字段模型需要补丁加mods路径相对仓库根目录参考 mods/ 下的现成 mod 写法模型太大必须集群加cluster_only: truesolo 模式运行时会给出友好报错需要特殊环境变量如DG_JIT_USE_NVRTC: 0填入env写法见 recipes/deepseek-v4-flash.yaml需要 B12X 实验镜像加build_args: [ --exp-b12x ]并把container改为vllm-node-b12x完整范例见 recipes/qwen3.8-flash-next-nvfp4-solo.yaml第 4 步试运行先用--dry-run预览将执行的完整命令确认无误后再实际启动# 预览命令不实际执行 ./run-recipe.sh my-model --solo --dry-run # 完整流程建镜像 下模型 启动 ./run-recipe.sh my-model --solo --setup启动后在另一个终端验证服务curl --fail http://localhost:8000/health curl --fail http://localhost:8000/v1/models 五、运行与调试这些开关能救命命令用途--dry-run只打印将要执行的命令不实际运行--setup完整流程构建镜像 下载模型 启动--build-only/--download-only只做镜像构建或模型下载不启动--force-build/--force-download强制重建镜像 / 重新下载模型--port N--tp N--gpu-mem X--max-model-len N覆盖 defaults 中的对应占位符-e VARVALUE追加容器环境变量可重复-v 本地路径:容器路径挂载数据卷可重复-- 参数...--之后的参数原样追加到 vLLM 命令末尾其中--追加参数非常实用适合临时调试而不用改 YAML# 覆盖加载格式 ./run-recipe.sh my-model --solo -- --load-format safetensors # 自定义 API 名称 ./run-recipe.sh my-model --solo -- --served-model-name my-api-name # 多个参数一起追加 ./run-recipe.sh my-model --solo -- --load-format auto --enforce-eager⚠️ 注意如果追加的参数与 CLI 覆盖项冲突例如既--port 9000又-- --port 8000运行器会告警且后出现的追加参数获胜。能用内置覆盖参数就别重复追加。️ 六、进阶build_args、mods 与记忆优化组合拳build_args控制镜像怎么构建常用取值参数说明--exp-b12x使用 B12X 实验镜像标签vllm-node-b12x--exp-mxfp4使用 MXFP4 量化专用 Dockerfile--use-wheels用预编译 wheel 构建而不是拉取官方镜像mods是 spark-vllm-docker 的特色能力每个 mod 是一个目录含run.sh和补丁文件在启动前自动应用。真实案例 recipes/qwen3.5-397b-int4-autoround.yaml 一口气叠了 4 个 mod 来解决大模型内存问题mods: - mods/fix-qwen3.5-chat-template - mods/gpu-mem-util-gb - mods/kv-cache-prealloc-cleanup - mods/drop-caches如果你的自研模型在 Spark 上遇到聊天模板不兼容、内存吃紧等问题大概率能在 mods/ 目录里找到现成方案直接引用即可。❓ 七、常见问题速查Q1配方文件放哪怎么被找到放在recipes/目录下扩展名.yaml或.yml。也可以传完整路径运行./run-recipe.sh recipes/my-model.yaml。解析顺序见 run-recipe.py。Q2占位符替换后还有{}残留启动报错十有八九是 JSON 没双写括号。检查命令里所有 JSON 结构把{/}改成{{/}}。Q3集群配方跑 solo 报「requires cluster mode」这是cluster_only: true的拦截提示属于正常保护。先./run-recipe.sh --discover配置节点再不带--solo运行。Q4模型需要访问令牌gated modelexport HF_TOKENYOUR_TOKEN ./run-recipe.sh my-model -e HF_TOKEN$HF_TOKEN --setupQ5怎么验证我的 YAML 写对了最快的方式是--dry-run字段缺失或拼写错误会立刻报错模板替换后的完整命令会打印出来供你检查。字段规则与容错逻辑都在 run-recipe.py 中官方格式说明在 recipes/README.md。 八、参考资料配方系统官方文档recipes/README.md配方解析源码run-recipe.py集群网络配置指南docs/NETWORKING.md集群启动脚本launch-cluster.sh现成范例库recipes/含 20 个覆盖 FP8/NVFP4/AWQ/INT4 各种量化的真实配方掌握以上内容从写 YAML 到服务上线通常只需 10 分钟。建议先从最简单的 solo 配方如 recipes/gemma4-26b-a4b.yaml抄起再逐步叠加 mods 与集群配置你的自研模型就能稳稳跑在 DGX Spark 上了 【免费下载链接】spark-vllm-dockerDocker configuration for running VLLM on dual DGX Sparks项目地址: https://gitcode.com/gh_mirrors/sp/spark-vllm-docker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/5 0:12:09

计算机网络实验报告:网络命令、路由交换与IIS配置全解析

简介:河北工业大学计算机网络实验报告以Word文档形式整理,聚焦网络基础技能实操,面向高校计算机网络课程学习者与需要备考CCNA等认证的读者。内容覆盖实验一基本网络命令与实验二路由器配置两大模块:系统讲解ping、ipconfig、trac…

2026/10/5 0:12:09

Java汽车租赁系统:状态机+事务锁解决并发下单

简介:这是一套基于Java Web技术栈开发的汽车租赁管理系统完整源码,面向Java初学者与Web开发入门者,适用于课程设计、毕业设计及中小型企业租赁业务原型开发。系统采用Servlet架构,后端对接Oracle数据库,涵盖用户管理、…

2026/10/5 4:32:20

儿童近视防控全攻略:从眼轴监测到OK镜与离焦镜选型

1. 近视防控这件事,先想明白比先动手更重要最近几年,家长群里聊孩子近视的话题越来越多,焦虑感也越来越重。今天你得了个“远视储备告急”的诊断,明天同事说她家孩子已经“真性近视100度”,后天又在短视频里刷到各种“…

2026/10/5 4:32:20

洛谷P1144最短路计数:BFS原理、链式前向星与避坑指南

洛谷P1144,标准的题目名叫“最短路计数”,是我刷图论入门题单时绕不开的一道题。题目本身不复杂:给你一张可能有重边和自环的无向无权图,从点1出发,问到达每个点的最短路径一共有多少条,结果对100003取模。…

2026/10/5 4:32:20

企业微信外部群自动化推送:Webhook对接、监控告警与风控实战

在私域运营和企业协作里,“企业微信外部群自动化消息推送”是近期被问得最多的一类需求。团队想把监控告警、业务通知、运营内容自动推到客户群或者合作方群里,但又怕频率太高、行为太像机器人,反而被封号。这篇就是聊聊我实际做过的方案&…

2026/10/5 4:32:20

基于SpringBoot的行李寄存管理系统:从部署到答辩完整拆解

大概每一两周就会收到一次私信,问"行李寄存管理系统"这类基于SpringBoot的项目怎么跑起来、代码怎么读、答辩怎么讲。这类项目在课程设计和毕业设计里出现频率极高,原因很简单:业务场景足够真实,技术栈足够主流&#xf…

2026/10/5 4:32:20

Soap:专为GGUF模型设计的轻量级LoRA微调工具

1. Soap不是协议,是微调界的“傻瓜相机”——为什么它突然火了? Soap!一键微调大模型!4G显存可调8B模型!——看到这个标题,我第一反应不是点开,而是把手机横过来截图发给三个做AI落地的朋友。不…

2026/10/5 4:27:19

律所发票批量录入实操指南:从手工逐条到Excel导入提效

1. 为什么律所发票录入这么慢,问题到底出在哪办工桌前一坐就是一下午,就为了把几十张发票一张张敲进系统。这种事在律所行政、财务和内勤岗位上太常见了。我自己也干过这事,第一次处理月度票据归档时,对着业务管理系统逐条手工录发…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑