kimyongtae.com
홈 / 강의 / AI 이미지·애니메이션 생성, 원리부터 / 1단계. 생성 모델의 원리

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를 붙이면 몇 스텝 모델이 된다.

장점은 조합이다. 내가 쓰는 파생 모델이나 캐릭터 LoRA에 가속 LoRA를 함께 붙일 수 있다.

쓸 때의 설정

증류 모델은 학습된 조건에 맞춰 써야 한다. 벗어나면 바로 깨진다.

설정일반 모델증류 모델
스텝20~301~8 (모델이 정한 값)
CFG3~71
샘플러, 스케줄러자유롭게모델이 권장하는 것
네거티브 프롬프트쓸 수 있다쓸 수 없다

4스텝 모델을 30스텝으로 돌린다고 좋아지지 않는다. 오히려 나빠지는 경우가 많다.

대가

공짜는 없다.

언제 쓰나

확인 문제

  1. 30스텝, CFG 5로 생성하면 디노이저를 몇 번 부르나? 4스텝, CFG 1이면?
  2. 처음부터 한 걸음에 가도록 학습하면 뭉개지는데, 증류로 한 걸음 모델을 만들 수 있는 이유는?
  3. 증류 모델에 네거티브 프롬프트가 안 듣는 이유는?

풀이

  1. 60번과 4번이다. 15배 차이다.
  2. 선생 모델에서는 노이즈 하나에 도착할 그림이 하나로 정해져 있다. 답이 하나라서 평균이 나오지 않는다.
  3. CFG를 1로 쓰기 때문이다. 1-6에서 본 대로 CFG가 1이면 네거티브 항이 지워진다.
← 1-6 CFG: 프롬프트를 얼마나 강하게 따를 것인가 1-8 아키텍처: U-Net에서 DiT로 →