Index
2026-09-10 — Experiment

resume 읽기 격자 6모델 완성 — v2 writer 프롬프트 + 오픈 VLM 3종

SceneMem-Bench | HF 61871a3e · 161행 · cap 8 · greedy · 오픈 3종 API 비용 $0

TL;DR

6
모델
161
행/전략
$0
오픈 3종 API
7h56m
GPU 합계
3.3×
쓰기 병목

1배경 — 왜 오픈 모델을 resume 에 붙였나

find·restore 는 7모델 격자가 있는데 resume 만 API 3모델(flash-3.7·sonnet-5·luna)뿐이었다. "쓰기 병목의 크기가 과제 가족마다 다르다"는 주장을 모델 계급 축에서도 받치려면 8B 행이 필요하다. 오픈 모델은 자체 vLLM 서빙이라 API 비용이 0이므로 예산 제약도 없다.

resume 은 v1 오픈 기준선이 아예 없으므로 처음부터 v2 writer 프롬프트로 쟀다. writer 프롬프트를 안 쓰는 blind·textlog·frames-uniform 은 정의상 v1 = v2 이라, API 3모델은 재측정하지 않았다 (표에서 ᵛ¹ 로 표기).

SBENCH_WRITER_PREAMBLE=v2 SBENCH_RF_REWRITE_PROMPT=v3b SBENCH_TEMPERATURE=0 \ SBENCH_MAX_TOKENS=4096 VLLM_LEN=65536 \ bash scripts/serve_eval_vllm_resume.sh <model> resume_v2p_<tag> 4 8 all rsm_v2p_qwen 116240 COMPLETED 1h46m Qwen/Qwen3-VL-8B-Instruct rsm_v2p_molmo2 116242 COMPLETED 2h14m Molmo2-8B rsm_v2p_cosmos 116241 COMPLETED 3h56m Cosmos-Reason2-8B own QOS · GPU 1장씩 · 4샤드 · cap 8 · 5전략 × 161행 · 전략당 행수 검산 통과

tagmem-r3 는 사용자 결정으로 보류(별도 성능 작업 후), rf-v2 는 논문 미사용이라 제외했다.

2본표 — 6모델 × 6전략

셀 = resume_ok / slot_ok_frac. resume_ok 는 미완 명령을 정확히 지목하고 남은 개수까지 맞힌 행의 비율(전 슬롯 동시 정답), slot_ok_frac 은 슬롯 단위 부분점수다.

전략flash-3.7sonnet-5lunaqwen3vl-8bcosmos-r2-8bmolmo2-8b
blind0.056/0.090 ᵛ¹0.068/0.127 ᵛ¹0.037/0.075 ᵛ¹0.050/0.1150.068/0.0990.037/0.062
textlog (oracle)0.789/0.811 ᵛ¹0.708/0.798 ᵛ¹0.677/0.758 ᵛ¹0.441/0.6090.248/0.3880.149/0.280
frames-uniform0.161/0.273 ᵛ¹0.112/0.214 ᵛ¹0.099/0.158 ᵛ¹0.087/0.1740.087/0.1490.031/0.084
rf-v3 (MEM-style)0.143/0.2800.025/0.112 ᵛ¹0.019/0.075 ᵛ¹0.075/0.1340.081/0.1210.037/0.050
vis-pure (MemER-style)0.242/0.3850.112/0.211 ᵛ¹0.087/0.121 ᵛ¹0.093/0.2020.099/0.1650.087/0.127
tagmem-r3 (ours)0.106/0.189 ᵛ¹0.043/0.121 ᵛ¹0.019/0.037 ᵛ¹———
vis-pure 4/6 1위 — flash-3.7 .242 · qwen .093 · cosmos .099 · molmo2 .087. sonnet·luna 는 frames-uniform 과 동률권(.112/.112 · .099/.087).
오라클 계단 — .789 / .708 / .677 ≫ .441 ≫ .248 ≫ .149. 8B 3종은 메모리 전략 비교가 아니라 읽기 상한 자료로 표기해야 한다.

자기 blind 대비 이득 (최고 비오라클 − blind)

