加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

大规模分布式计算学习引擎Ray在字节跳动NLP场景下的践行

发布时间:2022-06-27 23:03:36 所属栏目:资源 来源:互联网
导读:RayRTC 是字节基础架构组与字节 AML 组共同合作,在内部 RTC(Realtime Text Classification)文本训练平台上基于 Ray 进行的下一代 Serverless ML 的探索。RTC 文本分类平台是一个一站式的 NLP 服务平台,包括了数据预处理,标注,模型训练,打分,评估,
  RayRTC 是字节基础架构组与字节 AML 组共同合作,在内部 RTC(Realtime Text Classification)文本训练平台上基于 Ray 进行的下一代 Serverless ML 的探索。RTC 文本分类平台是一个一站式的 NLP 服务平台,包括了数据预处理,标注,模型训练,打分,评估,AutoML 以及模型推理等机器学习全流程。目前字节内各大产品,包括抖音,TikTok,头条,西瓜,番茄等都有使用该平台提供的相关自然语言能力。RayRTC 通过算法与系统的协同设计及 Serverless 等技术为 RTC 提供了性能和资源利用率的极致优化,并由此抽象出一套通用的 Serverless ML 框架,目前已在字节内部机器学习平台上部署上线。
 
  第一次接触 Ray 的读者可能会问,除了明星创始人团队,深度贴近当前 ML 需求的产学研支持,Ray 这套框架到底有哪些吸引人的地方?
 
  首先是以 Ray 为底座可以非常轻松构建完整机器学习完整生态,如下图所示:
 
  机器学习的研发人员往往不仅需要关注算法本身,在实际的生产环境中,各个环节所涉及的工程量和运维量也不容小觑。不少研究表明,工程师们有 80-90%的时间和精力投入在了算法之外的数据处理,全流程打通等。Ray 社区在近几年的演进中,不断吸收业界领先的理念,积极地与其他开源社区和各大厂商进行合作交流。以 Ray 为计算引擎的上层生态的丰富度是别的开源生态中不常见的。比如大数据处理方面,有 Intel 设计的 RayDP,将 Spark 无缝集成到 Ray 中,通过 Ray 的 Actor 拉起 Spark 的 executor,利用 Ray 的分布式调度实现资源细粒度的调控。这样做的好处在于以 Spark 为大数据引擎的机器学习应用中,通过 Ray 可以将 Spark 产生的 dataframe 以 ML Dataset 的形式直接从内存传给下游的机器学习框架,比如 PyTorch。而 Ray 的生态里的其他组件,比如超参训练(Ray Tune)和推理服务(Ray Serve),则进一步补足了训练阶段后续的一系列工程需求。研发人员可以抛开繁琐的上线部署流程,实现一键分布式以及一键部署。
 
  Ray 的另一个显著优势是其简单通用的 API ,只需在一段函数上加入ray.remote 的装饰器,便可将一个单机程序变成分布式执行单元,如下所示:
 
  复制
  #declare a Ray task
  @ray.remote
  def fun(a):
      return a + 1
 
  #submit and execute a Ray task
  fun.remote()
 
  #declare a Ray actor
  @ray.remote
  class Actor():
      def fun(slef, a):
          return a+1
  actor = Actor.remote()
  #execute an actor method
  actor.fun.remote()
 
  Ray 中最基础的概念包括 Task 和 Actor,分别对应函数和类。函数一般是无状态的,在 Ray 里被封装成 Task,从而被 Ray 的分布式系统进行调度;类一般是有状态的,在 Ray 里被映射成一个 Actor。Actor 的表达性更强,能覆盖大多数的应用程序子模块。基于 Actor 和 Task,Ray 对用户暴露了资源的概念,即每个 actor 或 task 都可以指定运行所需要的资源,这对异构的支持从开发人员的角度变得非常便利。比如:
 
  Ray 另外的优势在于:
 
  高效的数据传递和存储:Ray 通过共享内存实现了一个轻量级的 plasma 分布式 object store。数据通过 Apache Arrow 格式存储。
 
  分布式调度:Ray 的调度是 decentralized,每个节点上的 raylet 都可以进行调度;raylet 通过向 gcs 发送 heart beat 获取全局信息,在本地优先调度不能满足的情况下,快速让位给周边 raylet 进行调度。
 
  多语言的支持:目前已经支持的语言包括:Python, Java, C++。后续 go 的支持以及更通用的多语言架构设计也在进行中。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读