Kronos-small NPU 推理输出完全解析:FORECAST、DIAGNOSTIC_DIRECTION 与机器契约标记逐个读懂
【免费下载链接】kronos-small-npu用户可直接在华为昇腾 NPU 上运行 Kronos-small 模型,用于金融 K 线(OHLCV)时间序列的预测与趋势方向判断。项目提供自包含交付仓,支持 NPU 端到端推理,确保 CPU 与 NPU 逐位一致,并内置精度校验与确定性输出。项目地址: https://ai.gitcode.com/atlasleong/kronos-small-npu
本文以运行在华为昇腾 NPU 上的Kronos-small K线(OHLCV)时间序列预测模型为例,逐行拆解 NPU 推理输出:FORECAST=主预测值、DIAGNOSTIC_DIRECTION=趋势方向,以及INPUT_DEVICE、CPU_FALLBACK、EXIT_CODE等机器契约标记,帮助新手快速读懂金融时序预测的推理结果。
🎯 先看整体输出:NPU 推理结束后你得到什么
执行推理入口inference.py后,标准输出由两大部分组成:任务语义输出(模型真正预测的东西)与机器契约标记(供自动化校验读取的KEY=VALUE行)。实际验收结果如下:
输出的骨架长这样(FORECAST数值过长,此处仅示意):
INPUT_DEVICE=npu:0 MODEL_DEVICE=npu:0 OUTPUT_DEVICE=npu:0 CPU_FALLBACK=false FORECAST=[[102.18, 102.57, 102.09, 102.47, 2336.81, 257176.30], ...] # 共 8 行 6 列 DIAGNOSTIC_DIRECTION=[1, 1, 1, 1, 1, 1, 1] CPU_NPU_BITWISE_EQUAL=True EXIT_CODE=0这些标记分别回答三个问题:预测值是什么?在哪块设备上算出来的?结果可信吗?下面逐个拆开。
📊 FORECAST:主输出——8×6 的连续 K 线预测值
FORECAST=是唯一的声明主输出,为npu:0上真实前向产生的连续预测值:
- 形状
[8, 6]:预测未来 8 个时间步(HORIZON=8),每步 6 列; - 6 列含义:
FORECAST_COLUMNS=open,high,low,close,volume,amount,即开/高/低/收、成交量与成交额; - 生成方式:确定性贪心解码(argmax)。模型先把 64 步历史窗口(
CONTEXT_LEN=64)经 Tokenizer 量化为离散 token,再逐位置自回归预测 8 步,最后解码并反归一化还原为连续价格。
以真实输出为例,第 1 个预测步为:
[102.1837158203125, 102.57278442382812, 102.08567810058594, 102.46661376953125, 2336.805908203125, 257176.296875]读法很直观:预测下一根 K 线开盘 102.18、最高 102.57、最低 102.09、收盘 102.47,成交量约 2337,成交额约 25.7 万。对应的输入首行由INPUT_SEQUENCE=给出(即历史窗口第一根 K 线),完整的输入上下文与 NPU 主输出分别落盘在assets/input_context.npy与assets/forecasts_npu.npy,可随时复核。
💡 提示:由于采用贪心解码 + 固定种子,同一输入的输出是确定的——这正是跨设备精度对比的前提。
🔢 DIAGNOSTIC_DIRECTION:收盘价的涨跌方向(推导值)
DIAGNOSTIC_DIRECTION=[1, 1, 1, 1, 1, 1, 1]是由forecasts确定性推导的诊断角色,并非独立预测:
- 取 8 步预测的 close 列,做相邻差值
diff >= 0,得到 7 个 0/1 值([pred_len-1]int64); 1表示该步收盘不跌,0表示下跌;- 本次 8 步收盘价单调上升(102.47 → 102.89),所以是 7 个连续的
1——趋势方向判断就是"一眼看懂"的涨/跌序列。
推导逻辑见runner_lib.py中的direction_from_forecasts函数。
🖥️ 设备标记:确认 NPU 真的在干活
三个设备标记 + 一个回退开关,是判断"推理是否真在 NPU 上执行"的核心证据:
| 标记 | 实测值 | 含义 |
|---|---|---|
INPUT_DEVICE | npu:0 | 输入张量真实驻留设备 |
MODEL_DEVICE | npu:0 | 模型与 Tokenizer 参数所在设备 |
OUTPUT_DEVICE | npu:0 | 主输出张量设备(.cpu()迁移前捕获) |
CPU_FALLBACK | false | CPU 回退被禁止,主前向只在 NPU |
设备调用过程可被npu-smi直接观测到——下面的快照中,python3.11推理进程正占用 NPU 0~3 卡:
✅ 机器契约标记:精度、性能与退出码一眼核对
除语义输出外,还有一组供流水线校验的契约行,逐项解释如下:
| 标记 | 实测值 | 说明 |
|---|---|---|
CPU_NPU_MAX_ABS_ERROR | 0.000000000 | CPU 参考 vs NPU 输出的最大绝对误差(阈值 0.01) |
CPU_NPU_BITWISE_EQUAL | True | 两设备预测值逐位一致 |
CPU_NPU_DIRECTION_EQUAL | True | 两设备方向推导一致 |
NPU_TIMING_MEDIAN_MS | 542.67 | 3 次同步计时(1 次 warmup)的中位耗时 |
OUTPUT_FINITE | True | 输出无 NaN/Inf |
EXIT_CODE | 0 | 命令成功退出 |
"逐位一致"并非偶然:解码路径已被替换为 CPU/NPU 舍入行为一致的确定性实现,10 个独立样本回归验证中 480 个元素误差全部为 0。完整的适配、测试与验收流程记录如下:
🚀 快速复现:一条命令跑通 NPU 推理
仓库为自包含交付仓,克隆后即可运行:
git clone https://gitcode.com/atlasleong/kronos-small-npu source /usr/local/Ascend/ascend-toolkit/set_env.sh # 加载 CANN 环境 pip install --no-deps -r requirements.txt python3 inference.py关键文件速查:
inference.py—— 推理入口:NPU 前向、计时、打印全部机器契约标记;runner_lib.py—— 共享 helper:确定性贪心解码、方向推导、上下文构建;requirements.txt—— 21 个精确 pin 的运行时依赖闭包;README.md—— 完整交付说明(固定 revision、SHA-256、实测数据);model/config.json—— 模型超参(8 层 / d_model 512 / 8 头)。
📝 小结
读懂 Kronos-small 的 NPU 推理输出,只需记住三步:
- 看
FORECAST=:[8, 6]连续 K 线预测值,6 列对应 open/high/low/close/volume/amount; - 看
DIAGNOSTIC_DIRECTION=:由收盘价推导的 7 个 0/1 趋势方向,1为不跌; - 看契约标记:设备均为
npu:0、CPU_FALLBACK=false、误差为 0、EXIT_CODE=0,即可确认这是一次真实、可信的昇腾 NPU 推理结果。
【免费下载链接】kronos-small-npu用户可直接在华为昇腾 NPU 上运行 Kronos-small 模型,用于金融 K 线(OHLCV)时间序列的预测与趋势方向判断。项目提供自包含交付仓,支持 NPU 端到端推理,确保 CPU 与 NPU 逐位一致,并内置精度校验与确定性输出。项目地址: https://ai.gitcode.com/atlasleong/kronos-small-npu
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考