将您自己的 LLM 集成到 EA 中(第 3 部分):使用 CPU 训练自己的 LLM·综合运用
📘

将您自己的 LLM 集成到 EA 中(第 3 部分):使用 CPU 训练自己的 LLM·综合运用

第 3/3 篇

「训练集与验证集的 token 落盘切分」

这段 Python 片段在做一件事:把处理完的文本 token 按验证集 / 训练集分开,并各自写入二进制文件。验证分支里,val_tokens 先追加一个 eot 结束符,再 extend 当前文本的 tokens,最后用 os.path.join 拼出 val_data.bin 路径调用 data_to_file 落盘。 训练分支逻辑对称:train_tokens 同样先补 eot 再 extend,写入 train_data.bin。两个集合独立维护,避免数据泄漏。 末尾 print 直接吐出规模——tain 与 val 后跟着各自 token 数,跑完能在终端看到类似 tain:125803 val:14210 的实测数值,据此判断切分比例是否和你预设的 90/10 吻合。 外汇与贵金属相关的语料若走这套预处理,需注意 tick 级序列的高波动性会让 token 分布偏移,训练集过拟合概率偏高,属高风险场景。

MQL5 / C++
    val_tokens.extend(tokens)
    enc_f = os.path.join(DATA_DIR, "val_data.bin")
    data_to_file(enc_f, val_tokens)
  else:
    train_tokens.append(eot)
    train_tokens.extend(tokens)
    enc_f = os.path.join(DATA_DIR, "train_data.bin")
    data_to_file(enc_f, train_tokens)
print(f"tain:{len(train_tokens)}",f"val:{len(val_tokens)}")

◍ 在 WSL 里把 GPT-2 跑起来

想用 MT5 导出的行情序列训一个迷你语言模型,Karpathy 的 llm.c 是最省事的入口。Windows 侧开 MT5 客户端跑 data_enc.py,会生成 train_data.bin 与 val_data.bin;WSL 能直接读 Windows 盘,但把路径指对更稳。本文环境是 WSL + miniconda,Python 3.11.5,编译前确认 make 和 requirements.txt 的依赖都齐了。 训练分两段:先用 train_gpt2.py 做初始化,再靠 train_gpt2.c 在 CPU 上正式训。Python 侧用 python train_gpt2.py --input_bin dev/data/mt5/val_data.bin 即可,不必改源码第 397 行。它只产出四个 bin——gpt2_124M.bin(float32)、gpt2_124M_bf16.bin、gpt2_Tokenizer.bin、gpt2_124M_debug_state.bin,并顺手跑几步推理做冒烟测试。 C 侧要动第 1041 行附近的 train_tokens / val_tokens 常量,改完注意末尾分号,这和 Python 不一样。然后 make train_gpt2 编出 CPU 程序,用 OMP_NUM_THREADS=10 ./train_gpt2 开训,线程数按你机器物理核来定。 实测初跑推理输出一串 0.605 左右的小数,和原始 llm_data.csv 里 0.6 上下的数值对得上,只是缺了逗号分隔符——数据格式是 x,x,x 但模型吐成了 xxxxx。这属于编解码没对齐,路线本身通了。CPU 训因精度问题不建议保存实盘,真要落地得重做数据集、编解码器和超参。 顺带一句:Windows 路径带空格时,WSL 里得写成 cd /mnt/g/'Program Files',裸进会报找不到目录。模型训完若想接 EA,可用 Python 起推理服务,EA 走 socket 请求结果,具体见作者另一篇 socket 应用文。 以下为关键命令与路径改动的原文片段,方便你直接抄:

MQL5 / C++
git clone&nbsp;&nbsp;https:<span class="comment">class=class="str">"cmt">//github.com/karpathy/llm.c.git</span>
cd llm.c
pip install -r requirements.txt
python data_enc.py
python train_gpt2.py --input_bin dev/data/mt5/val_data.bin
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">const</span> <span class="keyword">class="type">char</span>* train_tokens = <span class="class="type">class="kw">string">"dev/data/mt5/train_data.bin"</span>;
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">class="type">char</span>* val_tokens = <span class="class="type">class="kw">string">"dev/data/mt5/val_data.bin"</span>;

CPU 炼出的模型能进量化策略吗

单颗 CPU 跑通自有大语言模型训练这件事本身成立,但别被「自己训了 LLM」这几个字带偏节奏。本例仅证明在受限硬件上可完成最小闭环,模型大概率只承载单一功能且泛化很差。 外汇与贵金属量化本就属高风险域,把这种 CPU 小模型直接当信号源等于拿玩具扳手修发动机;更现实的落点是把它当作特定规则执行的轻量组件,例如对新闻流做二分类过滤。 下一篇会切到图形卡加速训练。若你持 AMD 显卡,现阶段多数主流库对 ROCm 支持仍残缺,作者写稿时这一现状明显;但跨平台方案如 llama.cpp 的扩散倾向让 AMD 用户不必绑定 CUDA 生态。能用 AMD 本地加速,就无需为 NVIDIA 的生态完整性额外妥协。

「延伸材料与代码仓库」

想把前面这套 LLM 接 EA 的链路自己跑通,核心训练代码在 karpathy 的 llm.c 仓库(GitHub 公开地址,搜 llm.c 即可 clone),纯 C 实现、方便后续嵌进 MT5 的 DLL 调用链。 随文附了两个文件:data_enc.py(2.87 KB,做语料编码)和 llm_data.csv(约 1.14 MB,1139.04 KB,样本量够跑一轮 LoRA 微调验证)。直接下 ZIP 解压就能用,不用自己攒数据。 外汇和贵金属行情受宏观事件驱动,用 LLM 生成策略信号仅作概率参考,实盘前务必在 MT5 策略测试器用历史数据回测,杠杆品种高风险,仓位自己控。

常见问题

按时间顺序先落盘全部 token,再在最后一个文件按 9:1 切分,避免随机打乱导致未来信息泄露;验证集单独存盘别混回训练集。
把 batch_size 降到 1、num_train_epochs 设小一点、max_seq_length 限制在 64 以内,并用 CPU 专用 torch 版本;监控交换分区别超物理内存。
可以,小布支持上传本地模型权重并由 AIGC 模块调用,在品种页直接开启「本地模型信号」即可替你跑推理。
能进策略但只适合低频文本特征,如新闻情绪标签;别拿它做tick级预测,样本外衰减会很快。
核心依赖是 torch、transformers、numpy 和 tokenizers;用 pip 建独立虚拟环境装,避免和原有科学计算库冲突。