将您自己的 LLM 集成到 EA 中(第 4 部分):使用 GPU 训练自己的 LLM·进阶篇
◍ 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),本文不展开,但排障时值得备着。
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 推理仅作分析辅助,不构成任何方向建议。
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 那条命令,至少能跑通。
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 当信号源。