모델오라클최고 비오라클blind이득1위 전략
flash-3.70.7890.2420.056+0.186vis-pure
luna0.6770.0990.037+0.062frames-uniform
molmo2-8b0.1490.0870.037+0.050vis-pure
sonnet-50.7080.1120.068+0.043frames-uniform
qwen3vl-8b0.4410.0930.050+0.043vis-pure
cosmos-r2-8b0.2480.0990.068+0.031vis-pure

메모리 이득은 6/6 모델에서 양수지만, 8B 3종은 +.03–.05 로 얇다. flash-3.7 의 +.186 과 4–6배 차이다.

3지목은 되는데 개수를 못 센다

resume_ok = tasks_ok ∧ remaining_ok. 발화 목록은 blind 를 포함한 모든 전략에 공통 제공되므로 "어떤 명령이 남았나"(tasks_ok)는 상식으로도 어느 정도 찍히지만, "몇 개 남았나"(remaining_ok)는 메모리가 없으면 못 푼다.

전략flash-3.7sonnet-5lunaqwen3vl-8bcosmos-r2-8bmolmo2-8b
blind0.329 / 0.068 ᵛ¹0.472 / 0.087 ᵛ¹0.224 / 0.043 ᵛ¹0.379 / 0.0750.273 / 0.0810.261 / 0.056
textlog (oracle)0.807 / 0.789 ᵛ¹0.832 / 0.739 ᵛ¹0.783 / 0.677 ᵛ¹0.553 / 0.5030.304 / 0.3110.273 / 0.211
frames-uniform0.534 / 0.205 ᵛ¹0.466 / 0.155 ᵛ¹0.335 / 0.118 ᵛ¹0.323 / 0.1300.286 / 0.1060.273 / 0.056
rf-v3 (MEM-style)0.416 / 0.1930.317 / 0.062 ᵛ¹0.273 / 0.043 ᵛ¹0.261 / 0.1060.304 / 0.0930.230 / 0.043
vis-pure (MemER-style)0.596 / 0.3040.435 / 0.149 ᵛ¹0.261 / 0.093 ᵛ¹0.298 / 0.1370.280 / 0.1120.348 / 0.106
tagmem-r3 (ours)0.366 / 0.149 ᵛ¹0.373 / 0.081 ᵛ¹0.081 / 0.019 ᵛ¹———
두 축의 간격이 곧 메모리의 몫 — flash-3.7 vis-pure 는 .596 / .304 로 지목이 개수의 2배. 8B 는 지목조차 .23–.35 라 두 축이 같이 낮다.

4rf-v3 는 왜 8B에서 죽는가 — 재작성 계약을 이행하지 못한다

rf-v3 는 청크마다 기존 메모리 + 새 프레임 4장을 주고 메모리 전체를 다시 써서 덮으라고 시키는 MEM 계열이다. writer 가 낸 출력이 직전 메모리와 어떤 관계인지 전이 1,384건(100편 × 청크)을 직접 분류했다 — "무변화" = 직전 메모리를 토씨 하나 안 바꾸고 반환, "덧붙이기" = 직전 메모리를 그대로 접두사로 복사한 뒤 뒤에만 추가, "재작성" = 앞부분을 실제로 고침.

writer무변화덧붙이기만실제 재작성컷 시점 메모리 medianresume_ok
flash-3.7 (v2)0.1%1.5%98.4%693자0.143
flash-3.7 (v1)0.7%0.9%98.5%519자0.056
qwen3vl-8b2.6%61.7%35.7%734자0.075
cosmos-r2-8b58.4%37.0%4.6%950자 (p90 64,513)0.081
molmo2-8b63.9%23.0%13.1%17,414자0.037

writer 호출은 100편 전부 calls == n_chunks 로 정상 실행됐다(건너뛴 게 아니다). 세 가지 고장이 서로 다르다:

왜 — "얼마나 베껴 써야 하는가"에 비례한다

무변화율을 직전 메모리 길이와 청크 위치로 나누면 단조 증가한다. 첫 청크는 베낄 게 없어 거의 다 제대로 쓴다.

