跑通Kronos金融K线基础模型:2GB显存的消费级GPU就能用
【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos
金融K线预测一直卡在"要自建训练管线"这道门槛上。Kronos是首个开源的金融K线基础模型,在45个全球交易所的数据上预训练完成,2GB显存的消费级显卡就能直接加载推理,十几行Python代码就能输出未来走势。
30秒看懂它是什么
它解决一个问题:给定一段历史K线,输出未来若干根的OHLCV(开高低收加成交量)。核心思路是把K线当成一门"语言"——模型先学会这套语言的词汇表,再按语言模型的方式"续写"行情。打个比方:K线对通用语言模型来说是一串看不懂的数字,Kronos相当于先造了一本K线专属词典,把行情翻译成"单词",模型读得懂,也就学会了续写。
环境搭建与一键启动
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| Python | 3.10+ | 3.10 |
| PyTorch | 2.0+ | 2.0+ |
| 显卡 | CPU可运行 | 2GB显存以上,带CUDA 11.7+ |
git clone https://gitcode.com/GitHub_Trending/kronos14/Kronos cd Kronos pip install -r requirements.txt装完在仓库根目录敲一句,能打印出版本号就说明环境就绪:
python -c "import torch; print(torch.__version__)"核心原理:它是怎么工作的
整个过程可以拆成四步:
- 把每一根K线的OHLCV数值压成离散token——K线分词,就是给行情造一本词典,让它变成语言模型能读的"文字"。
- token再被量化成两层编码索引——块级量化(BSQ),像查码表一样把连续数字换成"编号",省掉大量冗余。
- Transformer拿着token序列逐根往下推——自回归生成,跟语言模型续写句子一个套路。
- 编码索引经同一本词典反查回OHLCV数值——解码还原,预测值就变回了真实的价格和成交量。
跑通第一个结果
装好模型→喂数据→拿预测。以下代码在仓库根目录执行,数据用一份自己的CSV即可(仓库 examples/ 目录下的脚本演示了多种取数方式):
from model import Kronos, KronosTokenizer, KronosPredictor import pandas as pd tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base") model = Kronos.from_pretrained("NeoQuasar/Kronos-small") predictor = KronosPredictor(model, tokenizer, max_context=512)前两行从模型库拉取预训练权重,第三行把模型和分词器装进预测器;512是Kronos-small的上限,再长的历史会自动截断(README L99)。
df = pd.read_csv("your_data.csv") # 需含 open/high/low/close 小写列 df["timestamps"] = pd.to_datetime(df["timestamps"]) x = df.iloc[:400] # 400根历史K线 pred_df = predictor.predict(df=x[["open","high","low","close","volume"]], x_timestamp=x["timestamps"], y_timestamp=df.iloc[400:520]["timestamps"], pred_len=120) print(pred_df.head())predict内部自动完成归一化、采样、反归一化,你只管传数据。跑通后终端会打印前5行预测值——带时间戳的 open/high/low/close/volume 表,这就是模型对未来120根K线的完整"剧本"。
效果怎么看:读懂输出
- 你看到了什么:蓝线是历史真实收盘,红线是模型外推的120根走势;下面成交量子图同色对应。红线不是精确抄写,而是概率性采样出的路径,每次跑可能略有不同。
- 它意味着什么:判断标准不是红线逐点贴蓝线——金融数据信噪比低,追求精确反而过拟合。真正要看的是趋势方向和量级是否跟得上,成交量预测是否同步放大或缩小。
- 好不好用:把
pred_df里的预测价差当信号,接入你自己的策略做回测,累计收益曲线和基准的差距(超额收益)才是硬指标,仓库 finetune/qlib_test.py 演示了这条链路。
不止于命令行:WebUI批量跑
不想敲代码的话,仓库自带图形界面:
cd webui python run.py浏览器打开 http://localhost:7070 即可(接口与参数说明见 webui/README.md):
- 数据文件管理:上传或选择CSV、Feather格式的行情文件,选好文件就出图。
- 采样参数调节:温度T(0.1-2.0)、核采样top_p(0.1-1.0)、采样条数(1-5)三组滑杆,官方建议T取1.2-1.5、top_p取0.95-1.0。
- K线对比视图:滑块选择"400根历史+120根预测"的窗口,一键出预测与实际的K线对比图,支持CPU/CUDA/MPS切换设备。
命令行侧同样支持批量:predictor.predict_batch(df_list, x_timestamp_list, y_timestamp_list, pred_len)可并行预测多个资产,前提是所有序列的历史长度和预测长度一致(README L196-L202)。
资源受限?这几招能救
- 显存紧张(换小模型):Kronos-mini只有4.1M参数(README L79),上下文反而有2048,适合低显存设备:
model = Kronos.from_pretrained("NeoQuasar/Kronos-mini")- 输出曲线抖动大(收敛采样):调低温度、固定核采样,多采样取平均:
pred_df = predictor.predict(df=x_df, x_timestamp=x_ts, y_timestamp=y_ts, pred_len=120, T=0.8, top_p=0.9, sample_count=3)- 序列超过512根(缩短窗口):Kronos-small/base的
max_context=512,lookback设小一些即可,预测器也会自动截断兜底。
踩坑急救箱
- FileNotFoundError,找不到数据文件→ 仓库没附示例行情,CSV路径写错或列名不对 → 换成自己的OHLCV文件,列名严格用小写
open/high/low/close。 - 时间戳列解析失败或乱序→ 原始CSV里时间是字符串,直接拿去对齐会错位 → 加一行
df["timestamps"] = pd.to_datetime(df["timestamps"])。 - WebUI启动报缺依赖→ webui的requirements和主依赖不同,缺了plotly、flask-cors → 到webui目录补一句
pip install -r requirements.txt再启动。 - CUDA out of memory→ 序列太长或模型偏大 → 先降到Kronos-mini,再把lookback从400降到200以内。
下一步去哪
- 读源码:model/kronos.py 从分词器到自回归生成器全在这一个文件里,约660行,值得精读一遍。
- 调参数:finetune_csv/ 提供基于CSV数据的微调流水线,改
configs/下的YAML即可换自己的数据做适配。 - 做验证:finetune/qlib_test.py 跑top-K策略回测,把预测信号翻译成收益曲线,再决定要不要接入实盘研究。
Kronos已被AAAI 2026接收(README News区),模型迭代和讨论都在项目社区进行,有问题直接去提Issue。
【免费下载链接】KronosKronos: A Foundation Model for the Language of Financial Markets项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考