跳到主要内容

构建基于Qwen3-vl-30B-A3B-Instruct的医疗影像微调实战

更新时间:2025-11-25 14:55:10
使用超便捷高性能GPU卡医疗影像专家存储钜惠LoRA微调

Qwen3-vl-30B-A3B-Instruct模型是Qwen3系列开源的新一代多模态视觉语言模型。作为Qwen家族迄今最强的视觉语言模型,Qwen3-vl在保持纯文本能力的同时,将视觉理解指标推向了新高度。Qwen3-vl-30B-A3B-Instruct通过引入3B激活参数的稀疏架构,在仅激活30亿参数的情况下即可在STEM、VQA、OCR、视频解析及Agent任务上对标甚至超越GPT-5-Mini与Claude4-Sonnet,同时保持30B总参数量的稀疏激活能力,实现性能与效率的平衡。

当前通用多模态视觉语言模型在医疗影像场景中存在显著技术瓶颈:高分辨率医学影像(如CT、MR)的细粒度特征提取能力不足,且模型推理时显存占用高、计算效率低,难以支撑临床实时分析与大规模部署需求。我们可以通过LLaMA Factory Online平台,利用MedTrinity-25M子集(16K样本)对Qwen3-vl-30B-A3B-Instruct进行LORA微调,验证“小数据+稀疏激活”在医疗多模态场景的落地效果。

前提条件

  • 用户已经获取LLaMA-Factory Online平台账户和密码,如果需要帮助或尚未注册,可参考注册账户完成注册。
  • 当前账号的余额充裕,可满足模型微调服务的需要。单击可了解最新的活动费用信息,或前往充值,如需了解更多请联系我们

配置概览

配置参数配置项是否预置说明
模型Qwen3-vl-30B-A3B-Instruct稀疏激活,仅3B参数激活,支持高分辨率动态切换。
数据集train-00000-of-00010.parquet否(提供下载链接)选取的数据集是MedTrinity-25M子集中的其中一个(16163张图片),MedTrinity-25M是当前规模最大的公开医学影像-文本对数据集,涵盖CT、MR、X-Ray等多种模态,为医疗多模态模型的训练与评估提供了丰富燃料。
GPUH800*4(推荐)-模型规模较大,建议配置足够显存。
微调方法lora-显著降低计算与存储成本,兼具高性能与部署灵活性。

资源消耗预览

时长

使用推荐资源(H800*4)进行任务模式微调参数一时微调过程总时长约34min。

操作步骤

