본문으로 건너뛰기
r/deeplearning조회 3

학습 실패를 규칙으로 잡는 trainproof

trainproof가 학습 로그의 발산·과적합·환경 오류를 결정론적 규칙과 exit code로 판정합니다

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

작성자는 수개월간 수렴하지 않는 730M 파라미터 TTS 학습을 겪은 뒤, 기존 로그를 결정론적 규칙으로 읽어 실행의 실패·경고·미판정·통과를 exit code와 함께 반환하는 trainproof를 만들었습니다. Qwen2.5-3B QLoRA의 18개 결함 주입 실행에서 100배 학습률은 grad-norm 약 2,650과 자체 중앙값 대비 약 4,900배 급증으로 수 초 안에 잡혔지만, 뒤섞인 라벨은 손실을 69.8% 낮추며 정상 학습처럼 보였습니다. 이 한계 때문에 정상 기준선과 상대적 손실 바닥을 비교하는 compare 기능이 추가됐고, 실제 Coqui XTTS v2와 Fish Speech LoRA 로그에서도 발산·처리량·과적합 규칙을 확인했습니다. 도구 자체의 TP-ZERO-GRAD 오탐은 실제 로그에서 발견됐으며, 손실 개선 시 검사를 보류하고 그 이유를 기록하는 방식으로 수정됐습니다.

실용적 조언

  • 학습 실행의 성공 여부를 손실 곡선 하나로 판단하지 말고, 데이터셋·tokenizer·환경·체크포인트·gradient 상태를 실행 전후와 진행 중에 나눠 검사하는 편이 안전합니다. trainproof는 malformed JSONL, 빈 행, 중복, 누락된 eos_token, pad==eos, entrypoint import, RAM과 disk 상태까지 규칙으로 검사합니다. 학습 중에는 Hugging Face callback으로 경고를 내고, 선택적으로 발산 실행을 중단할 수 있습니다.
  • 평가 손실이 자기 최저점의 1.2배를 넘는 동안 train loss가 계속 내려가면 마지막 체크포인트를 보관하는 방식이 최선의 모델을 놓칠 수 있습니다. TP-OVERFIT은 이 두 손실의 방향을 함께 비교해 가장 좋은 체크포인트가 이미 지나갔는지 판정합니다. 로그 형식이 다른 경우에도 HF trainer_state.json, Coqui, TensorBoard event file, JSONL, CSV를 각각 입력으로 사용할 수 있습니다.

섹션별 상세

01
작성자는 730M 파라미터 TTS 모델을 자체 하드웨어에서 수개월 학습했지만 손실 곡선과 TensorBoard, 체크포인트만으로는 실행이 이미 실패했는지 알기 어려웠다고 말합니다. trainproof는 이미 생성 중인 로그를 읽어 규칙 기반 verdict와 exit code를 반환해 이 공백을 메웁니다. ML 모델이 다른 ML 학습을 확률적으로 판정하지 않고, 각 검사가 발동한 수치와 함께 결정론적 결과를 내놓는 점이 핵심입니다.
02
결함 탐지기의 유효성을 확인하기 위해 Qwen2.5-3B QLoRA에 건강한 상태, 학습률 100배, lr=0, fp16 NaN, 뒤섞인 라벨, 과적합을 넣고 각 설정을 세 seed씩 실행해 총 18개 로그를 만들었습니다. 학습률 100배 설정에서는 grad-norm이 약 2,650까지 올라 자체 중앙값보다 약 4,900배 높아졌고 trainproof가 수 초 안에 잡았습니다. 반대로 뒤섞인 라벨은 학습할 수 없는 데이터인데도 손실을 18.9에서 5.7로 69.8% 낮춰 단일 실행의 손실 곡선만으로는 실제 학습과 구분되지 않았습니다.
03
뒤섞인 라벨 사례는 손실 곡선 기반 탐지의 한계를 드러냈고, 작성자는 이를 README의 명시적 제한으로 남겼습니다. 대신 compare 기능으로 정상 기준 실행과 현재 실행을 나란히 놓고 상대적 손실 바닥을 비교하도록 했습니다. 실제 Fine-tuning 로그에서도 Coqui XTTS v2의 125,000단계 실행은 TP-DIVERGE와 TP-THROUGHPUT로 FAIL, Fish Speech LoRA의 2049단계 Lightning 실행은 TP-OVERFIT으로 WARN을 받았습니다.
04
실제 로그가 도구 자체의 오탐을 찾아낸 사례도 포함됐습니다. Coqui는 clipping이 꺼진 상태에서 avg_grad_norm을 0.0으로 기록했기 때문에 TP-ZERO-GRAD가 정상 실행을 끊어진 backward graph로 잘못 판정했지만, 손실이 개선된 실행에서는 해당 검사를 보류하고 보류 이유를 visible skip으로 남기도록 로직을 바꿨습니다. 현재 도구는 84개 stable rule ID, 230개 테스트, 17개 릴리스, 38개 golden snapshot을 유지하며 규칙이 사라지거나 오탐을 멈추면 build가 실패하도록 계약을 고정했습니다.

