把 Hy4 preview 跑起来:vLLM 和 SGLang 部署笔记

腾讯混元开源的 Hy4 preview,总参数量 770B,激活 49B,上下文 1M。模型权重同时放到了 Hugging Face、ModelScope、GitCode 和 CNB,FP8 量化版本也一并提供了。

这篇文章聊怎么把它部署到生产环境,以及跑起来之后怎么调用。

这份 README 里最有用的信息藏在部署命令里

README 写得很直,没有绕圈子。模型架构、Benchmark 数据、许可证信息都列清楚了,但真正让这套东西从“能看”变成“能用”的,是“推理和部署”那一节的命令。

官方推荐的生产环境部署工具是 vLLM 和 SGLang,两个都支持 MTP 投机解码。Hy4 preview 在主干之外内置了 1 层 MTP,参数量 10B,激活 0.7B,作用是加速推理。

vLLM 部署:从源码构建

README 给出的 vLLM 部署方式是从源码构建,不是 pip install vllm

uv venv --python 3.12 --seed --managed-python
source .venv/bin/activate
git clone https://github.com/vllm-project/vllm.git
cd vllm
uv pip install --editable . --torch-backend=auto

这里用了 uv 管理 Python 虚拟环境和依赖,Python 版本锁定 3.12。--torch-backend=auto 让 pip 自动选择当前平台对应的 PyTorch 版本。

启动服务的命令:

vllm serve tencent/Hy4-preview-FP8 \
  --tensor-parallel-size 8 \
  --speculative-config.method mtp \
  --speculative-config.num_speculative_tokens 3 \
  --attention-backend FLASHMLA_SPARSE \
  --tool-call-parser hy_v4 \
  --reasoning-parser hy_v4 \
  --enable-auto-tool-choice \
  --port 8000 \
  --served-model-name hy4-preview

几个关键参数:

  • --tensor-parallel-size 8:8 卡张量并行。770B 参数量级,单卡显存放不下,这是必选项。
  • --speculative-config.method mtp--speculative-config.num_speculative_tokens 3:开启 MTP,每次生成 3 个候选 token。这是 Hy4 内置 MTP 层的用法。
  • --attention-backend FLASHMLA_SPARSE:指定使用 FlashMLA Sparse 作为 attention 后端,对应模型使用的 Gated DSA 注意力机制。
  • --tool-call-parser hy_v4--reasoning-parser hy_v4:工具调用和推理过程的解析器,hy_v4 是专门为这个模型写的。
  • --enable-auto-tool-choice:开启自动工具选择,让模型在需要的时候自己决定调不调工具、调哪个。

模型路径用的是 Hugging Face 上的 FP8 量化版本 tencent/Hy4-preview-FP8。想用 BF16 版本的话把模型名换成 tencent/Hy4-preview,但显存压力会大很多。

SGLang 部署:与 vLLM 的差异

SGLang 的部署方式类似,但投机解码的实现细节不同。

源码构建:

git clone https://github.com/sgl-project/sglang
cd sglang
pip3 install pip --upgrade
pip3 install "transformers>=5.6.0"
pip3 install -e "python"

注意 transformers>=5.6.0 这个依赖要求。Hy4 刚开源,对 transformers 版本有明确下限。

启动命令:

python3 -m sglang.launch_server \
  --model tencent/Hy4-preview-FP8 \
  --tp-size 8 \
  --tool-call-parser hy_v4 \
  --reasoning-parser hy_v4 \
  --speculative-num-steps 2 \
  --speculative-eagle-topk 1 \
  --speculative-num-draft-tokens 3 \
  --speculative-algorithm EAGLE \
  --port 8000 \
  --served-model-name hy4-preview

SGLang 用 EAGLE 算法做投机解码,和 vLLM 的 MTP 是两套实现。--speculative-num-steps 2--speculative-eagle-topk 1 是 EAGLE 专用的参数,README 里明确给了这两个值。

对比 vLLM 和 SGLang 的部署命令,一个直观差异是 vLLM 通过 --attention-backend FLASHMLA_SPARSE 显式指定了 attention 后端,而 SGLang 没有对应参数——意味着 SGLang 可能依赖 transformers 或自有实现来处理 Gated DSA。

生产环境选哪个?两个都支持 OpenAI 兼容 API,都支持 FP8 量化模型。vLLM 的 attention 后端指定更明确,SGLang 的 EAGLE 实现有自己的调度策略。建议先试 vLLM,因为 README 里它排在前面且参数更详尽。

推理调用:两条关键参数

服务跑起来之后,通过 OpenAI 兼容 API 调用:

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="EMPTY")

response = client.chat.completions.create(
    model="hy4-preview",
    messages=[
        {"role": "user", "content": "你好!请简单介绍一下你自己。"},
    ],
    temperature=0.9,
    top_p=1.0,
)
print(response.choices[0].message.content)

README 里给了两个重要提示:

  1. 推荐参数temperature=0.9top_p=1.0。这个组合是官方测过的,不是随便写的默认值。
  2. 推理模式:默认是 "high",即深度思维链模式。数学、编程、推理这类复杂任务用默认就行。日常对话如果不想等它思考太多,传入 extra_body={"chat_template_kwargs": {"reasoning_effort": "no_think"}} 切到直出模式。

