diffusion 미세 조정 (fine-tunes)을 위한 오픈 소스 하이퍼파라미터 탐색 도구를 만들었습니다 - 점수에 기반하여 승자를
요약
새로운 오픈 소스 도구인 Bracket을 소개합니다. 이 도구는 Diffusion 모델의 미세 조정(fine-tuning) 과정에서 반복적이고 주관적인 하이퍼파라미터 탐색 과정을 자동화하고 객관화하는 것을 목표로 합니다. 사용자는 데이터셋과 예산을 설정하면, 병렬 구성으로 여러 짧은 학습 실험을 실행하게 되며, 각 결과는 학습 손실 궤적과 VLM(Visual Language Model)의 다중 기준 평가를 통해 점수화됩니다. 최종적으로 Welch’s t-test 신뢰도를 포함한 객관적인 보고서를 제공하여, 주관적인 판단 대신 통계적 근거를 제시합니다.
핵심 포인트
- Bracket은 Diffusion 모델 미세 조정 과정의 반복적이고 비효율적인 하이퍼파라미터 탐색 과정을 자동화하는 검색(search) 도구입니다.
- Optuna TPE를 사용하여 병렬 구성으로 여러 짧은 학습 실험을 실행하며, 예산 기반으로 효율적인 탐색을 수행합니다.
- 평가 지표는 학습 손실 외에도 로컬 VLM이 프롬프트 준수, 시각적 품질, 아티팩트 없음 등을 기준으로 점수를 매겨 객관성을 확보했습니다.
- 최종 결과 보고서는 Welch’s t-test 신뢰도를 포함하여 통계적으로 유의미한 비교 결과를 제공합니다.
- VRAM 계층 인식 탐색 공간 및 큐레이션된 웜 스타트 등 엔지니어링적 개선 사항을 통해 사용자 경험과 효율성을 극대화했습니다.
저는 똑같은 루프를 반복해 왔습니다: LoRA를 학습시키고, 샘플을 살펴본 뒤, "괜찮다"고 결정하고, 세 가지를 한꺼번에 변경하고, 다시 학습시키는 식이었죠. 그러다 새로운 데이터셋을 학습시켜야 할 때면, 이전에 설정했던 모든 파라미터를 다시 검토해야 했습니다. 그래서 이 번거로움을 없애기 위해 무언가를 만들었습니다.
그것의 이름은 Bracket입니다.
- 데이터셋과 모델을 지정합니다.
- 예산(budget)을 설정합니다 (예: 후보군 또는 시도할 변형의 수를 테스트하기 위한 샘플 크기).
- 병렬 구성으로 X개의 짧은 학습 실험을 실행합니다 (탐색을 위해 Optuna TPE 사용).
- 각 실행은 두 가지 방식으로 점수가 매겨집니다:
- 학습 손실 (training-loss) 궤적,
- 로컬 VLM (LM Studio)이 프롬프트 준수 (prompt-adherence), 시각적 품질 (visual quality), 아티팩트 없음 (artifact-freeness)을 기준으로 샘플 이미지를 판정.
- 마지막에는 어떤 구성이 승리하는지에 대해 Welch의 t-검정 (Welch’s t-test) 신뢰도를 포함한 Markdown 보고서를 받게 됩니다. 핵심은 "이 LoRA가 내 눈에 더 좋아 보인다"를 "구성 X가 4개의 시드(seed)에 대해 p=0.03으로 베이스라인보다 0.34만큼 앞선다"로 대체하는 것입니다.
이 도구는 학습을 재구현하는 것이 아닙니다. musubi-tuner와 sd-scripts를 서브프로세스 (subprocesses)로 구동하므로, 트레이너(trainers)는 kohya가 이미 지원하는 것과 정확히 동일합니다 — 동일한 인자 (args), 동일한 출력 (outputs).
현재 SDXL, Z-Image, Flux.1, Flux.1-Kontext, Flux-2-Klein, Qwen-Image (+ Edit), SD3.5, HunyuanVideo, Wan 2.1/2.2, LTX-Video, FramePack을 지원합니다. 대부분의 모델에 대해 LoRA 및 전체 미세 조정 (full FT)이 가능합니다.
흥미로울 만한 몇 가지 엔지니어링 요소들:
- Trainer는 항상
accelerate를 통해 실행됩니다. Blackwell GPU에서 순수python을 실행할 경우 Accelerator 초기화에 반복당 2000초가 소요되기 때문입니다. Tqdm은 강제로 비활성화되어 있습니다. stdout(표준 출력)이 캡처될 때\r쓰기 작업이 OS 파이프 버퍼를 채워 Trainer를 멈추게 만들기 때문입니다. - VRAM 계층 인식 탐색 공간 (VRAM-tier-aware search space) — GPU를 감지하여 해당 카드가 실제로 실행할 수 있는 설정(config)만 제안합니다. OOM(Out of Memory)으로 인한 낭비되는 시도가 없습니다.
- 큐레이션된 웜 스타트 (Curated warm-start): 각 Trainer 어댑터에는 TPE가 제어권을 넘겨받기 전에 실행되는 3~5개의 검증된 설정이 포함되어 있어, 3시간째가 아닌 첫 30분 안에 유용한 비교 결과를 얻을 수 있습니다.
- VLM 판사(judge)는 OpenAI 사양의
response_format: json_schema를 사용하여 출력이 llama.cpp 수준에서 문법적으로 제약됩니다. 따라서 JSON 파싱 실패나 횡설수설이 전혀 없습니다. Qwen3급 VLM에서<think>서문을 건너뛰기 위해chat_template_kwargs={enable_thinking: false}를 보내는 토글 기능도 있습니다. - React UI에 내장된 셀프 업데이트 (Self-updater) — 새로운 커밋이 있으면 토스트(toast) 알림이 뜨며, Update를 클릭하면 가져오기(pull) + 재빌드(rebuild) + 재실행(relaunch)이 이루어집니다.
MIT 라이선스, 로컬 실행, 텔레메트리(telemetry) 없음, 계정 불필요.
Repo: https://github.com/tlennon-ie/bracket
이 도구가 아닌 것에 대한 솔직한 고백: 이것은 마법 같은 더 나은 LoRA나 미세 조정(finetune) 생성기가 아니라, 탐색 하네스(search harness)입니다. 데이터셋이 나쁘다면 높은 확신을 가지고 "8개 설정 모두 나쁩"라고 말할 뿐입니다. 이 도구의 가치는 "이 LoRA가 더 나은 것 같다"라는 생각을 당신이 방어할 수 있는 숫자로 바꾸어 주는 데 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기