腾讯开源 Hy-Nomas 世界模型,支持文本与镜头多轮交互生成

中文 | English Hy-Nomas Hy-Nomas:迈向自由形式交互式世界生成 GitHub 技术报告(即将发布) 基准项目 网站 X 帖子 🚀 试用演示 → 模型简介 Hy-Nomas 是一个视频世界生成模型,支持通过文本指令和相机控制进行自由形式、多轮交互。它一次生成一个视频片段来构建世界,允许用户在生成持续进行时引入对象、更改风格和场景、描述动作或控制相机。 该模型结合了片段自回归扩散变换器(DiT)、Qwen 文本编码器、相机条件模块和 PixelUMM 视频解码器。持久键/值(KV)缓存可在片段之间传递上下文。蒸馏推理配置使用 8 个去噪步骤,以 24 FPS 输出 720 × 1280。另一种配置支持在单块 NVIDIA GeForce RTX 4090 上生成视频,使用 INT8 DiT 权重、INT8 KV 缓存、FP8 解码器和 CPU 卸载。 关键特性 - 自由形式交互:通过关于主体、动作、外观、风格和环境的指令引导后续片段。 - 相机控制:在文本之外提供相机轨迹,以控制视角和运动。 - 连续生成:在扩展同一世界时,通过 KV 缓存复用先前的上下文。 - 蒸馏推理:使用 8 个 DiT 去噪步骤生成每个片段,并使用微调的 PixelUMM 解码器解码其潜在表示。 - 灵活部署:使用标准序列并行配置或单 GPU 配置,并通过 Web 演示进行交互。 Hy-Nomas-Bench 我们还发布了 Hy-Nomas-Bench,这是一套包含四个基准的测试套件,共有 280 个测试用例,涵盖多轮自由形式文本交互、相机导航、交错的文本与相机控制以及空间记忆。它评估连续世界生成过程中的交互可控性和一致性,提供结构化提示、交互序列、键盘时间线和参考相机轨迹。有关下载、数据格式和推理说明,请参阅 Hy-Nomas-Bench 数据集仓库。 模型架构 Hy-Nomas 在压缩的视频潜在空间中执行扩散,并在视频片段之间执行自回归。文本、相机运动和缓存的历史共同条件化每个新片段的生成。 Hy-Nomas 框架:结构化提示、视频潜在表示和相机轨迹输入到双流 MMDiT 块,这些块具有片段级因果联合注意力、时间步调制、相机交叉注意力和持久 KV 缓存。 Hy-Nomas 框架。推理配置使用 54 个双流 MMDiT 块(N = 54)。紫色、蓝色和绿色分别表示文本、视频和相机路径。 图中的视频编码器路径展示了视频如何表示为 DCAE-V 潜在表示。在下面的文本到视频推理流程中,每个新片段从该潜在空间中的高斯噪声开始,并使用 KV 缓存获取已生成的历史。MLLM 是 Qwen 文本编码器,默认视频解码器是下文描述的微调 PixelUMM。 文本与相机条件 文本条件。文本编码器使用 Qwen/Qwen2.5-VL-7B-Instruct 的语言模型组件。其 3,584 维隐藏状态经过两层 token 精炼器,并投影到 DiT 的 2,048 维隐藏空间。片段特定提示允许用户在生成推进时更改所请求的内容。 在线提示增强。在 Web 演示中,Nomas-PE 首先将用户指令转换为结构化生成提示。它是与文本编码器分离的服务,并且是演示所必需的。离线推理可以直接读取准备好的提示文件。 相机条件。推理配置使用 extrinsics_attn。归一化的 4 × 4 相机外参矩阵按四个视频帧分组,并展平为 64 维输入,使相机特征与视频潜在表示的时间压缩对齐。学习到的姿态嵌入和投影实现了图中的 Pose Encoder → Camera Proj 路径。在每个双流块中,视频 token 在视频 MLP 之后通过交叉注意力查询投影后的相机特征。借助 per_chunk_camera_attn=true 和 camera_chunk_size=1,相机注意力与各个潜在帧对齐。 片段自回归扩散变换器 生成主干是一个密集多模态扩散变换器(MMDiT)。视频潜在表示通过 Patch Embed 进入,而精炼后的文本 token 进入单独的数据流。Timestep Embed 提供噪声水平条件:每个块使用它通过学习到的偏移、缩放和残差门控来调制两个流。 在一个块内,文本和视频通过片段级因果联合注意力进行交互,3D RoPE 编码视频位置,该层的 KV 缓存提供来自先前片段的上下文。然后两个流分别通过独立的 MLP。相机交叉注意力使用视频查询和相机键/值更新视频分支。文本特征继续进入下一个块;在最后一个块之后,输出头仅使用视频流来预测潜在空间流速度。采样器使用这些预测在视频解码前对片段进行去噪。 模型架构如下表所示: 属性 配置 模型标识符 Hy-Nomas 变换器块 54 个双流块;0 个单流块 隐藏大小 2,048 注意力头 16 个头;每个头 128 维 前馈扩展 4×;中间大小 8,192 潜在输入/输出通道 32 / 32 潜在补丁大小,时间 × 高度 × 宽度 1 × 1 × 1 位置编码 3D RoPE;时间/高度/宽度维度 [16, 56, 56];theta 256 文本条件 3,584 维 Qwen 特征;两层 token 精炼器 相机条件 双流块中带交叉注意力的外参嵌入 去噪预测 流速度;推理配置中的 Euler ODE 采样 在每一轮中,DiT 对当前片段进行去噪,同时关注所有过去的 KV 缓存和当前条件。注意力在片段之间是因果的,因此生成当前片段不需要未来片段。当生成推进到下一个片段时,缓存的注意力键和值会被复用。 标准配置保留完整历史(max_cache_segments=null,滑动窗口禁用)。单 GPU 配置为 GPU 注意力选择一组有界的历史潜在帧,并在 CPU 上保留存档。其默认历史预算为 18 个潜在帧;该预算适用于历史上下文,而非当前片段的长度。 视频潜在表示与 PixelUMM 解码器 Hy-Nomas 使用 DCAE-V f32t4c32 潜在表示:32 个通道、每个维度 32× 空间压缩、4× 时间压缩。DiT 以该表示生成潜在表示。默认推理管线使用微调的 PixelUMM 解码器对其进行解码。 该解码器使用一个具有 36 层、4,096 维隐藏大小、32 个查询头和 8 个 KV 头的 transformer。它以生成的 DCAE-V 潜在表示为条件进行像素重建,并以 4 × 16 × 16 的 tubelet 处理 RGB 视频。该配置使用一个 PixelUMM 解码步骤,时间窗口为 10 个潜在帧,重叠为 5 个潜在帧。该解码步骤与 DiT 的 8 个去噪步骤相互独立。 架构数值在 DiT 模型定义、DiT 实现、PixelUMM 实现和推理配置中指定。 模型资产 为您使用的推理配置选择兼容的生成和解码检查点。 组件 资产 作用 本仓库中的路径 DiT 蒸馏 DiT(FP32) 用于 8 步推理和交互式演示的主检查点;标准配置以 BF16 加载 DiT。 DiT/distilled/diffusion_pytorch_model_ema_0_995.safetensors DiT 量化蒸馏 DiT(INT8) 用于单 GPU 配置的量化检查点;权重以 INT8 存储,DiT 线性计算保持 BF16。 DiT/distilled_int8/diffusion_pytorch_model_ema_0_995_int8.safetensors DiT 基础自回归 DiT(FP32) 非蒸馏模型;请将蒸馏模型与下面的 8 步示例配合使用。 DiT/base_ar/diffusion_pytorch_model_fp32.safetensors 适配器 电影感 LoRA 用于兼容浮点 DiT 的可选视觉质量适配器。 DiT/lora_weights/cinematic/ 适配器 机器人 LoRA 在 RealSource-World 真实世界机械臂数据集上训练的 LoRA 适配器,将合并到蒸馏 DiT 中,以增强生成世界的机器人仿真能力。 DiT/lora_weights/dual_arm_robotics/ 视频自编码器 DCAE-V 定义 32 通道压缩视频表示,并提供视频编码和解码。 VAE/DCAE-V/dc-ae-v-1.0-f32t4c32-bf16.pt 视频解码器 微调 PixelUMM 用于生成的 DCAE-V 潜在表示的默认解码器。 VAE/PixelUMM_FT/diffusion_pytorch_model.safetensors 视频解码器 量化 PixelUMM(FP8) 用于低内存配置的解码器检查点。 VAE/PixelUMM_FT_FP8/diffusion_pytorch_model_fp8.safetensors 提示增强 Nomas-PE 独立的在线服务,将用户指令转换为用于 Web 演示的结构化提示。 PE/ 标准离线推理需要蒸馏 DiT、匹配的 PixelUMM 检查点和 Qwen 文本编码器。单 GPU 配置需要兼容的 INT8 DiT 和 FP8 PixelUMM 组合。INT8 加载器不支持在推理时加载单独的 LoRA 适配器。 从本仓库下载适用的资产,保留 DiT/, VAE/和 PE/ 目录布局。下面的推理命令使用 HY_NOMAS_MODEL_DIR 来定位下载的模型仓库。文本编码器由 Huggingface 从 Qwen/Qwen2.5-VL-7B-Instruct 自动下载,并从本地缓存中复用。要使用现有的本地副本,请追加 model.text_encoder.model_name=/path/to/Qwen2.5-VL-7B-Instruct。 用法 环境设置 使用 Hy-Nomas 代码仓库运行推理: git clone https://github.com/Tencent-Hunyuan/Hy-Nomas.git cd Hy-Nomas 从以下两个设置选项中选择一个。我们强烈推荐预打包的 Docker 镜像,它同时提供 Python 环境、PyTorch 和所需的 CUDA 注意力内核。 选项 1:预打包 Docker 镜像(推荐) 准备一台具有兼容 NVIDIA 驱动、Docker 和 NVIDIA Container Toolkit 的 Linux 主机。从代码仓库根目录运行以下命令: 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 在容器内使用其预装的 Python 环境运行其余命令。将模型资产放在挂载的仓库下,或为您的模型目录添加卷挂载;在下面的启动命令中使用容器内可见的路径。 选项 2:手动安装 准备 Linux、Python 3.12+、uv、兼容的 NVIDIA 驱动、CUDA 13.0 Toolkit(nvcc)和 C++ 编译器。从代码仓库根目录运行以下命令: uv sync --extra all source .venv/bin/activate 该 all 额外项包括 PyTorch 2.10.0(CUDA 13.0)、FlashAttention 2、FlashAttention 3 和 MagiAttention。 pyproject.toml 配置 PyTorch CUDA 索引、官方 FA3 源,并为注意力内核禁用构建隔离,以便其构建可以使用环境中的 PyTorch。内核编译可能需要一些时间。 模型路径 在用于推理的环境中,将 HY_NOMAS_MODEL_DIR 设置为包含上述权重路径的本地模型仓库根目录。使用 Docker 时,请使用容器内可见的路径。 export HY_NOMAS_MODEL_DIR="/path/to/Hy-Nomas-models" 从 Hy-Nomas 代码仓库根目录运行以下命令。它们使用该变量从模型仓库读取权重和示例提示。 准备提示 离线推理接受一个视频生成请求的 JSON 列表。每个请求可以包含多个 segments。片段及其 contained_actions 使用 start_time 和 end_time 字符串,格式为 MM:SS.mmm (分钟:秒.毫秒)。下面的示例包含两个5秒片段,分别覆盖0–5秒和5–10秒。第一个片段描述初始世界,后续片段使用 description_change 来描述它应如何演变。 下面的推理命令使用模型仓库中自带的示例提示文件。对于自定义内容,请按以下格式保存JSON文件并设置 inference.prompt=/path/to/prompts.json: [ { "test_id": "forest_world", "Style": "Cinematic fantasy", "perspective_view": "Third-person view", "subject_list": [ { "subject_id": "fox", "display_name": "a small orange fox", "subject_attribute": "Orange fur, white chest, and a fluffy tail." } ], "segments": [ { "start_time": "00:00.000", "end_time": "00:05.000", "visual_description_long": "A small orange fox stands on a stone path in a luminous forest. Blue fireflies drift between the trees.", "contained_actions": [ {"start_time": "00:00.000", "end_time": "00:05.000", "action_description": "The fox walks slowly along the path."} ] }, { "start_time": "00:05.000", "end_time": "00:10.000", "description_change": "Glowing blue flowers open beside the path as the fox continues forward.", "contained_actions": [ {"start_time": "00:05.000", "end_time": "00:10.000", "action_description": "The fox passes the flowers and looks around."} ] } ] } ] 该配置从事件时间戳推导片段长度(inference.video_length=event)。此示例中的动作时间戳使用相同的视频时间轴;该配置会在内部将它们归一化到每个片段。 标准推理 标准配置使用8路序列并行(sp_size=8)和分布式PixelUMM解码。因此其默认启动需要一个推理组中的八块GPU。从代码仓库根目录运行: bash scripts/inference/inference_from_config.sh configs/experiment/inference.yaml \ dit_weight="$HY_NOMAS_MODEL_DIR/DiT/distilled/diffusion_pytorch_model_ema_0_995.safetensors" \ model.vae.checkpoint="$HY_NOMAS_MODEL_DIR/VAE/PixelUMM_FT/diffusion_pytorch_model.safetensors" \ inference.prompt="$HY_NOMAS_MODEL_DIR/examples/prompts.json" \ inference.save_path=./outputs/distill 生成的视频写入 inference.save_path下。该配置还会保存生成的潜变量和提示文本。 设置 默认值 覆盖值 输出分辨率,高 × 宽 720 × 1280 'inference.video_size=[480,832]' 输出视频帧率 24 FPS inference.video_fps=24 DiT 去噪步数 8 inference.infer_steps_video=8 求解器 Euler ODE inference.solver_type=euler 文本 / 相机引导强度 1.0 / 1.0 inference.cfg_scale_video=1.0 inference.camera_cfg_scale=1.0 随机种子 42 inference.seed=42 相机平移 / 旋转强度 1.0 / 2.5 inference.trajectory_translation_scale=1.0 inference.trajectory_rotation_scale=2.5 对于相机控制的生成,请追加 inference.camera_trajectory=/path/to/camera.npz。轨迹文件包含相机到世界矩阵 c2ws ,形状为 [N, 4, 4] 以及相机 intrinsics ,形状为 [N, 3, 3];请将其与请求的视频时长和帧率对齐。该仓库包含相机轨迹实用工具。 单 GPU 低内存推理 使用 configs/experiment/single_gpu_low_mem_inference.yaml 进行单块 NVIDIA GeForce RTX 4090 推理。该配置继承标准架构、提示处理、分辨率、帧率和 8 步 DiT 调度,并更改内存管理和执行方式: - INT8 DiT 和 KV 存储:将 DiT 权重和缓存的键/值以 INT8 存储,同时保留 BF16 DiT 线性层和注意力计算。 - 有界 GPU 历史:使用 temporal_context 采样最多选择 18 个历史潜在帧,更早的历史归档在 CPU 上。 - CPU 卸载:将文本编码器、DiT 和解码器在其处理阶段移至 GPU,随后返回 CPU。 - 单 GPU 内核:DiT 使用 FlexAttention,解码器使用 CUTLASS FP8,以及 sp_size=1。 准备兼容的 INT8 DiT 和 FP8 PixelUMM 检查点。在暴露一块 GPU 的主机或容器上运行至 nvidia-smi,启动器使用它来统计 GPU 数量: bash scripts/inference/inference_from_config.sh configs/experiment/single_gpu_low_mem_inference.yaml \ dit_weight="$HY_NOMAS_MODEL_DIR/DiT/distilled_int8/diffusion_pytorch_model_ema_0_995_int8.safetensors" \ model.vae.checkpoint="$HY_NOMAS_MODEL_DIR/VAE/PixelUMM_FT_FP8/diffusion_pytorch_model_fp8.safetensors" \ inference.prompt="$HY_NOMAS_MODEL_DIR/examples/prompts.json" \ inference.save_path=./outputs/single_gpu 系统 RAM 必须容纳卸载的模型和不断增长的历史归档。CPU–GPU 传输会增加延迟。峰值 GPU 内存还取决于输出分辨率和当前段长度;历史预算不会限制当前段内存。 交互式演示 尝试在线交互式演示,以启动一个世界,使用文本指令或相机路径继续它,并下载生成的视频。 对于本地部署,请遵循 Web 演示部署指南。它涵盖前端、网关、GPU 工作进程、单 GPU 模式和多主机部署。Web 演示需要 Nomas-PE,并使用单独的服务资源;上述单 GPU 声明适用于视频推理。该演示在段边界启用流式解码。 运行时注意事项 - 全历史推理随着生成继续保留更多上下文,并消耗不断增加的缓存内存。单 GPU 配置限制了活动 GPU 历史,而其 CPU 归档可以继续增长。 - 24 FPS 设置指定输出视频的播放帧率。生成速度取决于硬件、分辨率、段长度、历史和所选配置。 - 8 步示例需要蒸馏 DiT 及其兼容解码器。架构和采样默认值是配置细节,而非基准测试结果。 许可证 Hy-Nomas 根据 Apache-2.0 许可。请参阅本仓库的 LICENSE 文件以了解适用条款。第三方模型和组件仍受其各自许可证的约束。 致谢 我们感谢 Gemma 4、Qwen3.8、Kimi-K3、DC-AE 和 MagiAttention 背后的团队,感谢他们对社区以及支持本项目的模型、研究和工具做出的宝贵贡献。 联系方式 如有问题、非安全漏洞报告或建议,请在 Hy-Nomas 仓库中提交 issue 或联系 hy_nomas@tencent.com。请通过仓库的安全指南报告疑似安全漏洞。
