字节跳动正式开源分布式训练调度框架 Primus


项目地址: https://github.com/bytedance/primus
随着机器学习的发展,模型及训练模型所需的数据量越来越大,也都趋向于通过分布式训练实现。而算法工程师通常需要对这些分布式框架涉及到的底层文件存储和调度系统有较深的理解,才能够快速批量开启模型训练,保证资源利用率。 目前业界有很多类似的框架,如 TonY、TensorFlowOnSpark,Kubeflow 中的 Training Operators 等,但这些框架或多或少存在某些问题,如与固定的机器学习框架( Tensorflow,Pytorch )耦合需要写明例如 PS、Worker 等角色,容错和弹性调度支持不友好,不支持异构调度,调度语义较为简单,不支持文件读取等。   将算法工程师从此类繁重的底层细节中解脱出来、更多地关注到算法层面,即为 Primus 解决的问题。  

日均作业百万核的字节跳动实践

经过字节跳动在不断实践中调整打磨的 Primus,拥有以下能力支撑业务需求:
  1. 自研训练框架:目前除了业界开源的 Tensorflow、Pytorch,为了满足用户的各种需求,字节也在机器学习场景进行了深入探索,自研多个训练框架用于满足用户需求;
  2. 拥有底层资源调度系统 YARN 和 Kubernetes:目前阶段处在 YARN 向 Kubernetes 的迁移过程中,在此过程中需要对用户屏蔽底层的调度系统,提供一致的体验;
  3. 大规模应用混部资源:由于混部资源不稳定的特点,对训练的容错和稳定有着更高的要求;
  4. 支持复杂调度编排语义:为了使集群资源利用率最大化,需要将合适的容器放在适当的位置上,并需要能够动态调整并发和容器大小。
  5. 支持复杂数据源和数据调度需求:支持多种类型数据源和数据类型的混合训练,如 HDFS、Kafka 等批式流式数据源,Text、PB、Parquet 等数据类型。
目前 Primus 流批一体训练框架在字节内部支持了抖音、头条、Tiktok、广告等大部分业务,每天运行在 Primus 上的作业总核数达到几百万。相比旧的基于Hadoop Streaming的框架,训练性能提升3倍,单次训练总数据量从TB级提升到了PB级,训练准备时间由几十分钟降低到秒级。  

分布式训练调度框架 Primus

Primus 是一个通用的分布式训练调度框架,管理了机器学习训练框架(如 Tensorflow、Pytorch)的生命周期和数据分发,帮助训练框架获得更好的分布式能力。  

架构介绍

Primus 整体架构   整个 Primus 生命周期分为两阶段,提交阶段和执行阶段。
  1. 提交阶段
用户需要描述整个任务的训练资源,数据输入以及容错策略。
  • 训练资源包括需要的角色(如 PS,Worker 等)以及各角色所需的资源,包括其需要的 CPU、内存以及运行脚本、环境变量等。
  • 数据输入用于描述如何把数据提供给训练器。
  • 容错策略用于描述遇到错误时,Primus 需要进行的操作。
Primus Client 通过根据用户的配置,向 YARN 或 Kubernetes 集群提交 Primus Application Master(之后简称 AM)用于管理 Primus 作业集群的运行。  
  1. 执行阶段
当作业提交到集群后,AM 会根据用户的配置向 Resource Manager 申请若干 Executor,并上拉起对应的角色,在持续监控这些角色的健康状态过程中,如果发现状态异常,AM 则会根据用户配置进行相应的操作保证训练正常运行。  
  1. 数据读取
Primus 支持读取数据输出到训练器,能够实现数据的负载均衡并时刻记录数据的状态,降低长尾问题,在训练器有问题时也能够切换到正常的训练器继续进行训练。AM 通过扫描需要训练的数据并切分为 Task,可以将 Task 分发给 Executor,并与 Executor 通信记录 Task 的状态。  

功能介绍

  1. 多训练框架支持:Tensorflow、PyTorch、Monolith 等;
  2. 多调度器支持:YARN、Kubernetes 等;
  3. 多角色支持:如 PS-Chief-CPU、Worker-GPU、Worker-Evaluator 等,并支持多角色之间的亲和反亲和等特殊调度策略;
  4. 多编排策略:支持同时启动,逐个启动,基于角色的按顺序启动等(如先启动 PS,再启动 Worker);
  5. 容错处理:Worker 失败自动拉起新 Worker,PS 失败整体失败;
  6. 动态调度:例如支持动态扩大缩小 Worker 数;
  7. 多数据源数据类型支持:HDFS、Kafka 等;
  8. 数据负载均衡与状态保存:支持按 Worker 负载动态分配 Task,如在 Worker 失败时支持回收 Task 并进行重新分配;
  9. 多线程高速数据读取:支持多线程读取 HDFS 和 Kafka 后输出到训练器,提高单训练器的吞吐。
 

部署情况

