前提条件
- 作业投递的队列状态为“运行中”。
- 队列配额充足。
操作步骤
参数 | 说明 |
---|---|
作业名称 | 输入作业名称。要求如下:长度范围为4~25个字符。名称由小写字母、数字、中划线(-)组成。以小写字母开头。 以小写字母或数字结尾。 |
作业类型 | 作业类型支持分布式训练和虚机。 |
队列 | 选择队列,如果还未创建队列,可单击“创建队列”创建。 |
任务组件 | 可将任务用鼠标拖动至画布中,任务间可以连线串起来,组成一个有向无环图(DAG) |
- 拖拽作业任务至画布中,用连线组成一个有向无环图(DAG)
-
在画布中,双击任务名称,编辑任务:
-
编辑完成后,单击“确定创建”,完成作业创建。
通用任务参数-容器配置
通用参数-容器配置用于容器创建的相关参数,是OpenMPI,TensorFlow,PaddlePaddle,Pytorch,Container-Job任务都具备的任务参数,具体参数如下:
模块
参数名
说明
是否可选
基本信息
镜像名称
镜像的地址,可以手动填写第三方镜像,也可以选择存储在天翼云的镜像
必填
容器规格
选择运行时容器的资源规格,请根据具体训练任务选择合适的资源配置,避免任务因为资源不足而失败(内存和显存是不可压缩资源,重点关注)
必填
生命周期
启动命令
容器启动后要执行的命令,分为启动命令和运行参数,系统会自动将启动命令和运行参数拼接为具体执行的参数。ls -la命令的正确填入姿势为:命令填入“ls”,参数处填入“-la”
非必填
启动后处理
用于执行启动后的一些脚本,执行顺序在容器创建后,主进程启动后。
非必填
停止前处理
用于做停止前的善后处理,在容器收到删除pod事件前执行,然后才会执行容器终止的指令
非必填
容器端口
端口名称
• 长度范围为4~32个字符。
• 名称由小写字母、数字、中划线(-)组成。
• 以小写字母开头。
以小写字母或数字结尾。
同一个pod内不可以重复
如果添加了容器端口选项,就是必填,否则可选
容器端口
1-65535,通常1000以上的整数,具体看容器需要
同上
端口协议
TCP/UDP,默认为TCP,根据实际选择
同上
环境变量
变量名称
长度范围为255,字母开头,同一个pod内不可以重复
非必选,添加环境变量选项后必选
变量/变量引用
当前只支持固定的变量值
非必选
容器存储
存储类型
当前只支持文件文成,后续将扩充支持的存储类型
添加数据集选项后必选
挂载数据集
选择需要挂载的数据集
同上
容器挂载路径
数据集要挂载到容器里面的哪个目录
同上
通用任务参数-高级配置
通用参数-高级配置用于控制任务执行过程中的失败重试策略,作业结束后的清理策略,是OpenMPI,TensorFlow,PaddlePaddle,Pytorch任务都具备的任务参数,具体参数如下:
参数 | 说明 |
---|---|
失败重试次数 | 任务失败后,会再次运行,直到达到重试上限,默认为0代表不重试。 |
最大存活时长 | 任务运行最长的时间,达到最大存活时间后任务会被终止。 |
结束后保留时长 | 任务运行结束后相应容器被保留的时长,如果任务结束后还需要查看日志,请选择适当的保留时长。 |
清理策略 | 这里用于控制pod的清理策略,可以根据任务情况选择不同的清理策略 1.不清理:会保留所有相关的pod,更方便排查任务失败原因,但是会继续占用资源,可能产生额外的资费(容器处于运行时会占用资源,结束状态不会占用资源) 2.清理全部实例:会删除所有的pod,资源彻底释放 3.清理运行中的Pod: 分布式任务运行时,通常有一个Master角色,用于控制整个分布式任务的训练过程,在Master容器成功运行后,通常代表着任务成功了。Worker角色有时是启动后挂起等待Master的指令,这时候Worker是没有常规的退出动作的,可以配置清理运行中的pod,确保任务结束后,不会再占用资源,同时可以查看Master上的日志和相关信息。 |
Tensorflow任务参数
TensorFlow分布式训练角色介绍
-
PS:参数服务器,保存各worker最新的参数,提供参数同步,可以有多个
-
Worker:
执行前向和反向传播计算,上传最新参数至chief,可以有多个
-
Chief: 初始化全局参数,然后广播给所有的worker;保存检查点和事件;保存最终的模型等,只能有一个
-
evaluator: 对最新的模型参数进行评估
PS和Chief的差异如下
chief:用于协调全局训练过程,主要职责是:
- 初始化全局参数并广播给worker
- 接收worker上传的最新参数并维护全局最新参数
- 保存检查点文件和事件文件
- 选取最优超参数
- 保存最终的模型参数
ps:用于参数服务器,主要职责是:
- 接收各个worker计算得到的最新参数
- 聚合各个worker的参数,生成全局最新的参数值
- 为worker和chief提供最新的全局参数值
所以,chief和ps的主要差异在于:
- 职责不同:chief主要用于协调全局训练流程,维护最新最优的超参数和模型参数。ps主要用于同步各个worker的参数,生成全局最新的参数状态。
- ps数量可多chief只有一个
- ps通常需更强硬件:由于ps负责参数同步和更新,它通常需要更高性能的CPU、GPU和网络来满足计算需求。而chief作为coordinator,硬件要求会相对较低。
- ps无需保存训练信息和最终模型:ps只需要同步最新的参数即可,无需保存检查点文件、事件文件和最终模型。这些信息由chief来维护。
所以总结来说,虽然chief和ps都发挥着重要作用,但其职责差异还是比较明显的:
- chief:负责全局训练协调与最终模型生成
- ps:负责高效的参数同步与更新
二者相互配合,才能实现TensorFlow高性能的分布式深度学习训练。
训练组合说明
分组名
参数
说明
任务名称
长度范围为4~32个字符。
• 名称由小写字母、数字、中划线(-)组成。
• 以小写字母开头。
以小写字母或数字结尾。
TensorFlow任务的名称(选填)
任务实例组合
Worker+Evaluator
训练中的任务角色组合类型,单机训练可以选择Worker+Evaluator模式,其中Evaluator角色是可选的,
PS+Worker+Evaluator
训练中的任务角色组合类型,分布式训练可以选择该模式,其中Evaluator角色是可选的
PS+Chief+Worker+Evaluator
训练中的任务角色组合类型,分布式训练可以选择该模式,其中Evaluator角色是可选的
Pytorch任务参数
Pytorch分布式训练角色介绍
master:负责全局训练协调,主要职责是:
- 定义模型和优化器
- 初始化全局参数并广播给worker
- 按轮次平均worker的梯度
- 根据loss选择最优超参数(如学习率)
- 保存检查点和最终模型
worker:负责前向和反向传播计算,主要职责是:
- 接收master下发的初始化参数和最新超参数
- 根据接收到的全局参数计算loss和梯度
- 将计算得到的梯度发送给master
- 接收master同步最新的全局参数
训练组合说明
模式 | 说明 |
---|---|
Master+Worker | 标准的分布式训练,Worker数量固定,不同节点会有不一样的rank,选择这个模式时,批量计算平台会自动给容器注入torchrun命令所需的以下环境变量: - MASTER_ADDR:master节点的地址 - MASTER_PORT:master节点开放的端口 - WORLD_SIZE:这个是节点总数,如果是多机多卡的任务,请重新为该变量赋值 - RANK:节点在所有节点中的排名 |
Elastic Worker | 自动弹性扩缩容模式,可以在启动时设置一个最少副本数,会根据配置的资源使用率进行扩容,每次扩容会造成训练的暂停,并在节点间重新分配参数。该模式可以更好的使用资源进行计算,记得及时保存每轮迭代的训练结果,并在启动时加载模型,避免从零开始训练。Worker启动时会选举出一个充当master的角色,弹性分布式训练启动时不需要关注Master+worker的相关参数。 |
【Master+Worker模式参数】
【弹性扩缩容模式】
参数名 | 说明 | 是否必填 |
---|---|---|
模式 | Pytorch默认实现c10d,也可以选择etcd模式 | 必填,选择默认模式即可 |
指标 | 当前仅支持cpu使用率,后续会增加指标种类 | 必填,不用修改 |
期望值 | 资源的使用率,当资源使用率超过该值时会触发扩容 | 必填 |
最小副本数 | 训练时最少的副本数,当扩容失败后,会减少副本数,直到该值 | 必填 |
最大副本数 | 训练时副本数的上限 | 必填 |
扩缩容超时取消时间 | 当集群资源不足时,扩容出来的副本可能无法运行,当等待时间超过该值时,会取消扩容 | 可选 |
Paddle任务参数
Paddle是百度推出的AI训练框架,在国内产业界应用广泛,对标的是pytorch,训练模式同样支持PS+Worker模式,也支持弹性分布式训练。
参数服务器(ParameterServer)模式
采用了一种将模型参数中心化管理的方式来实现模型参数的分布式存储和更新。该模式下的节点/进程有两种不同的角色:
- 训练节点(Trainer/Worker):该节点负责完成数据读取、从服务节点拉取参数、前向计算、反向梯度计算等过程,并将计算出的梯度上传至服务节点。
- 服务节点(Server):在收到所有训练节点传来的梯度后,该节点会将梯度聚合并更新参数,供训练节点拉取进行下一轮的训练。
弹性模式
在分布式训练中,除了容错外,集群的资源剩余情况可能随时间而不同、任务的优先级也可能有不同,
基于这样的场景,实现弹性训练即任务可以在运行时动态调整训练资源而不影响或尽可能小地影响训练进程,能够最大限度地实现资源利用率提升同时提升训练任务质量。
paddle目前已支持Collective 训练模式基于热重启的弹性训练方案。热重启即用户的任务进程会被重启,所以需要用户代码中做好checkpoint 逻辑,同时如 batchsize 和learning rate 这样需要随节点数变化的参数也需要用户进程自动调整。
参数名 | 说明 | 是否必填 |
---|---|---|
模式 | Paddle当前只支持etcd模式 | 必填 |
指标 | 当前仅支持cpu使用率,后续会增加指标种类 | 必填,不用修改 |
期望值 | 资源的使用率,当资源使用率超过该值时会触发扩容 | 必填 |
最小副本数 | 训练时最少的副本数,当扩容失败后,会减少副本数,直到该值 | 必填 |
最大副本数 | 训练时副本数的上限 | 必填 |
扩缩容超时取消时间 | 当集群资源不足时,扩容出来的副本可能无法运行,当等待时间超过该值时,会取消扩容 | 可选 |
Container-Job任务参数
参数 | 说明 |
---|---|
运行成功的Pod数 | 任务要运行多少次 |
并行运行的Pod数 | 任务可以并行运行的数量 |
超时时间 | 任务执行的最长时长,单位秒,超过时长将被停掉重新运行,请设置足够长的值 |
重试次数 | 任务运行失败后,最多重试多少次 |
重启策略 | 任务在什么时候重试 |