1-7. 증류: 몇 걸음 만에 그리게 만들기
20~30걸음 걷는 모델을 선생으로 삼아, 4걸음이나 1걸음에 같은 곳에 도착하는 학생 모델을 만든다. 이것이 증류다. 터보, 라이트닝, LCM이라는 이름이 붙은 모델과 LoRA가 전부 이것이다.
왜 느린가
그림 한 장을 만드는 데 디노이저를 부르는 횟수는 이렇다.
스텝 수 × (CFG를 쓰면 2)
30스텝에 CFG를 쓰면 60번이다. 큰 모델은 한 번 부르는 데도 시간이 걸린다. 영상 모델은 훨씬 더하다. 프레임 수십 장을 한꺼번에 다루기 때문이다.
줄일 수 있는 것은 둘이다. 스텝 수, 그리고 CFG의 두 배.
증류라는 생각
1-4에서 봤다. 한 걸음에 가려고 하면 평균이 나와 뭉개진다. 그런데 이미 잘 학습된 모델이 있다면 이야기가 달라진다.
잘 학습된 모델은 노이즈 하나가 주어지면 도착할 그림이 하나로 정해져 있다(노이즈를 다시 넣지 않는 샘플러를 쓰면). 그러면 학생 모델에게 이렇게 가르칠 수 있다.
이 노이즈에서 선생이 30걸음 걸어 도착한 곳에, 너는 몇 걸음 만에 가라.
답이 하나로 정해져 있으니 평균이 나오지 않는다. 큰 모델의 지식을 작은 걸음 수로 옮겨 담는다고 해서 증류(distillation)라고 부른다.
방법들
세부 방법은 여럿이다. 이름을 보면 무엇인지 알 수 있을 정도로만 알아 두자.
| 방법 | 생각 | 대표 |
|---|---|---|
| 점진적 증류 | 선생의 두 걸음을 학생의 한 걸음으로. 이것을 반복해 걸음 수를 반씩 줄인다 | 초기 연구 |
| 일관성 증류 | 한 경로 위의 어느 자리에서 출발하든 같은 끝점을 내게 한다 | LCM |
| 적대적 증류 | 판별 모델을 두고, 학생의 결과가 진짜 그림과 구분되지 않게 한다 | SDXL Turbo, Flux schnell |
| 분포 맞추기 | 학생이 만든 그림들의 분포가 선생의 분포와 같아지게 한다 | DMD 계열 |
실제 모델은 이것들을 섞어 쓴다. 라이트닝 계열은 점진적 증류에 적대적 증류를 더했다.
두 종류의 증류를 구분하자
이름이 같아서 헷갈린다. 줄이는 대상이 다르다.
| 스텝 증류 | 가이던스 증류 | |
|---|---|---|
| 줄이는 것 | 걸음 수 | CFG의 두 배 호출 |
| 결과 | 1~8스텝으로 생성 | CFG 1로 생성 |
| 다룬 곳 | 이번 수업 | 1-6 |
둘 다 적용한 모델도 많다. Flux schnell은 4스텝에 CFG 1이다. Flux dev는 가이던스 증류만 했다. 스텝은 20~30이 필요하다.
LoRA로 배포되는 증류
증류 결과를 모델 전체가 아니라 작은 덧붙임 파일(LoRA, 4단계에서 배운다)로 내놓기도 한다. 원래 모델에 이 LoRA를 붙이면 몇 스텝 모델이 된다.
- LCM LoRA, 라이트닝 LoRA: 이미지 모델용
- 영상 모델용 가속 LoRA: 영상은 워낙 느려서 거의 필수로 쓴다
장점은 조합이다. 내가 쓰는 파생 모델이나 캐릭터 LoRA에 가속 LoRA를 함께 붙일 수 있다.
쓸 때의 설정
증류 모델은 학습된 조건에 맞춰 써야 한다. 벗어나면 바로 깨진다.
| 설정 | 일반 모델 | 증류 모델 |
|---|---|---|
| 스텝 | 20~30 | 1~8 (모델이 정한 값) |
| CFG | 3~7 | 1 |
| 샘플러, 스케줄러 | 자유롭게 | 모델이 권장하는 것 |
| 네거티브 프롬프트 | 쓸 수 있다 | 쓸 수 없다 |
4스텝 모델을 30스텝으로 돌린다고 좋아지지 않는다. 오히려 나빠지는 경우가 많다.
대가
공짜는 없다.
- 다양성이 줄어든다. 같은 프롬프트에서 시드를 바꿔도 비슷한 구도가 나온다.
- 디테일과 질감이 단순해진다. 매끈하고 "AI 같은" 느낌이 강해지는 경향이 있다.
- 네거티브 프롬프트를 못 쓴다. CFG가 1이기 때문이다.
- 파인튜닝이 어렵다. 증류된 모델은 정상적인 학습 목표에서 벗어나 있다. 그 위에 새 개념을 가르치면 증류가 풀리거나 품질이 무너진다. 그래서 증류를 되돌린 모델을 만들어 그 위에서 학습하는 일이 생긴다. 5단계에서 다시 나온다.
언제 쓰나
- 초안과 탐색: 구도와 프롬프트를 빨리 여러 번 시험할 때. 몇 초 만에 결과가 나온다.
- 영상: 일반 설정으로는 한 편에 수십 분이 걸린다. 가속 LoRA로 몇 분으로 줄인다.
- 최종 결과물: 품질이 중요하면 증류하지 않은 모델로 다시 돌리는 것을 고려한다.
확인 문제
- 30스텝, CFG 5로 생성하면 디노이저를 몇 번 부르나? 4스텝, CFG 1이면?
- 처음부터 한 걸음에 가도록 학습하면 뭉개지는데, 증류로 한 걸음 모델을 만들 수 있는 이유는?
- 증류 모델에 네거티브 프롬프트가 안 듣는 이유는?
풀이
- 60번과 4번이다. 15배 차이다.
- 선생 모델에서는 노이즈 하나에 도착할 그림이 하나로 정해져 있다. 답이 하나라서 평균이 나오지 않는다.
- CFG를 1로 쓰기 때문이다. 1-6에서 본 대로 CFG가 1이면 네거티브 항이 지워진다.