회사 테크

다섯 번째에 여섯을 메웠다 — Qwen3.8-27B 4bit, Terminal-Bench 89개 pass@5 54, Uncensored를 넘어서다

Qwen3.8-27B MLX 4bit(17GB) 5회차. 서버만 재기동하고 4회차 실패 41개를 다시 돌려 복구 6개, pass@5 54/89(60.7%). 회차별 복구 +0→+2→+6으로 되레 늘고 Uncensored(59)와 격차 5로 좁혔습니다. 원본이 놓친 칸을 메우고 27B만 푼 세 번째 태스크, ERR 13→1→0.

삽질하는개발자

뉴런 네트워크 일러스트

요약

4회차 글에서 Qwen3.8-27B 4bit(17GB)은 복구 2로 pass@4 48에 올랐고, “남은 41개는 세 모델 공통 미해결 칸이 많아 추가 복구는 산발적일 것”이라고 적었습니다. 그 예상은 틀렸습니다. 같은 방식으로 — 서버만 깨끗이 재기동하고 나머지 조건은 그대로 — 5회차를 돌렸더니 여섯이 메워졌습니다. 20시간 44분이 걸렸습니다.

결과: pass@5 = 54 / 89 (60.7%) — 복구 6. 그리고 ERR는 13(3회차)→1(4회차)→0(5회차)으로 완전히 사라졌습니다.

41개 내역은 PASS 5, 타임아웃 경계에서 통과한 PASS(TO) 1, FAIL 7, TO 28, ERR 0입니다.

pass@k 27B 4bit (17GB) 원본 Flash Next (100GB) Uncensored 4bit
pass@1 35 (39.3%) 45 41
pass@2 46 (51.7%) 53 —
pass@3 46 (51.7%) — —
pass@4 48 (53.9%) — —
pass@5 54 (60.7%) 64 59

회차별로 메운 개수는 35 → +11 → +0 → +2 → +6입니다. 3회차에 완전히 정체(+0)했던 곡선이 다시 살아난 것입니다. 그리고 pass@5에서 Uncensored(59)와의 격차가 5로 좁혀졌습니다. 원본(64)과는 아직 10입니다.

복구된 6개 — 되레 늘어난 이유

태스크 5회차 소요 4회차 원본 pass@5 Uncensored pass@5
raman-fitting PASS 4.1분 FAIL PASS FAIL
mteb-retrieve PASS 5.5분 FAIL PASS PASS
crack-7z-hash PASS 8.5분 TO PASS PASS
bn-fit-modify PASS 22.6분 FAIL PASS PASS
llm-inference-batching-scheduler PASS 24.9분 FAIL PASS FAIL
rstan-to-pystan PASS(TO) 30.0분 TO FAIL FAIL

복구 6개의 소요 중앙값은 22.6분입니다. 4회차에 이 태스크들은 FAIL 4개·TO 2개였는데, 5회차엔 전부 통과했습니다. 재시도 횟수의 문제가 아니라 분산의 문제였다는 것이 다시 드러났습니다. 같은 문제를 한 번 더 주면 그중 일부는 다른 경로로 걸어가 답에 닿습니다. crack-7z-hash는 4회차에 30분 TO였던 것이 5회차엔 7z2john+john 정공법으로 8.5분 만에 끝났고, bn-fit-modify는 편상관이 사실상 0이라 직접 엣지가 없다는 판단을 제대로 해냈습니다.

“3회차 +0 → 4회차 +2 → 5회차 +6”의 반등은 직관과 어긋납니다. 보통 pass@k는 회를 거듭할수록 복구가 마릅니다. 다만 3회차의 +0은 그 회차 절반이 ERR로 유실된 인위적 바닥이었고, 4·5회차는 서버를 깨끗이 재기동해 그 인위적 요인을 걷어낸 상태입니다. 남은 실패 풀에 “분산이 큰 중간 난도” 태스크가 아직 여럿 섞여 있었고, 그것들이 이번에 터진 것으로 봅니다.

Uncensored를 넘어선 두 칸, 그리고 27B만 푼 세 번째