这个 reasoning_effort 参数值得留意。它控制模型要不要输出思维链。Hy4 preview 在复杂任务上倾向于长思考,甚至过度自我验证——这是 README 的“已知局限”里自己承认的。对于简单问答,手动关掉思维链能省不少时间。

模型规格速览

部署之前看一眼参数规模,方便评估硬件需求。

属性
架构 混合专家(MoE)
总参数 770B
激活参数量 49B
层数 78
隐藏层维度 6144
注意力类型 Gated DSA
上下文长度 1M
词表大小 120832

MoE 结构:第一层是标准 FFN,剩下 77 层都是 MoE,每层 256 个路由专家加 1 个共享专家,每个 token 激活 top-8 路由专家和共享专家。这个设计解释了为什么总参数 770B 但激活只有 49B——大部分参数是“冷”的,每次推理只动一小部分。

注意力侧用了 Gated DSA(DeepSeek Sparse Attention)加 IndexCache 跨层复用稀疏索引,残差侧用了 iHC(identity Hyper-Connections)。这些架构细节在 README 的模型介绍里一笔带过,但部署时不需要额外配置,vLLM/SGLang 已经在代码里处理好了。

微调和量化:README 没展开但给了入口

README 里单独列出了“模型微调”和“量化工具”两个章节,内容不多,但给出了明确路径:

  • 微调指南在 ./finetune/README_CN.md,完整流程放在仓库的 finetune 目录下。
  • 量化工具用的是腾讯开源的 AngelSlim,支持常用量化算法、低比特量化、投机采样。

Hy4 preview 已经提供了 FP8 量化版本,大多数场景直接用 FP8 模型部署就行。如果需要更低比特或自定义量化策略,再去翻 AngelSlim 的文档。

已知局限:官方自己承认的事

README 里单独列了“已知局限”,这个值得读一遍:

  • Hy4 preview 是 Hy4 迭代的早期版本,预训练和后训练都还有提升空间。
  • 复杂任务上会“过度自我验证”,有时候想太多。
  • 团队希望通过开源获得真实反馈来改进 Hy4 正式版。

这不是在唱衰。意思是如果你在生产环境遇到模型在简单任务上输出过长、反复验证自己的推理,不是你配置错了,是模型本身的倾向。对应办法就是前面提到的 reasoning_effort="no_think" 参数。

实操速览

硬件准备:8 卡 GPU,显存容量取决于用 FP8 还是 BF16。FP8 版本能显著降低显存占用,优先推荐。

部署路径一(vLLM)

  1. uv venv --python 3.12 创建环境
  2. 源码克隆 vLLM,uv pip install --editable . --torch-backend=auto
  3. vllm serve 启动,指定 --tensor-parallel-size 8--speculative-config.method mtp--attention-backend FLASHMLA_SPARSE

部署路径二(SGLang)

  1. 源码克隆 SGLang,安装 transformers>=5.6.0
  2. python3 -m sglang.launch_server 启动,指定 --tp-size 8--speculative-algorithm EAGLE

API 调用:OpenAI 兼容接口,base_url 指向 http://127.0.0.1:8000/v1temperature=0.9top_p=1.0。简单对话切 reasoning_effort="no_think"

模型权重获取:Hugging Face、ModelScope、GitCode、CNB 四个渠道,FP8 版本在模型名后面加 -FP8 后缀。

FAQ

问:vLLM 和 SGLang 哪个更推荐?

README 把 vLLM 放在前面,参数也更详尽,包括 --attention-backend FLASHMLA_SPARSE 的显式指定。建议优先试 vLLM。如果遇到兼容性问题再切 SGLang。

问:FP8 模型和 BF16 模型有什么区别?

FP8 是量化版本,显存占用更低,推理速度更快。README 提供了 Hy4 preview-FP8 的完整部署命令,并且和 BF16 版本并列开源。生产环境优先用 FP8。

问:reasoning_effort 参数怎么用?

在 OpenAI 兼容 API 的请求中传入 extra_body={"chat_template_kwargs": {"reasoning_effort": "no_think"}}。默认是 "high",会输出深度思维链。简单问答场景切 no_think 能省时间。

问:MTP 和 EAGLE 是什么关系?

都是投机解码算法。vLLM 用 MTP(对应 Hy4 内置的 MTP 层),SGLang 用 EAGLE。两者目标相同——加速推理,但实现不同,参数也不互通。

问:1M 上下文怎么验证?

部署完成后用 curl 或 OpenAI SDK 发一个长文本请求,把 messages[0].content 塞一段 100 万 token 左右的内容进去,看服务是否正常返回。README 没有给出专门的测试命令,但服务启动时没有上下文长度限制参数,默认支持 1M。

问:量化工具 AngelSlim 怎么用?

README 只是做了指引,具体用法在 AngelSlim 仓库。如果只需要 FP8 量化,直接用官方提供的 FP8 权重就行,不需要自己跑量化。

问:模型微调需要什么硬件?

README 没有给出具体硬件要求,微调指南在 ./finetune/README_CN.md。770B 参数量级,即便是 LoRA 也需要多卡 A100/H100。先看官方微调文档再评估硬件。