MedicalGPT 预训练环境搭建与训练完整工作日志
项目概述
本文档记录了在 RTX 5090 GPU 环境下搭建 MedicalGPT 预训练环境并成功完成训练的完整过程。项目基于 Qwen2.5-0.5B 模型,使用 LoRA (PEFT) 方法进行预训练。
环境信息
- 操作系统: Linux 5.15.0-94-generic
- GPU: NVIDIA GeForce RTX 5090
- Python: 3.11.5 (从 3.8.10 升级)
- PyTorch: 2.9.0.dev20250805+cu128 (nightly 版本)
- CUDA: 12.8
初始环境检查
首先检查了当前环境的基本信息:
python --version
# Python 3.8.10
nvidia-smi
# NVIDIA GeForce RTX 5090发现 Python 版本较旧,且需要配置网络代理来访问 Hugging Face 等资源。
网络代理配置
由于网络环境限制,需要配置 Clash 代理来访问外部资源。
代理文件准备
clash-linux-amd64-n2023-09-05-gdcc8d87.gz- Clash 可执行文件性价比机场.yaml- 代理配置文件Country.mmdb- GeoIP 数据库
代理服务启动
# 解压并设置权限
gunzip clash-linux-amd64-n2023-09-05-gdcc8d87.gz
chmod +x clash-linux-amd64-n2023-09-05-gdcc8d87
# 创建配置目录
mkdir -p ~/.config/clash
# 复制配置文件
cp "性价比机场.yaml" ~/.config/clash/config.yaml
cp Country.mmdb ~/.config/clash/
cp clash-linux-amd64-n2023-09-05-gdcc8d87 ~/.config/clash/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代理配置成功,可以正常访问外部资源。
依赖环境升级
Python 版本升级
由于 PyTorch nightly 版本需要更新的 Python 版本,将 Python 从 3.8.10 升级到 3.11.5:
conda install python=3.11 -yPyTorch 安装
根据 NVIDIA 官方建议,安装支持 RTX 5090 的 PyTorch nightly 版本:
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遇到的问题与解决方案
问题 1: CUDA 兼容性错误
错误信息:
RuntimeError: CUDA error: no kernel image is available for execution on the device原因分析:
PyTorch 2.4.1 虽然支持 CUDA 12.1,但不完全兼容 RTX 5090 的 sm_120 架构。
解决方案:
- 升级 Python 到 3.11 版本
- 安装 PyTorch nightly 版本 (2.9.0.dev20250805+cu128)
- 使用 CUDA 12.8 支持
验证结果:
import torch
print(f'PyTorch version: {torch.__version__}') # 2.9.0.dev20250805+cu128
print(f'CUDA available: {torch.cuda.is_available()}') # True
print(f'Device name: {torch.cuda.get_device_name()}') # NVIDIA GeForce RTX 5090问题 2: PEFT 导入错误
错误信息:
ImportError: cannot import name 'prepare_model_for_kbit_training' from 'peft'原因分析:peft 0.3.0 版本中没有 prepare_model_for_kbit_training 函数,该函数在较新版本中才有。
解决方案:
升级 peft 库到最新版本:
pip install --upgrade peft验证结果:
from peft import prepare_model_for_kbit_training
print('PEFT import successful')问题 3: Transformers 兼容性问题
错误信息:
ImportError: cannot import name 'is_torch_tpu_available' from 'transformers'原因分析:transformers 4.55.0 版本中移除了 is_torch_tpu_available 函数。
解决方案:
修改 pretraining.py 文件,移除对 is_torch_tpu_available 的依赖:
# 移除导入
from transformers import (
AutoConfig,
AutoModelForCausalLM,
AutoTokenizer,
HfArgumentParser,
Trainer,
Seq2SeqTrainingArguments,
# is_torch_tpu_available, # 移除这行
set_seed,
BitsAndBytesConfig,
)
# 修改使用位置
compute_metrics=compute_metrics if training_args.do_eval else None,
preprocess_logits_for_metrics=preprocess_logits_for_metrics
if training_args.do_eval
else None,问题 4: 缺失依赖
错误信息:
ModuleNotFoundError: No module named 'loguru'
RuntimeError: TensorBoardCallback requires tensorboard to be installed解决方案:
安装缺失的依赖:
pip install loguru scikit-learn tensorboard训练配置
模型配置
- 基础模型: Qwen/Qwen2.5-0.5B
- 训练方法: LoRA (PEFT)
LoRA 配置:
- rank: 8
- alpha: 16.0
- dropout: 0.05
- target_modules: ['down_proj', 'gate_proj', 'k_proj', 'o_proj', 'q_proj', 'up_proj', 'v_proj']
训练参数
- 批次大小: 4 (per_device_train_batch_size)
- 梯度累积: 8 (gradient_accumulation_steps)
- 学习率: 2e-4
- 训练轮数: 0.5 epochs
- 最大样本数: 10000 (训练), 10 (评估)
- 块大小: 512 tokens
- 优化器: AdamW (fused)
- 精度: bfloat16
数据配置
训练数据: 3 个文本文件
en_article_tail500.txtfever.txttianlongbabu.txt
- 数据预处理: 10 个并行工作进程
- 训练样本数: 621 个
- 评估样本数: 10 个
训练执行
启动训练
cd MedicalGPT
bash run_pt.sh训练过程监控
训练过程中观察到以下关键指标:
模型加载成功:
- 成功加载 Qwen2.5-0.5B 模型
- LoRA 配置应用成功
- 可训练参数:4,399,104 (0.88% 的总参数)
数据处理:
- 原始数据集:3,876 个样本
- 分词处理:使用 10 个并行进程
- 分块处理:512 tokens 块大小
训练进度:
- 训练步数:10 步
- 训练时间:14.67 秒
- 训练速度:21.152 samples/second
训练结果
性能指标
- 训练损失: 3.4131
- 评估损失: 3.0955
- 评估准确率: 41.66%
- 困惑度: 22.10
- 训练效率: 0.681 steps/second
模型输出
训练完成后,模型保存在 outputs-pt-qwen-v1/ 目录中,包含:
- 模型检查点文件
- LoRA 权重文件
- 训练配置文件
- TensorBoard 日志文件
验证结果
# 检查输出目录
ls -la outputs-pt-qwen-v1/
# 包含 adapter_config.json, adapter_model.safetensors 等文件经验总结
关键技术点
- GPU 兼容性:新架构 GPU 需要使用对应的 PyTorch nightly 版本
- 依赖管理:及时升级关键依赖库,注意版本兼容性
- 网络配置:在受限网络环境下,合理配置代理服务
- 错误调试:逐步排查依赖和兼容性问题
最佳实践
- 环境隔离:使用 conda 管理 Python 环境
- 版本控制:记录所有依赖的版本信息
- 渐进式调试:从基础功能开始,逐步添加复杂功能
- 日志记录:详细记录每个步骤和遇到的问题
性能优化
- 数据预处理:使用多进程并行处理
- 内存管理:合理设置批次大小和梯度累积
- 精度选择:使用 bfloat16 平衡精度和性能
- 模型优化:使用 LoRA 减少可训练参数
后续工作
- 模型评估:在更多数据集上评估模型性能
- 超参数调优:优化学习率、批次大小等参数
- 模型部署:将训练好的模型部署到生产环境
- 持续训练:使用更多数据进行增量训练
参考资料
本文档记录了从环境搭建到模型训练完成的完整过程,可作为类似项目的参考指南。

