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

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


相关推荐
AI-好学者几秒前
MCP企业运用全面知识点-基础篇
服务器·开发语言·网络·人工智能·python·架构
ch.ju4 分钟前
Java程序设计(第3版)第四章——类加载
java·开发语言
河阿里5 分钟前
SLF4J深度指南(Java):从原理到 Spring 项目实战
java·开发语言·spring
小沈同学呀8 分钟前
飞书机器人+Spring AI Function Calling实战-扔掉MCP Client让LLM直接操控工具
java·开发语言·functioncalling·spring ai·飞书机器人
Sam09279 分钟前
【AI 算法精讲 13】朴素贝叶斯:文本分类的基石
人工智能·python·算法·ai
2601_954971139 分钟前
金融职业发展:应用统计 vs 大数据管理,如何选择?
深度学习
SilentSamsara12 分钟前
模型可解释性业务化:SHAP/LIME 的业务汇报与合规审查
人工智能·算法·机器学习·自动化
ai生成式引擎优化技术12 分钟前
WSaiOS:面向认知资产与工程化认知流程的智能操作系统架构
python·架构·django·virtualenv·pygame
STLearner14 分钟前
ICML 2026 | 时间序列(Time Series)论文总结【基础模型,生成,分类,异常检测,插补,表示学习和分析等】
论文阅读·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
雨师@14 分钟前
go语言项目--实例化(图书管理)--006
开发语言·后端·golang