2301_76761127/fomo-0d-npu
模型介绍
文件和版本
Pull Requests
讨论
分析

YuchenShen/FoMo-0D — Ascend NPU 迁移验收

1. 模型身份

  • 模型:YuchenShen/FoMo-0D(FoMo-0D 表格 prior-fitted network:线性编码器 + 4 层 Transformer encoder(emsize 256 / nhead 4 / num_R 500 路由)+ 标准 2 类 解码头,输入 (train_x, test_x) 上下文帧,输出 (num_test, bs, 2) logits)
  • 官方 URL:https://huggingface.co/YuchenShen/FoMo-0D (镜像:https://ai.gitcode.com/hf_mirrors/YuchenShen/FoMo-0D)
  • 固定 revision:d0638efa3cc7ec93ffcc9f9aa2ed6d15030e1161
  • 权重:model.safetensors,19,559,720 bytes,SHA-256 14506cee3d484d0a052ede20e2107b743ae31f1a0ca0860fb12d7f4db9e7acc4 (config.json、README.md 同在校验清单)
  • 许可:MIT;参数量 4,886,786(CPU 探针实测,strict=True 加载路径)
  • 范围说明(如实披露):快照仅含权重 + config + README;模型类来自官方仓 github.com/A-Chicharito-S/FoMo-0D 固定 commit 34d4339e318d96ac744850188a547b62387a718c,所需 10 个源文件 (fomo_hub.py + pfns 包)随本仓 vendored 于 src/,导入前逐文件 SHA-256 校验。torch>=2.6 移除了 torch.nn.modules.transformer 对 Optional 的再导出而官方 pfns/layer.py 仍引用它;inference.py 在导入 官方代码前注入兼容 shim(官方文件保持逐字节不变),随后 load_state_dict(strict=True) 加载。

2. 硬件软件矩阵(平台栈未替换)

  • 硬件:官方 Hosted Ascend 910(本轮逻辑设备 npu:1)
  • CANN 8.5.1;PyTorch(torch)2.9.0+cpu;torch_npu 2.9.0.post1
  • 模型级依赖(见 requirements.txt):safetensors、huggingface_hub、einops 0.8.2、 numpy 1.26.4;未替换任何平台组件(target_stack_gate PASS)

3. 外部权重准备与完整性门禁

权重从官方固定 revision 快照离线加载(本仓不含权重)。inference.py 启动时逐文件 校验 config.json、README.md 与权重的 SHA-256,并校验 vendored 官方源码 10 个 文件的 SHA-256,任何不符即 fail-closed 退出;禁止回退网络 model id (HF_HUB_OFFLINE=1、TRANSFORMERS_OFFLINE=1)。

4. 唯一推理入口

EVIDENCE_HOLD_SECONDS=12 python inference.py --model_path <快照目录> \
  --device npu:1 --seed 20260817 --output_json result.json

官方 FoMo0DHub(num_features=100, emsize=256, nhid=512, nlayers=4, nhead=4, num_R=500, ...) 实例化(结构参数与快照 config.json 一致),strict=True 加载 safetensors。前向走官方 FoMo0DHub.forward(model(train_x, None, test_x)),并用 forward hook 在 net.model.transformer_encoder 上截取 decoder 前的 encoder 输出一并冻结。输入为 8 个确定性合成上下文帧 (train_x (64,1,100)、test_x (4,1,100),torch.Generator().manual_seed( 20260817+s) 正态采样),CPU 生成并逐样本锚定 input_sha256,随后移到目标设备。

5. 固定样本、输出计数与有限值要求

完整测试用例共 8 个冻结输入样本。每样本冻结两个家族:最终 logits (4×1×2 全量)、encoder 输出 encoder_output(68×1×256,均匀抽取 256 值), 各附全张量 mean/std/min/max 统计,每样本 272 值,8 样本总计 2176 值; 计数、样本身份、有限值(拒绝 NaN/Inf)任一不符即失败。

6. Hosted 全 NPU 验收契约

本轮按最新口径不运行 CPU Golden、不做精度比较,只验证真实 NPU 端到端执行。启动前以 npu-smi info 检查显存;允许多个小任务共享设备, 但设备总占用加本任务保守估计必须小于总显存的 90%。验收条件如下:

  • 模型、输入、核心前向和输出设备均为 npu:1,不得回退 CPU/CUDA;
  • 活跃推理 PID、完整命令、ps 与 npu-smi 必须在进程存活期间同屏;
  • npu-smi 必须显示同一 PID 与非零 NPU 显存;
  • 8 个样本、2176 个输出全部非空且有限,exit_status=0。

7. 真实 NPU 运行与实测指标

真实 NPU 运行(2026-08-17 UTC,官方 Hosted 容器):

  • RUN:hosted-final-20260817T140719Z;PID 2088;设备 npu:1; actual_model_device / actual_tensor_device / actual_output_device 均为 npu:1,NPU 名称 Ascend910_9362;
  • 运行中 npu-smi 显示 PID 2088、进程显存 136 MiB,设备总占用约 2.95 GiB / 64 GiB,低于 90% 门禁;
  • 8 个样本、2176 个冻结值全部产出且有限,前向总耗时 246.5280289761722 ms,exit_status=0;stderr 未发现 CPU fallback;
  • 身份绑定:inference.py SHA-256 4c9b4e0871e3d9a546776472714beee71f48b7ad950a566852de6e76c52c70f0, 权重 SHA-256 14506cee3d484d0a052ede20e2107b743ae31f1a0ca0860fb12d7f4db9e7acc4;
  • 本轮明确未运行 CPU Golden、未做精度比较。

8. 证据图

三张证据图均来自本轮真实 Hosted 页面:

Agent 工作流规划

NPU 活跃进程与 npu-smi 同屏取证

全 NPU 结果与 fail-closed 摘要

9. Fail-closed 门禁

缺失或错误权重、revision/SHA 不匹配、非法或非 NPU 设备、实际设备字段不为 npu:*、PID 与 npu-smi 不对应、输出为空、样本/输出计数错误、NaN/Inf、 非零退出码,任一出现都判失败。截图或文字不能替代实际 JSON 和活跃设备证据。

10. 提交与限制

唯一验收入口为 inference.py。本轮没有运行 CPU,也没有生成或引用精度结论; 公开结论仅限真实 NPU 端到端运行成功。完整 NPU JSON、日志与 PID 采样保留在 Hosted 审计目录,本仓包含最小复现代码、中文说明和三张真实证据图。推送后执行 GitCode hook、匿名 HEAD 与 fresh clone 审计,通过后再做单次竞赛提交。

本仓为 2301_76761127 队伍交付件(与备份账号合并提交)。