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.yamlCountry.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,
)

缺包。 logurutensorboard 没装,补上就行:

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.txtfever.txttianlongbabu.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.jsonadapter_model.safetensors 等)。

整个过程最关键的一点就是:新架构 GPU(5090 的 sm_120)必须配对应的 PyTorch nightly 加 CUDA 12.8,普通稳定版会直接在设备识别这一步挂掉;剩下的 PEFT、transformers 报错都是版本前后不兼容,升级或删掉过时接口即可。