프로젝트

Redrob Eval

GitHubRedrob LabsApache-2.0클론해서 실행

요약

Apache-2.0 공개 LLM 평가 워크벤치입니다. 설정을 빼면 Compare · Evolve · Deploy 세 모듈입니다. 프런티어 API, OpenRouter, 직접 띄운 vLLM 엔드포인트가 한 목록에 있고, 텍스트와 이미지를 같은 실행 경로에서 다룹니다. GEPA가 품질 하한 아래에서 instruction·demos·model·정책을 탐색합니다. Test는 API에서 한 번만 쓰도록 강제하고, 비용은 런 baseline 대비 상대값만 표시합니다. Apache-2.0으로 공개한 평가 하네스입니다

담당

TypeScript GEPA 하네스, 테스트셋 1회 사용 API, export 경로, 블라인드 선호도 대진과 거기서 나오는 라우팅 라벨, 그리고 세 모듈 워크벤치(Compare · Evolve · Deploy)를 설계·구현했습니다.

목적

태스크·데이터셋·품질 하한이 주어지면 하한을 넘기면서 가장 싼 설정을 찾고, 공개 Elo만으로 부족한 경우 태스크 기반 증거를 모읍니다. 모델 선택은 GEPA 탐색 공간의 유전자 하나이고, 제품은 전체 루프입니다. Compare로 모델을 고르고 → Evolve로 품질 하한 아래에서 진화시키고 → Deploy로 고른 모델을 서빙한 뒤, 그 엔드포인트를 다시 Compare에 올려 프런티어와 겨룹니다. 리포트는 baseline 대비 evolved(Markdown 또는 JSON).

방법 보장

  • Test는 한 번만 쓴다

    Train과 validation은 최적화에 쓸 수 있지만, test는 쓸 수 없습니다. 리포팅 엔드포인트는 test에 대해 최적화한 런의 test 결과를 거부합니다.

  • 상대 비용만 표시

    비용은 런 baseline 대비 비율로 나타내며, 절대 통화 금액이 아닙니다. 자체 호스팅 모델은 토큰당 단가 자체가 없어서, GPU 호스트에서 측정한 처리량으로 상대 비용을 계산합니다. FP8과 bf16 차이는 항상 결과 주의사항에 표기합니다.

  • 점수는 이유와 함께 이동한다

    모든 메트릭이 숫자와 함께 피드백 텍스트를 반환하므로, 회귀 원인을 추측이 아니라 읽어서 파악할 수 있습니다.

  • 기본은 오프라인, 키는 서버에

    데이터셋은 Apache 호환 라이선스로 벤더링되어 있고, 평가는 로컬에서 실행됩니다. 머신을 떠나는 것은 프로바이더 API 호출뿐이고, 프로바이더 키와 GPU 호스트 설정은 gitignore된 루트 .env에만 두고 브라우저로 내려보내지 않습니다.

결정

  • GEPA를 TypeScript로 재구현

    논문(arXiv:2507.19457)을 바탕으로 다시 구현한 것이며, 단순히 감싸거나 파일 단위로 옮긴 포트가 아닙니다. 레퍼런스 구현과 대조하는 parity 스크립트도 갖췄습니다. seed 모델이 후보 프롬프트를 생성하고, reflect 모델이 실패 피드백을 반영해 다시 씁니다.

  • 탐색 공간은 모델만이 아니라 설정 전체

    GEPA는 품질 하한 아래에서 instruction, demonstrations, model choice, script_policy, frame_policy를 함께 탐색합니다. 모델 선택은 여러 유전자(gene) 중 하나일 뿐, 별도 제품이 아닙니다.

  • Compare는 리더보드가 아니라 제품의 정문

    큐레이션, OpenRouter, 프런티어, 자체 호스팅 vLLM이 한 목록에 있고, 카탈로그 데이터셋이나 내 프롬프트 위에서 텍스트·이미지로 바로 돕니다. 정답이 있는 과제만 품질을 채점하고, 지연·TTFT·처리량은 모든 런에서 측정합니다. 비용 열은 없습니다. 공시 단가는 실시간이 아니기 때문입니다.

  • 지표로 못 가리는 것은 프롬프트마다 블라인드 대진으로

    정답이 없는 과제는 단판 토너먼트로 넘깁니다. 모델 이름을 가린 채 답변 두 개를 놓고 고르고, 이긴 쪽이 올라가 최종 승자가 그 프롬프트를 가져갑니다. 참가 수가 2의 거듭제곱이 아니면 부전승으로 채우고, 에러 난 모델은 부전패입니다. 쓸 수 없는 답이 겉모양으로 이기지 못하게 하려는 장치입니다.

  • 선호도 투표가 라우팅 라벨이 된다

    빠른 모델이 이기거나 비긴 프롬프트는 small 라벨이 되고, 나머지는 폴백으로 올라갑니다. 이 라벨은 지표 기반 수집기가 채우던 같은 라우팅 코퍼스로 들어가므로, export와 학습 경로는 그대로 두고 감독 신호만 지표에서 사람으로 바뀝니다.

  • Deploy는 내 하드웨어에서 루프를 닫는다

    SSH로 내 GPU 호스트에 모델을 직접 서빙합니다. 측정, 기동, 헬스체크, 벤치마크, 재접속 가능한 터미널이 있고, 서빙한 엔드포인트는 다시 Compare에 올려 프런티어와 겨룹니다. 자체 호스팅 상대 비용이 성립하는 것도 이 벤치마크가 초당 토큰을 실측해 주기 때문입니다.

  • 토큰 분할률(fertility)을 예산 제약으로

    Indic 스크립트는 토크나이징 효율이 낮아, 컨텍스트 예산 안에 들어가는 demonstration 수가 스크립트에 따라 달라집니다. 리포트는 demos_requested와 demos_fitted를 함께 보여줍니다.

  • 정답 참조가 없을 때는 Judge 사용

    Custom goal 모드는 루브릭과 입력만 있는 JSONL을 받아 LLM judge로 점수를 매기고, 태스크 정확도가 아니라 사람 채점자와의 일치가 목표일 때는 체크리스트 QWK로 채점합니다. gold 답이 없는 태스크도 평가 범위에 남습니다.

