加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2023-12-17 19:27:41 所属栏目:大数据 来源:DaWei
导读: RayRTC 是字节基础架构组与字节 AML 组共同合作,在内部 RTC(Realtime Text Classification)文本训练平台上基于 Ray 进行的下一代 Serverless ML 的探索。RTC 文本分类平台是一个一站式的
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 的支持以及更通用的多语言架构设计也在进行中。

(编辑:商洛站长网)

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

    推荐文章