용어 해설

텍스트 음성 변환(TTS)
TTS는 텍스트를 음성으로 바꾸는 모델과 기술을 뜻합니다. 이 글에서는 730M 파라미터 TTS 모델 학습이 수렴하지 않는 문제를 계기로 학습 실행의 실패 여부를 자동 판정하는 도구가 만들어졌습니다.
결정론적 린터(Deterministic Linter)
Deterministic Linter는 확률적 모델 대신 미리 정한 규칙으로 입력 상태를 검사하는 도구입니다. trainproof는 학습 로그와 파일을 읽고 같은 입력에 항상 같은 판정과 exit code를 반환해 CI에서 재현 가능한 실패 감지를 가능하게 합니다.
결함 주입(Fault Injection)
Fault Injection은 결과를 이미 알고 있는 오류를 의도적으로 넣어 탐지기의 동작을 검증하는 방법입니다. 글에서는 학습률 100배, fp16 NaN, 뒤섞인 라벨, 과적합 등 여섯 가지 설정을 세 seed씩 실행해 규칙이 실제 결함을 잡는지 측정했습니다.
QLoRA
QLoRA는 양자화된 기반 모델에 저순위 어댑터를 학습시키는 Fine-tuning 방식입니다. 이 글의 결함 주입 실험은 Qwen2.5-3B QLoRA 실행 18개를 대상으로 건강한 학습과 여러 실패 상태의 로그 패턴을 비교했습니다.
그래디언트 노름(Gradient Norm)
Gradient Norm은 역전파로 계산된 그래디언트의 크기를 나타내는 지표입니다. 실험에서는 100배 학습률 설정에서 값이 약 2,650까지 급증해 자체 중앙값보다 약 4,900배 높아졌고, trainproof가 이를 수 초 안에 감지했습니다.
기준선 비교(Baseline Comparison)
Baseline Comparison은 현재 학습 실행을 이미 정상으로 확인한 기준 실행과 나란히 비교하는 방식입니다. 뒤섞인 라벨처럼 손실 곡선만으로는 정상처럼 보이는 오류도 기준선 대비 상대적 손실 바닥을 비교하면 이상 징후를 찾을 수 있습니다.

코드 예제

bash
pip install trainproof

trainproof를 Python 환경에 설치하는 명령입니다.

text
FAIL        -> exit 1   your run is broken

WARN        -> exit 0   worth your attention

NOT-CHECKED -> exit 2   I could not judge this

PASS        -> exit 0   checked, fine

판정의 심각도와 검사 결과를 서로 다른 exit code로 구분하는 계약입니다.

text
Coqui XTTS v2, 125,000 steps       -> FAIL  (TP-DIVERGE, TP-THROUGHPUT)

Fish Speech LoRA (Lightning), 2049 -> WARN  (TP-OVERFIT)

실제 Fine-tuning 로그에 적용한 trainproof 판정 예시입니다.

text
TP-OVERFIT means eval loss climbed past 1.2x its own minimum while train loss kept falling: your best checkpoint has already gone by, and if you keep only the last one, you kept the wrong one.

훈련 손실은 계속 내려가지만 평가 손실이 최저점의 1.2배를 넘을 때 과적합으로 판정하는 규칙입니다.

언급된 도구

trainproof추천링크

학습 로그와 체크포인트를 규칙으로 검사해 FAIL, WARN, NOT-CHECKED, PASS 판정과 exit code를 반환하는 신뢰성 도구입니다.

TensorBoard중립

학습 로그와 손실 곡선을 확인하는 데 사용되지만, 글에서는 실행이 이미 실패했는지 직접 판정하지 못하는 기존 도구의 사례로 등장합니다.

EventAccumulator중립

TensorBoard event file를 읽는 결과의 기준 구현으로 사용되어 trainproof의 자체 tfevents reader와 실제 2049단계 Lightning 실행에서 byte-exact 결과를 비교했습니다.

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 18.수집 2026. 08. 18.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.