Skip to content

最佳实践

一、基于Notebook在线构建分布式训练镜像

  1. 登录超算互联网https://www.scnet.cn个人账号,点击右上角【控制台】。 alt text
  2. 点击快捷入口中的【Notebook】,进入创建Notebook页面 alt text
  3. 选择区域、异构加速卡AI-64GB,点击【基础镜像】 alt text
  4. 在列表中选择 PyTorch-2.10-py3.10-ubuntu22.04-dtk24.04.2 版本的镜像,点击【创建】 alt text
  5. 创建成功后,点击【jupyterLab】进入Notebook页面 alt text
  6. 进入终端,安装依赖 alt text 复制下面的代码,进行依赖安装
shell
  pip install git+https://github.com/huggingface/diffusers

alt text

  1. 准备训练脚本,将下面的两个脚本放到 /root 文件夹下,如图所示

train_text_to_image_lora.py 下载
vjacc.yaml 下载

alt text

  1. 保存镜像,返回 notebook 页面,点击右侧按钮,点击【保存镜像】,并修改名称,点击【确认】,开始保存镜像>。

注意:保存镜像过程中,容器必须保持运行状态
alt textalt textalt text 9. 可以在【我的镜像】模块,查看到已经保存好的镜像,接下来我们将使用这个保存好的镜像,创建多机多卡分布式训练任务 alt text

二、准备训练材料(模型和数据集)

这里使用的是stable-diffusion-v1.4模型和Tuxemon数据集,有2种获取方式( AI社区 和 应用商城),具体获取说明如下:

  1. AI社区获取方式(AI社区目前公测中,敬请期待)
  • stable-diffusion-v1-4(模型):模型链接
    1. 点击上面的链接进入模型界面,点击【克隆/下载】按钮,选择【克隆至控制台】,选择克隆至【昆山】区域 alt textalt text
    2. 点击【前往控制台-模型详情查看】或者导航栏的【模型管理】按钮,点击【stable-diffusion-v1-4】 alt textalt text
    3. 根据存储路径,复制该路径,作为挂载前的路径,所需要的预训练权重文件均在 models 文件夹下,需要将 models 文件夹下所有文件挂载到 /root/stable-diffusion-v1-4 下。 alt text源路径:/public/home/{user_name}/SothisAI/model/Aihub/stable-diffusion-v1-4/main/stable-diffusion-v1-4/models
      挂载路径:/root/stable-diffusion-v1-4
  • Tuxemon(数据集):数据集下载
    1. 点击上面的链接进入模型界面,点击【克隆/下载】按钮,选择【克隆至控制台】,选择克隆至【昆山】区域 alt text
    2. 点击导航栏的【数据管理】按钮,点击【Tuxemon】 alt text
    3. 根据存储路径,复制该路径,作为挂载前的路径 alt text源路径:/public/home/{user_name}/SothisAI/dataset/Aihub/Tuxemon/main/Tuxemon
      挂载路径:/root/Tuxemon/train
  1. 应用商城获取方式
  • stable-diffusion-v1.4(模型):模型链接
    1. 点击上面的链接进入模型界面,阅读并同意服务协议,点击【立即使用】按钮,会跳转到【订单详情】页面 alt text
    2. 点击【去使用】,跳转到商品详情界面 alt text
    3. 点击【下载到区域】,将模型包文件下载到用户的家目录,并等待下载完成 alt textalt textalt text
    4. 点击右上的【文件管理】,在家目录找到压缩包,点击最右侧按钮【在命令行中打开】 alt text
    5. 解压软件包,解压完成后就得到了微调的预训练模型 alt text源路径:/public/home/{user_name}/stable-diffusion-v1-4
      挂载路径:/root/stable-diffusion-v1-4
  • Tuxemon(数据集):数据集链接
    1. 点击上面的链接进入数据集界面,阅读并同意服务协议,点击【立即使用】按钮,会跳转到【订单详情】页面 alt text
    2. 点击【去使用】,跳转到商品详情界面 alt text
    3. 点击【下载到区域】,将模型包文件下载到用户的家目录,并等待下载完成 alt textalt text
    4. 点击右上的【文件管理】,在家目录找到压缩包,点击最右侧按钮【在命令行中打开】 alt text
    5. 解压软件包,解压完成后就得到了微调的数据集 alt text源路径:/public/home/{user_name}/Tuxemon
      挂载路径:/root/Tuxemon/train

三、创建多机多卡分布式训练任务

  1. 在超算互联网首页点击右上角“控制台”。 alt text
  2. 点击服务导航中的【人工智能】,进入服务。 alt text
  3. 选择【模型训练】,点击【创建任务】按钮。 alt text 在此示例中,是选择昆山区域的【异构加速卡AI-64GB】,【每实例加速卡数量】处选择1,【实例数】选择2,代表使用两个容器,每个容器中一张加速卡,点击【我的镜像】,在列表中选择示例镜像 stable-diffusion-v1-4:pytorch2.1.0-dtk24.04-py3.10-ddp, 启动脚本为:
