当前位置: 首页 > news >正文

贪心还是采样?Kronos-small NPU 确定性解码的取舍与temperature/top-p概率预测启用方法

贪心还是采样?Kronos-small NPU 确定性解码的取舍与temperature/top-p概率预测启用方法

【免费下载链接】kronos-small-npu用户可直接在华为昇腾 NPU 上运行 Kronos-small 模型,用于金融 K 线(OHLCV)时间序列的预测与趋势方向判断。项目提供自包含交付仓,支持 NPU 端到端推理,确保 CPU 与 NPU 逐位一致,并内置精度校验与确定性输出。项目地址: https://ai.gitcode.com/atlasleong/kronos-small-npu

想在华为昇腾 NPU 上跑 Kronos-small K 线(OHLCV)预测?本文解析本项目中确定性贪心解码temperature / top-p 采样预测的取舍:为什么交付版选择 argmax 贪心解码以保证 CPU 与 NPU 逐位一致,以及如何在自己的脚本里启用 temperature / top-p 概率预测。

Kronos-small 预测原理:从 OHLCV 到离散 token 的两级解码

Kronos-small 是首个开源的金融 K 线基础模型(MIT 许可),核心是decoder-only 自回归 Transformer,预测分两级完成:

  1. 量化KronosTokenizer(VQ-VAE + 球面二值量化)把连续 OHLCV 窗口编码为分层离散 token——s1/s2 各 1024 类(model/config.json 中s1_bits=10s2_bits=10);
  2. 自回归预测:模型逐位置先预测 s1 token,再预测 s2 token,最后经tokenizer.decode反归一化还原为连续的 8×6 预测值(open/high/low/close/volume/amount)。

正因为"每步预测一个 token 类别",解码策略(贪心 or 采样)就决定了输出的确定性与多样性——这正是本文的主题。

为什么选贪心解码?NPU 逐位一致的 3 个理由

本项目交付的推理路径 inference.py 使用了确定性贪心解码。关键改动在 runner_lib.py:forecast_once镜像了官方KronosPredictor.predict,但把随机的 multinomial 采样替换为torch.argmax

  • s1:sample_pre = torch.argmax(s1_logits, dim=-1)(L177)
  • s2:sample_post = torch.argmax(s2_logits, dim=-1)(L181)

配合固定种子(FIXED_SEED=42,每次前向前重新set_seed),得到三个硬好处:

收益说明
CPU/NPU 逐位一致贪心输出是离散索引,跨设备无随机差异。实测 10 个样本 480 个元素,max_abs_error=0.0BITWISE_EQUAL=True
完全可复现相同输入必然得到相同FORECAST=输出,便于回归测试与审计
精度校验闭环inference.py 从磁盘重载数组后硬断言max_abs_error <= 0.01,超阈值即失败

⚠️ 若启用采样,随机性会让 CPU 与 NPU 结果不再逐位可比,跨设备一致性校验(本项目的验收红线)也就无从谈起。详见 README.md 的局限性说明。

实测:确定性贪心解码的 NPU 输出长什么样

运行python3 inference.py(入口在 inference.py),日志会打印完整的机器契约标记。以真实交付日志为例:

INPUT_DEVICE=npu:0 MODEL_DEVICE=npu:0 OUTPUT_DEVICE=npu:0 CPU_FALLBACK=false FORECAST_SHAPE=[8, 6] FORECAST=[[102.1837..., 102.5727..., ...], ...] # 8 步 × 6 列 OHLCV DIAGNOSTIC_DIRECTION=[1, 1, 1, 1, 1, 1, 1] # close 价逐步涨跌(1=涨) CPU_NPU_MAX_ABS_ERROR=0.000000000 CPU_NPU_BITWISE_EQUAL=True NPU_TIMING_MEDIAN_MS=542.671882 EXIT_CODE=0

几个要点:

  • CPU_FALLBACK=false:主推理只跑在 npu:0,CPU 前向仅作数值参考;
  • DIAGNOSTIC_DIRECTION是由forecasts确定性推导的诊断输出(close 价方向),不是模型直接预测的主输出;
  • 单卡npu:0上自回归 8 步 + tokenizer 编/解码的中位耗时约543 ms

原始预测数组以.npy形式落盘:assets/forecasts_npu.npy(NPU 主输出)与 assets/forecasts_cpu.npy(CPU 参考),二者逐位一致。

如何启用 temperature / top-p 概率预测

贪心解码只给"最可能的单一路径"。若你想做概率预测 / 不确定性量化(例如输出 20 条候选路径取均值),可以使用官方KronosPredictor.predict内置的采样接口(参数说明见 model/README.md):

