多机多卡(NativeDDP)
概述
Aladdin(Alaya AI Addin)是由九章云极自主研发的IDE插件,专为大模型开发设计,支持包括VS Code和Cursor在内的多种代码编辑器,用户可通过Aladdin开发工具便捷实现LLaMA Factory的训练、微调。
LLaMA Factory支持分布式训练,能够利用多个计算节点并行处理任务,从而显著提升大规模机器学习模型的训练效率。相比单机训练,分布式训练不仅能大幅缩短训练时间,还能支持更大规模的数据集和更复杂的模型结构。
LLaMA-Factory提供对多种分布式训练引擎的支持,包括:DDP(Distributed Data Parallel)、DeepSpeed以及FSDP(Fully Sharded Data Parallel)。本示例将演示如何在Aladdin平台上使用llamafactory-cli
、torchrun
和accelerate
命令启动Native DDP引擎,进行多机多卡的分布式训练。具体配置如下:
本示例基于Aladdin v2.2.5版本编写,不同版本间操作界面可能存在差异,用户在实际使用时以下载版本的操作界面为准。
前提条件
- 用户已经获取Alaya New企业账户和密码,可点击 进行快速注册。
- 用户已在VS Code/Cursor代码编辑器内安装Aladdin插件, 安装详情可参考安装Aladdin。
准备工作
开通弹性容器集群
本示例开通弹性容器集群的操作步骤如下所示。
-
使用已注册的企业账号登录Alaya NeW系统,选择[产品/弹性容器集群]菜单项,单击“新建集群”按钮,进入[弹性容器集群]配置页面。
-
配置基本信息,例如:集群名称,集群描述,智算中心,此次使用的集群资源配置至少需要满足以下表格中的要求。弹性容器集群参数配置完成后,单击“立即开通”按钮,即可完成弹性容器集群开通操作,用户可在[资源中心/弹性容器集群]页面查看已创建的容器集群,弹性容器集群状态为“运行中”表示集群可正常使用。更多步骤可参考开通弹性容器集群。
配置项 配置需求 说明 GPU H800 * 4 GPU类型为:H800 CPU 8核 内存 32GB 存储 300GB 镜像仓库 100GB 用于保存镜像文件等数据 提示用户需在大容量存储/文件存储下新建PVC MOUNTS的可用文件夹,以确保微调数据的安全存储。
下载模型
LLaMA Factory涉及示例均在Aladdin的Workshop中演示,创建Workshop的操作步骤如下所示。
-
在VS Code扩展菜单栏搜索Aladdin插件,然后安装该插件。安装插件后,点击插件图标,进入插件登录页面,使用已注册的企业账号登录Aladdin。
-
登录完成后,返回工作区,单击
进入新建一个Workshop配置页面,填写参数,示例页面下所示。
- Environment:运行环境选择预置的aladdin/llamafactory公共镜像仓库下的镜像。
- VKS:选择用户已开通的弹性容器集群。
- PVC MOUNTS:挂载的SubPath填写开通弹性容器集群时在文件存储目录下新建的文件夹名称,ContainerPath填写“/workspace”。
-
配置完成后,单击“Submit”,在弹出的新窗口(后文统称远端页面)选择"Linux",远端页面中将自动安装相关插件,待远端页面中出现Remote Aladdin插件图标,Workshop创建操作完成。
-
按
Ctrl+Shift+P
(Windows/Linux),打开命令面板,选择Python: Select Interpreter
,选择下图高亮所示的Python解释器。打开“/workspace/”文件夹,打开后打开终端页面(Terminal)。 -
选择[Terminal/New Terminal]菜单项,进入终端页面,在终端页面执行如下命令设置对应区域的镜像地址,查看区域模型列表。更多模型加速内容请参看模型加速文章所述。
export HF_ENDPOINT=http://hfmirror.mas.zetyun.cn:8082
curl http://hfmirror.mas.zetyun.cn:8082/repos
- 安装huggingface-hub,如下图高亮①所示。
pip install -U huggingface_hub -i [镜像源,例如:https://pypi.tuna.tsinghua.edu.cn/simple等]
- 使用huggingface cli下载模型Qwen/Qwen2.5-VL-7B-Instruct,如上图高亮②所示。
huggingface-cli download --resume-download Qwen/Qwen2.5-VL-7B-Instruct --local-dir /workspace/model/Qwen2.5-VL-7B-Instruct --max-workers=3
LLaMA Factory准备
-
用户创建Workshop时选择的环境中已内置了LLaMA Factory源码,因此在此处将LLaMA Factory源码复制到Workshop挂载目录下即可,复制命令如下所示,示例页面如下图所示。
cp -r [源码目录] /[挂载目录]
- 点击下载Aladdin启动LLaMA Factory脚本文件,在本地解压下载后的文件,并将
mmmc_DDP
文件拖拽至LLaMA Factory源码文件夹下。
用户需将mmmc_DDP.sh
文件中LLaMA Factory的源码路径修改为实际的源码路径。
下载数据集
- 选择[Terminal/New Terminal]菜单项,进入终端页面,在终端页面执行如下命令设置对应区域的镜像地址:
export HF_ENDPOINT=http://hfmirror.mas.zetyun.cn:8082
- 执行上述命令已默认用户已经安装
huggingface-hub
,安装示例代码为pip install -U huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple
。 - 如果用户已经配置了环境变量,可忽略该步骤。
- 执行如下命令下载数据集,示例如下所示,下载后的数据集文件结构如下所示。
huggingface-cli download AlayaNeW/QA_from_CoVLA_zh --repo-type dataset --local-dir ./QA_from_CoVLA_zh
下载后的数据集文件结构如下所示,然后将数据集文件夹拖拽至上步的LLaMA Factory源码文件夹下。
Tensorboard准备
Tensorboard是 TensorFlow 提供的一个强大的可视化工具,主要用于帮助开发者理解和调试机器学习模型的训练过程。它允许用户通过浏览器界面实时查看和分析模型训练期间的各种指标、结构图以及其他相关信息。在本次微调任务中,我们将使用Tensorboard记录整个微调过程。
在mmmc_DDP.sh
文件中安装Tensorboard的脚本如下所示,脚本所在位置如下图所示。
pip install tensorFlow tensorboard tf-keras -i https://pypi.tuna.tsinghua.edu.cn/simple/
操作步骤
完成准备工作后,用户开始进行微调,具体操作步骤如下所示。
- llamafactory-cli
- torchrun
- accelerate
- 在 LLaMA-Factory 源码文件夹下配置
llamafactory-cli
训练的启动配置文件。点击示例文件下载示例文件,解压后将yaml
文件拖拽至LLaMA-Factory/examples/train_lora
路径下。
- 当用户根据上述文件示例进行配置时,应将
model_name_or_path
修改为实际使用的模型路径。 - 当用户根据上述文件示例进行配置时,应将
dataset
修改为实际使用的数据集名称。
-
用户在
mmmc_DDP.sh
文件中配置llamafactory-cli
方式启动Native DDP引擎并保存,添加如下脚本:FORCE_TORCHRUN=1 NNODES=$nnodes NODE_RANK=$node_rank MASTER_ADDR=$master_addr MASTER_PORT=$master_port \
llamafactory-cli train examples/train_lora/qwen2.5VL_lora_mmmc_DDP.yaml
用户在使用过程中,应确保上述配置中yaml
文件的路径及文件名与实际配置保持一致。
-
在
mmmc_DDP.sh
文件编辑界面中,右键点击页面空白处,在弹窗菜单中选择“Run Task”,配置各类参数,例如下图所示。 -
待Pod状态变为"Running"后,可在
qwen2.5VL_lora_mmmc_DDP
文件下获取output_dir
路径 例如:/workspace/LLaMA-Factory/saves/qwen2.5vl-7B/mmmc_DDP/train_2025-05-26-17-04-46-vks-tensorboard
,将以下命令中的[输出目录路径]
替换为实际路径。tensorboard --logdir=[输出目录路径]/runs --port=6006 --host=localhost
-
在Terminal页面运行上述命令后,根据系统弹出的提示进行操作,例如下图所示,选择在浏览器中打开。
-
用户在
mmmc_DDP.sh
文件中配置torchrun
方式启动Native DDP引擎并保存,添加如下脚本:torchrun --master_port $master_port --nproc_per_node=$nproc_per_node --nnodes=$nnodes --node_rank=$node_rank \
--master_addr=$master_addr src/train.py \
--stage sft \
--model_name_or_path /dev/shm/llamafactory/model/Qwen2.5-VL-7B-Instruct \
--do_train \
--dataset 4000_llamafactory_zh_split \
--template qwen2_vl \
--finetuning_type lora \
--lora_rank 8 \
--lora_alpha 16 \
--output_dir saves/qwen2.5vl-7B/mmmc_DDP/train_2025-05-20-19-01-34 \
--overwrite_cache \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 5 \
--save_steps 100 \
--learning_rate 1e-4 \
--num_train_epochs 10.0 \
--plot_loss \
--bf16 \
--cutoff_len 2048 \
--preprocessing_num_workers 16 \
--dataloader_num_workers 12 \
--report_to none \
--ddp_find_unused_parameters false -
在
mmmc_DDP.sh
文件编辑界面中,右键点击页面空白处,在弹窗菜单中选择“Run Task”,进入任务参数配置页面,根据页面提示配置各类参数,例如下图所示。 -
待Pod状态变为"Running"后,运行如下命令,输出路径填写
mmmc_DDP.sh
启动文件中的output_dir
,例如:saves/qwen2.5vl-7B/mmmc_DDP/train_2025-05-20-19-01-34 \
。tensorboard --logdir=[输出目录路径]/runs --port=6006 --host=localhost
请将命令中的 [输出目录路径]
替换为实际输出路径。
-
在Terminal页面运行上述命令后,根据系统弹出的提示进行操作,例如下图所示,选择在浏览器中打开。
-
在LLaMA-Factory源码文件夹下配置
accelerate
训练的启动配置文件,点击示例文件1下载加速器配置文件,解压后将yaml
文件拖拽至LLaMA-Factory/examples/accelerate
路径下。 -
点击示例文件2链接即可下载示例文件,解压后将
yaml
文件拖拽至LLaMA-Factory/examples/train_lora
路径下。 -
用户在
mmmc_DDP.sh
文件中配置accelerate
方式启动Native DDP引擎并保存,添加如下脚本:accelerate launch \
--config_file /workspace/LLaMA-Factory/examples/accelerate/accelerate_mmmc.yaml \
--main_process_ip $master_addr \
--main_process_port $master_port \
--machine_rank $node_rank \
/workspace/LLaMA-Factory/src/train.py examples/train_lora/qwen2.5VL_lora_mmmc_DDP_ACC.yaml
用户在使用过程中,应确保上述配置中yaml
文件的路径及文件名与实际配置保持一致。
-
在
mmmc_DDP.sh
文件编辑界面中,右键点击页面空白处,在弹窗菜单中选择“Run Task”,进入任务参数配置页面,根据页面提示配置各类参数,例如下图所示。 -
待Pod状态为"Running"后,进入LLaMA-Factory源码目录下的
saves
文件夹,找到要查看的输出目录,如下图所示。具体路径可在“示例文件2”的output_dir
处查看,例如:/workspace/LLaMA-Factory/saves/qwen2.5vl-7B/mmmc_DDP/train_2025-05-26-17-04-46-vks-tensorboard
。将命令中的[输出目录路径]
替换为实际路径。tensorboard --logdir=[输出目录路径]/runs --port=6006 --host=localhost
-
在TensorBoard实验监控页面可查看对应的图表,涉及的图表包括:epoch、grad_norm、learning_rate和loss等,例如下图所示。
切换至VS Code,找到“Running”的Task,右键选择“Monitor”,即可查看worker1/worker2的系统资源监控图表,涉及图表包括:CPU、MEM、GPU Usage Rate以及GPU Memory Clock等,例如下图所示。
总结
基于多机多卡架构的微调方案不仅极大地增强了系统的可扩展性和计算能力,还为工业级应用提供了坚实的基础。通过优化多卡通信(利用NCCL)、负载均衡策略及动态资源分配,该框架减少了分布式训练的调参成本,支持灵活应对不同的模型结构和训练场景。这使得它成为解决大规模多模态深度学习任务的理想选择,助力企业在实际业务中快速部署和应用先进的AI技术。
关于License,请按照LLaMA Factory的版权要求使用,请参考该链接内容。