设计模式与反模式#
本节收集了编写 Ray 应用的常见设计模式和反模式。
- 模式:使用嵌套任务实现嵌套并行
- 模式:使用生成器减少堆内存占用
- 模式:使用 ray.wait 限制待处理任务数量
- 模式:使用资源限制并发运行任务数量
- 模式:使用 asyncio 并发运行 actor 方法
- 模式:使用 actor 同步其他任务和 actor
- 模式:使用 supervisor actor 管理 actor 树
- 模式:使用流水线提高吞吐量
- 反模式:从任务返回 ray.put() 的 ObjectRefs 会损害性能和容错能力
- 反模式:在循环中调用 ray.get 会损害并行性
- 反模式:不必要地调用 ray.get 会损害性能
- 反模式:使用 ray.get 按提交顺序处理结果会增加运行时长
- 反模式:使用 ray.get 一次性获取过多对象会导致失败
- 反模式:通过过于细粒度的任务过度并行会损害加速效果
- 反模式:重复定义相同的远程函数或类会损害性能
- 反模式:重复按值传递相同的较大参数会损害性能
- 反模式:闭包捕获大对象会损害性能
- 反模式:使用全局变量在任务和 actor 之间共享状态
- 反模式:带外序列化 ray.ObjectRef
- 反模式:在应用程序代码中创建新进程