pred_df = predictor.predict( df=x_df, # 历史 K 线(open/high/low/close/volume/amount) x_timestamp=x_timestamp, y_timestamp=y_timestamp, pred_len=pred_len, T=1.0, # temperature:越大分布越平坦、越"大胆" top_p=0.9, # 核采样:只保留累计概率达 0.9 的最小 token 集合 sample_count=1 # 生成并平均的预测路径数,增大可做集成预测 )

参数速查:

参数作用调参建议
T(temperature)缩放 logits 后再归一化T<1更保守贴近贪心;T>1更发散
top_p核采样截断阈值0.9 常用;越接近 1 候选集越大
sample_count多条随机路径平均10~20 条可平滑单路径噪声,用于不确定性估计

💡注意:本交付仓的 runner_lib.py 是特意把采样换成 argmax 的。若在自己的业务脚本中启用采样,请直接用kronos_src中的KronosPredictor.predict(不要改forecast_once),并接受两点后果:

  1. 输出不再逐位可复现(即使固定随机种子,采样路径跨设备也不保证一致);
  2. 本项目"CPU vs NPU 逐位一致"的校验逻辑不再适用,需改用区间/统计一致性验收。

贪心 vs 采样:金融场景选型建议

场景推荐策略理由
跨设备一致性验收、回归测试✅ 贪心(argmax)逐位可比、结果可审计
生产环境点预测、方向判断✅ 贪心或低 T 采样输出稳定,方向诊断(DIAGNOSTIC_DIRECTION)可靠
不确定性量化、波动率估计⚠️ 采样(T=1.0, top_p=0.9, sample_count≥10)多条路径的分布宽度即不确定性
集成预测、平滑单路径噪声⚠️ 采样 + sample_count 平均官方推荐用法

一句话总结:要"确定性"选贪心,要"概率分布"选采样;本项目交付版选了前者,就是为了在昇腾 NPU 上守住"CPU 与 NPU 逐位一致"这条验收线。

昇腾 NPU 运行环境与文件导航

本项目是自包含交付仓,端到端推理固定跑在npu:0(Ascend 910B4、CANN 8.5.1、torch_npu 2.9.0)。下图为真实npu-smi设备调用快照:

核心文件导航:

  • inference.py —— 交付入口:NPU 推理、warmup + 同步计时、CPU/NPU 精度校验
  • runner_lib.py —— 确定性贪心预测实现(argmax 替换采样)
  • model/config.json —— 模型结构参数(8 层 / d_model 512 / 词表 1024)
  • model/README.md —— 上游 Kronos 模型卡(含 predict 采样参数文档)
  • requirements.txt —— 21 个精确 pin 的依赖闭包
  • README.md —— 精度对比与性能实测数据

小结:Kronos-small 在昇腾 NPU 上的确定性解码策略,本质是在"逐位一致的可验收性"与"概率预测的灵活性"之间做的工程取舍——默认贪心,按需切采样,两条路都已在本文给出。

【免费下载链接】kronos-small-npu用户可直接在华为昇腾 NPU 上运行 Kronos-small 模型,用于金融 K 线(OHLCV)时间序列的预测与趋势方向判断。项目提供自包含交付仓,支持 NPU 端到端推理,确保 CPU 与 NPU 逐位一致,并内置精度校验与确定性输出。项目地址: https://ai.gitcode.com/atlasleong/kronos-small-npu

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

http://www.cnnetsun.cn/news/4174817.html

相关文章:

  • 5条curl命令搞定Redis同步:RedisSyncer创建、启动、停止与查询任务实战
  • HackRF驱动问题排查:3步跑起来
  • DVWA Web 漏洞靶场保姆级指南:5 分钟跑通,19 个模块带你练完 SQL 注入和 XSS
  • PDFMathTranslate:免费公式级PDF论文翻译
  • 单链表专题
  • 从awesome-python3-webapp到iOS App:跨平台开发实战经验完整指南
  • Xplorer文件管理器完全上手指南:跨平台文件管理一次搞定
  • 告别手写提示词:llava-v1.6-mistral-7b-hf 的 apply_chat_template 完整使用指南
  • Stronghold Procedures 完全参考:BIP39、SLIP10、Ed25519 签名等 20+ 密码学操作一览
  • orga分词器源码剖析:基于text-kit读取器的lexer逐行设计解读
  • 免费打造FIFA 23梦想球队:Live Editor 生涯模式修改器完整上手指南
  • 流媒体时代,本地音乐播放器如何以“简洁”定义核心价值?
  • 工业具身智能落地的工程基石:从概念到实战的系统化底座构建指南
  • Qt插件机制详解:QPluginLoader动态加载与模块化架构完整指南(Awesome_Qt_Learning)
  • 为什么你的Redis客户端太慢?异步Redis客户端aredis完整概览
  • 铸铁平台与钢结构平台选型对比:从阻尼特性到全生命周期成本分析
  • XUnity.AutoTranslator:十分钟让没中译的 Unity 游戏跑起来
  • Connect You 开源联系人应用开发者指南:Jetpack Compose + Room 架构完整解析
  • 从斯大林排序算法看算法正确性与数据完整性
  • 猫抓 Cat-Catch:免费的网页视频资源嗅探与流媒体下载扩展
  • BBDown 命令行下载器:一条命令把 B 站视频存成本地 MP4
  • DRF Docs 安全指南:HIDE_DOCS 配置全解,为什么生产环境必须隐藏 API 文档
  • 多元分数多项式为何衰落?从统计建模稳定性与机器学习范式演变谈起
  • gogstash源码解析(三):codec编解码机制与simpleQueue队列暂停恢复的背压设计
  • SceneKit节点克隆与材质独立难题:Shinkansen 3D Seat Booking Prototype的NodeFactory深克隆技巧
  • 美赛微分方程建模实战:从识别到求解的完整指南
  • rack-tracker 埋点中间件安全深度解析:从 XSS 防护到线程安全的完整设计指南
  • 腾讯前端面试核心考点:JS基础与框架原理解析
  • LÖVE Potion架构深度剖析:modules/objects/utilities三层设计,LÖVE框架移植方法论全解读
  • TP6-Vue-Admin:ThinkPHP6 后台 + Vue 管理后台,前后端分离后台管理系统快速搭建指南