MedQA:在AMD ROCm上微调临床AI——无需CUDA
本文详细介绍了如何使用AMD MI300X和ROCm,通过LoRA微调Qwen3-1.7B模型在MedMCQA数据集上构建临床问答系统。整个流程无需CUDA,训练仅需5分钟,充分证明了HuggingFace生态系统在ROCm上的兼容性。
文章情报
要点
- 利用AMD MI300X的192GB HBM3显存,可在fp16精度下直接训练,无需量化。
- LoRA微调仅更新约0.14%的参数(220万),训练时间约5分钟。
- 模型能输出正确答案及临床解释,支持从HuggingFace Hub直接加载。
- 面临的挑战包括混合精度不稳定和bitsandbytes不兼容,但均通过调整环境变量或切换精度解决。
为什么重要
这条新闻值得关注,因为利用AMD MI300X的192GB HBM3显存,可在fp16精度下直接训练,无需量化。
技术影响
可能影响模型选型、推理成本、产品能力和评测基准。
医疗问答是一项高风险任务,错误回答可能带来严重后果。然而,目前大多数开源医疗AI工作都默认依赖NVIDIA GPU和CUDA。MedQA项目旨在打破这一假设,展示如何在AMD硬件上构建一个高效、可解释的临床问答模型。
该项目使用AMD Instinct MI300X GPU和ROCm软件栈,对阿里云的Qwen3-1.7B模型进行LoRA微调。MI300X拥有192GB HBM3显存,使得在完整的fp16精度下训练成为可能,无需任何量化技巧。训练数据来自MedMCQA数据集,该数据集包含印度医学入学考试(AIIMS、USMLE-style)的多项选择题,每个问题有四个选项、正确答案索引和可选解释。项目使用了2000个样本,整个训练过程在MI300X上仅需约5分钟。
微调采用LoRA技术,通过PEFT库向注意力层注入低秩矩阵。LoRA配置中r=8、lora_alpha=16、lora_dropout=0.05,目标模块为q_proj和v_proj。仅训练220万个参数(占总数0.14%),大大降低了内存占用和训练时间。训练参数包括fp16混合精度、梯度检查点、余弦学习率调度、有效批量大小16等。早期使用bfloat16时遇到NaN损失,切换至fp16后完全解决。
推理时,加载基础模型并附加LoRA适配器,生成采用贪心解码(do_sample=False)和重复惩罚。例如,对于问题“高血压急症的一线治疗?”,模型输出“B) IV labetalol或IV nitroprusside”,并解释静脉用药快速降压的原因。模型不仅输出答案,还提供临床解释,增强了实用性。
项目面临并解决了一些挑战:GPU未检测到需要设置环境变量ROCR_VISIBLE_DEVICES、HIP_VISIBLE_DEVICES和HSA_OVERRIDE_GFX_VERSION;bitsandbytes不兼容问题被直接忽略,因为MI300X的192GB显存无需量化;tokenizer填充配置错误导致垃圾输出,通过设置pad_token=eos_token解决;训练器评估错误源于Transformers版本不匹配,锁定版本后修复。
结果显示,训练参数约220万,训练时间5分钟,数据集大小2000样本,基线准确率约45%。用户可通过GitHub克隆仓库、安装依赖、运行训练脚本或启动Gradio UI。未来计划包括使用完整MedMCQA数据集(18万问题)、添加置信度评分、集成检索增强生成(RAG)以及构建评估基准。
MedQA项目证明了在AMD硬件上构建临床AI不仅可行,而且简单。HuggingFace生态在ROCm上运行良好,MI300X的大显存消除了量化需求,LoRA使微调变得快速高效。