FAQ
Ray 会自动让所有 Python 程序变快吗?
不会。你需要把程序拆成合适粒度的 Task 或 Actor。任务太小、数据传输太大、循环里 ray.get,都可能让程序更慢。
ObjectRef 和 Future 有什么区别?
它们都代表未来结果。但 ObjectRef 是 Ray 对象系统的一部分,可以跨进程、跨节点传递,并参与对象存储、依赖解析和生命周期管理。
什么时候用 Task,什么时候用 Actor?
无状态、可独立并行的计算用 Task。需要保存状态、复用昂贵资源或维护长连接时用 Actor。
num_cpus 会限制函数只能用几个 CPU 吗?
不会。它主要是调度配额。底层 BLAS、PyTorch、TensorFlow 等库的线程数仍要单独配置。
为什么我的 Ray 程序比本地还慢?
常见原因:
- 任务太细。
- 数据序列化和传输成本过高。
- 在循环里
ray.get。 - 单个 Actor 成为瓶颈。
- 资源声明导致任务排队。
Mini Ray 能学到真实 Ray 的什么?
Mini Ray 能帮助你理解核心控制流:提交任务、返回引用、等待对象、调度资源、Actor 串行处理消息。它不能代表真实 Ray 的多进程、多节点、共享内存、容错和生产调试能力。
读 Ray 源码应该从哪里开始?
从 Python API 层开始:远程函数、Actor、Worker。然后跟到 Core Worker、Raylet、Object Store 和 GCS。不要一开始就读整个仓库。
生产环境应该先学哪些内容?
至少掌握:
- Ray Core 的 Task / Actor / Object Store。
- Dashboard 和 State API。
- 资源声明和 Placement Group。
- 对象存储内存和 spill。
- Task/Actor 容错策略。
- 你使用的上层库,例如 Ray Data、Train 或 Serve。