Python Ray 分布式计算应用

Ray 除了 Tune 做超参搜索,其实是一整套「分布式 Python / AI 计算平台」,常用的几块可以按这个层次来理解:


1. Ray Core:分布式 Python 基础设施

Ray Core = 分布式任务 + Actor + 对象存储,是所有高级库的基础。

核心三个原语:

  1. Tasks(远程函数)

    • 把一个普通函数用 @ray.remote 标一下,就可以分布式异步执行。
    • 常用场景:批处理、并行推理、网格搜索、模拟等。
    python 复制代码
    import ray, time
    
    ray.init()
    
    @ray.remote
    def f(x):
        time.sleep(1)
        return x * x
    
    futures = [f.remote(i) for i in range(8)]
    print(ray.get(futures))   # 8 个任务并行跑完
  2. Actors(有状态 worker)

    • 用在「需要长生命周期 / 持有状态」的场景,比如:缓存、环境仿真、模型服务、参数服务器等。
    python 复制代码
    @ray.remote
    class Counter:
        def __init__(self):
            self.value = 0
        def inc(self):
            self.value += 1
            return self.value
    
    c = Counter.remote()
    print(ray.get(c.inc.remote()))
  3. Objects(分布式对象存储)

    • ray.put / ray.get 管理跨节点共享的大数组、模型输出等。

一句话: Ray Core 让你把任何 Python 代码「并行化 + 分布式化」,不仅限于深度学习。


2. Ray Train:分布式训练(DDP、Horovod 那一类的替代/封装)

Ray Train 是专门做 多卡 / 多机训练 的库,支持 PyTorch、TF、XGBoost 等。

常见能力:

  • 简化分布式训练启动(不用自己写 torch.distributed.launch
  • 集成 DDP、FSDP 等,自动管理进程、容错、重试
  • 可以和 Ray Data / Tune 串起来:数据 → 训练 → 调参

典型用法(PyTorch):

python 复制代码
from ray.train.torch import TorchTrainer
from ray.train import ScalingConfig

def train_loop_per_worker(config):
    import torch
    # 这里写单机单卡训练逻辑,Ray 帮你在多 worker 上复制
    ...

trainer = TorchTrainer(
    train_loop_per_worker=train_loop_per_worker,
    scaling_config=ScalingConfig(num_workers=4, use_gpu=True),
)
result = trainer.fit()

3. Ray Data:分布式数据加载 & 预处理

Ray Data 是一个 面向 ML 的分布式数据流水线:读数据 → transform → 直接喂给 Train/Tune/Serve。

常用场景:

  • 分布式读取 Parquet/CSV/图片/云存储
  • 预处理(map、filter、batch)
  • 直接输出给分布式训练,避免自己管理 sharding / worker rank
python 复制代码
import ray
import ray.data as rd

ray.init()

ds = rd.read_parquet("s3://bucket/train.parquet")
ds = ds.map(lambda row: {"x": row["x"] / 255.0, "y": row["y"]})
for batch in ds.iter_batches(batch_size=128):
    ...

4. Ray Serve:在线服务 / 模型部署

Ray Serve 是一个分布式 模型服务框架,支持 HTTP、gRPC,适合:

  • 部署深度学习模型(包括多模型 ensemble、流水线)
  • 动态伸缩、A/B 测试、路由,不用自己造 gunicorn + 多进程那一套。

简单例子(FastAPI + Serve):

python 复制代码
from ray import serve
import ray

ray.init()
serve.start()

@serve.deployment(num_replicas=2)
class MyModel:
    def __init__(self):
        self.model = ...  # load pytorch model
    async def __call__(self, request):
        data = await request.json()
        # 推理逻辑
        return {"result": ...}

MyModel.deploy()
# 然后本地 http://127.0.0.1:8000/MyModel 发请求即可

5. RLlib:大规模强化学习

RLlib 是 Ray 自带的 分布式强化学习库,适合:

  • 多环境并行采样
  • 多智能体、多算法(PPO、DQN 等)统一接口
  • 工业级 RL 训练(游戏、机器人、推荐、控制等)

示意用法:

python 复制代码
import ray
from ray import tune
from ray.rllib.algorithms.ppo import PPOConfig

ray.init()
config = PPOConfig().environment("CartPole-v1").rollouts(num_rollout_workers=4)
algo = config.build()
for i in range(10):
    result = algo.train()
    print(result["episode_reward_mean"])

6. 调度 & 集群相关:Ray Jobs / Dashboard / KubeRay

除了编程接口,Ray 还有几块常用的「工程向」功能:

  1. Ray Jobs
    • 一条命令把你的 Python 脚本提交到 Ray 集群执行
    • 类似简单版的 job scheduler:ray job submit -- python my_script.py
  2. Ray Dashboard
    • Web UI,看集群资源、任务图、Actor 状态、日志等
    • 调试性能瓶颈、监控训练 / 推理进度非常好用
  3. KubeRay
    • 在 Kubernetes 上管理 Ray 集群(CRD + Operator)
    • 做「云上统一 ML 平台」时常用

7. 实际项目里常见的"组合拳"

下面是几个典型 workflow,方便在脑子里形成场景感:

  1. 数据+训练+调参一条龙
    • Ray Data 负责分布式 ETL + 读取
    • Ray Train 负责分布式训练
    • Ray Tune 负责超参搜索
  2. 训练+部署一体化
    • 训练用 Ray Train / Tune 跑完
    • 最优模型 checkpoint 直接挂到 Ray Serve 上对外提供服务
  3. 多模型在线系统
    • Core 的 Actors 作为长期活着的"微服务"(特征服务、召回、ranking)
    • Serve 负责 HTTP/gRPC 入口和路由
    • 后台 Tune 不定期做新一轮超参搜索/模型刷新

总结一句话

Ray 不是"一个调参工具",而是一个"分布式 Python & AI 计算平台"。

除了 Tune,还常用:

  • Ray Core:并行任务、actor、有状态服务
  • Ray Train:多机多卡训练
  • Ray Data:分布式数据处理
  • Ray Serve:在线推理 / 模型部署
  • RLlib:强化学习

创作不易,麻烦点点赞和关注咯!


相关推荐
kszlgy2 小时前
Day 52 神经网络调参指南
python
wrj的博客4 小时前
python环境安装
python·学习·环境配置
lcreek4 小时前
Linux信号机制详解:阻塞信号集与未决信号集
linux·操作系统·系统编程
Pyeako4 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
星火开发设计4 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
shandianchengzi4 小时前
【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上
linux·运维·docker·tailscale
TTGGGFF5 小时前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
2501_944424125 小时前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
哥布林学者5 小时前
吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(四)分层 softmax 和负采样
深度学习·ai
John Song5 小时前
Linux机器怎么查看进程内存占用情况
linux·运维·chrome