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)研究用のネットワークデータストレージサービスを提供します。1つ以上の サーバー を実行し、テーブル(例:遷移、軌道、または任意のテンソル)を保持できます。クライアントは gRPC を介してデータを挿入し、構成可能な戦略に従ってサンプリングし、優先度を更新できます。オフポリシー RL アルゴリズムで使用される 経験リプレイ バッファに似ていますが、API はオンポリシー、教師あり、あるいは一般的なデータ配布ワークロードにも柔軟に対応可能です。


コアコンセプト(README に記載)

コンセプト 機能
サーバー 1つ以上の テーブル を保持;各テーブルは容量、サンプリング/削除ポリシー、レート制限を定義します。
テーブル アイテム のコンテナ;アイテムは1つ以上の データ要素(実際のテンソル)を参照します。アイテムは軽量で、参照のみを保持するため、多くのアイテムが同じデータ要素を共有できます。
セレクタ サンプリングまたは削除に使用するアイテムの選択方法を定義します。組み込みセレクタ: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 を使用。tf.data パイプラインとのゼロコピー統合を可能にする TensorFlow オペレータを提供。
  • 柔軟性 – セレクタ、レートリミッター、テーブルサイズの任意の組み合わせを選択可能。FIFO キュー、優先度付きリプレイ、カスタムヒープをサポート。
  • 分散学習 – 負荷分散装置の背後で多数のサーバーを実行;クライアントは自動的に挿入/サンプリングを分散。
  • 永続性 – 優先度や順序を失うことなく、リプレイバッファ全体をチェックポイント保存・復元可能。
  • RL 以外 – README では、モデル重みや頻繁に更新される他のデータを保存する用途も紹介されており、軽量なインメモリ分散ファイルシステムとして利用可能。

インストールと互換性

  • pip でインストール:pip install dm-reverb[tensorflow](対応する TensorFlow バージョンを追加)または、TF を自分で管理する場合は pip install dm-reverb
  • ナイトリービルドは dm-reverb-nightly として利用可能。
  • Linux 専用;プロダクション用途には対応しておらず、セグメンテーション違反の可能性あり。
  • 特定の TensorFlow バージョンは Reverb リリースと紐づいている(例: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}
}

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト