ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 Axolotl 微调 GLM-4.6V 视觉语言模型:QLoRA 与 DDP 实战指南

使用 Axolotl 微调 GLM-4.6V 视觉语言模型:QLoRA 与 DDP 实战指南 使用 Axolotl 微调 GLM-4.6V 视觉语言模型QLoRA 与 DDP 实战指南【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotlGLM-4.6V 是智谱 AIZhipuAI发布的视觉语言模型VLM家族包含全量版 GLM-4.6V106B MoE与更快的 GLM-4.6V-Flash9B两个变体。本文基于 Axolotl 仓库中的官方示例讲解如何用 Axolotl 对 GLM-4.6V 进行视觉语言任务的微调涵盖环境准备、QLoRA 配置逐项解析、多卡 DDP 变体、多模态数据集格式与底层处理策略原理读完后你将能直接复制配置跑通 GLM-4.6V-Flash 的微调训练并能独立改造为全量微调或自定义数据集。GLM-4.6V 模型族概览GLM-4.6V 是面向视觉语言任务的模型系列Axolotl 对其两个变体均提供开箱即用的支持模型参数量模型 ID定位GLM-4.6V106BMoEzai-org/GLM-4.6V完整视觉语言模型GLM-4.6V-Flash9Bzai-org/GLM-4.6V-Flash更快、资源占用更低的变体在多模态支持文档 docs/multimodal.qmd 中GLM-4.6V 与 GLM-4.6V-Flash 均被列为受支持模型只需在配置中切换base_model即可。仓库中提供的两份示例配置均以 9B 的 Flash 变体为主适合单卡或少量显卡即可开展实验。环境准备按官方安装指南从源码安装 Axolotl即 edge 构建方式确保拿到包含最新模型支持的版本。随后安装Cut Cross Entropy扩展以减少训练显存占用。Cut Cross Entropy 是 Axolotl 的可选集成之一仓库中其集成说明位于 src/axolotl/integrations/cut_cross_entropy/README.md从该文件的集成矩阵可以看到glm46v已在受支持架构之列。它通过自研的截断交叉熵 kernel 显著降低语言模型头部的显存与计算开销对 9B 以上的视觉语言模型训练尤其有价值。提示多模态模型涉及图像处理通常还需要安装torchvision等视觉依赖部分模型家族还会要求timm、librosa等具体以所选模型的官方要求为准。快速开始运行 QLoRA 微调环境就绪后直接使用仓库自带的示例配置启动训练axolotl train examples/glm46v/glm-4-6v-flash-qlora.yaml该命令读取 examples/glm46v/glm-4-6v-flash-qlora.yaml对 GLM-4.6V-Flash 进行 4-bit 量化的 QLoRA 微调。训练输出保存在./outputs/glm-4-6v-flash-qlora目录。核心配置逐项解析以下完整剖析示例配置中每一组关键参数的作用与取值考量。模型与处理器加载base_model: zai-org/GLM-4.6V-Flash trust_remote_code: true processor_type: AutoProcessor load_in_4bit: truebase_modelHugging Face 上的模型标识切换为zai-org/GLM-4.6V即可微调 106B MoE 全量版。trust_remote_code: trueGLM 系列依赖远程代码执行来加载自定义模型结构与处理器必须开启。processor_type: AutoProcessor多模态模型统一使用 AutoProcessor 来同时处理文本与图像输入这是多模态微调的标准配置见 docs/multimodal.qmd。load_in_4bit: true以 4-bit 量化加载基础模型配合 QLoRA 大幅降低显存需求。多模态必须保留的三行配置# these 3 lines are needed for now to handle vision chat templates w images skip_prepare_dataset: true remove_unused_columns: false sample_packing: false这是当前阶段处理「带图像的视觉对话模板」所必需的三个开关注释明确说明了其用途skip_prepare_dataset: true跳过数据集预准备阶段让图像等非文本列保持原样进入训练管线。从 Axolotl 的数据集准备逻辑看该开关会绕过多模态数据集中图像预处理的复杂环节。remove_unused_columns: false保留数据集中未被直接消费的列。正如 docs/multimodal.qmd 所解释这些列在训练期间处理图像嵌入时仍然需要不能按文本训练的默认行为删除。sample_packing: false多模态暂不支持样本打包sample packing必须关闭。文档明确指出这是多模态训练的当前限制。LoRA 适配器配置adapter: qlora lora_r: 16 lora_alpha: 32 lora_dropout: 0.05 lora_target_modules: - gate_proj - down_proj - up_proj - q_proj - v_proj - k_proj - o_projadapter: qlora使用 QLoRA即对 4-bit 量化基座施加 LoRA 低秩适配。lora_r: 16、lora_alpha: 32、lora_dropout: 0.05标准低秩与缩放配置alpha 为 r 的两倍。lora_target_modules覆盖了注意力的q_proj/k_proj/v_proj/o_proj与 MLP 的gate_proj/up_proj/down_proj即对语言模型部分的全部线性投影注入 LoRA而视觉塔vision tower保持冻结。训练超参数sequence_len: 2048 gradient_accumulation_steps: 4 micro_batch_size: 1 num_epochs: 1 optimizer: adamw_8bit lr_scheduler: cosine learning_rate: 0.0002 bf16: auto tf32: false gradient_checkpointing: true logging_steps: 1 attn_implementation: sdpa warmup_ratio: 0.1 evals_per_epoch: 0 saves_per_epoch: 1 weight_decay: 0.0micro_batch_size: 1搭配gradient_accumulation_steps: 4单卡小 batch、多步累积适配视觉模型的高显存占用。optimizer: adamw_8bit8-bit AdamW 优化器进一步节省优化器状态显存。lr_scheduler: cosine与learning_rate: 0.0002余弦退火调度0.0002 是 QLoRA 微调的常见初始学习率。bf16: auto自动启用 BF16 混合精度tf32: false显式关闭 TF32。gradient_checkpointing: true以少量计算换显存是 9B 级模型单卡训练的关键。attn_implementation: sdpa使用 PyTorch 原生的 SDPA 注意力实现避免依赖可选的 flash-attn 编译。warmup_ratio: 0.110% 的训练步数用于学习率预热。evals_per_epoch: 0单轮训练不额外安排验证saves_per_epoch: 1每个 epoch 保存一次 checkpoint。数据集配置datasets: - path: HuggingFaceH4/llava-instruct-mix-vsft type: chat_template split: train[:1%]示例默认使用HuggingFaceH4/llava-instruct-mix-vsft视觉指令数据集type: chat_template表示按对话模板格式解析split: train[:1%]只取 1% 数据用于快速跑通流程。替换为自己的数据集时需遵循下文的多模态数据集格式。多卡 DDP 变体仓库还提供了多卡版本 examples/glm46v/glm-4-6v-flash-ddp.yaml与单卡 QLoRA 配置相比仅有两点差异ddp_find_unused_parameters: trueDDP 训练中部分视觉参数未参与梯度计算必须开启ddp_find_unused_parameters: true以避免梯度同步报错这与 docs/multimodal.qmd 中针对 Gemma 4 的 DDP 说明思路一致——冻结视觉模块时需显式处理未使用参数。gradient_checkpointing_kwargs: use_reentrant: falseDDP 变体额外显式指定use_reentrant: false的梯度检查点实现避免与 DDP 包装器产生兼容性问题。其余模型、LoRA 与训练超参完全一致方便在单卡与多卡之间平滑切换。多模态数据集格式视觉语言任务的微调数据集遵循 docs/multimodal.qmd 定义的扩展chat_template格式其风格类似 OpenAI 的 Message 结构一条消息由role与content组成role可为system、user、assistant等content是一个元素列表每个元素包含type键与对应内容type支持text、image、path、url、base64等。图像内容可通过以下任一键加载path: /path/to/image.jpg— 本地路径url: https://example.com/image.jpg— 远程 URLbase64: ...— Base64 编码数据image: PIL.Image— 已加载的 PIL 图像对象标准的多模态样本示例如下[ { messages: [ { role: system, content: [ {type: text, text: You are a helpful assistant.} ] }, { role: user, content: [ {type: image, url: https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/bee.jpg}, {type: text, text: Describe this image in detail.} ] }, { role: assistant, content: [ {type: text, text: The image is a bee.} ] } ] } ]需要注意的兼容性约定推荐列名是messages若上游数据使用其他列名如conversations、dialogue可在数据集配置中通过field_messages: your_column重命名映射但内部结构必须仍是role/content或 ShareGPT 的from/value格式若数据集自带images或image列list[Image]会自动追加到第一条content中成为{type: image, image: ...}若content是纯字符串会自动转换为type: text元素遇到PIL.UnidentifiedImageError时通常是url拼写错误或图片服务器屏蔽了请求需检查 URL 可访问性。切换为全量微调示例的 Tips 部分明确指出只需从配置中删除adapter: qlora与load_in_4bit: true两行即可将 QLoRA 升级为全量微调FFT。这意味着同一份配置可以快速在不同训练预算间切换QLoRA4-bit 量化 LoRA 适配显存友好适合单卡快速验证全量微调更新全部参数效果上限更高但显存与算力需求显著增加建议使用多卡 DDP即上文 ddp 配置并移除这两行。从源码看adapter与load_in_4bit均属 Axolotl 配置模式中的标准字段src/axolotl/utils/schemas/config.py删除后加载与训练路径会自动切换为全参模式。底层原理GLM-4.6V 的处理策略Axolotl 在 src/axolotl/processing_strategies.py 中为 GLM-4.6V 提供了专门的标签处理策略Glm4vProcessingStrategy。其类注释说明该策略被Glm4vProcessorGLM-4V / GLM-4.1V与Glm46VProcessorGLM-4.6V / GLM-4.7V共用因为它们的媒体 token 标记完全一致。该策略的核心工作包括媒体 token 识别定义并解析图像/视频的成对标记|image|、|begin_of_image|、|end_of_image|以及|video|、|begin_of_video|、|end_of_video|并转换为对应 token id标签掩码process_labels在常规的非助手角色掩码基础上进一步将上述全部媒体 token 的位置掩码为-100确保损失只在真实文本 token 上计算媒体占位符不参与学习策略路由在 get_processing_strategy 中通过懒加载检测Glm46VProcessor实例命中后自动返回该策略无需用户手动指定。这也解释了为什么示例配置要求remove_unused_columns: false图像嵌入相关的列必须在训练管线中保留媒体 token 的掩码逻辑才能正确工作。性能与显存优化建议对于 GLM-4.6V 这类大参数视觉语言模型Axolotl 的优化文档见仓库 docs/optimizations.qmd提供了可进一步叠加的优化手段结合上文配置可考虑Cut Cross Entropy如环境准备所述安装后能明显降低 LM Head 的显存开销官方示例将 src/axolotl/integrations/cut_cross_entropy/README.md 中glm46v列入支持矩阵梯度检查点示例已默认开启gradient_checkpointing: true8-bit 优化器示例已默认使用adamw_8bit注意力实现示例使用sdpa避免 flash-attn 的编译负担若环境支持且追求更高吞吐可评估切换注意力实现从源码与测试看Axolotl 对注意力实现的兼容性有专门测试覆盖如 tests/monkeypatch/test_flash_attn_4.py。总结Axolotl 为 GLM-4.6V 视觉语言模型家族提供了开箱即用的微调支持通过 examples/glm46v/glm-4-6v-flash-qlora.yaml 一条命令即可完成 9B Flash 变体的 QLoRA 微调通过 examples/glm46v/glm-4-6v-flash-ddp.yaml 可平滑扩展到多卡 DDP删除adapter与load_in_4bit两行即可切换全量微调底层由Glm4vProcessingStrategy统一处理媒体 token 的标签掩码。配合多模态数据集格式规范你可以轻松替换为自有视觉指令数据在单卡到多卡的不同预算下开展视觉语言任务的微调实验。【免费下载链接】axolotlGo ahead and axolotl questions项目地址: https://gitcode.com/GitHub_Trending/ax/axolotl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表