google-deepmind/reverb
Reverb is an efficient and easy-to-use data storage and transport system designed for machine learning research
Reverb – 面向強化學習的可擴展經驗回放服務
是什麼 – Reverb 是一個以 Python 為首要設計的函式庫(擁有快速的 C++ 核心),為強化學習(RL)研究提供網路化資料儲存服務。它允許執行一個或多個 伺服器,用以持有包含 表(例如:轉移、軌跡或任意張量)的項目。客戶端可透過 gRPC 插入資料,根據可配置的策略進行取樣,並更新優先權。其設計模仿了離策略強化學習演算法中使用的 經驗回放 缓衝區,但 API 足夠靈活,也可用於在策略、監督學習或一般的分散式資料工作負載。
核心概念(如 README 所述)
| 概念 | 作用 |
|---|---|
| 伺服器 | 持有一個或多個 表;每個表定義容量、取樣/移除策略和速率限制。 |
| 表 | 項目 的容器;一個項目引用一個或多個 資料元素(實際的張量)。項目是輕量的,因為它們僅儲存參考,允許多個項目共享同一資料元素。 |
| 選擇器 | 定義如何選擇項目用於取樣或移除。內建選擇器:Uniform、Prioritized、FIFO、LIFO、MinHeap、MaxHeap。 |
| 速率限制器 | 控制何時允許插入或取樣(例如:MinSize、SampleToInsertRatio、Queue、Stack)。 |
| 分片 | 可以執行多個獨立的 Reverb 伺服器並進行負載平衡;資料不複製,因此系統可水平擴展,但可能遺失資料。 |
| 檢查點 | 伺服器可將完整狀態轉存至磁碟,並在之後還原,從而為長時間訓練提供容錯能力。 |
典型工作流程(快速入門摘錄)
import reverb
# 1️⃣ 定義一個包含單一表的伺服器
server = reverb.Server(tables=[
reverb.Table(
name='my_table',
sampler=reverb.selectors.Uniform(), # 用於取樣的項目選擇方式
remover=reverb.selectors.Fifo(), # 表滿時移除項目的策略
max_size=100,
rate_limiter=reverb.rate_limiters.MinSize(1)),
])
# 2️⃣ 連接客戶端
client = reverb.Client(f'localhost:{server.port}')
# 3️⃣ 插入資料(單一元素或軌跡)
client.insert([0, 1], priorities={'my_table': 1.0})
# 4️⃣ 取樣
samples = list(client.sample('my_table', num_samples=2))
README 還展示了更豐富的 軌跡寫入器,允許在提交前構建引用一系列資料元素的項目。
為何使用 Reverb?
- 效能 – 核心為 C++ 並使用 gRPC,同時提供 TensorFlow 操作以實現與
tf.data流水線的零複製整合。 - 彈性 – 可任意組合選擇器、速率限制器和表大小;支援 FIFO 佇列、優先級回放或自訂堆。
- 分散式訓練 – 可在負載平衡器後執行多個伺服器;客戶端會自動將插入/取樣分散至各伺服器。
- 持久化 – 可檢查點並還原整個回放缓衝區,而不會遺失優先權或順序。
- 超越 RL – README 指出,使用者已用 Reverb 儲存模型權重或其他頻繁更新的資料,將其作為輕量級記憶體分散式檔案系統使用。
安裝與相容性
- 透過 pip 安裝:
pip install dm-reverb[tensorflow](自動添加匹配的 TensorFlow 版本)或pip install dm-reverb(若自行管理 TF)。 - 夜間建構版本為
dm-reverb-nightly。 - 僅支援 Linux;該函式庫未針對生產環境強化,可能崩潰。
- Reverb 版本與特定 TensorFlow 版本綁定(例如:0.14.0 與 TF 2.14.0 相容)。
README 中指出的限制
- 非生產就緒 – 專為研究設計;穩定性保證有限。
- 僅支援 Linux – 無 Windows/macOS 原生支援。
- 無內建複製 – 擴展依賴分片;在預期使用情境中,資料遺失可接受。
- 版本耦合 – 必須與輪子中捆綁的 TensorFlow 版本匹配;版本不匹配可能導致安裝失敗。
何時使用 Reverb
如果你正在建構一個需要快速、分散式回放缓衝區的強化學習系統,且需要優先取樣、自訂移除策略或可檢查點狀態,Reverb 可為你提供開箱即用的服務,而非手動實作。它也適用於任何研究流程,這些流程需要在多個流程或機器之間共享大型張量的記憶體儲存。
引用
若在出版物中使用 Reverb,請引用配套論文:
@misc{cassirer2021reverb,
title={Reverb: A Framework For Experience Replay},
author={Albin Cassirer and Gabriel Barth-Maron and Eugene Brevdo and Sabela Ramos and Toby Boyd and Thibault Sottiaux and Manuel Kroiss},
year={2021},
eprint={2102.04736},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
相關
- 專案
- 專案
- 專案
- 專案