将您自己的 LLM 集成到 EA 中(第 4 部分):使用 GPU 训练自己的 LLM·进阶篇
📘

将您自己的 LLM 集成到 EA 中(第 4 部分):使用 GPU 训练自己的 LLM·进阶篇

第 2/2 篇

◍ amd-smi set 的参数与一条避坑实测

在命令行里调 AMD 显卡配置,amd-smi set 是主力指令。它的基本形态是 amd-smi set -g GPU [GPU ...] 再跟若干设置项,必须指定 GPU(用 ID、BDF 或 UUID 定位),且至少带一个设置参数,多个可同时给。 可选项覆盖风扇、性能、分区与功耗:-f 设风扇(0–255 或 0–100%)、-l 设性能级别、-P 设功率配置文件、-d 限时钟做确定性、-C/-M 切计算/内存分区、-o 设电源上限、-p/-x 管 DPM 与 XGMI 策略;输出可用 --json/--csv 并 --file 落盘。 实测中有一个坑:在某一台机器上跑 sudo amd-smi set -g 0 -f 90% 直接报 ValueError: Unable to set fan speed 229 on GPU ID:0 BDF:0000:03:00.0,设置失败。换成 rocm-smi 的 sudo rocm-smi --setfan 90% 却成功写入。说明同硬件下两个工具对风扇寄存器的处理路径不一致,amd-smi 并非万能。 Ubuntu 下还有图形化托管方案可补命令行短板,如 LACT(github.com/ilya-zlobintsev/LACT)与 radeon-profile(github.com/marazmista/radeon-profile),本文不展开,但排障时值得备着。

MQL5 / C++
sudo amd-smi set -g class="num">0 -f class="num">90%
sudo rocm-smi --setfan class="num">90%

「AMD 显卡跑本地大模型的 Docker 部署路径」

想在 MT5 之外的本地机器上用 AMD 卡做 LLM 推理或训练,最省事的是走 Docker Engine 而非 Desktop,直接用 ubuntu:22.04 起容器再逐步装驱动,比直接拉 ROCm/PyTorch 镜像更利于排错——一旦装崩了删容器重来即可,不用重装宿主系统。 容器启动建议带 --network=host 和 --ipc=host:前者免去桥接网络访问主机代理的麻烦,后者共享内存提效率但降安全性,按自己需要取舍。设备映射必须挂 /dev/kfd 和 /dev/dri 并加 video 组,否则 ROCm 认不到卡。 驱动侧实测 ROCm 6.1.1 的 apt 源路径为 https://repo.radeon.com/amdgpu/6.1.1/ubuntu 与 https://repo.radeon.com/rocm/apt/6.1.1,装 amdgpu-dkms 后本地宿主需 reboot,容器内则不用。验证用 /opt/rocm-6.1.1/bin/rocminfo 和同目录 clinfo,能列出 GPU 才算通。 PyTorch 官方正式版截至部署时还不支持 ROCm 6.1.1,只能装 nightly 预览:pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/rocm6.1/。若报 NameError: name 'amdsmi' is not defined,得进 /opt/rocm/share/amd_smi 本地 build 装 amd-smi-lib,Conda 环境要把 python 路径换成虚拟环境的。外汇与贵金属交易本身高风险,本地 GPU 推理仅作分析辅助,不构成任何方向建议。

MQL5 / C++
docker run -it --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
		--device=/dev/kfd --device=/dev/dri --group-add video \
		--ipc=host --network=host --shm-size 8G rocm/pytorch:latest
docker run -it --name llmc --cap-add=SYS_PTRACE --ipc=host --network=host \
		--security-opt seccomp=unconfined --device=/dev/kfd --device=/dev/dri --group-add video ubuntu:class="num">22.04  
apt install wget
apt install gpg
wget https:class=class="str">"cmt">//repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | tee /etc/apt/keyrings/rocm.gpg > /dev/null  
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https:class=class="str">"cmt">//repo.radeon.com/amdgpu/class="num">6.1.class="num">1/ubuntu jammy main" \
    | tee /etc/apt/sources.list.d/amdgpu.list  
apt update  
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https:class=class="str">"cmt">//repo.radeon.com/rocm/apt/class="num">6.1.class="num">1 jammy main" \
    | tee --append /etc/apt/sources.list.d/rocm.list  
echo -e &class="macro">#x27;Package: *\nPin: release o=repo.radeon.com\nPin-Priority: class="num">600&class="macro">#x27; \
    | tee /etc/apt/preferences.d/rocm-pin-class="num">600  
apt update  
apt install amdgpu-dkms
apt install rocm-hip-sdk
tee --append /etc/ld.so.conf.d/rocm.conf <<EOF
/opt/rocm/lib
/opt/rocm/lib64
EOF  
ldconfig
dkms status
class="kw">export PATH=$PATH:/opt/rocm-class="num">6.1.class="num">1/bin
pip3 install --pre torch torchvision torchaudio --index-url https:class=class="str">"cmt">//download.pytorch.org/whl/nightly/rocm6.class="num">1/ 
pip3 install torch --index-url https:class=class="str">"cmt">//download.pytorch.org/whl/rocm5.class="num">7
apt install amd-smi-lib  
python3 -m pip install --user . 
error: Cannot update time stamp of directory &class="macro">#x27;amdsmi.egg-info&class="macro">#x27;  
error: could not create &class="macro">#x27;amdsmi.egg-info&class="macro">#x27;: Permission denied  
sudo python3 -m pip install --user .  
sudo -H python3 -m pip install --user . 
sudo /home/deeper/miniconda/envs/train_llm/bin/python -m pip install . 
pip3 install --pre torch torchvision torchaudio --index-url https:class=class="str">"cmt">//download.pytorch.org/whl/nightly/rocm6.class="num">1/