Primus 支撑了字节跳动内部“推荐”“广告”“搜索”等场景,如头条推荐、抖音视频推荐、穿山甲广告、千川图文广告、抖音搜索等业务的超大规模深度学习训练,日均可达上万任务的训练,450W Core资源的使用。

未来规划

  1. 开源 Primus 更多能力后续将陆续开放,详见:https://mp.weixin.qq.com/s/uGBy-WpdjTMUy-7MQAZiww
  2. Primus 目前与字节内部训练框架集成较多,Tensorflow 和 Pytorch 可以使用 Primus 的基本能力,后续将开发 Tensorflow 和 Pytorch 适配 Primus API 实现更深度的集成,赋能开源训练框架。
  目前,Primus 已在 Github 上开源,欢迎大家一同参与共建!   项目地址: https://github.com/bytedance/primus

相關推薦

2023-03-25

Katalyst 是字节跳动对多年大规模业务云原生化场景中资源管理能力的抽象和总结,我们期望通过 Katalyst 的开源直接或间接的帮助用户做好资源管理,实现降本增效。 当下互联网应用以天为单位,在线业务的资源使用情况往

2022-10-28

备批式集成、流式集成和增量集成三类同步模式,并支持分布式水平扩展和流批一体架构,在各种数据量和各种场景下,一个框架即可解决数据集成需求。此外,BitSail采用插件式架构,支持运行时解耦,从而具备极强的灵活性

2023-03-12

字节跳动开源了一款采用 Rust 开发的前端模块打包工具:Rspack(读音为/'ɑrspæk/)。 据介绍,Rspack 是一个基于 Rust 的高性能构建引擎,具备与 Webpack 生态系统的互操作性,可以被 Webpack 项目低成本集成,并提供更好的构建性

2023-03-10

3月7日,由字节跳动主办,英特尔、OCP-OSF(Open System Firmware)、OSFF(Open System Firmware Foundation) 社区联合举办的“云固件交流沙龙”在北京召开。会上,字节跳动正式发布了新一代云固件 Cloud Firmware 2.0,这是首次在 X86 服务器中产品化

2022-10-20

近日,CNCF 发布了最新版本的云原生全景图。字节跳动多租户网关项目 KubeZoo 被收录,在 Provisioning-Automation & Configuration 领域占有一席之地。这意味着 KubeZoo 正式成为 CNCF 认可的构建云原生最佳实践中的一环。 Landscape

2023-11-18

在近日举办的 Linux Plumbers Conference 上提出,字节跳动 Linux 内核工程师 Cong Wang 发表了一个“Linux Kernel Autotuning”的主题演讲,提议可以使用人工智能(AI)和机器学习(ML)来调整 Linux 内核,从而为特定工作负载带来

2023-02-08

源项目前 100。 国内 腾讯、华为、阿里巴巴、美团、字节跳动、百度、京东、网易、快手、圆通 等 和 国外 Google, Microsoft, Amazon, Paypal, IBM, Shopee 等数百名知名大厂员工点了 Star, 也有 腾讯、华为、字节跳动、Microsoft、Zoom、

2023-07-13

国和美国的互联网大厂(比如谷歌、Meta、腾讯、百度、字节跳动),以及 AI 头部初创企业,都会有能力构建出可以媲美 GPT-4 甚至超越 GPT-4 的大模型。 而 OpenAI 最持久的护城河,就在于他们拥有真实用户的使用反馈、业内最顶

2023-04-25

大潜力。毫无疑问,大模型的训练需要巨大的算力,这对分布式并行框架是一项考验。现如今,业界越来越多的团队纷纷转向分布式框架的研究与开发之中,既有针对特定场景特定模型的极致手工优化,也包括面向通用模型通用

2023-09-08

Google 开发者在线课程 开始学习 8 月 31 日,百度、字节、商汤、中科院旗下紫东太初、百川智能、智谱华章等 8 家企业 / 机构的大模型产品已经首批通过《生成式人工智能服务管理暂行办法》备案,可正式上线面向公众提供服

2023-09-29

研发的电力行业人工智能创新平台及自主可控电力大模型正式公开发布。 电力行业人工智能创新平台提供模型即服务(MaaS),支持模型快速迭代开发,并支撑电力人工智能资源面向全社会开放共享。百度提供了昆仑芯AI芯片、

2022-07-01

React/Vue/Nerv 等框架来开发微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 等应用。具体更新内容如下: 修复 小程序 修复 preact 使用 custom-tab-bar 时报错的问题,#11962 修复编译小程序插件时报错的问题,#11932

2022-05-25

React/Vue/Nerv 等框架来开发微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 等应用。具体更新内容如下: 修复 小程序 补充字节小程序 Textarea 组件的属性,#11776 修复支付宝小程序 PickerViewColumn 组件不

2022-12-10

React/Vue/Nerv 等框架来开发微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 等应用。 此版本具体更新内容如下: 特性 小程序 支持 onUnhandledRejection 生命周期 修复 小程序 新增对支付宝小程序的 page-con