shell
accelerate launch \
    --config_file /root/vjacc.yaml \
    --main_process_ip $MASTER_ADDR \
    --main_process_port $MASTER_PORT \
    --machine_rank $RANK \
    --num_processes 2 \
    --num_machines 2 \
    /root/train_text_to_image_lora.py \
    --pretrained_model_name_or_path="/root/stable-diffusion-v1-4" \
    --dataset_name="/root/Tuxemon" \
    --resolution=1024 --center_crop --random_flip \
    --train_batch_size=1 \
    --dataloader_num_workers=8 \
    --mixed_precision="fp16" \
    --max_train_steps=100 \
    --num_train_epochs=1 \
    --learning_rate=1e-05 \
    --max_grad_norm=1 \
    --lr_scheduler="constant" --lr_warmup_steps=0 \
    --output_dir="/root/private_data/sd-lora-model"
    

# 参数解释
--main_process_ip $MASTER_ADDR   分布式训练的主节点IP地址,$MASTER_ADDR 为平台自动填充,无需更改
--main_process_port $MASTER_PORT 分布式训练的主节点端口号,$MASTER_PORT 为平台自动填充,无需更改
--machine_rank $RANK             分布式训练节点的排序,$RANK 为平台自动填充,无需更改

其他参数解释:

shell
accelerate launch \
    --config_file /root/vjacc.yaml \ 
    --main_process_ip localhost \  # 多机训练时的主节点ip
    --main_process_port 1234 \     # 多机训练时的主节点端口号
    --machine_rank 0 \             # 当前主机的序号
    --num_processes 1 \            # 训练机器数 * 每个机器上的加速卡数
    --num_machines 1 \             # 训练机器数
    /root/train_text_to_image_lora.py \  # 脚本文件
    --pretrained_model_name_or_path="your_pretrained_model_path" \  # 预训练模型权重文件的存放位置
    --dataset_name="your_dataset_path" \  # 数据集位置,可以参考给出的示例数据集准备您自己的数据集
    --resolution=1024 --center_crop --random_flip \
    --train_batch_size=1 \
    --dataloader_num_workers=8 \
    --mixed_precision="fp16" \
    --max_train_steps=100 \
    --num_train_epochs=1 \
    --learning_rate=1e-05 \
    --max_grad_norm=1 \
    --lr_scheduler="constant" --lr_warmup_steps=0 \
    --output_dir="your_lora_model_path"   # lora 微调后模型权重存放位置

其中,
--pretrained_model_name_or_path #填写模型的路径;
--dataset_name #填写数据集的路径;
--output_dir #填写训练完成后模型存储的位置,您可以将微调后模型权重存放在预训练模型stable-diffusion-v1-4的同级文件夹内,例如:
AI社区下载的预训练权重路径:/public/home/{user_name}/SothisAI/model/Aihub/stable-diffusion-v1-4/main/stable-diffusion-v1-4/models
应用商城下载的预训练权重路径:/public/home/{user_name}/stable-diffusion-v1-4

  1. 设置挂载目录:此示例中,将stable-diffusion-v1.4的模型文件挂载到/root/stable-diffusion-v1.4下; 将用于训练的相应数据集文件挂载到/root/Tuxemon/train下; 对应目录在第二章节获取。
  2. 随后点击创建(上述所有参数设置完全后,完整截图如下) alt text至此,多机多卡分布式训练任务创建完毕,接下来就可以运行此任务了。

四、运行多机多卡分布式训练任务

  1. 创建成功后可以在【模型训练】列表看到我们创建的具体任务(如下图所示,此实例在 "运行中" 状态) alt text
  2. 查看实例详情:点击作业实例名称,在右下角的【实例列表】中,点击【操作】栏的【日志】,可以查看当前模型训练的日志内容。 alt text由上图可知,此训练示例有2个实例,分别为 'worker0' 和 'worker1',具体运行情况如下:
    这是 'worker0' 实例运行详情截图(说明'worker0'在正常运行): alt text 这是 'worker1' 实例运行详情截图(说明'worker1'在正常运行): alt text
  3. 点击作业实例名称,点击右下角的【监控详情】,可以查看当前模型训练的加速卡利用率、CPU利用率、网络速率等信息。 alt textalt text
  4. 上述任务训练完成后,可以在创建的实例列表中看到具体实例处于 "完成" 状态,具体截图如下:
    alt text
  5. 此时可根据我们之前设置的模型输出目录查看训练完成后的模型文件。
    这个示例的输出目录为 --output_dir="/root/private_data/sd-lora-model" ,对应到用户家目录为 /ai/home/${username}/sd-lora-model,具体截图如下:
    alt text以上,我们就完成了在 超算平台-模型训练模块 提交多机多卡训练任务的完整流程。

注:本篇实践是以stable-diffusion-v1.4模型为例,使用超算平台-模型训练模块相关功能进行分布式模型训练任务,旨在描述平台模型训练模块的功能使用情况,若扩展至其他模型或场景,可根据需要调整相应镜像、模型、数据集及运行脚本即可。希望本篇实践案例内容能为您提供一些指导和建议。