과제

  • 키워드·길이 라우터는 dual-label 검사를 통과하지 못함

    프롬프트 길이·키워드 규칙은 일부 GSM8K 슬라이스에서 dual-model 라벨과 약 25%만 일치했습니다. 프로덕션 정책으로 쓸 수 없는 수준이었습니다.

  • 높은 토큰 분할률은 demo 예산을 줄인다

    토크나이저의 토큰 분할률이 높으면 요청한 demos가 컨텍스트에 다 들어가지 못합니다. 리포트가 demos_requested 대 demos_fitted 갭을 드러내므로, 컨텍스트 한도 문제를 optimizer 탓으로 돌리지 않을 수 있습니다.

  • 나쁜 라벨은 다운스트림에서 복구 불가

    학습된 라우터는 약한 수집 UI, pass/fail 임계값, 오프라인 리플레이의 한계를 스스로 고치지 못합니다. 라우팅 모델을 훈련하기 전에 라벨 품질부터 신뢰할 수 있어야 합니다. 실제로 중요했던 라벨에서 훈련한 라우터가 우연 수준을 넘지 못해 폐기됐고, 라벨링 파이프라인만 남았습니다.

성과

  • 공개·실행 가능한 Apache-2.0 하네스

    클론하고 프로바이더 키 하나만 있으면 검증 스크립트가 오프라인으로 실행됩니다. 결과물은 하네스 자체이지, 비공개 라우터 체크포인트가 아닙니다.

  • 리뷰에 견딜 만한 baseline 대비 evolved 리포트

    test를 한 번만 사용하고 비용을 상대값으로 export하기 때문에, 직접 돌려보지 않은 사람도 결과를 감사할 수 있습니다.

  • 자체 호스팅 모델에도 정직한 비용 숫자

    내 GPU에 올린 모델은 인용할 공시 단가가 없습니다. 그래서 Deploy가 벤치마크로 실측하고, Compare가 그 처리량으로 baseline 대비 비용을 매깁니다. 통화를 지어내지 않고도 자체 엔드포인트를 프런티어 API와 같은 표에 올릴 수 있는 이유입니다.

  • 손으로 짠 라우팅을 버릴 근거

    dual-model 라벨링에서 나온 25% 일치율만으로도, 키워드·길이 규칙을 기본 프로덕션 정책으로 출시하는 일을 멈출 수 있었습니다.

시스템

  • redrob-eval (공개)

    GEPA

    arXiv:2507.19457 / Apache-2.0

    품질 하한 아래에서 instruction·demos·model·정책을 탐색하는 LLM 평가 워크벤치입니다. 설정을 빼면 Compare · Evolve · Deploy 세 모듈이고, Compare 안의 블라인드 선호도 대진이 라우팅 라벨이 됩니다.

    목표 + 데이터셋 + 품질 하한 → GEPA 탐색 → train/val 평가 → Pareto 프론티어 → 테스트 리포트 1회 사용 → baseline 대비 evolved 내보내기

화면

dual-model 실행에서 나오는 라우팅 라벨

GSM8K와 같은 평가 스위트의 각 태스크에 더 저렴한 모델과 더 강력한 모델을 함께 돌려, 저렴한 모델의 답으로 충분한지를 기록합니다. 이 라벨이 오프라인 라우터 실험의 근거가 되고, 수동으로 작성한 라우팅 기본값을 대체할 판단 자료가 됩니다. 이 수집이 별도 Text 모드였던 이전 빌드의 화면이고, 지금은 Compare 안의 라우팅 단계로 들어갔습니다.

Image 선호도 스위트

safe-for-work 세트를 대상으로 이미지 생성기의 선호도를 자동으로 테스트합니다. 텍스트 라우팅에 사용한 것과 같은 라벨링 방식을 이미지 모델 스택 선택에도 적용합니다. Image가 별도 모드였던 이전 빌드의 화면이고, 지금은 Compare 안의 한 모달리티입니다.