fudan-generative-vision/Remory

Remory: Learning Residual Memory for Context Compaction

Remory란 무엇인가요?

Remory는 대규모 언어 모델(LLM)에 학습된 "잔여 메모리(residual memory)"를 추가하여, 중요한 정보를 잃지 않으면서 긴 대화 기록을 압축할 수 있게 해주는 플러그인입니다. 에이전트(예: Codex라는 코딩 어시스턴트)가 컨텍스트를 잘라내야 할 때, Remory는 먼저 일반적인 요약을 생성한 다음, 남은 은닉 상태(hidden states)를 작은 "소프트 토큰(soft tokens)" 세트로 인코딩합니다. 이 토큰들은 요약과 함께 저장되며 다음 생성 단계에서 자동으로 다시 삽입되어, 고정된 기본 모델이 마치 전체 컨텍스트를 가지고 있는 것처럼 계속 작동하게 합니다.


핵심 아이디어

  • 컨텍스트 압축 – 대형 에이전트는 토큰 제한(Qwen 3.8-27B의 경우 256K)에 빠르게 도달합니다. Remory는 간결한 요약 더하기 요약에서 놓친 부분을 포착하는 학습된 잔여 정보를 유지합니다.
  • 고정된 기본 모델 – 기본 LLM(Qwen 또는 GLM)은 전혀 파인튜닝되지 않으며, 가벼운 메모리 네트워크만 학습되므로 새로운 모델에 적용하기 쉽습니다.
  • 온라인 학습 – 명령줄 도구(/remory train)를 사용하여 실행 중인 Qwen 세션과 상호 작용하면서 메모리 네트워크를 지속적으로 개선할 수 있습니다.
  • 제로 코드 통합 – Remory는 SGLang 후크와 작은 클라이언트 라이브러리를 제공합니다. 서버를 실행하고 기존 에이전트(또는 제공된 r-codex UI)를 해당 서버로 지정하기만 하면 됩니다.

빠른 시작 (Qwen 3.8-27B)

# 1️⃣ 복제 및 설치
git clone https://github.com/1ring2rta/Remory.git && cd Remory
python deploy/install.py                     # SGLang, CUDA 도구가 포함된 .remory/venv 생성
source .remory/venv/bin/activate

# 2️⃣ 모델 + 메모리 서버 실행 (2 × 80 GB GPU 필요)
CUDA_VISIBLE_DEVICES=0,1 python -m remory.launch_server \
  --model-path Qwen/Qwen3.8-27B \
  --remory-checkpoint mocoV3/Qwen3.8-27B-REMORY-1.9B \
  --tp 2 \
  --host 127.0.0.1 --port 8421

# 3️⃣ 서버와 통신하는 Codex UI 열기
source .remory/venv/bin/activate
r-codex -C /path/to/your/project   # /compact를 사용하여 압축 트리거

UI를 통해 일반적인 채팅을 실행한 다음 /compact를 호출할 수 있습니다. 시스템은 다음을 수행합니다:

  1. 제거된 메시지의 요약을 생성합니다.
  2. 잔여 은닉 상태를 소프트 토큰으로 인코딩합니다.
  3. 체크포인트를 저장합니다(.remory/memory.sqlite에 저장됨).
  4. 해당 체크포인트에서 대화를 계속합니다.

프로그래밍 방식으로 사용하는 방법

from remory.adapters import Harness
from remory.client import Client

with Client("http://127.0.0.1:8421", session_id="demo") as client:
    agent = Harness(client, codec)   # codec = 사용자의 채팅 템플릿
    checkpoint = agent.compact(
        prefix_messages=system_and_tools,   # 유지되는 프롬프트
        removed_messages=history,           # 삭제할 메시지
        summary_prompt=summary_prompt,
        summary_schema=summary_schema,
    )
    # 저장된 잔여 메모리를 사용하여 새로운 답변 생성
    answer = agent.generate(
        checkpoint=checkpoint,
        prefix_messages=system_and_tools,
        messages=new_user_messages,
    )

Harness.compact 메서드는 3단계 프로세스(요약 → 잔여 정보 → 체크포인트)를 수행하고 generate에 다시 전달할 수 있는 체크포인트를 반환합니다.


나만의 메모리 네트워크 학습하기

Remory는 Qwen 및 GLM 체크포인트를 위한 2단계 학습 스크립트를 제공합니다:

  1. 1단계 – 재구성(Reconstruction) – 짧은 접두사로부터 은닉 상태를 재구성하는 방법을 학습합니다.
  2. 2단계 – 요약 조건부 잔여(Summary-conditioned residual) – 요약을 조건으로 할 때 유용하도록 잔여 메모리를 학습합니다. 두 단계 모두 기본 LLM은 고정된 상태로 유지되며, 메모리 네트워크(약 1-2B 파라미터)만 업데이트됩니다. training/ 폴더에는 다음이 포함되어 있습니다:
  • 4-GPU 실행을 위한 시작 스크립트
  • 예제 JSONL 데이터 형식(기록, 요약, 연속)
  • 재개 / 체크포인트 처리

벤치마크 및 결과

저자들은 두 가지 장기 호라이즌 에이전트 제품군에서 Remory를 평가했습니다:

  • BrowseComp(웹 검색 작업) 및 Terminal-Bench 2.1(쉘 상호 작용).
  • 잔여 메모리를 추가함으로써 성공률이 향상되었고 도구 출력 중복이 감소했습니다.
  • SummHay 벤치마크에서 Remory는 원래 토큰 예산의 **5.2%**만 사용하면서도 거의 전체 컨텍스트와 동일한 성능을 달성했습니다.

성능 수치는 assets/benchmarks.png에 시각화되어 있으며, 동반 논문(arXiv 2610.11287)에 자세히 설명되어 있습니다.


모델을 얻는 곳

기본 모델 Remory 체크포인트 실행 방법
Qwen-3.8-27B mocoV3/Qwen3.8-27B-REMORY-1.9B SGLang 또는 🤗 Transformers
GLM-5.3-Flash mocoV3/GLM-5.3-Flash-REMORY-1.24B SGLang

두 체크포인트 모두 Hugging Face에 호스팅되어 있으며 --remory-checkpoint 플래그로 로드할 수 있습니다.


라이선스 및 감사의 말

  • MIT 라이선스 (LICENSE 참조).
  • DFlash 및 SpecForge 메모리 아이디어를 기반으로 하며, 고처리량 추론을 위해 SGLang을 사용합니다.
  • 연구 논문 인용:
@misc{xia2026remory,
  title  = {Remory: Learning Residual Memory for Context Compaction},
  author = {Xia, Hanchen and Chen, Baoyou and Ge, Yutang and Deng, Naihao and
            Yang, Senqiao and Dong, Zilong and Yuan, Weihao and Zhu, Siyu},
  year   = {2026},
  eprint = {2610.11287},
  archivePrefix = {arXiv},
  primaryClass = {cs.CL}
}

요약(TL;DR)

Remory를 사용하면 일반적인 요약 뒤에 위치하는 작은 학습된 메모리를 추가하여, 고정된 LLM(예: Qwen 3.8-27B)을 장기 실행 에이전트에서 계속 사용할 수 있습니다. 제공된 스크립트로 설치하고 SGLang을 통해 실행한 다음, r-codex UI나 Python Harness 클래스를 사용하여 대화를 압축하고 이어가세요. 학습은 선택 사항이지만 사용자 지정 도메인에 대해 지원됩니다.

관련

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