更新时间:2024-10-30 GMT+08:00
分享

训练任务

Octopus平台为用户提供训练任务管理(支持分布式训练),任务实时日志,产物(模型)管理等多种功能。

创建训练任务

  1. 在左侧菜单栏中单击“训练服务 > 训练任务”。
  2. 单击“新建训练任务”,填写基本信息。

    图1 新建训练任务
    • 名称:任务组名称,包含中英文、数字、“_”“-”,不得超过32个字符。
    • 描述:简要描述任务,不包含“@^\#$%&*<>'|"/”,不得超过256个字符。
    • 资源规格:当前项目中可用的资源规格。
    • 优先级:设定任务的优先级,数值取[-50,50]的整数,数字越大,优先级越高。
    • 计算节点:用于运行训练任务的训练节点个数。
    • 上传模型节点:选择用特定节点上传训练模型,默认使用node-0(主节点)作为上传产物节点。

  3. 选择算法。

    图2 选择算法
    • 训练算法:根据业务所需选择算法,自定义算法需提前在“训练服务 > 算法管理”中创建成功。
    • 参数列表:由算法携带,可修改参数值。
    • 环境变量:由算法携带,可修改参数值。

  4. 选择需要归档的模型仓库。

    模型仓库需提前在“数据资产 > 模型管理”中创建成功。

    图3 常规训练
    • 常规训练:基于数据集和用户算法训练新模型。
    图4 增量训练
    • 增量训练:基于用户导入的模型或已完成训练模型版本(可通过${MODEL}获取该模型版本的文件路径)和新数据集使用选择的算法再次进行训练,生成精度更高的新模型。同常规训练不同的是需要额外选择输入模型和版本。

  5. 选择数据集。

    用户从数据资产中的数据集和数据缓存中选择数据集,最多支持添加5个数据集。

    图5 选择数据集

  6. 单击“创建”,在任务列表或分组可查看新建训练任务。

训练任务相关操作

在“训练任务”列表,可对训练任务进行以下操作:

表1 训练任务相关操作

任务

操作步骤

查找任务

在搜索输入框中输入搜索条件,按回车键即可查询。

查看任务详情

单击任务名称,可在任务详情页查看该任务详情、参数信息、任务日志和资源占用情况。

  • 任务详情:任务ID、名称、描述、状态、资源规格等信息。
  • 参数详情:训练算法参数以及环境变量信息。
  • 任务日志:任务运行过程中生成的日志信息,详情请查看训练任务日志查看和下载
  • 资源占用情况:显示任务占用的CPU、内存、GPU(显存)利用率、占用率等指标百分比折线图,详情请查看资源占用情况

删除任务

  • 单击操作栏的“删除”,删除单个任务。
  • 勾选多个任务,单击列表上方的“删除”,可批量删除任务。

重建任务

单击操作栏内的“重建”,输入新任务名称(“任务组名-自定义名称”)和“删除原任务”选项,重建任务时可调整训练参数,如资源规格、训练数据集、参数列表和模型仓库。

停止任务

对于运行中、等待中的任务,用户可以单击操作栏的“停止”终止任务。

训练任务相关操作与任务所处状态约束关系请见下表:
表2 训练任务相关操作与任务所处状态约束

作业状态

重建

删除

停止

排队中

-

提交中

-

-

-

提交失败

-

运行中

-

-

运行异常

-

已完成

-

停止中

-

-

-

停止失败

-

-

已停止

-

删除中

-

-

-

删除失败

-

-

分布式训练任务

八爪鱼自动驾驶平台的多机分布式训练功能可以帮助用户加快模型训练速度,提高训练效率,并支持更大规模的深度学习任务。通过多机分布式训练,用户可以将训练任务分配到多台计算机或服务器上并行进行,充分利用硬件资源,加快模型收敛速度,提高训练效果。平台支持多种深度学习框架,如TensorFlow、PyTorch等,并提供简单易用的界面和工具,帮助用户轻松配置和管理多机分布式训练任务。用户可以根据实际需求选择合适的节点数和GPU卡数,灵活调整训练环境,实现高效的分布式训练。

八爪鱼自动驾驶平台支持多种规格,用户可根据当前底座资源选择对应加速卡节点。同时,支持用户自定义资源规格,一般而言,通用训练用途下,推荐使用8机8卡(共计64卡)规模训练中小型或部分大模型,CPU和内存可酌情设置。

八爪鱼训练任务中使用分布式训练时,需在算法中使用平台注入的环境变量用于启动分布式进程通信,可参照如下:

表3 分布式训练算法参数适配环境变量表

名称

说明

示例

VC_WORKER_HOSTS

工作节点HOSTS,当节点大于1时,多个节点由“,”分割,请参考下述使用示例分割出主节点地址

modelarts-job-xxxx-worker-0.xxxx

