分布式计算框架学习笔记
一、🌐 为什么需要分布式计算框架?
-
资源受限:单台机器 CPU/GPU 内存有限。
-
任务复杂:模型训练、数据处理、仿真并发等任务耗时严重。
-
并行优化:通过任务拆分和并行执行提升效率。
-
可扩展部署:适配从本地开发到多节点集群环境。
二、🧱 分布式计算框架分类
类型 | 代表框架 | 适用场景 |
---|---|---|
通用分布式计算 | Ray, Dask | 并行任务调度、RL、大规模实验 |
分布式深度学习 | Horovod, TorchElastic, DeepSpeed | 大模型训练,GPU 资源分配 |
大数据计算 | Apache Spark, Hadoop | ETL、SQL、批处理分析 |
消息传递模型 | MPI, RPC | 底层通信与高性能计算 |
调参和实验管理 | Ray Tune, Optuna | 超参搜索,RL/ML 实验调度 |
三、🔧 核心框架详解
1. Ray ⭐⭐⭐⭐⭐
-
特点:多用途通用框架,涵盖 RLlib(强化学习)、Tune(调参)、Serve(部署)、Data(数据处理)
-
编程范式:Actor 模型,remote function,支持多进程/节点自动资源调度
-
应用:强化学习、数据并行仿真、调参、大模型训练调度
2. Dask
-
特点:专注于分布式数据科学,像并行版 NumPy/Pandas
-
编程范式:延迟执行 DAG,支持 DataFrame/Array/Bag 类型
-
应用:大规模数据分析,适合数据工程前处理
3. Horovod
-
特点:TensorFlow/PyTorch/Keras 分布式训练库,基于 MPI/NCCL 实现高效梯度同步
-
编程范式:AllReduce 通信模型
-
应用:分布式深度学习模型同步训练(例如 GPT 类模型)
4. Spark
-
特点:大数据处理框架,基于 RDD/SQL/DataFrame
-
编程范式:批处理模型,支持流式处理
-
应用:数据仓库、日志处理、推荐系统离线训练等
与其他常见分布式计算框架对比:
框架 | 特点 | 优势 | 劣势 | 是否支持强化学习 |
---|---|---|---|---|
Ray | 分布式任务调度,RLlib + Tune + Serve | 全功能一体化,RL 特化 | 学习曲线稍高 | ✅(非常优秀) |
Dask | 面向数据分析的并行计算(类似 Pandas) | 易上手,适合分布式 NumPy/Pandas | 不适合复杂 RL 场景 | ❌(弱) |
Horovod | 分布式深度学习训练(TensorFlow/PyTorch) | 高性能同步训练 | 仅支持监督学习,依赖硬件网络 | ❌(非设计用途) |
TorchElastic / Torch Distributed | PyTorch 原生分布式训练 | 强适配 PyTorch,适合大模型训练 | 配置复杂,RL 不适配 | ❌(需自定义) |
MPI4py | Python 封装的 MPI(消息传递接口) | 底层高性能 | 非常底层,开发难度大 | ❌(仅构建基础) |
Spark | 分布式数据处理和大数据分析 | 大数据 ETL、SQL、批处理强 | 对 RL 不友好 | ❌ |
PettingZoo + SuperSuit | 多智能体环境库(不是分布式框架,但常与 RL 结合) | 快速构建 RL 环境 | 需配合 Ray 使用 | ✅(辅助性) |
四、🧠 学习重点概念整理
概念 | 说明 |
---|---|
任务调度(Task Scheduling) | 分配计算任务到多个 worker/node 上执行。 |
资源管理(Resource Management) | 控制 CPU、GPU、内存等资源的使用与分配。 |
分布式数据并行(DDP) | 同步梯度方式在多个设备间训练模型副本。 |
模型并行(Model Parallel) | 将模型切分在多个设备运行(如 GPT-3)。 |
Actor 模型 | 每个 actor 表示一个带状态的执行单元。 |
AllReduce | 用于多个 GPU 间同步参数(Horovod 的核心)。 |
DAG(有向无环图) | Dask、Spark 中的任务依赖调度图。 |
以RAY为例,Ray 是一个由 UC Berkeley 开发的开源分布式计算框架,主要用于加速 Python 应用的并行处理,特别适用于大规模机器学习、强化学习和数据处理任务。以下是 Ray 模块的核心内容总结:
🔧 Ray 的核心功能模块:
模块 | 功能简述 |
---|---|
ray Core | 提供远程任务(remote functions)和 actor 的并行计算框架,是 Ray 的基础。 |
ray[rllib] | 强化学习库,支持多种 RL 算法(如 PPO、DQN),用于构建和训练分布式强化学习系统。 |
ray[train] | 用于分布式机器学习模型训练,支持与 PyTorch、TensorFlow 等深度学习框架集成。 |
ray[tune] | 超参数调优工具,支持分布式、自动化的超参搜索(网格搜索、贝叶斯优化、HyperBand 等)。 |
ray[serve] | 用于在线部署模型服务的高性能框架,支持 RESTful API 接口,适合生产环境。 |
ray[data] | 面向大规模数据处理的模块,支持批处理、数据流水线等,适用于训练数据预处理。 |
🧠 核心概念:
概念 | 说明 |
---|---|
remote function | 用 @ray.remote 修饰的函数,可并发执行。 |
Actor | 带状态的并发计算单元,适用于有状态服务,如强化学习中的环境或策略。 |
任务调度 | Ray 自动将任务分布到多个 CPU/GPU 节点上执行。 |
分布式调度器 | 支持多节点集群运行,不需要手动管理通信。 |
✅ Ray 的优势:
-
易用性:Python 原生语法扩展即可实现并行计算。
-
高扩展性:从单机到大规模集群,支持资源自动调度。
-
生态系统完善:集成了训练(Train)、部署(Serve)、调参(Tune)、强化学习(RLlib)等工具。
-
与现有框架兼容:支持 PyTorch、TensorFlow、XGBoost、LightGBM 等。
📦 安装方式示例:
pip install ray # 安装基础版本
pip install "ray[default]" # 安装完整版本
pip install "ray[rllib]" # 安装强化学习模块
📌 强化学习:
结合强化学习(Reinforcement Learning, RL)的使用,Ray 的模块主要以其子模块 RLlib 为核心,提供了一个高度模块化、可扩展、支持分布式训练的强化学习框架。下面是围绕强化学习在 Ray 中使用的归纳总结和示例:
📚 (1)、RLlib 支持的主要算法
-
离策略算法:DQN, DDPG, TD3, SAC
-
策略梯度类算法:PPO, A3C, IMPALA, APPO
-
多智能体算法:MADDPG, QMIX
-
模块化训练:支持 Policy/Trainer/env 自定义替换
🧩 (2)、使用 RLlib 的关键步骤
-
定义环境(可自定义,也可使用 Gym)
-
选择算法并配置 Trainer
-
使用 Tune 进行训练和调优
-
使用训练好的策略进行评估或部署
✅ (3)、Ray RLlib 强化学习实例(使用 PPO 训练 CartPole)
import ray
from ray import tune
from ray.rllib.algorithms.ppo import PPOConfig# 初始化 Ray(本地或集群)
ray.init()# 使用 PPOConfig 创建训练器
config = PPOConfig().environment(env="CartPole-v1").rollouts(num_rollout_workers=1)# 启动训练
tune.Tuner("PPO",run_config=tune.RunConfig(stop={"episode_reward_mean": 200}),param_space=config.to_dict(),
).fit()
训练完成后,可以加载并评估模型:
from ray.rllib.algorithms.ppo import PPO# 加载训练好的策略
algo = PPO.from_checkpoint("/path/to/checkpoint")# 与环境交互
env = algo.workers.local_worker().env
obs = env.reset()
done = False
while not done:action = algo.compute_single_action(obs)obs, reward, done, info = env.step(action)env.render()
🧠 (4)、优势总结(RLlib + Ray)
优势 | 说明 |
---|---|
分布式能力强 | 原生支持多进程、多节点分布式训练。 |
算法库丰富 | 包含多种算法,便于实验和工程落地。 |
易于集成 | 可与自定义 Gym 环境、Torch 模型无缝对接。 |
超参数优化方便 | 与 ray.tune 一体化调参支持。 |
可扩展性好 | 支持多智能体、异步采样、大规模集群训练。 |
五、📊 框架对比表(总结)
框架 | 适合任务 | 编程复杂度 | 分布式能力 | 强化学习支持 | 部署能力 |
---|---|---|---|---|---|
Ray | RL、调参、训练、仿真 | 中 | ⭐⭐⭐⭐⭐ | ✅ 强 | ✅ Serve 模块 |
Dask | 数据分析、并行任务 | 低 | ⭐⭐⭐ | ❌ | ❌ |
Horovod | 多 GPU 模型训练 | 中 | ⭐⭐⭐⭐ | ❌ | ❌ |
Torch DDP | 分布式训练 | 高 | ⭐⭐⭐⭐ | ❌ | ❌ |
Spark | 大数据处理 | 高 | ⭐⭐⭐⭐⭐ | ❌ | ❌ |
六、📌 学习路径建议
-
基础入门(建议先学 Ray 或 Dask)
-
学习 Actor 模型与
@ray.remote
用法 -
学会创建简单任务调度 + 分布式环境(Ray init 本地/远程)
-
-
强化学习方向推荐
-
深入 Ray RLlib:熟悉 Trainer/Policy/env 结构
-
用 Ray Tune 搜索 RL 超参数
-
构建多智能体环境,测试并发仿真性能
-
-
分布式训练方向推荐
-
理解 PyTorch DDP 或 Horovod 的梯度同步原理
-
掌握多 GPU/多节点训练配置与调试
-
实践部署(配合 Ray Serve 或 Triton)
-
-
数据处理方向推荐
-
掌握 Dask 或 Spark 的 DataFrame 并行操作
-
理解延迟计算、DAG 调度机制
-
七、📂 附加资源推荐
-
📘 Ray 官方文档:https://docs.ray.io
-
📘 Horovod 入门教程:GitHub - horovod/horovod: Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.
-
📘 Dask 快速开始:Dask — Dask documentation
-
📘 Spark 教程(中文):https://spark.apachecn.org
-
📺 推荐课程:Berkeley CS285 强化学习、HuggingFace DDP 实践指南