You need to enable JavaScript to run this app.
导航
Ray Data背压增强分析
最近更新时间:2024.11.26 20:29:24首次发布时间:2024.11.26 20:29:24

背景

Ray Data的算子并发度大多是通过手工设置的, 自动感知的大多不能满足资源利用率的情况。但是手工设置opeartor并发很容易触发限流,但是限流目前很难获取到限流原因,火山EMR提供了一些分析背压原因的功能以及如何增加更多的背压策略。

背压触发条件

触发条件总共包括四种:

  • 资源有预留:DataContext.get_current()data_context.op_resource_reservation_enabled = true (默认)。每次在新任务提交时会检查task 所需要的资源是否还能满足。整体资源会分为reserved和shared。
  • **资源无预留:**DataContext.get_current()data_context.op_resource_reservation_enabled = false。资源统一管理
  • 背压策略: 开源策略中只支持 ConcurrencyCapBackpressurePolicy, running tasks是否超过了设置的并发数
  • Op 是否可以增加输入: 针对actor pool是否有剩余free slots空间, 主要是 看actor上的running tasks 与默认数目的差别

背压增强

背压可观测增强

  • 未增强之前:
  • 增强之后
    • 并发背压策略
  • 非预留模式下的背压
  • 预留模式下背压
  • actor的free slots不够

增加背压策略

如何调优执行参数

示例:执行链路调整
Image

  1. 默认参数提交后发现整体的CPU没有利用起来 (20/46),而ReadBinary的的任务数也不能增加,下图可以看出来总共触发了两类反压:
    1. New tasks反压: 预留资源模式的反压,shared资源占用过多。
      1. 要对shared资源的模式设置为false. op_resource_reservation_enabled = false
    2. Should add input: actor上无空闲slot,也就是资源不够。
      1. 增加BgeEmbeddingMapper用到的GPU资源
  1. 调整了上一步骤的预留资源参数后, 可以看到cpu的资源基本上都被使用上了。

但是Resources 这里的cpu只是逻辑计数,不是实际的cpu使用率, 具体的资源使用率可以用通过ui查看。

如果cpu 利用率比较低的话, 可以调整num_cpus 、concurrency、batch_size 来控制具体的资源使用率。如果资源利用率不高的话,可以DEFAULT_MAX_TASKS_IN_FLIGHT=4 修改下

  1. 如果是因为内存使用问题可以调整以下两个参数
  • op_resource_reservation_enabled
  • DEFAULT_OBJECT_STORE_MEMORY_LIMIT_FRACTION_WO_RESOURCE_RESERVATION