VC_WORKER_PORT

主节点通信端口,用户可从环境变量获取

31284

MA_NUM_HOSTS

计算节点数量

8

MA_NUM_GPUS

计算节点的GPU数量,当前支持1/2/4/8卡训练

8

VC_TASK_INDEX

当前节点编号,从0开始

0

参考示例脚本:

# -*- coding: UTF-8 -*-
# Copyright (c) Huawei Technologies Co., Ltd. 2012-2024. All rights reserved.
import argparse
import os
import subprocess
import time
import sys
import torch


print(torch.cuda.is_available())

MASTER_HOST = os.getenv("VC_WORKER_HOSTS")
MASTER_ADDR = MASTER_HOST.split(",")[0]
MASTER_PORT = os.getenv("VC_WORKER_PORT", "6006")
NNODES = os.getenv("MA_NUM_HOSTS")
NODE_RANK=os.getenv("VC_TASK_INDEX")
NGPUS_PER_NODE = os.getenv("MA_NUM_GPUS")

if not NGPUS_PER_NODE:
    NGPUS_PER_NODE = "1"

print("MASTER_HOST: " + MASTER_HOST)
print("MASTER_ADDR: " + MASTER_ADDR)
print("MASTER_PORT: " + MASTER_PORT)
print("NNODES: " + NNODES)
print("NODE_RANK: " + NODE_RANK)
print("NGPUS_PER_NODE: " + NGPUS_PER_NODE)

if int(NNODES) <= 1:
    if int(NGPUS_PER_NODE) > 1:
        print("multi-gpus training.")
        command = "python -m torch.distributed.launch"
        command += " --nproc_per_node=" + str(NGPUS_PER_NODE)
        command += " " + os.path.split(os.path.realpath(__file__))[0] + "/Main.py"
    else:
        print("single-gpu training.")
        command = "python -u " + os.path.split(os.path.realpath(__file__))[0] + "/Main.py"
else:
    print("multi-machies training.")
    command = "python -u -m torch.distributed.launch"
    command += " --nproc_per_node=" + str(NGPUS_PER_NODE)
    command += " --nnodes=" + str(NNODES)
    command += " --node_rank=" + str(NODE_RANK)
    command += " --master_addr=" + str(MASTER_ADDR)
    command += " --master_port=" + str(MASTER_PORT)
    command += " " + os.path.split(os.path.realpath(__file__))[0] + "/Main.py"

user_args = " " + " ".join(sys.argv[1:])
command += user_args

print(command)

start = time.time()
process = subprocess.Popen(command, shell=True)
end = time.time()
process.wait()
print("training time:" + str(end - start))

message = process.returncode
print("training message:" + str(message))
sys.exit(message)

训练任务日志查看和下载

训练任务运行的过程中生成日志,训练任务模块提供了日志的查看以及下载功能,支持用户查看训练任务的运行情况。CCE平台训练任务生成的日志文件有以下四种:

  • train-{id}-{index}.log:用户实际训练任务的训练日志。
  • train-{id}-{index}-init.log:Octopus平台提供的前置数据的准备日志。
  • train-{id}-{index}-sidecar.log:Octopus平台提供的任务流程控制日志,包括日志同步、结果上传。
  • octopus-train-{id}-{index}-supplemental.logs: Octopus平台任务异常退出或停止产生的错误信息输出日志,运行正常时不产生该日志。

    {id}为该训练任务ID,{index}为节点编号,例如单节点single-0,多节点distributed-0 distributed-1。

详情页,单击“任务日志”,可查看该训练任务日志详情。支持在线浏览或下载至本地。如果日志较多,用户可在搜索框中输入关键字,查找指定日志内容。

在日志服务页面中的日志列表部分详细展示了该训练任务包含的日志文件的大小以及最新写入时间。单击文件后的“查看”,算法训练的详细执行过程会在日志详情部分展示。用户也可在日志文件后的“操作”栏中,单击“下载”,即可将该日志文件下载到本地查看。

图6 CCE日志视图
图7 ModelArts日志视图

资源占用情况

在任务运行中,资源占用情况模块显示任务占用的CPU、内存、GPU/显存利用率、占用率百分比的折线图。默认显示CPU占用情况折线图。

图8 资源占用情况
  • 双击任一图例:显示全部资源占用折线图。
  • 单击指定图例:只显示该图例折线图。

此模块也可显示多个计算节点运行任务时,资源占用的情况。

  • 如果选择2个计算节点运行任务,则可选择查看单个节点资源占用情况。
  • 如果1个计算节点上存在多张GPU,则会显示所有GPU占用情况。
    资源占用情况功能模块,需要用户在制作自定义镜像时安装psutil与pynvml,参考命令如下:
    pip install psutil pynvml

    如果未安装psutil与pynvml,则页面无法显示资源使用状况。

相关文档