步骤一:数据准备

  1. 单击链接,下载train-00000-of-00010.parquet数据集。数据集下载完成后,需上传至文件管理。具体操作,可参考SFTP上传下载完成数据集上传。

    SwanLab对比图

  2. 数据格式转换。

    LLaMA-Factory作为主流的大语言模型微调框架,对医疗问诊类数据有明确的格式要求。因此需将原数据格式转换为LLaMA Factory兼容的数据格式。数据格式转换的具体步骤如下:

    a. 进入LLaMA-Factory Online平台,单击“控制台”,进入控制台后单击左侧导航栏的“实例空间”,然后在页面单击“开始微调”。

    开始微调

    b. 在弹出的页面选择镜像(如图①),选择“CPU”,核数选择“2核”(如图②),然后单击“启动”。

    开始微调

    提示

    系统会根据所需资源及其相关参数,动态预估数据处理费用,您可在页面底部查看预估结果。

    c. 实例启动后,单击[VSCode处理专属数据]页签,进入VSCode编辑页面。您也可以根据需要打开JupyterLab处理专属数据,本示例指导您通过VSCode处理数据。

    d. 在VSCode页面左侧user-data/datasets目录下(如图①)新建一个.py后缀的文件(如图②),然后复制以下命令至文件中(如图③)。

    代码详情
    #多模态数据格式转换代码
    import os
    import json
    import random
    from tqdm import tqdm
    import datasets

    def save_images_and_json(ds, ratio=0.1, output_dir="mllm_data"):
    """
    保存数据集中的图像,并且构建多模态训练集和验证集。

    参数:
    ds: 数据集对象,包含图像和描述。
    ratio: 验证集比例,默认为 0.1。
    output_dir: 输出目录,默认为 "mllm_data"。
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    all_train_data = [] # 多模态训练数据
    all_val_data = [] # 多模态验证数据

    total_samples = len(ds)
    val_index = set(random.sample(range(total_samples), int(ratio * total_samples)))

    # 遍历数据集中的每个项目
    for idx, item in tqdm(enumerate(ds), total=total_samples, desc="Processing"):
    img_path = os.path.join(output_dir, f"{item['id']}.jpg")
    image = item["image"]

    # 保存图像
    image.save(img_path)

    sample = {
    "conversations": [
    {
    "from": "user",
    "value": "<image>图片中的诊断结果是怎样?"
    },
    {
    "from": "assistant",
    "value": item["caption"] # 从数据集中获取的描述
    }
    ],
    "images": [img_path] # 图像文件路径
    }

    if idx in val_index:
    all_val_data.append(sample)
    else:
    all_train_data.append(sample)

    # 将数据保存到 JSON 文件
    train_json_path = os.path.join(output_dir, "mllm_train_data.json")
    val_json_path = os.path.join(output_dir, "mllm_val_data.json")

    with open(train_json_path, "w", encoding="utf-8") as f:
    json.dump(all_train_data, f, ensure_ascii=False, indent=2)

    with open(val_json_path, "w", encoding="utf-8") as f:
    json.dump(all_val_data, f, ensure_ascii=False, indent=2)


    if __name__ == "__main__":
    # 加载数据集
    ds = datasets.load_dataset("parquet", data_files="/workspace/user-data/datasets/train-00000-of-00010.parquet")["train"]
    # 保存图像并构建多模态训练/验证集
    save_images_and_json(
    ds,
    ratio=0.2,
    output_dir="/workspace/user-data/datasets/mllm_data"
    )

    开始微调

    e. 在VSCode页面,新建一个终端,依次执行以下命令,进行数据格式转换(如图①)。

    conda activate /opt/conda/envs/lf
    python /workspace/user-data/datasets/Qwen3-vl.py
    提示

    Qwen3-vl.py为本示例新建的文件,请根据您的实际情况进行替换。

    回显信息如图②所示,说明数据格式转换成功,且转换后的数据存放在/datasets/mllm_data中,即原数据集文件train-00000-of-00010.parquet经格式转换后生成新的数据集文件mllm_data(如图③),其中包括mllm_train_data.json和mllm_val_data.json数据集文件。

    开始微调

  3. 数据集注册。

    在/workspace/llamafactory/data/dataset_info.json配置文件中(如图①),配置如下内容,注册数据集mllm_train_data.json和mllm_val_data.json(如图②)。

    注册数据集mllm_train_data.json
    "mllm_train_data": {
    "file_name": "/workspace/user-data/datasets/mllm_data/mllm_train_data.json",
    "columns": {
    "messages": "conversations",
    "images": "images"
    },
    "formatting": "sharegpt",
    "tags": {
    "role_tag": "from",
    "content_tag": "value",
    "user_tag": "user",
    "assistant_tag": "assistant",
    "system_tag": "system"
    },
    "customized_status": 8,
    "total_tokens": "2727652",
    "num_samples": "12931",
    "avg_tokens": "210.94"
    }
    注册数据集mllm_val_data.json
    "mllm_train_data": {
    "file_name": "/workspace/user-data/datasets/mllm_data/mllm_train_data.json",
    "columns": {
    "messages": "conversations",
    "images": "images"
    },
    "formatting": "sharegpt",
    "tags": {
    "role_tag": "from",
    "content_tag": "value",
    "user_tag": "user",
    "assistant_tag": "assistant",
    "system_tag": "system"
    },
    "customized_status": 8,
    "total_tokens": "2727652",
    "num_samples": "12931",
    "avg_tokens": "210.94"
    }

    开始微调

  4. 数据集检测。

    a. 返回LLaMA-Factory Online控制台,单击左侧导航栏的“文件管理”。

    b. 单击目标数据集右侧“操作”列的"数据集检测",检测数据集。如下图所示,若“数据集格式检测”结果显示“符合”,则表示数据集符合格式要求。

    开始微调

步骤二:模型训练

我们使用LLaMA-Factory Online通过任务模式和实例模式运行微调任务,不同模式下的微调/评估操作详情如下所示。

在任务模式下,我们对模型进行了两组微调实验(参数一和参数二),以评估不同配置的效果。两组实验的变量仅为 per_device_train_batch_size(32,4)和 DeepSpeed(3,2)参数,其他条件完全相同。具体参数差异如下表所示:

配置参数参数说明参数一参数二
基础配置
model训练用的基模型。Qwen3-VL-30B-A3B-InstructQwen3-VL-30B-A3B-Instruct
dataset训练使用的数据集名称。mllm_train_datamllm_train_data
stage训练方式sftsft
finetuning_type微调方法loralora
进阶配置
LR Scheduling Type动态调整学习率的方式。cosinecosine
Max Gradient Norm梯度裁剪的最大范数,用于防止梯度爆炸。1.01.0
训练配置
Learning Rate学习率5e-055e-05
Epochs训练轮数22
per_device_train_batch_size单GPU批处理大小。324
Gradient Accumulation梯度累计,将一个完整批次的梯度计算拆分为多个小批次,逐步累积梯度,最后统一更新模型参数。88
Save steps训练过程中每隔多少个训练步保存一次模型。200200
Warmup Ratio将学习率从零增加到初始值的训练步数比例。00
Chat Template基模型的对话模版,训练和推理时构造prompt的模版。qwen3qwen3
效率与性能配置
Mixed Precision Train混合精度训练,模型在训练或推理时所使用的数据精度格式,如 FP32、FP16 或 BF16。bf16bf16
分布式配置
DeepSpeedDeepspeed Stage是DeepSpeed中ZeRO(Zero Redundancy Optimizer)优化技术的阶段参数,其范围是none、2、3。参数越大,意味着模型状态的分片程度越高,每个GPU的内存占用越少,但同时通信开销也可能越大。32
数据参数配置
Max Sample Size每个数据集的最大样本数:设置后,每个数据集的样本数将被截断至指定的 max_samples。100000100000
Cutoff Length输入的最大 token 数,超过该长度会被截断。20482048
Preprocess Workers预处理时使用的进程数量。3232
日志配置
Logging Steps日志打印步数。55
LoRA配置
Lora RankLoRA 微调的本征维数 r,r 越大可训练的参数越多。88
LoRA Scalling FactorLoRA 缩放系数。一般情况下为 lora_rank * 2。1616
Random dropoutLoRA 微调中的 dropout 率00
LoRA ModulesLora作用模块allall
  1. 进入LLaMA-Factory Online平台,单击“控制台”,进入控制台后单击左侧导航栏的“模型微调”进入页面。

  2. 选择基础模型和数据集,进行参数配置。

    • 本实践使用平台内置的Qwen3-VL-30B-A3B-Instruct作为基础模型,数据集选择文件管理处的mllm_train_data
    • 其他参数配置选择上表中的参数一数据,具体可参考下图。
    • 资源配置。推荐卡数为4卡。
    • 选择价格模式。本实践选择“极速尊享”,不同模式的计费说明参考计费说明
    • 开始训练。单击“开始训练”按钮,开始模型训练。

    开始微调

    提示

    配置模型与数据集后,系统将根据所需资源及其相关参数,动态预估任务运行时长及微调费用,您可在页面底部查看预估结果。

  3. 通过任务中心查看任务状态。 在左侧边栏选择”任务中心“,即可看到刚刚提交的任务。可以通过单击任务框,可查看任务的详细信息、超参数、训练追踪和日志。 开始微调

  4. 任务完成后,模型自动保存在"文件管理->模型->output"文件夹中。可在"任务中心->基本信息->模型成果"处查看保存路径。

    开始微调 loss结果:

    开始微调

  5. 进行模型评估。 单击页面左侧导航栏“模型评估”,进行评估训练配置。 微调模型选择上一步骤微调后的模型,评估数据集选择文件管理处:mllm_val_data。其他参数设置如下图所示。

    模型评估

    提示

    配置模型与数据集后,系统将根据所需资源及其相关参数,动态预估任务运行时长及微调费用,您可在页面底部查看预估结果。

  6. 可以在“任务中心->模型评估”下看到评估任务的运行状态。

    开始微调

  7. 单击swanapi图标,进入任务基本信息查看页面。用户可查看评估任务的基本信息、日志,评估结束后,可查看评估结果如下图所示。

    模型评估

    评估结果显示:其文本生成质量(BLEU/ROUGE 指标)处于中等水平,模型加载准备较快,但因参数规模大,运行总耗时极长、推理速度很低,整体呈现文本质量中等但运行效率偏低的特点。

  8. 模型对话。

    a. 单击左侧导航栏“模型对话”按钮进入模型对话页面。

    b. 在微调模型处选择步骤3中显示的模型名称(如图①)。单击右上角“开始对话”,在弹出的“LORA模型对话限时免费”对话框,单击“立即对话”。

    c. 在输入框上传一张医疗影像图片(如图②),并输入问题(如图③),单击发送(如图④);在对话框中查看对话详情(如图⑤)。

    模型评估

    模型输出结果解读:这份分析专业覆盖了影像征象、病变风险与诊疗方向,是严谨的医学影像解读。

通过任务模式完成两组参数配置的模型微调后,从 loss 对比结果来看,相同硬件与数据集条件下,deepseed 3(参数一)方案训练速度更快,但微调阶段 loss 显著上升;deepseed 2(参数二)方案虽训练速度略有下降,却能更有效地压低 loss。具体来看:

  • deepseed 3 训练速度的提升,核心得益于 “小块通讯 + 微批次自动放大” 带来的带宽优化;
  • deepseed 3 微调 loss 上涨的本质,是 “参数延迟 + 梯度噪声” 导致模型收敛效果变差;
  • 选型建议:若显存充足,优先选择 deepseed 2 方案以追求更优指标;若显存不足需使用 deepseed 3,则需同步通过放大 global batch、拉长 warmup 时长、降低学习率(lr)的方式弥补收敛性能。
参数一参数二
开始微调开始微调

关键超参数配置结论

参数结论
epoch* 16k 数据场景:3 个 epoch 为性能拐点,第 4 个 epoch 起训练 loss 虽持续下降,但验证指标不再提升,属于典型过拟合现象;
* 5k 小数据场景:可将 epoch 延长至 6~8 个,充分挖掘数据价值。
lr scheduler采用 “cosine 衰减 + 3% 比例 warmup” 的配置已足够适配任务,linear 衰减在图文对齐任务中未体现出显著优势。
rank 与 alpha 设定* rank 值:从 8 提升至 32 时,模型对医疗影像细粒度特征的学习效果提升明显,rank 超过 64 后性能基本饱和;
* alpha 值:建议按 “alpha=rank×2” 设定(如 rank=8 时对应 alpha=16),稳定性最佳。
dropout* 数据量 ≤ 10k 时:设置 dropout=0.05 可有效抑制过拟合;
* 数据量 > 10k 时:无需 dropout 正则化,直接设为 0 即可。

总结

综合来看,Qwen3-vl-30B-A3B-Instruct作为性能与效率均衡的新一代多模态模型,借助LLaMA-Factory Online平台,通过MedTrinity-25M小数据集的LoRA微调,在医疗多模态场景中展现出显著提升 —— 微调后模型在图像描述精细度、解剖分析专业性及诊断推理严谨性上的进步,不仅验证了 “小数据 + 稀疏激活” 模式在医疗领域落地的可行性与高效性,更为大模型在专业医疗场景的精准应用提供了极具价值的实践范例,凸显了开源模型与轻量化微调方案在垂直领域快速赋能的潜力。