在 AMD 显卡上跑通金融语料训练

想用显卡而不是 CPU 训一个专属金融的小模型,开源项目 llm.c 的 AMD 分支(anthonix/llm.c)是目前最直白的入口。别直接拉官方仓库,官方那条线对 AMD 设备不友好;我当前验证可用的提交是 37dfcf6,克隆后切过去能少踩很多坑。 依赖顺序有讲究:先装 Torch,再跑 requirements.txt,否则容易版本冲突。编译时用 make train_gpt2amd AMDGPU_TARGETS=gfx1100,其中 gfx1100 只是 7900XTX 的 ISA 示例,得用 rocminfo | grep Name 查出你自己卡的指令集再填。 训练命令里几个参数卡得很死:batch_size、sequence_length、total_batch_size 都必须是 2 的幂,否则直接报错。我测的时候数据集序列长 64,就把 sequence_length 设成 128,total_batch_size 用 4096,num_iterations 仅 100 步做验证性跑通。 实测对比很说明问题:之前纯 CPU 训平均每步约 8000 毫秒,换到 GPU 后每步不到 80 毫秒,步均耗时压缩两个数量级,加速倾向在 100 倍上下。这还只是未优化的 demo,别急着封装成 EA,效果大概率很差。 AMD 路的坑才刚开始。若撞上 layernorm.cuh 的 CUDA/HIP ERROR,或 RuntimeError: HIP error 提示状态不允许,先确认 g++ 是不是 12(Ubuntu 有些版只带 11),再补环境变量 HSA_OVERRIDE_GFX_VERSION=11.0.0 与对应 AMDGPU_TARGETS。改完仍崩,就退回 Python 脚本 train_gpt2.py 那条命令,至少能跑通。

MQL5 / C++
cd llm.c
git checkout 37dfcf6
pip install -r requirements.txt 
make train_gpt2amd AMDGPU_TARGETS=gfx1100 
rocminfo | grep Name:   
python data_enc
python train_gpt2.py --input_bin data/val_data.bin
make train_gpt2amd AMDGPU_TARGETS=gfx1100  
apt install g++-class="num">12  
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-class="num">12 class="num">60 --slave /usr/bin/g++ g++ /usr/bin/g++-class="num">12 
./train_gpt2amd  
python train_gpt2.py \
    --input_bin "./data/train_data.bin" \
    --input_val_bin "./data/val_data.bin" \
    --val_loss_every class="num">10 \
    --sample_every class="num">0 \
    --output_dir pylog124M \
    --write_tensors class="num">0 \
    --model d12 \
    --batch_size class="num">16 \
    --sequence_length class="num">128 \
    --total_batch_size class="num">4096 \
    --dtype bfloat16 \
    --compile class="num">1 \
    --tensorcores class="num">1 \
    --flash class="num">1 \
    --num_iterations class="num">100 \
    --weight_decay class="num">0.1 \
    --zero_stage class="num">1 \
    --learning_rate class="num">0.0006 \
    --warmup_iters class="num">0 \
    --learning_rate_decay_frac class="num">0.0 \
    --overfit_single_batch class="num">0
class="kw">export HSA_OVERRIDE_GFX_VERSION=class="num">11.0.class="num">0
class="kw">export HIP_VISIBLE_DEVICES=class="num">0
class="kw">export ROCM_PATH=/opt/rocm
class="kw">export AMDGPU_TARGETS=gfx1100
from os class="kw">import putenv
putenv("HSA_OVERRIDE_GFX_VERSION", "class="num">11.0.class="num">0")  

◍ 把工具请下神坛

这一篇里我们把 AMD 和 NVIDIA 两张卡的本地加速环境都跑通了,附带的数据包里 data_enc.py 只有 2.87 KB,llm_data.csv 则有 1139.04 KB,足够在显卡上做一遍预训练演示。 预训练模型当前还没过优化,没有评估指标,也没接 MetaTrader 做 EA 回测——它只是个能跑通的骨架,离实盘策略还差微调那一步。 下一篇会进到 LoRA 微调,并把训出来的语言模型真正塞进 EA 里在 MT5 客户端测一把。外汇和贵金属杠杆高、回撤猛,这类自研模型从实验室到账户中间还隔着验证鸿沟,别急着拿 demo 当信号源。

常见问题

实测在 ROCm 环境下先把 power_limit 设到显卡 TDP 的 85% 再跑训练,比直接拉满更稳;一上来设最大值容易触发驱动保护性掉卡。
核心是 ROCm 运行时 + 对应版本的 PyTorch ROCm 构建;Dockerfile 里别漏掉 amdgpu 驱动挂载,否则容器认不到卡。
可以,小布能接入你的监控接口把 GPU 温度、显存、功耗做成盯盘页卡片,异常时直接推提醒,你不用自己轮询命令行。
开 4-bit 量化后 8GB 显存勉强能跑单向推理,真要微调建议 16GB 以上,否则 batch size 只能设 1 还容易 OOM。
不必,先跑通单卡最小可训练样例再逐步加参数;把工具请下神坛,能稳定出 token 比堆配置更重要。