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

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


相关推荐
Larry_Yanan19 小时前
Qt多进程(六)共享内存和信号量
开发语言·qt
BD_Marathon19 小时前
bean基础配置
java·开发语言
东方忘忧19 小时前
Qt使用QDesktopServices::openUrl打开系统默认应用(如浏览器,文件,文件夹和邮件)
开发语言·qt
计算机内卷的N天19 小时前
qt的模态和非模态状态
开发语言·qt
Francek Chen19 小时前
【自然语言处理】应用04:自然语言推断与数据集
人工智能·pytorch·深度学习·神经网络·自然语言处理
一颗青果1 天前
HTTP协议详解
linux·网络·网络协议·http
半桶水专家1 天前
go语言中的结构体嵌入详解
开发语言·后端·golang
冰西瓜6001 天前
从项目入手机器学习——鸢尾花分类
人工智能·机器学习·分类·数据挖掘
爱思德学术1 天前
中国计算机学会(CCF)推荐学术会议-C(人工智能):IJCNN 2026
人工智能·神经网络·机器学习
广州灵眸科技有限公司1 天前
瑞芯微(EASY EAI)RV1126B CAN使用
linux·网络·单片机·嵌入式硬件