单机多卡(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
、deepspeed
指令启动NativeDDP引擎进行单机多卡分布式训练,具体配置如下所示。
本示例基于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脚本文件,在本地解压下载后的文件,并将
final_smmc_DDP.sh
、smmc_DDP.sh
文件拖拽至LLaMA Factory源码文件夹下。
- 用户需将
smmc_DDP.sh
文件中LLaMA Factory的源码路径修改为实际路径。 - 用户需将
final_smmc_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源码文件夹下。
MLflow准备
MLflow是一款能够覆盖机器学习全流程(从数据准备到模型训练到最终部署)的平台。在本次微调任务中,我们将使用MLflow记录整个微调过程。
在smmc_DDP.sh
文件中安装MLflow的脚本如下所示,脚本所在位置如下图所示。
#mlflow
pip install mlflow psutil pynvml -i https://pypi.tuna.tsinghua.edu.cn/simple/
#系统指标
#pip install pyrsmi #AMD/HIP GPU
#进入llamafactory工作目录
cd /workspace/LLaMA-Factory
#开启系统资源检查
export MLFLOW_ENABLE_SYSTEM_METRICS_LOGGING=true
echo "$(date '+%Y-%m-%d %H:%M:%S') - MLFLOW_ENABLE_SYSTEM_METRICS_LOGGING: $MLFLOW_ENABLE_SYSTEM_METRICS_LOGGING"
#重定向日志输出,替换为您的日志输出目录
#替换部分:/ts-lf/ts-llamafactory/LLaMA-Factory/start-log/mlflow.log
nohup mlflow ui --port 5000 --host 0.0.0.0 > /workspace/LLaMA-Factory/start-log/mlflow.log 2>&1 &
echo "$(date '+%Y-%m-%d %H:%M:%S') - mlflow Server started in background"
操作步骤
完成准备工作后,用户开始进行微调,具体的操作步骤如下所示。
- llamafactory-cli
- torchrun
- accelerate
-
用户在
smmc_DDP.sh
文件中配置llamafactory-cli
方式启动NativeDDP引擎并保存,添加如下所示的脚本,脚本位置如下图所示。FORCE_TORCHRUN=1 llamafactory-cli train examples/train_lora/qwen2.5VL_lora_sccm_DDP.yaml
-
在LLaMA-Factory源码文件夹下配置
llamafactory-cli
训练的启动文件,点击示例文件链接即可下载示例文件,解压后将yaml
文件拖拽至LLaMA-Factory/examples/train_lora
路径下。
- 当用户根据上述文件示例进行配置时,应将
model_name_or_path
修改为实际使用的模型路径。 - 当用户根据上述文件示例进行配置时,应将
dataset
修改为实际使用的数据集名称。
-
在
final_smmc_DDP.sh
文件编辑界面中,右键点击页面的空白处,在弹窗菜单中选择“Run Shell”,如下图所示。 -
跳转到Run Shell配置界面,配置运行任务参数,例如:运行任务所需的环境,选择GPU资源,本示例选择4卡以及外部访问,本示例使用5000端口,具体配置如下所示。
- Advanced处配置外部访问
- Session列表配置外部访问
-
点击展开“Advanced”配置,点击下方的“Add External Access”。新增一个外部访问配置,在输入框中填写5000端口,本示例如下图所示。
-
配置完成后,点击“Submit”按钮,系统创建DEVELOP SESSION运行列表,用户在列表中可以查看运行的会话,示例如图所示。
-
完成环境和GPU资源配置后,单击“提交”按钮,系统将自启动会话。在“运行中(Running)”的会话列表中,右键单击目标会话,选择“Add External Access”操作,示例如下图所示。
-
在页面弹框填写对应的端口号,此处填入5000,示例如下图所示,填写完成后回车即可。
-
等到外部访问状态提示灯变为绿色,点击箭头进行应用访问,弹窗选择打开外部网站,即可通过MLflow查看实验监控图表,涉及图表有:epoch、grad_norm、learning_rate和loss等。
-
用户在
smmc_DDP.sh
文件中配置torchrun
方式启动NativeDDP引擎并保存,添加如下所示的脚本,脚本位置如下图所示。torchrun --standalone --nnodes=1 --nproc-per-node=4 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/sccm_DDP/train_2025-05-15-09-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 4 \
--report_to none -
在
final_smmc_DDP.sh
文件编辑界面中,右键点击页面的空白处,在弹窗菜单中选择“Run Shell”,如下图所示。 -
跳转到Run Shell配置界面,配置运行任务参数,例如:运行任务所需的环境,选择GPU资源,本示例选择4卡以及外部访问,本示例使用5000端口,具体配置如下所示。
- Advanced处配置外部访问
- Session列表配置外部访问
-
点击展开“Advanced”配置,点击下方的“Add External Access”。新增一个外部访问配置,在输入框中填写5000端口,本示例如下图所示。
-
配置完成后,点击“Submit”按钮,系统创建DEVELOP SESSION运行列表,用户在列表中可以查看运行的会话,示例如图所示。
-
完成环境和GPU资源配置后,单击“提交”按钮,系统将自启动会话。在“运行中(Running)”的会话列表中,右键单击目标会话,选择“Add External Access”操作,示例如下图所示。
-
在页面弹框填写对应的端口号,此处填入5000,示例如下图所示,填写完成后回车即可。
-
等到外部访问状态提示灯变为绿色,点击箭头进行应用访问,弹窗选择打开外部网站,即可通过MLflow查看实验监控图表,涉及图表有:epoch、grad_norm、learning_rate和loss等。
-
用户在
smmc_DDP.sh
文件中配置accelerate
方式启动NativeDDP引擎并保存,添加如下所示的脚本,脚本位置如下图所示。accelerate launch \
--config_file /workspace/LLaMA-Factory/examples/accelerate/smmc_config.yaml \
src/train.py examples/train_lora/qwen2.5VL_lora_sccm_DDP.yaml
用户在参照上述配置文件进行操作时,需将脚本中yaml
文件的路径替换为实际的工作目录路径,以确保配置文件能够被正确加载。
-
在LLaMA-Factory源码文件夹下配置
accelerate
训练的启动文件,点击示例文件链接即可下载示例文件,解压后将yaml
文件拖拽至LLaMA-Factory/examples/accelerate
路径下。 -
在
final_smmc_DDP.sh
文件编辑界面中,右键点击页面的空白处,在弹窗菜单中选择“Run Shell”,如下图所示。 -
跳转到Run Shell配置界面,配置运行任务参数,例如:运行任务所需的环境,选择GPU资源,本示例选择4卡以及外部访问,本示例使用5000端口,具体配置如下所示。
- Advanced处配置外部访问
- Session列表配置外部访问
-
点击展开“Advanced”配置,点击下方的“Add External Access”。新增一个外部访问配置,在输入框中填写5000端口,本示例如下图所示。
-
配置完成后,点击“Submit”按钮,系统创建DEVELOP SESSION运行列表,用户在列表中可以查看运行的会话,示例如图所示。
-
完成环境和GPU资源配置后,单击“提交”按钮,系统将自启动会话。在“运行中(Running)”的会话列表中,右键单击目标会话,选择“Add External Access”操作,示例如下图所示。
-
在页面弹框填写对应的端口号,此处填入5000,示例如下图所示,填写完成后回车即可。
-
等到外部访问状态提示灯变为绿色,点击箭头进行应用访问,弹窗选择打开外部网站,即可通过MLflow查看实验监控图表,涉及图表有:epoch、grad_norm、learning_rate和loss等。
总结
基于单机多卡架构的微调方案不仅极大地增强了系统的可扩展性和计算能力,还为工业级应用提供了坚实的基础。通过优化多卡通信(利用NCCL)、负载均衡策略及动态资源分配,该框架减少了分布式训练的调参成本,支持灵活应对不同的模型结构和训练场景。这使得它成为解决大规模多模态深度学习任务的理想选择,助力企业在实际业务中快速部署和应用先进的AI技术。
关于License,请按照LLaMA Factory的版权要求使用,请参考该链接内容。