字节跳动云原生机器学习离线训练实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 字节跳动云原生
机器学习离线训练实践
单既喜
字节跳动基础架构研发工程师
2.
3. 个人简介
• 2014-2016 Schlumberger Maxwell
• 2016-2020 一点资讯基础架构部 (调度系统、Spark、Hive、Presto)
• 2020-2022 字节跳动基础架构-计算 (Primus、Spark、Feature Store)
4. 目 录
01 简介
01 02 云原生离线训练
01 案例与最佳实践
01 总结
01
03
04
5. 01
01
简介
6. 业务背景与架构
● 范围:推荐、广告、搜索
Reckon 训练平台
● 机器学习训练引擎(计算+数据)
Lagrange Lagrange-Lite
(TF) (TF)
美洲豹
蒲公英 (GPU)
Lagrange X (训练流程编排)
Norbert
(训练流程编排)
Ream (资源 Quota 管理与准入)
注1:Lagrange、Lagrange-Lite 为字节跳动自研
的 TF 深度学习训练框架;
注2:蒲公英为 GPU 架构 (SparseDense 分离的)
深度学习框架,高速训练
注3:美洲豹为 GPU 架构 (AllReduce 架构) 的高
速训练框架
Primus (云原生离线训练框架)
YARN
Kubernetes
HDFS
7. 离线训练架构 1.0
• 集中式离线训练
• Docker on YARN
• 服务化 Parameter Server(PS)
• 0->150w vCores
Reckon+Lagrangex
PS Primus App
PS Primus App
Primus App
Mesos
docker on YARN
HDFS
8. 云原生 离线训练架构 2.0
• 分布式离线训练
Primus App
API Server
• 伴生 (PS)
Norbert
• 声明式 API
• Top3 离线计算框架
Reckon+Lagrangex
Worker
PS
Primus App
Primus App
Q: Top3 其他2个计算框架是什么?
Spark、Flink、Primus
HDFS
docker on YARN
9. 云原生 离线训练架构 3.0
• 集中式 API Server + CRDs
• 自研 Godel (Kubernetes)
• 30%
Reckon+Lagrangex
Primus App
Norbert
Norbert
Worker
API
Server
k8s
PS
Primus App
Worker
PS
Primus App
Norbert
Worker
Kubernetes
PS
10. 云原生 离线训练架构 UI
11. 云原生 离线训练架构 UI
12. 作业规模
10000 4000 400w
作业/天 单最大作业数 vCore 总量
30w
vCore K8s
13. 01
02
云原生离线训练
■ 计算调度
■ 数据编排
14. 计算调度
弹性
API-Server
容器化
Primus Operator
多⻆色+异构
微服务
15. Primus Operator 整体架构
Job CRD
Observe
Meta
Spec
Reconcile
Update
Compute
Kube builder
Status
16. Primus Operator + Framework
PrimusJob CRD
Primus Data CRD
PrimusRole
Norbert
Driver
Primus Operator
Primus AM Pod
TF PS
TF workers
TF GPU Workers
17. 训练多⻆色调度-PrimusRole CRD
Role Status
PrimusRole crd PrimusRole crd PrimusRole crd
Worker PS GPU
Shard Status
Pod
Name ExecutorStat
RestartCnt Endpoint
Pod
Pod
Pod
18. 多⻆色异构调度-调度策略
Dynamic Policy Gang Policy Order Policy
Lagrange Lagrange Lite Lagrange Lite
19. 训练弹性调度
Primus Role
worker
Norbert
Driver
Slow Start worker
Primus Role
ps
Pod Group
Primus Operator
Gang Scheduler PS
20. 弹性调度-价值与收益
•
•
•
混部Smart Resource : CPU 利用率 20% --> 70%
Slow Start :
启动时强稳定性、中期高训练速度
潮汐/反潮汐训练
更大的资源池
21. 01
02
云原生离线训练
■ 计算调度
■ 数据编排
22. 数据编排
复杂数据源 (day/hour/customize)
●
●
●
HDFS
Feature Store (Iceberg)
Kafka
编排策略
●
●
●
●
Group By
Filter
Shuffle Within Partition
Global Shuffle
23. 元数据编排
00
00
00
01
01
01
02
02
02
Shuffle + Group By + 追新
00 00 00
01 01 01
02 02 02
24. 训练Task传输
DataStreamB
DataStreamA
2020-2022
PrimusData CRD
Kafka
2020-2022
Primus
AM
Norbert
Driver
Executor
Executor JVM
TF worker
Executor
Executor
25. 数据传输实践(IPC)
• 管道:竞争、序列化反序列化
1. 匿名管道
• Socket:内核态用户态
• ShareMemory:多进程管理
• JNI:统一进程
2. Domain
Socket
4. JNI
3. Share
Memory
26. 案例与最佳实践
01
03
■ 服务化 PS vs. 云原生 PS
■ Primus Flow
■ 批流一体
■ 云原生混部训练
■ Native Lib
27. 服务化 PS vs. 云原生 PS 训练
PS Service
➢
➢
➢
➢
PS on YARN/K8S Checkpoint
同机房撮合
资源利用率低
运维与部署难度大
隔离性差(网络、内存带宽、CPU)
➢ 全链路 Incremental Checkpoint
➢ PS 单点 Kill / 恢复
➢ Smart Resource
PS on YARN/K8S SavePoint
➢
➢
➢
➢
➢
PS Gang 性调度
服务发现 (consul -> 自研)、健康检查
单作业 + 容器化部署
性能:Numa Bind
SavePoint 机制
28. PrimusFlow
●
特征调研
行级 Shuffle
➢ 边计算边训练
丰富数据源支持
➢
●
PrimusRow
Job 1
Hudi、TOS、HBase
多数据流编排
➢
●
➢
PrimusRow
Job 2
普通流与预处理流混合训练
29. 批流一体架构
Flink -> Primus Streaming (抖音晚高峰+GPU)
多⻆色异构流式训练
● N 个⻆色:GPU + CPU +伴生 PS
● Forward + Rebalance
批流一体+批流协同
● Batch
● Streaming
30. 混部训练场景(资源问题)
计算管理:-1818 等退出码识别(混部资源随时退出的特点)
数据管理:样本丢失或重复问题
(缓存问题,心跳丢失问题)
TF
WORKER TF
WORKER
Executor Executor
File:
Pos:
File:
Pos:
6% -> 0.5%
31. Primus Native
Data Master
●
编程范式
Configuration
➢ Declarative programming
➢ Py4J
UDF, AutoType Convert
➢
●
Data Executor
● Serialize/Deserialize
● Pod -> 多进程、多 Container
TF
WORKER TF
WORKER
Executor Executor
● 总吞吐量从 3.3GB/S 提升至 13.5GB/S !
提升 4x
● 单节点吞吐率从 411MB/S 提升到 1.2GB/S !
● CPU使用率:从 2.25 核心提升到 5.25 核心 !
2.3x
提升 4x
提升
32. 01
04
总结
33. 总 结
云原生离线训练
案例应用
• 超大规模容器化(docker on YARN, K8S)
• 多环境的 API Server 声明式 API (YARN + K8S)
• 计算能力:多⻆色+异构+弹性调度
• 数据能力:复杂数据编排 + 高性能IPC传输
• Primus Flow
• Primus Streaming 批流一体
• 超大规模混部训练
• Primus Native
34.
35. 欢迎交流