MedicalGPT 预训练环境搭建与训练完整工作日志
这篇记录在 RTX 5090 上把 MedicalGPT 的预训练环境搭起来、并跑通一次训练的完整过程。模型用 Qwen2.5-0.5B,方法是 LoRA。5090 是 Blackwell(sm_120)新架构,这也是后面一半麻烦的根源。
环境大致是:Linux 5.15,RTX 5090,Python 从 3.8.10 升到 3.11.5,PyTorch 用的是 nightly 2.9.0.dev20250805+cu128,CUDA 12.8。
先解决网络
机器访问不了 Hugging Face,得先挂 Clash 代理。准备好 clash 可执行文件、机场的 config.yaml 和 Country.mmdb,丢到 ~/.config/clash 下起服务:
gunzip clash-linux-amd64-*.gz
chmod +x clash-linux-amd64-*
mkdir -p ~/.config/clash
cp 机场配置.yaml ~/.config/clash/config.yaml
cp Country.mmdb ~/.config/clash/
cd ~/.config/clash && ./clash -d . &
验证一下能出去:
curl -x http://127.0.0.1:7890 http://httpbin.org/ip
curl -x http://127.0.0.1:7890 https://huggingface.co
装环境,顺带踩 sm_120 的坑
Python 升到 3.11,再按 NVIDIA 的建议装支持 5090 的 PyTorch nightly:
conda install python=3.11 -y
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
pip install transformers accelerate peft datasets loguru scikit-learn tensorboard
接下来是连续四个错。
CUDA kernel 不可用。
RuntimeError: CUDA error: no kernel image is available for execution on the device
PyTorch 2.4.1 虽然号称支持 CUDA 12.1,但没覆盖 5090 的 sm_120。换上面那套 nightly 加 CUDA 12.8 才认得设备:
import torch
print(torch.__version__) # 2.9.0.dev20250805+cu128
print(torch.cuda.is_available()) # True
print(torch.cuda.get_device_name()) # NVIDIA GeForce RTX 5090
PEFT 导不进来。
ImportError: cannot import name 'prepare_model_for_kbit_training' from 'peft'
peft 0.3.0 还没这个函数,升级即可:pip install --upgrade peft。
Transformers 删了旧接口。
ImportError: cannot import name 'is_torch_tpu_available' from 'transformers'
transformers 4.55.0 移除了 is_torch_tpu_available。改 pretraining.py,把这个导入去掉,用到它的地方也改成不依赖:
from transformers import (
AutoConfig, AutoModelForCausalLM, AutoTokenizer,
HfArgumentParser, Trainer, Seq2SeqTrainingArguments,
# is_torch_tpu_available, # 删掉
set_seed, BitsAndBytesConfig,
)
缺包。 loguru、tensorboard 没装,补上就行:
pip install loguru scikit-learn tensorboard
训练配置与结果
模型 Qwen2.5-0.5B,LoRA(rank 8 / alpha 16 / dropout 0.05,挂在 q/k/v/o 和 gate/up/down_proj 上)。训练用 batch 4、梯度累积 8、学习率 2e-4、0.5 epoch、块大小 512、AdamW(fused)、bf16。数据是三个文本文件(en_article_tail500.txt、fever.txt、tianlongbabu.txt),预处理后 621 个训练样本、10 个评估样本。
cd MedicalGPT && bash run_pt.sh
可训练参数 4,399,104(占总参数 0.88%),10 步训练跑了 14.67 秒(21.15 samples/s)。最后:训练 loss 3.4131,评估 loss 3.0955,评估准确率 41.66%,困惑度 22.10。产物在 outputs-pt-qwen-v1/(adapter_config.json、adapter_model.safetensors 等)。
整个过程最关键的一点就是:新架构 GPU(5090 的 sm_120)必须配对应的 PyTorch nightly 加 CUDA 12.8,普通稳定版会直接在设备识别这一步挂掉;剩下的 PEFT、transformers 报错都是版本前后不兼容,升级或删掉过时接口即可。