mcpField
P
pufferlib

pufferlib

github.com/leonchaox开发99471 次安装15 周前更新
代码仓库

关于 pufferlib

pufferlib 是面向强化学习研究者和开发者的 Python 库,用于训练单 Agent 与多 Agent 策略。它结合 PPO 训练、并行环境模拟、自定义环境开发及现有 RL 框架集成。

主要功能

  1. 01PuffeRL PPO 训练
  2. 02并行环境向量化
  3. 03支持单 Agent 与多 Agent
  4. 04使用 PufferEnv 创建环境
  5. 05集成 Gymnasium 和 PettingZoo

适用场景

  1. 01在基准环境中训练 Agent
  2. 02构建自定义单 Agent 任务
  3. 03开展多 Agent 强化学习实验
  4. 04提高环境模拟吞吐量

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/leonchaox/qinyan-academic-skills --skill pufferlib

安装后在 Claude Code 中输入/pufferlib确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
environments.md
integration.md
policies.md
training.md
vectorization.md
scripts/
env_template.py
train_template.py

详细介绍

PufferLib - 高性能强化学习

概述

PufferLib 是一个高性能强化学习库,专为快速并行环境模拟和训练而设计。它通过优化向量化、原生多智能体支持和高效的 PPO 实现(PuffeRL),实现每秒数百万步的训练速度。该库提供 Ocean 套件中的 20 多个环境,并可与 Gymnasium、PettingZoo 及专业 RL 框架无缝集成。

何时使用此技能

在以下情况下使用此技能:

  • 使用 PPO 训练 RL Agent,适用于任何环境(单智能体或多智能体)
  • 使用 PufferEnv API 创建自定义环境
  • 优化性能,实现并行环境模拟(向量化)
  • 集成现有环境,包括 Gymnasium、PettingZoo、Atari、Procgen 等
  • 使用 CNN、LSTM 或自定义架构开发策略
  • 扩展 RL,实现每秒数百万步的训练速度,加快实验
  • 进行多智能体 RL,使用原生多智能体环境支持

核心功能

1. 高性能训练(PuffeRL)

PuffeRL 是 PufferLib 优化的 PPO+LSTM 训练算法,可实现每秒 100 万至 400 万步。

快速开始训练:

# CLI training
puffer train procgen-coinrun --train.device cuda --train.learning-rate 3e-4

# Distributed training
torchrun --nproc_per_node=4 train.py

Python 训练循环:

import pufferlib
from pufferlib import PuffeRL

# Create vectorized environment
env = pufferlib.make('procgen-coinrun', num_envs=256)

# Create trainer
trainer = PuffeRL(
    env=env,
    policy=my_policy,
    device='cuda',
    learning_rate=3e-4,
    batch_size=32768
)

# Training loop
for iteration in range(num_iterations):
    trainer.evaluate()  # Collect rollouts
    trainer.train()     # Train on batch
    trainer.mean_and_log()  # Log results

如需全面的训练指南,请阅读 references/training.md,了解:

  • 完整的训练工作流和 CLI 选项
  • 使用 Protein 调优超参数
  • 分布式多 GPU/多节点训练
  • 日志记录器集成(Weights & Biases、Neptune)
  • 检查点和恢复训练
  • 性能优化技巧
  • 课程学习模式
2. 环境开发(PufferEnv)

使用 PufferEnv API 创建高性能自定义环境。

基本环境结构:

import numpy as np
from pufferlib import PufferEnv

class MyEnvironment(PufferEnv):
    def __init__(self, buf=None):
        super().__init__(buf)

        # Define spaces
        self.observation_space = self.make_space((4,))
        self.action_space = self.make_discrete(4)

        self.reset()

    def reset(self):
        # Reset state and return initial observation
        return np.zeros(4, dtype=np.float32)

    def step(self, action):
        # Execute action, compute reward, check done
        obs = self._get_observation()
        reward = self._compute_reward()
        done = self._is_done()
        info = {}

        return obs, reward, done, info

使用模板脚本: scripts/env_template.py 提供完整的单智能体和多智能体环境模板,包含以下示例:

  • 不同类型的观测空间(向量、图像、字典)
  • 不同形式的动作空间(离散、连续、多离散)
  • 多智能体环境结构
  • 测试工具

如需完整的环境开发指南,请阅读 references/environments.md,了解:

  • PufferEnv API 详情和原地操作模式
  • 观测空间和动作空间定义
  • 多智能体环境创建
  • Ocean 套件(20 多个预构建环境)
  • 性能优化(从 Python 到 C 的工作流)
  • 环境封装器和最佳实践
  • 调试和验证技术