이번 복구에서 눈에 띄는 것은 비교 순위가 뒤집힌 칸들입니다.

  • llm-inference-batching-scheduler·raman-fitting — 둘 다 원본 Flash Next는 통과했지만 Uncensored는 pass@5까지 못 푼 태스크입니다. 27B가 이것을 메우면서, “6배 작은 4bit가 같은 4bit 계열(Uncensored)을 특정 칸에서 앞선다”는 그림이 더 뚜렷해졌습니다.
  • rstan-to-pystan — 원본도 Uncensored도 pass@5까지 못 푼, 세 모델 중 27B만 푼 태스크입니다. R의 Stan 모델을 PyStan으로 포팅해 MCMC 4체인을 제한시간 끝에 맞춰 PASS(TO)를 받았습니다. 2회차의 compile-compcert·query-optimize에 이어 세 모델 중 27B만 푼 세 번째 칸입니다.

합산 점수(54 < 59 < 64)만 보면 27B가 계속 뒤지지만, “이 특정 문제는 누가 푸느냐”는 질문에는 이렇게 순위가 뒤집히는 칸이 계속 나옵니다. 세 개는 이제 우연이라 부르기 어렵습니다.

ERR가 사라진 마지막 장면

3회차 글에서 ERR 13건을 “서버가 늙어서”가 아니라 harbor 셋업의 apt 설치 120초 타임아웃(네트워크)이라고 정정했습니다. 4회차에 서버만 재기동했더니 1건으로 줄었고, 이번 5회차엔 0건입니다.

ERR: 13 → 1 → 0. 세 회차에 걸친 이 감소는 “ERR는 모델도 서버도 아닌, 그날 밤 컨테이너 네트워크의 문제였다”는 진단을 최종적으로 확정합니다. 서버를 재기동한 것이 ERR를 고친 것이 아니라, 애초에 서버와 무관했고 네트워크가 괜찮은 밤에는 나지 않는다는 뜻입니다. 세 밤 연속 서버 상태는 제각각이었지만(74시간 가동 → 재기동 → 재기동) ERR만은 apt 미러의 컨디션을 그대로 따라갔습니다.

아직 안 되는 35개

두 번째로 큰 반등(+6)에도, 남은 35개(FAIL 7·TO 28)의 실패 양상은 여전히 같습니다.

  • heredoc 함정 — circuit-fibsqrt는 Python 스크립트를 heredoc으로 밀어 넣다 터미널이 갇혔고, Ctrl+D·Ctrl+C를 60분 내내 반복하다 TO였습니다. make-mips-interpreter도 인터프리터를 끝내 완성 못 했습니다.
  • 130K 컨텍스트 wedge — video-processing은 프레임을 반복 로딩하다 컨텍스트 상한(131072)에 부딪혀 337턴을 돌고 TO였습니다. 서버 overflow 400이 이 한 태스크에서만 1,300건 넘게 나왔습니다.
  • 최적화·최난도 칸 — feal-differential/linear-cryptanalysis는 F 함수 차분·선형 공격을 설계하다 시간을 다 썼고, path-tracing류는 렌더 픽셀 패턴 역산에 실패했습니다.

그리고 이 35개 중 상당수는 세 모델(27B·원본·Uncensored)이 pass@5까지 다 같이 못 푼 칸입니다. 횟수가 아니라 하네스나 프롬프트를 손대야 풀릴 실패라는 결론은 변하지 않습니다. 특히 loop 감지 하나만 들어가도 heredoc·130K wedge에서 수 시간이 절약됩니다.

여섯 번째로

pass@1 35 → 46 → 46 → 48 → pass@5 54. 곡선을 원본(64)·Uncensored(59)까지 그려두는 편이 비교표를 정직하게 만들기에, 이 글을 쓰는 지금 6회차를 남은 35개로 돌리고 있습니다. 다만 이번엔 기대치를 낮게 잡습니다. 남은 풀은 5회차보다 “세 모델 공통 미해결” 비중이 더 높아, 추가 복구는 더 마를 것입니다. 그래도 Uncensored(59)까지 5칸이 남았고, 그중 몇이 분산으로 메워질지는 돌려봐야 압니다.

작은 모델을 여러 번 돌리는 실험에서 매번 확인되는 것은 하나입니다. 합산 점수의 격차와 “이 문제는 누가 푸느냐”는 서로 다른 질문입니다. rstan-to-pystan을 원본도 Uncensored도 못 풀고 27B만 풀었듯이 말입니다.