writer직전 메모리 짧음(하위 25%)중간긺(상위 25%)청크 #1 → #8 무변화율
cosmos-r2-8b320자 → 15.0%757자 → 66.5%1,889자 → 85.5%3% → 8% → 19% → 49% → 56% → 63% → 68% → 72%
molmo2-8b364자 → 46.5%1,029자 → 63.9%19,322자 → 81.5%4% → 23% → 37% → 45% → 51% → 70% → 76% → 76%
qwen3vl-8b166자 → 0.9%517자 → 0.3%1,215자 → 9.0%0% … 1% (무변화 대신 덧붙이기)
"장면을 이해 못 해서"가 아니라 "이미 있는 700~2,000자를 매번 다시 토해내는 부담을 감당 못 해서" 생기는 고장이다. rf-v3 의 계약은 메모리가 길어질수록 출력 비용이 커지고, 모델은 그 지점에서 제일 싼 길(그대로 반환)을 택한다.
과제 탓도 아니다 — find/restore(type1, v1.1 캠페인)에서 같은 모델을 재보면 거의 동일하다: cosmos 무변화 60.4% · molmo2 71.9% · qwen 덧붙이기 62.7%. 모델 속성이다.
v1 → v2 의 기전도 여기서 보인다 — flash-3.7 은 양쪽 다 98% 재작성인데 메모리가 519 → 693자(+33%) 길어졌고, "길이가 줄어든 전이"가 32.7% → 21.5% 로 줄었다. v3b 에서 "반복 사실을 합쳐라 / 최신 위치만 남겨라 / 쓸모없어진 세부는 버려라"를 걷어낸 결과이고, 같은 런에서 remaining_ok 가 .081 → .193 으로 올랐다.

하네스 공정성 메모

rf-v3 는 "메모리 전량 재출력", vis-pure 는 "KEEP/DROP 몇 글자"다. 8B 에게 rf-v3 만 출력 부담이 압도적으로 크므로, 표에서 vis-pure > rf-v3 로 나오는 것은 전략의 우열과 출력 부담의 차이가 섞여 있다. flash-3.7 은 부담을 감당하므로(재작성 98.4%) 그 행에서는 전략 비교가 성립한다. 사용자 결정(260910): 지금은 한계로 기록하고 표는 그대로 둔다; 출력 부담을 맞춘 대조군은 필요 시 $0 로 추가.

molmo2 루프 원문 (contexts/type2/train_123__2000, 최종 19,397자)

I entered a room with a wooden floor and dark gray walls. I saw a white robotic arm with black accents on a black mat. There was a brown wooden table with a white plate, a lamp with a green shade, and a brown chair. A painting of a mountain landscape hung on the wall. I noticed a brown door with a silver handle and a black-framed window. A black pot with a green plant was on the floor. I also saw a tall lamp with a b … (중략) … wooden table. I then moved to the brown wooden table and picked up the tall lamp with the brown base and white shade. I placed the tall lamp with the brown base and white shade on the brown wooden table. I then moved to the brown wooden table and picked up the tall lamp with the brown base and white shade. I placed the tall lamp

5실패 사례 — 원문 · 원인 · 교훈

① qwen3vl-8b · rf-v3 · press_button (Press the button on the washing machine five times., 남은 2회)

컷 시점 메모리 원문 — 5개 청크(≈2.5분)가 한 문장으로 남았다:

I placed an object into the sink, then turned toward the doorway, walked out of the bathroom, and carried a yellow object while moving toward the hallway.

모델 응답:

