Skip to content

Commit

Permalink
Merge pull request intelligent-machine-learning#329 from hxdtest/modi…
Browse files Browse the repository at this point in the history
…fy_deeprec_auto_scale_cn

modify_deeprec_auto_scale_cn
  • Loading branch information
workingloong authored Mar 22, 2023
2 parents 641a5ad + 47898dd commit aab82ec
Showing 1 changed file with 11 additions and 13 deletions.
24 changes: 11 additions & 13 deletions docs/blogs/deeprec_autoscale_cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
4. 每个节点的 PS 资源规格一样,但是存在热点 PS。PS 上的负载不均衡可能导致部分 PS 的CPU 负载显著高于其他 PS,热点 PS 成了训练瓶颈。

因为模型结构千差万别,用户很难在作业提交时准确地配置合适资源。想要寻找合理配置,
用户需要反复地调整资源来启动作业并观察性能。这个过程是十分费时的。为此,DLRover 自动地为分布式训练作业配置资源,
用户需要反复地调整资源和启动作业以便观察性能。这个过程是十分费时的。为此,DLRover 自动地为分布式训练作业配置资源,
并在训练过程中针对资源瓶颈进行自动扩缩容,达成充分利用资源来提升训练性能的目的。
使用 DLRover 的 auto-scale 功能,用户提交训练作业时无需关心资源配置。

Expand All @@ -34,7 +34,7 @@ DLRover 采用运行时优化思想来对分布式训练作业进行自动扩缩

1. 资源自动优化:监控训练性能和节点负载,并根据当前性能和负载给出最优的资源配置,包括节点数量和资源规格。
2. 弹性调度:在训练运行时动态地给作业增加节点、减少节点或者用新资源规格的节点来替换原有节点。
3. 训练框架支持节点容错和弹性:在训练运行时,新的节点可以加入训练缩减部分节点时,其他的节点可以继续训练
3. 训练框架支持节点容错和弹性:在训练运行时,新的节点可以加入训练缩减部分节点时,其他的节点不受影响,可以持续训练

为此,我们设计的 DLRover 的整体设计架构如下:

Expand All @@ -43,7 +43,7 @@ DLRover 采用运行时优化思想来对分布式训练作业进行自动扩缩
</div>

- Brain Service: 负责资源自动优化。基于实时采集的训练速度和各个节点负载来自动优化作业的资源配置。
- DLRover Master:负责弹性调度。每个训练作业拥有一个 master 节点,
- DLRover Master:负责弹性调度。每个训练作业拥有一个 master 节点,
master 节点负责训练速度采集、节点负载收集、训练样本管理和弹性调度。
- Elastic Agent:负责与训练框架协调来支持训练的容错和弹性。每个节点上都有一个 Elastic Agent,
Agent 从 master 上获取作业当前运行的节点信息,通知训练框架更新分布式训练状态。
Expand Down Expand Up @@ -119,15 +119,15 @@ DLRover 会新拉起一个 CPU 更多的节点来替换热点 PS 节点,从
DLRover 会新拉起一个内存更多的节点来替换有OOM 风险的节点。因为在稀疏模型中,
PS 的embedding 表中的item 数量可能越来越多,导致 PS 内存增长。

- worker 数量动态调整:如果发现 PS 的CPU还有剩余,DLRover 会增加一定数量的 worker,
然后观察 PS 的CPU 负载以及训练速度是否提升,直到 PS CPU 没有空余或者新增 worker 没有提升训练速度。
- worker 数量动态调整:如果发现 PS 的CPU负载还有较大的余量,DLRover 会增加一定数量的 worker,
然后观察 PS 的CPU 负载以及训练速度是否提升,直到 PS CPU 负载大于阈值或者新增 worker 没有提升训练速度。

### 弹性调度

训练的弹性调度包括:
1)能动态地拉起或者删除节点,
2)新拉起的节点能够获取训练样本训练模型,
3)被删除的节点为完成的数据能给其他节点使用
3)被删除的节点未消费的数据能给其他节点使用
为此,DLRover 实现了支持在 k8s 上动态调整作业节点的 ElasticJob controller 和动态样本分发服务。

#### 弹性调度 ElasticJob Controller
Expand Down Expand Up @@ -182,17 +182,15 @@ master 会将对应的 shard 会重新放入 TODO 队列。
#### DeepRec EmbeddingVariable 支持 PS 扩缩容
对于搜索广告和推荐模型,模型网络权重主要有两部分:一部分是 user 或者 item 的稀疏 embedding,另一部分是dense 层。
随着模型不断遇到新的user或者item,embedding 表会不断增加,导致 PS 的内存不断增加。
这是由于这种原因,算法工程师无法准确预估ps资源规格(并发度和内存)。
经常出现以下情况,在提交作业的时候资源规格是足够的,随着任务运行,ps出现了OOM
对于搜索广告和推荐模型,模型网络参数主要有两部分:一部分是 user 或者 item 的稀疏 embedding,另一部分是 dense 层。
随着模型不断遇到新的 user 或者 item,embedding 表会不断增加,导致 PS 的内存不断增加。
正是由于这种原因,算法工程师无法准确预估ps资源规格(并发度和内存)。
并且经常出现以下情况:在提交作业的时候资源规格是足够的,随着任务运行,PS 内存逐渐增加,直到最终OOM
此外 PS 数量不合理也有可能影响训练速度。这就要求我们能在训练过程中扩充 PS 的数量。
扩充 PS 后,训练框架需要对 embedding 重新 partition,从而让 embedding 参数重新均分分布到新的 PS 节点集合上。
为解决上述问题,DeepRec 新设计了一套支持动态 Embedding 语义的 EmbeddingVariable,
在特征无损训练的同时以最经济的方式使用内存资源,使得超大规模特征的模型更容易增量上线。
如果 PS 的数量有变化,DeepRec 的 EmbeddingVariable 支持将 checkpoint
中的 embedding 权重重新均分分配到新的 PS 节点集合上。
在特征无损训练的同时以最经济的方式使用内存资源,使得超大规模特征的模型更容易增量上线。具体可以参考[DeepRec](https://github.com/alibaba/DeepRec)。
#### 基于 checkpoint 的 PS 弹性扩缩容
Expand Down

0 comments on commit aab82ec

Please sign in to comment.