首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >DolphinDB × Kronos:海量 K 线高效训练的正确打开方式

DolphinDB × Kronos:海量 K 线高效训练的正确打开方式

原创
作者头像
DolphinDB
发布2026-08-12 10:51:53
发布2026-08-12 10:51:53
930
举报

如果把一段 K 线看成一句“金融语言”,那么模型能不能像理解文字一样,理解价格、成交量和波动?这是近年来金融时序大模型正在尝试回答的问题。

传统时间序列模型通常直接对连续数值进行预测,但金融市场的数据有一个很明显的特点:噪声高、波动大、非平稳性强。同样的上涨形态,换一个市场环境可能对应完全不同的结果。对于气温、流量等相对规律的时序数据表现不错的通用时序模型,放到 K 线上,往往并不能直接复现同样的效果。

作为全球首个专门为金融 K 线数据打造的开源基础模型,Kronos 已经拿下 GitHub 2 万+ Star。它没有简单地把 K 线当作普通的连续数值序列,而是借鉴大语言模型的思路,将 K 线离散化为模型可以理解的 Token,再通过自回归方式学习金融市场中的变化规律。可以应用于价格预测、波动率预测、合成 K 线生成。

今天我们就以 DolphinDB × Kronos 为例,从真实股票 K 线出发,模拟一个简单的 K 线预测案例,并进一步讨论,当数据从单只股票、短周期数据扩大到分钟级、多股票、海量历史数据甚至 DDP 多卡训练时,如何让 DolphinDB 直接成为 Kronos 的训练数据源。

快速上手:用一段真实 K 线跑通 Kronos

以下案例基于 DolphinDB Server 3.00.5、Python 3.12、CUDA 13.2 和 PyTorch 2.11 环境进行部署与实验。

完成 Kronos 项目的环境部署并安装相关依赖后,先加载官方已经训练好的 Kronos-small 模型和对应的分词器:

代码语言:javascript
复制
tokenizer = KronosTokenizer.from_pretrained("NeoQuasar/Kronos-Tokenizer-base")
model = Kronos.from_pretrained("NeoQuasar/Kronos-small")
predictor = KronosPredictor(model, tokenizer, max_context=512)

接下来,通过 DolphinDB Python API 查询真实股票 K 线数据,并整理成 Kronos 需要的格式——这里读取的是某只股票 2025 年以来的 5 分钟 K 线:

代码语言:javascript
复制
s = ddb.session()
s.connect("localhost", 8848, "admin", "123456")  # 改为实际IP
script = '''
    select trade_time as timestamps, open, high, low, close, vol as volume, amount 
    from loadTable("dfs://tushare_minute_db", "stock_5min_k") 
    where trade_date >= 2025.01.01 and code = `000514.SZ
'''
df = s.run(script)
df['timestamps'] = pd.to_datetime(df['timestamps'])

拿到数据后,用过去 400 个时间点作为输入,预测未来 100 个时间点:

代码语言:javascript
复制
lookback = 400
pred_len = 100

x_df = df.loc[:lookback-1, ['open', 'high', 'low', 'close', 'volume', 'amount']]
x_timestamp = df.loc[:lookback-1, 'timestamps']
y_timestamp = df.loc[lookback:lookback+pred_len-1, 'timestamps']

pred_df = predictor.predict(
    df=x_df,
    x_timestamp=x_timestamp,
    y_timestamp=y_timestamp,
    pred_len=pred_len,
    T=1.0,
    top_p=0.9,
    sample_count=1
)

至此,一条完整的 “DolphinDB 数据 → Kronos 模型 → K 线预测” 链路就跑通了。

大规模数据下,如何让 Kronos 高效“吃”到 K 线?

上面的例子展示了如何从 DolphinDB 获取 K 线,并使用已经训练好的 Kronos 完成预测。对于数据量较小的场景,这种方式已经足够。

但如果进一步希望使用自己的历史 K 线数据对 Kronos 进行训练或微调,就需要面对更大规模的数据读取问题。尤其是在分钟级、多股票以及 DDP 多卡训练的场景下,数据量可能远超单机内存容量。

针对不同规模的训练数据,DolphinDB 提供了三种数据接入训练的方案:

方案

适用场景

一次性加载进内存

数据量小

分批取数存 pkl + DataLoader

数据量中等

DDBDataLoader 直连训练

数据量大、DDP 多卡

前两种方式比较容易理解。

数据量小时,直接从 DolphinDB 取出来放进内存,最简单;数据量中等时,可以分批读取并保存为 pkl,再利用 PyTorch DataLoader 进行训练。

但如果数据规模继续扩大,这两种方式都会遇到一个共同的问题:数据最终还是要进入 Python 本地内存或本地文件。

这也是 DDBDataLoader 要解决的问题。

DDBDataLoader:让 DolphinDB 直接成为训练数据源

训练过程中,DDBDataLoader 按需从 DolphinDB 获取数据,并将数据组织成 PyTorch 训练所需要的 batch。对于数据量较大的 K 线训练任务,这种方式可以减少中间数据落盘和本地数据管理的工作。

如果进一步进入多卡训练场景,还需要额外考虑训练数据如何分配到不同进程。这里 DDBDataLoader 可以结合 DolphinDB 的分区存储方式,在代码中根据 rank 和 world_size 为不同 GPU 分配不同的数据范围。

总的来说,对于 Kronos 这种需要处理分钟级、多股票、大规模 K 线数据的模型,DDBDataLoader 更适合成为数据输入层:数据量小,直接读;数据量中等,可以分批落盘;数据量真正大起来,则让 DolphinDB 直接参与训练数据供给。

使用小贴士

  • steps_per_epoch 需要手动估算。 DDBDataLoader 从数据库实时获取数据,无法直接拿到全部数据的长度,也就没有 len 方法,因此训练时需要自己估算每个 epoch 的 step 数,建议宁高勿低,避免训练数据没有被充分遍历。
  • 取数表建议合理分区。 对于股票 K 线这类数据,可以考虑按照股票代码等字段进行分区,减少查询时的数据扫描范围,否则数据量较大时可能影响取数性能。
  • 提前安装 dolphindb_toolsDDBDataLoader 依赖该工具包,使用前需要完成相关环境和依赖安装。
  • 数据规模越大,越要关注数据读取效率。 模型训练本身只是整个流程的一部分,数据能否稳定、持续地供给 GPU,同样会直接影响整体训练效率。

如果你手里也有沉淀多年的历史行情数据,不妨试着使用 DolphinDB 将数据接入 Kronos 进行训练,看看这个"读懂 K 线"的模型,能帮你的量化研究省下多少功夫。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 快速上手:用一段真实 K 线跑通 Kronos
  • 大规模数据下,如何让 Kronos 高效“吃”到 K 线?
  • DDBDataLoader:让 DolphinDB 直接成为训练数据源
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档