common.py 3个关键函数拆解:PatchTSMixer 时序预测如何在 NPU 上完成本地加载与确定性推理
2026/8/23 11:55:58 网站建设 项目流程

common.py 3个关键函数拆解:PatchTSMixer 时序预测如何在 NPU 上完成本地加载与确定性推理

【免费下载链接】test-patchtsmixer-npu用户可直接运行此项目在华为昇腾NPU上执行PatchTSMixer多变量时序预测,获取96步未来预测值(含位置logits与类别argmax),并验证模型精度与性能。项目包含完整迁移交付物(模型权重、推理脚本、输出校验),全程无CPU回退,实测单次前向仅需10.58毫秒。项目地址: https://ai.gitcode.com/atlasleong/test-patchtsmixer-npu

本文带你拆解test-patchtsmixer-npu项目的common.py,看懂其中3 个关键函数——本地加载模型、构造确定性输入、一次预测出双输出——如何协作让 IBM PatchTSMixer 多变量时序预测模型在华为昇腾 NPU 上全程无 CPU 回退运行,单次前向实测仅10.58 毫秒,稳定输出 96 步未来预测值。

项目一眼速览

这个项目是一个"开箱即跑"的昇腾 NPU 时序预测交付仓库,结构非常克制:

文件职责
inference.pyNPU 前向入口,打印设备标记与预测结果
common.py自包含工具函数(本文主角)
model/固定权重快照(config + safetensors)
requirements.txttransformers 5.15.0、numpy、safetensors 等依赖

模型输入为(1, 512, 7)的多元时序上下文,输出 96 步 × 7 通道的连续预测值position_logits (1, 96, 7),以及每个预测位置取 argmax 得到的离散通道 idclass_ids (1, 96)

关键函数 1:load_model——100% 本地加载模型权重

想避免"运行时偷偷联网下载模型",核心就是本地加载这两个字。common.py的做法值得抄作业:

  • 把模型路径写成语义明确的字面量MODEL_PATH = "./model""./"前缀让"这是本地路径"一目了然(见 common.py);
  • _ensure_delivery_cwd()先把工作目录对齐到交付根目录,保证相对路径永远指向 model/ 快照;
  • 调用PatchTSMixerForPrediction.from_pretrained("./model", local_files_only=True)local_files_only=True从机制上禁止任何网络访问(见 common.py)。

加载完成后执行model.eval()to(device)放到npu:0。模型本身是标准 Transformers 架构(model_type=patchtsmixer,19.6 万参数、float32),无需自定义远程代码,配置可直接查看 model/config.json。

运行前可以先用npu-smi info确认昇腾设备在线,本项目实测环境为 Ascend 910B4-1 × 8:

关键函数 2:make_input——一行构造可复现的确定性输入

时序预测的验收最怕"这次和上次结果不一样"。make_input用固定随机种子彻底解决这个问题:

  1. 先调用 set_seed 同时锁死torchnumpyrandom三套随机数生成器(固定种子FIXED_SEED = 20260815);
  2. 再用torch.randn(batch_size, 512, 7)生成标准正态的多元时序上下文,形状(batch_size, context_length, num_input_channels)与模型的past_values契约完全一致;
  3. 最后.to(device)把张量直接送上 NPU,全程不经过 CPU 中转。

这就是"确定性输入"的全部秘密:同一颗种子 → 同一份字节级一致的输入,因此 CPU 基线与 NPU 推理可以逐值对比。实测 CPU 与 NPU 输出的max_abs_error仅约3.9e-05,离散 argmax 一致率 100%。

💡 换成真实数据时,只需按(batch_size, 512, 7)语义构造past_values张量送入模型即可,输入契约不变。

关键函数 3:run_forward——一次前向,两份语义不同的输出

run_forward 是三者中最有"信息量"的函数:一次torch.no_grad()前向,同时产出两种语义的输出——

  • position_logits:模型预测头原生的连续值,形状(B, 96, 7),即未来 96 步、每步 7 个通道的预测值;
  • class_ids:对position_logits在通道维做argmax得到的离散 id,形状(B, 96),int64。

把预测头"映射"成position_logits + class_ids的双角色契约,是时序模型接入标准 sequence-prediction 评测流程的常见技巧,新手理解这一点比背 API 更重要。

三个函数如何串成完整推理

入口脚本 inference.py 的编排非常直白:

设备检查(无 NPU 直接报错,拒绝 CPU 回退) → set_seed(20260815) → load_model(npu:0) → make_input(seed, batch_size=1, device=npu:0) → warmup 一次 + torch.npu.synchronize() → run_forward(model, past_values) # 被计时 → 落盘 outputs/*.npy 并 np.load 重载校验

一次真实运行的终端验收输出如下(含INPUT_DEVICE=npu:0CPU_FALLBACK=false、前 8 个真实预测值等机器契约标记):

以下是由 AI Agent 驱动的完整适配工作流截图,可以看到从模型审计、CPU 基线到 NPU 前向、精度对比、性能实测的完整证据链:

快速上手:自己动手跑一遍

依赖由昇腾 worker 镜像提供torch/torch_npu,业务侧只需安装 requirements.txt 中的 5 个包,然后执行:

python3 inference.py

关注输出末尾这几行即可判断推理是否成功:

CPU_FALLBACK=false FORECAST_COUNT=672 ARGMAX_TOP_CLASS=1 INFERENCE_WALL_MS=10.580024 EXIT_CODE=0

小结:3 个函数教给你的 3 个工程习惯

  1. 本地加载:路径字面量 +local_files_only=True,让"不联网"可静态证明(common.py);
  2. 确定性输入:一次性锁定 torch / numpy / random 三套种子,验收才有基准(common.py);
  3. 单一职责的前向封装:把"前向 + 输出契约"收敛到一个函数里,方便计时、落盘与校验复用(common.py)。

照这三步写,你自己的时序模型迁移到 NPU 时,也能拿到同样干净、可复现的推理结果。

【免费下载链接】test-patchtsmixer-npu用户可直接运行此项目在华为昇腾NPU上执行PatchTSMixer多变量时序预测,获取96步未来预测值(含位置logits与类别argmax),并验证模型精度与性能。项目包含完整迁移交付物(模型权重、推理脚本、输出校验),全程无CPU回退,实测单次前向仅需10.58毫秒。项目地址: https://ai.gitcode.com/atlasleong/test-patchtsmixer-npu

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询