{"reasoning": "The robot was interrupted while performing the task of moving the soap bottle to the other end of the sink. The user's command at t=93s to move the soap bottle was not completed, as the robot was still in the bathroom and had not yet moved the soap bottle. The robot had already placed an object into the sink and was moving toward the hallway, indicating it had not yet completed the task of moving the soap bottle. The other commands (pressing the button on the washing machine, opening a drawer of the dresser, and continuing what it was doing) were either completed or interrupted and not resumed. Therefore, the only unfinished task is moving the soap bottle to the other end of t

채점: tasks_ok 0 · remaining_ok 0 · named_finished 1 — 이미 끝난 심부름 ("move the soap bottle …")을 미완으로 지목했고, 정작 남은 세탁기 버튼은 "were either completed or interrupted" 라며 넘겼다.

원인: 메모리에 세탁기도 버튼도 없다. 모델은 현재 화면(욕실)만 보고 가장 최근 행동을 미완으로 찍었다. 교훈: 메모리가 비면 resume 은 "마지막에 하던 일"로 회귀하는 체계적 오답 패턴을 만든다 — 이게 named_finished 지표가 잡아내는 실패다.

② cosmos-r2-8b · 생성 붕괴로 채점 이전 사망 176/805행

실패 행 전부 attempts=2(재시도해도 같은 붕괴), raw 길이 median 80,135자 대 성공 행 669자. 예: resume:train_123__2000:cut_06 / textlog — 78,065자 생성 후 절단.

… ere already completed and do not need to be repeated. Therefore, the only remaining task is to pick up the remaining two mugs and place them on the countertop. The other tasks (checking phone and pillow) were already completed and do not need to be repeated. Therefore, the only remaining task is to pick up the remaining two mugs

에러 메시지는 JSON decode failed: Unterminated string starting at: line 2 column 16 … 로 JSON 파스 실패지만, 실제 원인은 스키마 오해가 아니라 같은 문장을 반복하다 토큰 상한에 잘린 것이다.

교훈: 파스 성공 행만 보면 오라클 .248 → .312, vis-pure .099 → .122 로 오른다. 즉 cosmos 의 낮은 점수 중 상당분은 능력이 아니라 디코딩 안정성 문제다. 다만 하네스 공정성 원칙상 모델별 repetition penalty 튜닝은 하지 않고 한계로 기록한다.

6과제 종류별 분해 — 무엇이 원천적으로 안 되는가

press_button (n=25) — 화면에 흔적이 없는 행동

전략flash-3.7sonnet-5lunaqwen3vl-8bcosmos-r2-8bmolmo2-8b
blind0.000/0.000 ᵛ¹0.000/0.000 ᵛ¹0.040/0.040 ᵛ¹0.120/0.1200.200/0.2000.080/0.160
textlog (oracle)1.000/1.000 ᵛ¹0.840/1.000 ᵛ¹1.000/1.000 ᵛ¹0.680/0.8000.600/0.7200.320/0.360
frames-uniform0.240/0.280 ᵛ¹0.120/0.160 ᵛ¹0.080/0.080 ᵛ¹0.080/0.0800.280/0.2800.000/0.040
rf-v3 (MEM-style)0.000/0.1200.000/0.000 ᵛ¹0.000/0.000 ᵛ¹0.000/0.0000.160/0.1600.120/0.120
vis-pure (MemER-style)0.040/0.1600.040/0.080 ᵛ¹0.080/0.080 ᵛ¹0.120/0.1600.240/0.2400.040/0.080
tagmem-r3 (ours)0.000/0.000 ᵛ¹0.000/0.040 ᵛ¹0.000/0.000 ᵛ¹———

rf-v3 는 flash-3.7·sonnet·luna·qwen 전부 .000. cosmos .160 · molmo2 .120 은 각자의 blind(.200 · .080)와 구분되지 않는 추측이다. 오라클은 .32–1.00 이므로 정답 자체는 존재하고, 메모리에 안 실린 것이다.

별도 측정에서 확인: rf-v3 writer 는 편당 median 56장(≈7.2초 간격)을 보고, 누름 단위의 93.7% 는 최소 1장에 걸린다. 그런데도 "button/press" 를 한 번도 쓰지 않는다. v2 writer 원문은 "approached a black washing machine, reaching toward its upper door/control area" — 보고 적었지만 그 행동을 '누름'으로 명명하지 못한다. 표시등·상태 변화가 없어(다른 누름끼리 픽셀차 12.5 < 같은 누름 내부 19.8) 세어야 할 사건이 무엇인지 자체를 모른다. 샘플링 부족이 아니라 매체의 한계다.

visit_rooms (n=31) — 발화에 수사가 없다

전략flash-3.7sonnet-5lunaqwen3vl-8bcosmos-r2-8bmolmo2-8b
blind0.065/0.065 ᵛ¹0.129/0.226 ᵛ¹0.000/0.032 ᵛ¹0.000/0.0970.097/0.1290.032/0.032
textlog (oracle)0.419/0.419 ᵛ¹0.290/0.290 ᵛ¹0.258/0.258 ᵛ¹0.065/0.1610.129/0.1610.032/0.032
frames-uniform0.161/0.226 ᵛ¹0.161/0.226 ᵛ¹0.226/0.226 ᵛ¹0.032/0.1940.032/0.0970.032/0.032
rf-v3 (MEM-style)0.097/0.1290.065/0.161 ᵛ¹0.000/0.065 ᵛ¹0.065/0.1610.065/0.0970.000/0.000
vis-pure (MemER-style)0.129/0.1610.129/0.161 ᵛ¹0.065/0.065 ᵛ¹0.065/0.1290.032/0.0650.032/0.097
tagmem-r3 (ours)0.032/0.032 ᵛ¹0.129/0.194 ᵛ¹0.032/0.032 ᵛ¹———

오라클조차 .419 / .290 / .258 / .065 / .129 / .032 로 붕괴한다. 발화가 "every room" 이라 총 몇 개인지가 원문에 없고, move 44/44 · put 67/67 · press 49/49 가 수사를 포함하는 것과 대조된다. 이건 전략의 문제가 아니라 데이터 축이며, 실행 트랙의 remaining_rooms 필드로 해결된다.

multi (미완 2개, n=61) — 동시 정답 규칙의 벽

전략flash-3.7sonnet-5lunaqwen3vl-8bcosmos-r2-8bmolmo2-8b
blind0.000/0.057 ᵛ¹0.033/0.139 ᵛ¹0.000/0.082 ᵛ¹0.016/0.1230.000/0.0660.000/0.016
textlog (oracle)0.738/0.795 ᵛ¹0.672/0.828 ᵛ¹0.541/0.754 ᵛ¹0.213/0.5410.000/0.2380.016/0.262
frames-uniform0.066/0.246 ᵛ¹0.016/0.172 ᵛ¹0.016/0.123 ᵛ¹0.000/0.1310.000/0.1150.000/0.074
rf-v3 (MEM-style)0.098/0.3280.000/0.148 ᵛ¹0.000/0.082 ᵛ¹0.000/0.0740.000/0.0900.000/0.016
vis-pure (MemER-style)0.180/0.4100.033/0.213 ᵛ¹0.016/0.090 ᵛ¹0.000/0.1720.000/0.1390.000/0.057
tagmem-r3 (ours)0.049/0.172 ᵛ¹0.000/0.107 ᵛ¹0.000/0.049 ᵛ¹———

두 명령을 모두 맞혀야 resume_ok 가 1이므로 급락한다. flash-3.7 vis-pure 가 .180 으로 최고, 8B 3종은 비오라클 전부 .000 — slot_ok_frac 으로만 차이가 보인다(.172 / .139 / .057).

7Takeaway

1. resume 은 읽기 난이도부터 다른 과제다

오픈 3종의 오라클 .15–.25 는 "메모리가 부족해서"가 아니라 정답 로그를 못 읽어서 나온 값이다. find·restore 에서 같은 모델들이 오라클 .74–.94 를 냈던 것과 대비된다. 논문에서 8B 행은 전략 순위표가 아니라 읽기 상한선으로 제시해야 한다.

2. 이미지 메모리 우위가 가족을 넘어 일반화된다

find 에서 flash급 전용이던 vis-pure 우위가 resume 에서는 6모델 중 4모델 1위다. "무엇을 어디까지 했는가"는 텍스트 재작성보다 장면 스냅샷이 더 잘 보존한다.

3. 쓰기 병목의 크기는 가족 순으로 커진다

오라클 ÷ 최고 비오라클: find 0.8× → restore 1.7× → resume 3.3×(.789 / .242). v2 프롬프트로 rf-v3 가 .056 → .143 올랐어도 이 격차는 그대로다.

4. "재작성형 메모리"는 writer 능력에 종속적이다

rf-v3 는 flash-3.7 에서만 살아나고(.143), 8B 에서는 길이 분포부터 무너진다(molmo2 median 17k자 루프, cosmos p90 64k자). MEM 계열을 소형 모델에 그대로 옮기면 메모리가 노이즈 생성기가 된다.

8보완점 / 다음

원천 표 tmp/resume_grid_v2_6models.md (생성기 tmp/hf_check/grid_resume_v2.py) 병합본 tmp/resume_v2p_{qwen3vl8b,cosmosr2,molmo2}_merged.json · tmp/resume_v2p_flash37_merged.json 프레임 tmp/hf_check/rfv3_frame_coverage.py (쓰기 측 프레임 밀도·단위 커버리지) 작업로그 claude/260910/exp-resume_v2_open_grid.md · claude/260910/analysis-writer_prompt_audit.md