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를 통해 데이터를 삽입하고, 구성 가능한 전략에 따라 샘플링하며, 우선순위를 업데이트할 수 있습니다. 오프폴리시 RL 알고리즘에서 사용되는 경험 리플레이 버퍼와 유사하지만, 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를 사용하며, tf.data 파이프라인과의 제로 코피 통합을 위한 TensorFlow 오퍼레이터 제공.
  • 유연성 – 선택기, 레이트 리미터, 테이블 크기의 임의 조합 선택 가능; FIFO 큐, 우선순위 리플레이, 사용자 정의 힙 지원.
  • 분산 학습 – 로드 밸런서 뒤에 여러 서버를 실행; 클라이언트는 자동으로 삽입/샘플링을 분산.
  • 지속성 – 우선순위나 순서를 잃지 않고 전체 리플레이 버퍼를 체크포인트 저장 및 복원 가능.
  • RL 외 활용 – README에서는 모델 가중치나 자주 업데이트되는 다른 데이터를 저장하는 데 Reverb를 사용한 사례도 소개되며, 가벼운 인메모리 분산 파일 시스템으로 활용 가능.

설치 및 호환성

  • 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}
}

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트