RL Swarm:去中心化强化学习协作训练平台
项目概述
RL Swarm 是由Gensyn团队维护的去中心化强化学习协作训练平台。该系统允许用户加入"蜂群"与其他参与者共同训练模型,利用集体智能提升训练效率。核心特点包括:
- 真正的P2P架构,无需中心化服务器
- 支持从消费级设备到专业GPU集群的异构硬件
- 通过Gensyn测试网实现链上身份追踪
- 基于GenRL-Swarm库的可组合框架
当前测试网运行的是reasoning-gym蜂群,专注于训练模型解决多样化推理任务。
功能特性
核心能力
- 🐝 去中心化协作训练:通过DHT网络实现节点间通信
- 🔗 区块链集成:智能合约记录训练进度和贡献
- 📊 动态资源分配:根据硬件性能自动分配模型大小
- :puzzle_piece: 模块化设计:支持自定义多智能体多阶段环境
- 🌐 Web监控界面:实时查看训练指标和节点状态
支持模型
当前默认模型池包含:
- Gensyn/Qwen2.5-0.5B-Instruct
- Qwen/Qwen3-0.6B
- nvidia/AceInstruct-1.5B
- dnotitia/Smoothie-Qwen3-1.7B
- Gensyn/Qwen2.5-1.5B-Instruct
安装指南
硬件要求
最低配置:
- arm64/x86 CPU (32GB RAM)
- Python ≥ 3.8
推荐配置:
- NVIDIA GPU (RTX 3090/4090/5090, A100, H100)
安装步骤
- 克隆仓库:
git clone https://github.com/gensyn-ai/rl-swarm.git
cd rl-swarm
- 安装依赖:
pip install -r requirements.txt
- 配置环境变量:
export SWARM_CONTRACT="0xFaD7C5e93f28257429569B854151A1B8DCD404c2"
export CONNECT_TO_TESTNET=true
- 启动训练节点:
./start_swarm.sh
使用说明
基础使用
加入测试网蜂群:
from hivemind_exp import HivemindNode
node = HivemindNode(
model_name="Gensyn/Qwen2.5-0.5B-Instruct",
is_coordinator=False
)
node.connect_to_swarm()
Web界面
启动监控服务:
docker-compose build --no-cache
docker-compose up
访问 http://localhost:8080
查看实时训练数据。
核心代码
DHT通信模块
class HivemindNode:
"""P2P节点核心类"""
def __init__(self, model_name: str, key: str = ""):
self.model_name = model_name
self.key = key or str(uuid.uuid4())
self.round_cache = defaultdict(dict)
def get_stage_outputs(self, r, s):
"""获取指定阶段输出"""
return self.round_cache.get((r, s))
def put_stage_outputs(self, r, s, question, value):
"""存储阶段输出"""
self.round_cache[(r, s)][question] = value
智能合约交互
class SwarmCoordinator:
"""处理链上交互"""
def __init__(self, web3: Web3, contract_address: str):
self.web3 = web3
self.contract = web3.eth.contract(
address=contract_address,
abi=json.load(open("contracts/SwarmCoordinator.json"))["abi"]
)
def register_peer(self, peer_id):
"""注册节点到合约"""
self.contract.functions.registerPeer(peer_id).transact()
消息处理
def stage3_message(node_key: str, question: str, outputs: dict):
"""生成第三阶段训练消息"""
try:
decision = outputs["final_agent_decision"][node_key]
feedback = _extract_tagged(decision, "summarize_feedback")
majority = _extract_tagged(decision, "majority")
return f"{feedback}...Majority: {majority}"
except Exception:
return outputs["answer"]
贡献指南
我们欢迎社区贡献!请遵循以下规范:
- 使用英文提交PR
- 每个分支只包含一个功能修改
- 编写清晰的提交信息
- 关联相关issue
问题报告请包含:
- 重现步骤
- 预期与实际行为
- 环境信息
- 日志文件(非截图)
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码