죽지 않는 회귀를 잡는 법: 모델 통합 계약
Transformers 가 두 달 동안 놓친 UMT5 회귀를 작은 고정 모델과 사람이 검토한 기준값으로 다시 잡아 낸 과정을 따라, 모델을 바꿔 써도 동작을 지키는 시험이 갖춰야 할 조건을 법률 AI 운영에 비추어 봅니다.
초록 2026년 7월 30일 Transformers 가 T5 에 PyTorch 의 SDPA 주의 연산을 켜자, 부작용으로 UMT5 디코더가 아직 보지 말아야 할 뒤쪽 토큰을 볼 수 있게 됐습니다. 아무것도 멈추지 않았고, 이 버그는 두 달 가까이 main 에 남아 있었습니다. Hugging Face 블로그 글 「Transformers Model Integration Contracts」는 이 회귀를 작은 고정 모델로 다시 잡아 낸 방법을 모델 통합 계약으로 제안합니다. 계약은 축소한 고정본, 사람들이 실제로 쓰는 사용 경로, 사람이 검토한 기준값 세 부분으로 이루어집니다. 이 칼럼은 그 설계와 원문이 스스로 밝힌 한계를 정리하고, 모델을 교체 가능한 부품으로 쓰는 법률 AI 가 회귀 시험에서 무엇을 배울 수 있는지 살펴봅니다.
소프트웨어 장애 가운데 가장 늦게 발견되는 것은 아무 오류 없이 결과만 조금 달라지는 장애입니다. 원문이 소개한 UMT5 사례가 그랬습니다. 학습 중인 모델이 맞혀야 할 답을 미리 엿볼 수 있게 됐지만 프로그램은 정상으로 돌았습니다. Transformers 는 750개가 넘는 모델 유형을 지원하고 main 에서 CPU 테스트 88,000건 이상, 매일 GPU 테스트 200,000건 이상을 돌리지만, 실제 체크포인트를 불러 실제 하드웨어에서 돌리는 통합 테스트를 모든 변경마다 실행할 수는 없습니다. 정기 실행이 회귀를 찾을 때쯤이면 이미 main 에 들어간 뒤일 수 있습니다. 원문의 처방은 모델을 줄이는 것이었습니다. 법률 AI 도 같은 문제를 안고 있습니다. 모델이나 프롬프트, 검색 경로가 바뀌어도 답변은 대개 그럴듯하게 나오므로, 무엇이 달라졌는지는 미리 정해 둔 시험으로만 알 수 있습니다.
핵심 기술 개념
고정본(fixture)
실제 체크포인트의 설정에서 층의 수와 폭을 줄이되 층의 종류는 모두 남기고, 토크나이저와 프로세서 파일은 그대로 둔 작은 모델입니다. 한 번 만들어 고정해 두고 다시 씁니다.
모델 통합 계약(MIC)
고정본, 실제로 실행할 수 있는 사용 예제(사용 경로), 그 예제를 돌렸을 때의 출력을 사람이 검토해 기록한 기준값으로 이루어진 시험 묶음입니다. 사용 경로를 돌려 기준값이 그대로 나오면 계약이 지켜진 것입니다.
커밋 재생(replay)
고정해 둔 계약을 과거 커밋들에 차례로 되돌려 대 보는 시험입니다. 원문은 5개월치 커밋을 재생해 UMT5 회귀가 언제 들어오고 언제 고쳐졌는지를 다시 확인했습니다.
기술 심층 분석
줄이되 종류는 남긴다: 고정본을 만드는 규칙
원문의 첫 방식은 차원을 줄이고 층을 몇 개만 남기는 단순한 축소였는데, 혼합 구조에서는 통하지 않았습니다. 두 층만 남겼는데 둘 다 슬라이딩 주의 층이면 전체 주의 층이 사라지기 때문입니다. 그래서 지금 규칙은 네 단계입니다. 실제 체크포인트에서 시작해 은닉 크기·주의 헤드·깊이를 줄이되 슬라이딩과 전체 주의, 밀집과 MoE 같은 층 종류를 모두 남기고, 어휘·특수 토큰·입력 차원은 그대로 두며 토크나이저와 프로세서 파일은 바이트 그대로 복사합니다. 가중치를 만든 뒤에는 입력을 바꿔 모델이 반응하는지 보고, 다시 불러 출력·손실·기울기가 유한한지 확인한 다음, 확인된 빌드에서 반복 가능한 출력을 기록해 고정합니다. 원래 가중치 파일 형식도 유지하는데, 그렇지 않으면 실제 체크포인트를 불러올 때 도는 변환 코드를 시험이 건너뛰기 때문입니다. 원문 실험에서 UMT5 고정본의 가중치는 66MB로 원본 1,227MB보다 훨씬 작았고, Llama 4 Scout 는 1,086억 개 매개변수가 4,470만 개로 줄었습니다.
같은 경로를 지나야 잡힌다
원문이 5개월치 커밋을 재생하자 작은 UMT5 고정본은 7월 30일 회귀가 들어온 때부터 9월 28일 고쳐질 때까지 매번 경보를 냈습니다. 라벨 로그확률은 검토된 기준값과 1.22, 학습 손실은 약 0.20 차이가 났습니다. 원문이 강조한 대목은 그 계약이 기본 주의 경로인 SDPA 를 썼다는 점입니다. eager 주의 경로만 돌렸다면 이 버그는 잡히지 않았습니다. 고정본은 실제 체크포인트와 같은 코드를 지날 때만 쓸모 있다는 것입니다. 수정을 되돌린 증명 브랜치에서도 같은 차이로 실패했고, 선택된 T5 계약의 실행 단계는 CPU 에서 준비 시간을 빼고 13.4초가 걸렸습니다. 시험이 작다는 것보다 시험이 실제 사용자와 같은 길을 걷는다는 것이 핵심이라는 교훈입니다.
초안은 모델이, 승인은 사람이
새 모델의 계약은 CLI 도구 tmic 가 만듭니다. LLM 이 사용 코드와 명세 초안을 쓰고 CPU·GPU 실행이 후보 기준값을 재지만, 원문은 「LLM 이 초안을 쓰되 승인하지는 않는다」고 적었습니다. 기대값이 바뀌면 사람이 검토해야 합니다. 에이전트로 여러 모델 계열의 계약을 만들다 특이한 경우를 만나면 그 고정본 하나를 고치지 않고 규칙 자체를 고쳤다고도 했습니다. 기준값은 시험의 정답지이므로, LLM 이 만든 정답지를 사람이 확인하지 않으면 틀린 정답지가 그대로 굳을 수 있습니다. 원문은 초안 작성과 승인을 이렇게 나눕니다. 원문은 기준값을 고정할 때 지원하는 플랫폼과 정밀도마다 따로 검토하고, fleet 데이터셋이 각 계약을 고정 리비전과 기준값을 기록할 때의 패키지 버전에 묶어 두며, CI 실행마다 쓴 리비전을 남겨 나중에 같은 결과를 재현할 수 있게 한다고 설명합니다.
원문이 남긴 열린 문제
가중치를 무작위로 둘지 몇 개 예제에 과적합시킬지에 대해 원문은 어느 쪽이 낫다고 결론 내리지 않았고, 무작위 가중치가 검사를 통과하면 그대로 쓰고 민감도나 읽기 쉬운 출력이 필요할 때 과적합한다는 운영 규칙만 두었습니다. 무작위 가중치 Whisper 고정본은 일부러 넣은 결함 24개 중 18개를 잡았고 과적합 고정본은 24개를 모두 잡았지만, 합성 결함이었고 과적합본만 잡은 실제 회귀는 아직 찾지 못했다고 밝혔습니다. 두 방식 모두 실제 Whisper 체크포인트가 드러낸 assisted-decoding 버그는 놓쳤습니다. 또 2026년 11월 1일 기준 이 작업은 Transformers CI 에서 실패를 보고만 하고 PR 을 막지는 않습니다. 실제 PR 에서 버그를 몇 개 잡는지, 오경보가 얼마나 나는지, 기준값 검토에 품이 얼마나 드는지를 아직 재지 않았기 때문입니다. 작은 시험은 큰 통합 시험을 대신하지 않는다는 것이 원문의 입장입니다.
기술적 트레이드오프
긴장 관계 고정본을 작게 만들수록 매 변경마다 싸게 돌릴 수 있지만, 실제 가중치에서만 드러나는 버그는 놓칠 수 있고 기준값을 검토하는 사람의 품이 늘어납니다.
실무적 해소 원문처럼 PR 이 바꾼 파일에 맞춰 관련 계약만 골라 돌리고, 실패는 먼저 보고로 쌓아 실제 적중률과 오경보율, 기준값 검토 부담을 잰 뒤에 막는 시험으로 올리는 순서가 현실적입니다. 회귀가 빠져나가면 빠진 사용 경로를 계약에 더해 고장 난 판과 고친 판에 다시 재생하고, 큰 통합 시험은 그 범위가 확인될 때까지 그대로 유지합니다.
이 주장이 틀리는 조건
반증 조건 본 칼럼의 주장, 곧 실제와 같은 경로를 지나는 작은 고정 시험이 조용한 회귀를 일찍 잡는다는 주장은 다음 관측으로 반증될 수 있습니다. 첫째, 원문이 제기한 대로 실제 PR 에서 계약이 잡은 버그가 거의 없고 경보 대부분이 오경보로 드러나는 경우입니다. 둘째, 같은 기간 정기 통합 시험이 계약보다 먼저 같은 회귀들을 찾아내 계약의 조기 발견 효과가 측정되지 않는 경우입니다. 셋째, 기준값 검토에 드는 사람의 시간이 그 시험으로 아낀 디버깅 시간보다 꾸준히 크게 나오는 경우입니다. 이런 결과가 쌓이면 이 방식의 값은 다시 따져야 합니다.
법마디 OS에 적용한다면
법마디 OS 는 관리형 API 로 범용 LLM 을 쓰고, 답변에 담긴 조문과 판례 인용을 law.go.kr 원문과 대조해 확인되지 않은 인용은 내보내지 않습니다. 모델 가중치나 내부 코드 경로에 직접 접근하지 않으므로 원문 같은 고정본을 만들 수는 없습니다. 그래도 이 글의 재생 실험과 같은 방식은 실제로 씁니다. 11월 1일 수험판례 강의노트 생성기가 「…하더라도」 양보절 안의 조건을 결론의 요건으로 가르치는 결함을 고칠 때, 새 판정 규칙을 그때까지 발행된 강의노트 154면 전부에 되돌려 대 보았습니다. 처음 쓴 넓은 규칙은 그날 결함이 있던 1면 외에 진짜 요건이 앞에 있는 정상 문장 9면까지 잘못 잡았고, 그래서 규칙을 좁힌 뒤 결함이 있던 그 1면만 잡히는 것을 확인하고 발행 전 게이트로 붙였습니다. 기준값에 해당하는 것은 사람이 판례 원문과 대조해 판정한 결과였습니다. 원문이 말한 대로, 바꾼 규칙이 과거 전체에서 무엇을 새로 잡고 무엇을 잘못 잡는지 재 보지 않으면 시험 한 번의 통과는 그 경로만 보증할 뿐입니다.
기술적 함의
- 오류 없이 결과만 달라지는 회귀는 미리 정해 둔 사용 경로와 사람이 검토한 기준값이 있어야 일찍 드러난다. 작은 고정본이 놓치는 버그도 있어 큰 통합 시험을 대신하지는 않는다.
- 작은 시험이라도 실제 사용과 같은 코드 경로를 지나야 쓸모가 있다. 다른 경로로 돌린 통과는 그 경로만 보증한다.
- 기준값을 만든 쪽과 승인하는 쪽을 나누고, 새 시험은 먼저 보고로 돌려 적중률과 오경보율을 잰 뒤에 막는 시험으로 올린다.
"시험의 값은 그것이 얼마나 작고 빠른가보다, 실제로 쓰이는 길을 그대로 걷고 사람이 확인한 정답과 맞대어 보는가에서 나옵니다."