Mini Ray 机制预览:目标与边界
这里的 Mini Ray 是一个教学附件,不是 Ray 的替代品。它只做一件事:用少量 Python 代码把 Ray Core 的几个抽象跑起来,让你把前面章节学到的概念(Task、ObjectRef、Actor、对象存储、调度)落到可执行的代码上。
这是一个机制预览版,不是完整实现课。更深入的 Mini Ray 实现系列会放到独立站点 mini-ray.llm101.moe,那个系列会更接近真实系统的边界。
代码位置:
text
examples/mini_ray_runtime/
├── mini_ray/
│ ├── __init__.py
│ └── core.py
├── demos/
└── tests/这个预览版能跑什么
目标 API:
python
import mini_ray as ray
ray.init(num_workers=4)
@ray.remote
def square(x):
return x * x
refs = [square.remote(i) for i in range(8)]
print(ray.get(refs))Actor:
python
@ray.remote
class Counter:
def __init__(self):
self.value = 0
def incr(self):
self.value += 1
return self.value
counter = Counter.remote()
print(ray.get(counter.incr.remote()))功能清单
| 能力 | Mini Ray 是否支持 | 说明 |
|---|---|---|
@ray.remote 函数 | 支持 | 包装普通函数,提交异步任务 |
ObjectRef | 支持 | 代表未来可获取的对象 |
put/get/wait | 支持 | 模拟对象存储 |
| 资源声明 | 支持 | num_cpus、num_gpus、resources |
| Actor | 支持 | 每个 Actor 一个线程和队列 |
| 异常传播 | 支持 | get 时抛出 MiniRayTaskError |
| 多进程 | 不支持 | 用线程模拟 Worker |
| 多节点 | 不支持 | 只有本地运行时 |
| 共享内存 | 不支持 | 用 Python 字典保存对象 |
| 容错重试 | 不支持 | 只记录异常 |
为什么只做到这里
真实 Ray 的复杂性主要来自这些生产级要求:
- 跨进程和跨节点通信。
- 对象共享内存与零拷贝。
- 节点故障和任务重建。
- 集群级资源调度。
- Dashboard、Jobs、runtime_env。
在入门教程里同时处理这些问题,会让读者信息过载。所以这个预览版只保留一条运行时主线:
这条路径跑通之后,再看真实 Ray 的 Raylet、Core Worker、Object Store 和 GCS 会容易很多。
运行测试
bash
uv run python -m unittest discover -s examples/mini_ray_runtime/tests直接运行 Demo:
bash
uv run python examples/mini_ray_runtime/demos/01_tasks.py
uv run python examples/mini_ray_runtime/demos/03_actor_counter.py
uv run python examples/mini_ray_runtime/demos/05_scheduler_resources.py推荐阅读方式
先通读 examples/mini_ray_runtime/mini_ray/core.py,不要急着优化。它的类顺序就是运行时结构:
ObjectRef和ObjectStore。ResourceScheduler。Runtime。RemoteFunction。RemoteActorClass、ActorHandle、ActorMethod。- 顶层 API:
init、remote、get、put、wait。
如果你想继续做一个更接近真实系统边界的小型 Ray runtime,可以看本章最后的“继续学习 Mini Ray”。