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:强化学习

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


相关推荐
爱加糖的橙子2 小时前
Dify升级到Dify v1.10.1-fix修复CVE-2025-55182漏洞
人工智能·python·ai
廋到被风吹走2 小时前
【Java】Exception 异常体系解析 从原理到实践
java·开发语言
Pyeako2 小时前
python网络爬虫
开发语言·爬虫·python·requsets库
diegoXie2 小时前
【Python】 中的 * 与 **:Packing 与 Unpacking
开发语言·windows·python
编程设计3662 小时前
pandas 中 DataFrame、mean()、groupby 和 fillna 函数的核心作用
机器学习·数据挖掘·pandas
_codemonster2 小时前
深度学习实战(基于pytroch)系列(四十八)AdaGrad优化算法
人工智能·深度学习·算法
AI即插即用3 小时前
即插即用系列 | Attention GhostUNet++:基于多维注意力和 Ghost 模块的高效 CT 图像脂肪与肝脏分割网络
网络·图像处理·人工智能·深度学习·神经网络·计算机视觉·视觉检测
qq_479875433 小时前
C++ 鸭子类型” (Duck Typing)
开发语言·c++