3. 向量化和性能

通过优化并行模拟实现最高吞吐量。

向量化设置:

import pufferlib

# Automatic vectorization
env = pufferlib.make('environment_name', num_envs=256, num_workers=8)

# Performance benchmarks:
# - Pure Python envs: 100k-500k SPS
# - C-based envs: 100M+ SPS
# - With training: 400k-4M total SPS

关键优化:

  • 使用共享内存缓冲区,实现零拷贝观测传递
  • 使用忙等待标志代替管道/队列
  • 使用冗余环境实现异步返回
  • 每个工作进程运行多个环境

如需向量化优化指南,请阅读 references/vectorization.md,了解:

  • 架构和性能特性
  • 工作进程和批次大小配置
  • 串行、多进程和异步模式
  • 共享内存和零拷贝模式
  • 大规模分层向量化
  • 多智能体向量化策略
  • 性能分析和故障排查
4. 策略开发

使用可选工具将策略构建为标准 PyTorch 模块。

基本策略结构:

import torch.nn as nn
from pufferlib.pytorch import layer_init

class Policy(nn.Module):
    def __init__(self, observation_space, action_space):
        super().__init__()

        # Encoder
        self.encoder = nn.Sequential(
            layer_init(nn.Linear(obs_dim, 256)),
            nn.ReLU(),
            layer_init(nn.Linear(256, 256)),
            nn.ReLU()
        )

        # Actor and critic heads
        self.actor = layer_init(nn.Linear(256, num_actions), std=0.01)
        self.critic = layer_init(nn.Linear(256, 1), std=1.0)

    def forward(self, observations):
        features = self.encoder(observations)
        return self.actor(features), self.critic(features)

如需完整的策略开发指南,请阅读 references/policies.md,了解:

  • 用于图像观测的 CNN 策略
  • 使用优化 LSTM 的循环策略(推理速度提升 3 倍)
  • 用于复杂观测的多输入策略
  • 连续动作策略
  • 多智能体策略(共享参数与独立参数)
  • 高级架构(注意力、残差)
  • 观测归一化和梯度裁剪
  • 策略调试和测试
5. 环境集成

无缝集成热门 RL 框架中的环境。

Gymnasium 集成:

import gymnasium as gym
import pufferlib

# Wrap Gymnasium environment
gym_env = gym.make('CartPole-v1')
env = pufferlib.emulate(gym_env, num_envs=256)

# Or use make directly
env = pufferlib.make('gym-CartPole-v1', num_envs=256)

PettingZoo 多 Agent 集成:

# Multi-agent environment
env = pufferlib.make('pettingzoo-knights-archers-zombies', num_envs=128)

支持的框架:

  • Gymnasium / OpenAI Gym
  • PettingZoo(parallel 和 AEC)
  • Atari(ALE)
  • Procgen
  • NetHack / MiniHack
  • Minigrid
  • Neural MMO
  • Crafter
  • GPUDrive
  • MicroRTS
  • Griddly
  • 以及更多……

有关集成详情,请阅读 references/integration.md,了解:

  • 各框架的完整集成示例
  • 自定义包装器(观测、奖励、帧堆叠、动作重复)
  • 空间展平与还原
  • 环境注册
  • 兼容模式
  • 性能注意事项
  • 集成调试

快速入门工作流

训练现有环境
  1. 从 Ocean 套件或兼容框架中选择环境
  2. 使用 scripts/train_template.py 作为起点
  3. 针对任务配置超参数
  4. 使用 CLI 或 Python 脚本运行训练
  5. 使用 Weights & Biases 或 Neptune 监控
  6. 参考 references/training.md 进行优化
创建自定义环境
  1. 从 scripts/env_template.py 开始
  2. 定义观测空间和动作空间
  3. 实现 reset() 和 step() 方法
  4. 在本地测试环境
  5. 使用 pufferlib.emulate() 或 make() 进行向量化
  6. 参考 references/environments.md 了解高级模式
  7. 如有需要,使用 references/vectorization.md 进行优化
开发策略
  1. 根据观测选择架构:
    • 向量观测 → MLP 策略
    • 图像观测 → CNN 策略
    • 序列任务 → LSTM 策略
    • 复杂观测 → 多输入策略
  2. 使用 layer_init 进行适当的权重初始化
  3. 遵循 references/policies.md 中的模式
  4. 在全面训练前,先使用环境进行测试
