test-ttm-v1-npu推理实战教程:从模型加载到预测结果验证的完整分步流程
【免费下载链接】test-ttm-v1-npu项目地址: https://ai.gitcode.com/atlasleong/test-ttm-v1-npu
test-ttm-v1-npu 是一个将 IBM TinyTimeMixer(TTM)时序预测模型完整适配到华为昇腾 NPU 的开源实战项目。本 NPU 推理教程将以npu:0逻辑设备为主线,带你走完"模型加载 → 输入构造 → 前向推理 → 预测结果验证"的每一步,并附上真实运行的设备标记、精度对比与性能数据,让新手也能快速跑通时序预测模型在昇腾 NPU 上的完整推理流程。
什么是 test-ttm-v1-npu?一文看懂项目定位 🧭
该项目本质上是ibm-research/test-ttm-v1(IBM TinyTimeMixer 时序预测模型)的昇腾 NPU 适配交付版本。它的最大特点是自包含:权重快照、建模代码、加载辅助脚本全部内嵌在仓库中,无需联网下载任何模型文件。
| 项目要素 | 具体内容 |
|---|---|
| 模型架构 | TinyTimeMixerForPrediction(基于 granite-tsfm) |
| 输入张量 | past_values,形状(2, 512, 1),float32 |
| 输出张量 | prediction_outputs,形状(2, 96, 1),即未来 96 步预测 |
| 运行平台 | torch 2.9.0 + torch_npu 2.9.0,CANN 8.5.1 |
| 硬件环境 | NPU 910B4-1(逻辑设备 npu:0,单卡) |
| 许可证 | Apache-2.0 |
核心目录结构非常清晰:入口脚本 inference.py、加载辅助 model_loader.py、权重目录 model/(含 config.json 与 model.safetensors)以及依赖清单 requirements.txt。
上图展示了 Model Agent 从读取配置、验证模型适配性到执行推理任务的完整自动化工作流,全部环节都围绕 NPU 推理展开。
环境准备:昇腾 NPU 推理环境的一键安装步骤 ⚙️
首先将仓库克隆到本地,然后安装非平台依赖(torch与torch_npu由昇腾 worker 镜像固定提供,禁止从 PyPI 安装):
git clone https://gitcode.com/atlasleong/test-ttm-v1-npu cd test-ttm-v1-npu export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/ pip install --ignore-installed --no-deps -r requirements.txt依赖版本全部精确锁定:numpy==1.26.4、transformers==4.49.0、safetensors==0.8.0、huggingface-hub==0.36.2等,建模代码已内嵌仓库,无需单独安装 granite-tsfm。
上图是npu-smi设备日志:NPU 910B4-1 芯片健康状态全部 OK,推理进程在对应物理卡上正常占用 HBM 显存,确保模型前向全程由torch_npu执行、无 CPU 回退。
第一步:模型加载——如何把 TinyTimeMixer 权重读入 NPU 📥
模型加载由 model_loader.py 中的load_model()完成,核心逻辑如下:
- 从本地
model/目录读取TinyTimeMixerConfig(context_length=512、prediction_length=96、num_input_channels=1); - 通过
from_pretrained(local_files_only=True)加载TinyTimeMixerForPrediction,全程禁止联网; - 调用
model.to(device)把全部参数搬上npu:0,并切换为eval()推理模式。
权重文件model.safetensors约 3.2MB,内含 134 个 float32 张量。加载成功后,首个参数所在的设备即为MODEL_DEVICE=npu:0,这是验证模型是否真正驻留 NPU 的关键标记。
第二步:构造确定性输入——seed=42 让结果可复现 🎯
为了让每次推理结果完全一致、便于交叉验证,项目使用固定随机种子生成输入。make_input()(见 model_loader.py)用torch.Generator().manual_seed(42)生成形状(2, 512, 1)的past_values,并保证 CPU 与 NPU 上的输入位级一致。
本次运行的真实输入序列前 8 个值(batch 0)为:
INPUT_SEQUENCE=1.926915 1.487284 0.900717 -2.105521 0.678418 -1.234545 -0.043067 -1.604667第三步:执行 NPU 前向推理——预热 + 同步计时 🚀
推理主流程在 inference.py 中,分为三个关键动作:
- 预热前向:先跑一次不参与计时的 forward,排除算子初始化与首次调用开销;
- 同步计时:计时前后均调用
torch.npu.synchronize(),得到真实 NPU 墙钟耗时; - 语义输出:在
.cpu()读回之前打印输出张量的设备,避免误导标记。
启动推理只需一条命令:
python3 inference.py第四步:预测结果验证——如何确认 NPU 推理正确 ✅
脚本结束后会打印一系列由实际运行推导的设备标记与语义输出,而非硬编码值。以下为真实运行日志(对应EXIT_CODE=0):
INPUT_DEVICE=npu:0 MODEL_DEVICE=npu:0 OUTPUT_DEVICE=npu:0 CPU_FALLBACK=false FORECAST=0.118222 0.012677 -0.022667 -0.037853 -0.061999 -0.033475 -0.112000 -0.073501 FORECAST_SHAPE=[2, 96, 1] FORECAST_FINITE=True FORECAST_INFER_MS=9.8991 EXIT_CODE=0验证要点有三:
- 设备一致性:输入、模型、输出全部标记为
npu:0,CPU_FALLBACK=false表明全程无 CPU 回退; - 输出合法性:
FORECAST_FINITE=True对预测张量做了全量 NaN/Inf 检查; - 数值交叉核对:
FORECAST前 8 值与磁盘上的 NPU 真实前向数组逐位一致。
上图即模型最终适配验收结果:输入序列、预测输出与 NPU 设备状态一目了然,整个推理任务正常结束。
精度对比:NPU 与 CPU 的数值一致性有多高?📊
适配过程中发现torch_npu的 GELU 内核在默认approximate="none"下仍计算 tanh 近似,而 torch CPU 计算精确 erf 形式,导致首个 encoder MLP 偏差约4.7e-4。项目通过最小单点改动修复:将nn.functional.gelu(...)显式指定为approximate="tanh"。
修复前后的实测精度对比:
| 指标 | 修复前 | 修复后 |
|---|---|---|
| max_abs_error | 4.169e-4 | 2.012e-7 |
| mean_abs_error | 1.797e-4 | 4.900e-8 |
| 离散方向一致率 | — | 1.0 |
修复后 NPU 与 CPU 的误差控制在1e-7量级,离散输出 10/10 一致,可作为昇腾 NPU 时序预测精度适配的参考案例。
性能实测:一次 NPU 前向只要多少毫秒?⏱️
性能阶段采用 3 次预热 + 10 次同步计时重复,实测单次前向统计如下:
median = 7.6984 ms mean = 7.71788 ms std = 0.0645 ms min = 7.6177 ms max = 7.8014 ms10 次计时值集中在 7.6~7.8ms,波动极小。需要稳定吞吐时,请以多次重复的中位数(约 7.7ms)为参考,而非单次计时结果。
常见问题与已知限制 ⚠️
path string is NULL告警:CANN 运行时无害告警,不影响结果与设备标记;- 单次计时波动:
FORECAST_INFER_MS属单次实测,随负载与温度正常波动; - 固定版本快照:建模代码来自 granite-tsfm 固定 revision,升级需重新 vendored;
- 仅单卡推理:交付不包含多卡分布式配置;推理使用 seed=42 合成输入,如需真实数据集评测需另行准备。
总结:从模型加载到预测结果验证的四步心法 💡
回顾整个 test-ttm-v1-npu 推理实战流程:加载本地权重 → 固定种子构造输入 → 预热并同步计时前向 → 核对设备标记与预测输出。借助这套自包含交付与可复现设计,你可以在昇腾 NPU 上快速完成 TinyTimeMixer 时序预测推理,并通过FORECAST_FINITE、CPU_FALLBACK=false与EXIT_CODE=0等关键标记确认预测结果可信。如果你正在为时序预测模型寻找 NPU 推理落地参考,这个项目的每一步都值得动手复现一遍。
【免费下载链接】test-ttm-v1-npu项目地址: https://ai.gitcode.com/atlasleong/test-ttm-v1-npu
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考