设计模式与反模式#
本节是编写 Ray 应用程序的常见设计模式和反模式的集合。
- 模式:使用嵌套任务实现嵌套并行
- 模式:使用生成器减少堆内存使用
- 模式:使用 ray.wait 限制待处理任务的数量
- 模式:使用资源来限制并发运行的任务数量
- 模式:使用 asyncio 并发运行 actor 方法
- 模式:使用一个角色来同步其他任务和角色
- 模式:使用一个监督者角色来管理角色树
- 模式:使用管道技术来增加吞吐量
- 反模式:从任务中返回 ray.put() 的 ObjectRefs 会损害性能和容错性
- 反模式:在循环中调用 ray.get 会损害并行性
- 反模式:不必要的调用 ray.get 会损害性能
- 反模式:使用 ray.get 按提交顺序处理结果会增加运行时间
- 反模式:使用 ray.get 一次性获取太多对象会导致失败
- 反模式:过度并行化导致任务粒度过细,损害加速效果
- 反模式:重新定义相同的远程函数或类会损害性能
- 反模式:重复按值传递相同的大参数会损害性能
- 反模式:闭包捕获大型对象会损害性能
- 反模式:使用全局变量在任务和角色之间共享状态