性能优化
  1. 对当前吞吐量(每秒步数)进行性能分析
  2. 检查向量化配置(num_envs、num_workers)
  3. 优化环境代码(原地操作、numpy 向量化)
  4. 对关键路径考虑使用 C 实现
  5. 使用 references/vectorization.md 进行系统化优化

资源

scripts/

train_template.py — 完整的训练脚本模板,包括:

  • 环境创建与配置
  • 策略初始化
  • 日志记录器集成(WandB、Neptune)
  • 带检查点保存的训练循环
  • 命令行参数解析
  • 多 GPU 分布式训练设置

env_template.py — 环境实现模板:

  • 单 Agent PufferEnv 示例(网格世界)
  • 多 Agent PufferEnv 示例(协作导航)
  • 多种观测空间/动作空间模式
  • 测试工具
references/

training.md - 全面的训练指南:

  • 训练工作流和 CLI 选项
  • 超参数配置
  • 分布式训练(多 GPU、多节点)
  • 监控和日志记录
  • 检查点
  • 蛋白质超参数调优
  • 性能优化
  • 常见训练模式
  • 故障排查

environments.md - 环境开发指南:

  • PufferEnv API 和特性
  • 观测和动作空间
  • 多 Agent 环境
  • Ocean 套件环境
  • 自定义环境开发工作流
  • 从 Python 到 C 的优化路径
  • 第三方环境集成
  • 包装器和最佳实践
  • 调试

vectorization.md - 向量化优化:

  • 架构和关键优化
  • 向量化模式(串行、多进程、异步)
  • 工作进程和批次配置
  • 共享内存和零拷贝模式
  • 高级向量化(分层、自定义)
  • 多 Agent 向量化
  • 性能监控和分析
  • 故障排查和最佳实践

policies.md - 策略架构指南:

  • 基本策略结构
  • 用于图像的 CNN 策略
  • 带优化的 LSTM 策略
  • 多输入策略
  • 连续动作策略
  • 多 Agent 策略
  • 高级架构(注意力、残差)
  • 观测处理和反展平
  • 初始化和归一化
  • 调试和测试

integration.md - 框架集成指南:

  • Gymnasium 集成
  • PettingZoo 集成(parallel 和 AEC)
  • 第三方环境(Procgen、NetHack、Minigrid 等)
  • 自定义包装器(观测、奖励、帧堆叠等)
  • 空间转换和反展平
  • 环境注册
  • 兼容性模式
  • 性能注意事项
  • 集成调试

成功技巧

  1. 从简单开始:先使用 Ocean 环境或集成 Gymnasium,再创建自定义环境

  2. 尽早进行分析:从一开始就测量每秒步数,以找出瓶颈

  3. 使用模板:scripts/train_template.py 和 scripts/env_template.py 可作为可靠的起点

  4. 按需阅读参考文档:每个参考文件都是独立的,专注于特定功能

  5. 逐步优化:先使用 Python,再进行分析,然后根据需要使用 C 优化关键路径

  6. 善用向量化:PufferLib 的向量化是实现高吞吐量的关键

  7. 监控训练:使用 WandB 或 Neptune 跟踪实验并及早发现问题

  8. 测试环境:在扩大训练规模之前,先验证环境逻辑

  9. 查看现有环境:Ocean 套件提供 20 多个预构建环境

  10. 使用正确的初始化:策略始终使用 pufferlib.pytorch 中的 layer_init

常见用例

在标准基准上训练
# Atari
env = pufferlib.make('atari-pong', num_envs=256)

# Procgen
env = pufferlib.make('procgen-coinrun', num_envs=256)

# Minigrid
env = pufferlib.make('minigrid-empty-8x8', num_envs=256)
多 Agent 学习
# PettingZoo
env = pufferlib.make('pettingzoo-pistonball', num_envs=128)

# Shared policy for all agents
policy = create_policy(env.observation_space, env.action_space)
trainer = PuffeRL(env=env, policy=policy)
自定义任务开发
# Create custom environment
class MyTask(PufferEnv):
    # ... implement environment ...

# Vectorize and train
env = pufferlib.emulate(MyTask, num_envs=256)
trainer = PuffeRL(env=env, policy=my_policy)
高性能优化
# Maximize throughput
env = pufferlib.make(
    'my-env',
    num_envs=1024,      # Large batch
    num_workers=16,     # Many workers
    envs_per_worker=64  # Optimize per worker
)

安装

uv pip install pufferlib

文档

评论

支持 Markdown