Hy-Nomas:8B 参数、单张 4090 跑 60 秒可控世界,但发布头三天只有 41 颗星
先说结论
10 月 21 日,腾讯混元把 Hy-Nomas 的权重、推理代码、两套 LoRA、280 条基准用例一次性全放出来了,Apache 2.0,可商用。
但这次发布低调到反常:官宣推文比代码晚发两天,连 “Nomas” 是什么意思都没解释,国内主流媒体零报道,GitHub 头三天只有 41 颗星——可能是今年最不像腾讯的一次腾讯发布。
对开发者来说,值得关注的理由只有一条:
这是目前唯一一个能在单张 RTX 4090 上跑起来的、可自由交互的、Apache 2.0 的世界模型。
同赛道的 Genie 3 闭源,只能在美国 AI Ultra 订阅的网页原型里摸到;Matrix-Game 4.0 公开了消费级实时运行,但权重不开。想真正把世界模型拿进项目里改,Hy-Nomas 是目前成本最低的入口。
| 官方规格(来自腾讯混元官网) | 数值 |
|---|---|
| 模型参数量 | 8B |
| 输出分辨率 | 720p(1280×704) |
| 最长连续生成 | 60 秒 |
| 上下文长度 | 360K token |
| 帧率 | 24 fps |
| 许可证 | Apache 2.0(可商用) |
| 最低硬件 | 单张 RTX 4090(INT8 + CPU offload) |
下面按「它是什么 → 架构怎么搭 → 怎么在 4090 上真跑起来 → 三盆冷水 → 和 Genie 3 的差距」来讲,所有数字都标了出处,官方没给的我会明确说"官方未披露"。
一、它和普通 AI 视频生成,差在哪
一句话区分:
- 普通 AI 视频生成:一锤子买卖。你给 prompt,它出片,出完你只能看。想改,重来一遍,画面全变。
- Hy-Nomas:一段约 4 秒地生成,段与段之间你可以插话。
"插话"能做什么:
| 能力 | 具体表现 |
|---|---|
| 多轮文本控制 | 加个物体、改个天气、让人物换个动作,不重启、不重算历史 |
| 相机轨迹控制 | WASD / 方向键直接走位,镜头自由移动 |
| 文本与相机交错 | 同一段视频里,先用文字描述场面,再切相机推镜头,然后继续用文字改剧情 |
| 世界记忆 | 走远之后返回原地,物体、环境细节、空间布局不"变脸" |
官方在官网放了 83 个生成示例,按 4 种画风 × 3 种视角分组:
4 种画风:真实实拍 / CG / 游戏 / 动画
3 种视角:第一人称 / 第三人称跟随 / 第三人称旁观
这个覆盖度说明它不是只能出写实画面——游戏和动画风格同样成立,这对做原型验证的人很关键。
世界记忆的官方演示数据:
| 演示 | 时长 | 验证内容 |
|---|---|---|
| 重返复杂场景 | 30s | 大幅镜头运动后回到原视角,复杂背景完整保留 |
| 地标保持原位 | 29s | 走开后回头,地标还在原处 |
| 重新找到瀑布 | 20s | 探索一圈后能找回来 |
这三个 demo 是官方精选的最好情况。真实能力边界要看下面的"三盆冷水"。
二、架构:54 个双流 MMDiT block + 四个关键设计
官方在官网把架构拆成四个看点,我按"为什么这么设计"的顺序重讲一遍。
2.1 主干:54 个 dual-stream MMDiT block
┌──────────────────────────────────────────────┐
│ 文本指令 ──┐ │
│ ├─→ 54 × dual-stream MMDiT block │──→ 视频 latent
│ 视频 latent ┘ ↑ │
│ 相机交叉注意力 │
│ │
│ 每段生成的 text/video K,V 缓存 ─→ 传给下一段 │
└──────────────────────────────────────────────┘
要点两条:
- 文本和视频是双流并行处理的,不是先编码文本再拼接,而是 54 层里持续交互。这决定了它对"改一个细节"的响应精度。
- 相机走的是交叉注意力,独立于文本通道。这是为什么文字和相机能交错控制而不互相污染——两条控制信号在架构层就是分开的。
而那句"每段生成的 text/video K,V 缓存传给下一段",就是世界记忆的全部机制来源。
2.2 Action-aware causal attention(动作感知因果注意力)
分段的因果注意力,如果只做"前面所有段都看",长视频下注意力会被稀释。
Hy-Nomas 加了"动作感知"这一层——让模型知道当前段接的是文本指令还是相机运动,从而调整该回看哪些历史段。
对做长序列生成的人,这条设计思路可以直接搬:因果掩码不该是均匀的,应该按"上一个动作的类型"加权。
2.3 Segment Forcing(分段强制训练)
这是 LoRA 微调管线的核心。官方给的训练配置很实在:
| 参数 | 值 |
|---|---|
| LoRA rank / alpha | 256 |
| dropout | 0 |
| 优化器 | Muon |
| 学习率 | 1e-4(constant) |
| 训练步数 | 2,000 步 |
| 序列并行 | SP8 |
| 示例总规模 | 128 GPU(DP16 × SP8) |
| 序列打包最大长度 | 360,000 |
流程是三步:
① 从非蒸馏 checkpoint(DiT/base_ar)开始训练
↓
② segment forcing 管线,只训 LoRA 参数
↓
③ 把 LoRA 权重合并进蒸馏 checkpoint(DiT/distilled)→ 推理用
注意第①步和第③步的对象不是同一个模型。 训练用非蒸馏版(表达能力强、能学到东西),推理用蒸馏版(4/6/8 步快速出片)。LoRA 跨版本迁移是这里最容易踩坑的地方——如果你的 LoRA 在蒸馏模型上跑出画质崩塌,先查这两者的 latent 布局是否对齐。
2.4 Nomas-PE(提示词增强器)
一个在线小模型,把你口语化的指令转成结构化 prompt。
看起来不起眼,但这是"多轮交互"能用的前提。你说"让它下雪",如果没有 PE,模型可能理解为"画面整体变白";有 PE,会补出"地面积雪、飘落雪花、色温转冷"这一串可执行描述。
这一类小组件值得在自己的 Agent 项目里照搬:用户输入永远是模糊的,中间加一层"口语 → 结构化"的翻译器,比在大模型 prompt 里堆十条规则管用。
三、部署实战:单张 4090 怎么跑起来
官方给了两条路:预打包 Docker 镜像(强烈推荐)和手动安装。Docker 那条能省掉 CUDA 13 + FlashAttention 3 的编译地狱,直接用它。
3.1 环境要求
| 项 | 要求 |
|---|---|
| 操作系统 | Linux |
| Python | 3.12+ |
| CUDA Toolkit | 13.0(需要 nvcc) |
| 包管理 | uv |
| 其他 | C++ 编译器、兼容的 NVIDIA 驱动 |
Windows 用户注意:官方只给 Linux 路径。要么 WSL2(需要确认 GPU 直通),要么租云卡。这是本项目目前最实际的门槛。
3.2 拉镜像启动
export HY_NOMAS_IMAGE="hynomasoss/hynomasoss:cu130"
docker pull "$HY_NOMAS_IMAGE"
docker run --rm -it --gpus all --ipc=host --network=host \
-v "$PWD:/workspace/Hy-Nomas" \
-w /workspace/Hy-Nomas \
"$HY_NOMAS_IMAGE" bash
--ipc=host 不要省。多进程共享显存/内存时,默认 IPC 命名空间不够用,会以各种诡异的内存错误表现。
3.3 下载权重
export Hy_Nomas_Model_Path=/path/to/Hy-Nomas
hf download tencent/Hy-Nomas --local-dir "${Hy_Nomas_Model_Path}"
权重里有 9 个资产,第一次下载容易搞混哪个是哪个:
| 资产 | 用途 | 什么时候用 |
|---|---|---|
DiT/base_ar(FP32) |
非蒸馏 checkpoint | 只在 LoRA 微调时用 |
DiT/distilled(FP32) |
蒸馏版,4/6/8 步推理 | 有 24G+ 显存、要画质 |
DiT/distilled_int8 |
INT8 量化蒸馏版 | 默认单卡推理就用它 |
DiT/cinematic_lora |
电影感 LoRA | 提升画面质感 |
DiT/robotics_lora |
机器人仿真 LoRA | 具身智能数据合成 |
VAE/DCAE-V |
视频编码为 latent | 训练/数据处理 |
VAE/PixelUMM_FT |
latent 解码为视频帧 | 标准推理 |
VAE/PixelUMM_FT_FP8 |
FP8 量化解码器 | 低显存推理 |
Nomas-PE |
提示词增强器 | 交互式使用必带 |
3.4 标准推理(高显存)
export Hy_Nomas_Model_Path="${Hy_Nomas_Model_Path:-/path/to/Hy-Nomas}"
bash scripts/inference/inference_from_config.sh configs/experiment/inference.yaml \
dit_weight="${Hy_Nomas_Model_Path}/DiT/distilled/diffusion_pytorch_model_ema_0_995.safetensors" \
model.vae.checkpoint="${Hy_Nomas_Model_Path}/VAE/PixelUMM_FT/diffusion_pytorch_model.safetensors" \
inference.prompt=/path/to/prompts.json \
inference.save_path=./outputs/distill
3.5 单卡 4090 低显存推理(关键)
export Hy_Nomas_Model_Path="${Hy_Nomas_Model_Path:-/path/to/Hy-Nomas}"
bash scripts/inference/inference_from_config.sh configs/experiment/single_gpu_low_mem_inference.yaml \
dit_weight="${Hy_Nomas_Model_Path}/DiT/distilled_int8/diffusion_pytorch_model_ema_0_995_int8.safetensors" \
model.vae.checkpoint="${Hy_Nomas_Model_Path}/VAE/PixelUMM_FT_FP8/diffusion_pytorch_model_fp8.safetensors" \
inference.prompt=/path/to/prompts.json \
inference.save_path=./outputs/single_gpu
和标准版比,只改了三个字:配置文件换 low_mem,DiT 权重换 int8,VAE 换 fp8。
这个 single_gpu_low_mem_inference.yaml 里做了四件事,值得单独说清楚,因为这是整篇文章最有迁移价值的部分:
| 手段 | 具体做法 | 省的是什么 |
|---|---|---|
| INT8 权重 + INT8 KV cache | DiT linear 层和 attention 仍用 BF16 计算,只存 INT8 | 权重体积 + KV cache 体积,约一半 |
| 滑动窗口历史 | 默认只让最近 18 个潜在帧参与 GPU 注意力,更早的留在内存 | KV cache 不随段数增长 |
| CPU offload | 文本编码器 → DiT → VAE 按阶段逐段上 GPU,处理完立刻回 CPU | 峰值显存(代价是 CPU-GPU 传输) |
| 单 GPU kernel 替换 | DiT 用 FlexAttention、解码用 CUTLASS FP8、关序列并行(sp_size=1) | 去掉分布式通信开销 |
这四条组合起来,其实是端侧大模型部署的通用套路,不只是视频生成:
量化存储(INT8/FP8)+ 计算保持高精度(BF16)
↓
把"无限增长的状态"换成"固定窗口"(滑动窗口)
↓
把"同时驻留"换成"按阶段轮转"(CPU offload)
↓
把"通用 kernel"换成"专用 kernel"(FlexAttention / CUTLASS)
按这个顺序往下压,是显存不够时的标准降级路径。
3.6 Diffusers 调用(做集成的走这条)
# 需要安装 Hy-Nomas 维护的 diffusers 分支
# 具体仓库地址以 GitHub 仓库 README 为准,此处用占位符代替
pip install -e "diffusers[hy-nomas] @ git+<Hy-Nomas diffusers 分支地址>"
(这一分支不是 PyPI 上的标准 diffusers,必须按 README 给的地址装。装错版本会出现 HyNomasModularPipeline 找不到的报错。)
pipe = HyNomasModularPipeline.from_pretrained("tencent/Hy-Nomas-Diffusers")
pipe.load_components(dtype=torch.bfloat16)
pipe.to(device="cuda", dtype=torch.bfloat16)
pipe.transformer.enable_reference_attention(text_backend="flash_varlen", deterministic=True)
videos = pipe(
prompt=[json.dumps(prompt) for prompt in prompts],
height=704, width=1280,
num_frames=240, # 240 帧 = 10 秒 @ 24fps
segment_latent_lengths=[30, 30], # 分 2 段,每段 30 个 latent
fps=24,
num_inference_steps=4, # 4 步蒸馏
generator=torch.Generator("cpu").manual_seed(42),
output="videos",
)
export_to_video(videos[0], "hy_nomas_video.mp4", fps=24, quality=None)
三个参数要留意:
segment_latent_lengths=[30, 30]:这是分段控制的核心。想生成 60 秒就把它拉到[30, 30, 30, 30]之类,段数越多,能插话的次数越多。num_inference_steps=4:4 / 6 / 8 三档。4 最快但细节最差,做原型验证够用;要出片用 8。deterministic=True:多轮交互时必须开。否则第二段的随机噪声和第一段对不上,历史一致性直接崩掉。这是我最想强调的一个参数。
3.7 流式交互服务(8×B200 才撑得住)
官方给的 Reactor 运行时,硬件要求 8 张 B200:
cd reactor
reactor build
reactor run --gpus '"device=0,1,2,3,4,5,6,7"' --shm-size 8g --port 8080
前端:
cd reactor/demo
npm ci
npm run dev -- --port 5173
打开 localhost:5173,填 Runtime endpoint,点 Connect → 输入 prompt → Start world → 点视频用 WASD 探索。
个人开发者跳过这一节——8×B200 不是家用配置。这一节的意义是:它证明了官方自己有一套能对外服务的部署形态,不是只放了个 demo 脚本。
四、三盆冷水:下载权重前先看完
这是全文最重要的部分。官方 README 和官网都是正面展示,下面这些是我从社区实测和官方规格反推出来的边界。
第一盆:它不实时
社区实测:RTX 5090 生成一段 3 秒视频约需 21 秒。
所以"实时交互世界"这个头衔不在它手里——那是 Matrix-Game 4.0 的宣传点。Hy-Nomas 更接近「轮流改片」:
你下指令 → 等几秒到几十秒 → 世界再往下演一段 → 你再下指令
这个交互节奏适合:做分镜预演、验证游戏世界观、生成定制素材。
它不适合:做实时驾驶模拟、做需要 60fps 响应的交互应用。
判断标准很简单:你的用户能接受"说一句话等 20 秒"吗? 能,它就能用;不能,现在哪个开源世界模型都还不能用。
第二盆:「终身记忆」在消费级卡上要打折
官方主打 lifelong KV cache,理论上每段历史都留着,所以世界记得住你干过什么。
但低显存配置里,历史被换成了滑动窗口——只让最近 18 个潜在帧参与 GPU 注意力,更早的留在内存里(需要时取回,有延迟)。
这意味着什么:
| 配置 | 记忆能力 | 实际表现 |
|---|---|---|
| 8×B200 流式服务 | 完整 lifelong KV cache | 官方 30s 重返场景 demo 的水平 |
| 单张 4090 低显存 | 滑动窗口(18 潜在帧) | 走太远回到原地,细节可能已经变了 |
所以不要把官网那个"30 秒后重返复杂场景、背景完整保留"的 demo,当成你在 4090 上能得到的效果。那是全量 KV cache 下的成绩。
第三盆:官方没给的东西,比给了的多
我逐个核对了官方材料,以下这些官方明确没有披露:
| 缺什么 | 影响 |
|---|---|
| 显存峰值具体数字(GB) | 只知道"随分辨率和段长变化",得自己试 |
| 推理耗时基准(不同 GPU) | 只有社区实测,非官方口径 |
| 训练数据规模 | 无法判断数据覆盖度 |
| 世界记忆的定量指标 | 只有定性 demo,没有"多少秒后一致性下降到多少" |
| 技术报告 | 官网标的是 Tech Report (Coming Soon) |
这一条要特别提醒:8B 这个参数量,我是从腾讯混元官网的 Model Specifications 页取的(原文 8B Model parameters)。但部分社区文章说"官方至今没公布参数量,8B 是推算"。以官网当前页面为准,8B 是官方口径;不过技术报告没出,DiT 和 VAE 各占多少、是否含 PE,都还没有细分数据。
五、和 Genie 3 的差距,以及它真正的位置
这是理解 Hy-Nomas 定位的关键。把三个同赛道模型摆在一起:
| 维度 | Hy-Nomas(腾讯) | Genie 3(Google) | Matrix-Game 4.0 |
|---|---|---|---|
| 开源 | 完全开源(代码+权重+训练流程,Apache 2.0) | 闭源,网页原型限量 | 权重不开 |
| 硬件 | 单张 4090 可跑(INT8) | 云端推理,限 60 秒体验 | 消费级实时 |
| 交互模式 | 多轮分段,非逐帧实时 | 24fps 逐帧真实时 | 实时 |
| 一致性机制 | lifelong KV cache | 约 1 分钟视觉记忆 | — |
| 分辨率 | 1280×704(720p) | 720p 写实级 | — |
| 定制能力 | LoRA 微调 + 数据标注管线 | 无微调入口 | — |
| 适合谁 | 研究者、开发者、创作者 | 普通用户体验 | — |
读完这张表,Hy-Nomas 的定位就清楚了:
它不是"最强的世界模型",而是"唯一能在你机器上、用 Apache 2.0、改得动源码的世界模型"。
Genie 3 在"实时性"和"画质"上确实领先,但它是个产品;Hy-Nomas 是个基座。这两者的比较没有胜负,只有用途不同。
而 10 月这个赛道挤爆的态势很说明问题:
10 月初 Odyssey-3 刷新 Physics-IQ 纪录,权重不开
10 月中 昆仑 Matrix-Game 4.0 宣布消费级显卡实时运行
10/21 腾讯混元 Hy-Nomas 全开源,Apache 2.0,单卡 4090 可跑
三条路,三种活法。腾讯选了"开源换生态"这条——用发布头三天 41 颗星的低调,换一个能被全世界改的基座。这个选择在他们内部未必是最优解,但对开发者是好事。
六、三条可以直接搬走的设计
抛开世界模型这个具体场景,Hy-Nomas 里有三个设计是通用的。
① 滑动窗口 + 全量缓存的"双档设计"
官方给了两套配置:全量 lifelong KV cache(高显存、高一致性)和滑动窗口 18 帧(低显存、有损)。
这不是妥协,这是产品设计。 让用户按硬件选档位,比要求所有人上一套硬件现实得多。
任何做长上下文/长状态的应用,都该问自己一句:我能不能给一个"降级但能用"的档位?
② 量化存储 + 高精度计算
INT8 存权重和 KV cache,但 DiT linear 层和 attention 保持 BF16。
这个组合现在已经是共识了,但很多人在做量化时还是习惯"全链路量化"。存和算分开,是性价比最高的做法——省了显存,不掉精度。
③ LoRA 分域,而不是一个大模型全包
官方给了两套 LoRA:Cinematic(电影感)和 Robotics(机器人仿真,用 RealSource-World 真实机械臂数据集训练)。
同一套基座,合并不同 LoRA 得到不同世界。
对做垂直应用的团队,这个模式值得抄:基座开源给你,你的行业数据训你自己的 LoRA,最后 merge 回蒸馏版做推理。 整套管线官方都给全了,包括数据标注工具(captioning-harness)和打包格式(Arrow / Parquet)。
七、我的判断:谁该现在动手,谁该再等
| 你的情况 | 建议 |
|---|---|
| 做 AI 游戏原型、想低成本验证世界观 | 现在就试。8B + 4090,试错成本最低的选择 |
| 做具身智能、需要合成机械臂数据 | 关注 Robotics LoRA。真实机械臂数据集训的,方向对口 |
| 做影视分镜预演、需要多镜头连贯 | 可用,但要降预期。非实时,一轮要等几十秒 |
| 做实时交互应用(驾驶模拟、VR) | 再等。现在整个开源赛道都做不到 |
| 只想体验一下世界模型 | 用网页 demo,不用下权重。需要注册账号 |
| 显存 12-16G 想跑 | 看 ComfyUI 社区版。社区称 12GB 可跑,但官方未认证,别当承诺 |
最后一个提醒:Apache 2.0 可以商用,但权重和代码的许可证可能不完全一致——商用前把仓库里的 LICENSE 和每个子目录的说明都读一遍,别只看首页那个 Apache 2.0 徽章。这是所有开源模型都会踩的坑。
- 点赞
- 收藏
- 关注作者
评论(0)