"네가 가진 checkpoint 는 모델의 한 조각이야. 나머지 조각은 어딘가에서 와야 하고 — 어디서인지 알아내는 게 작업의 절반이야."
checkpoint 가 늘 모델 전체는 아니야
옛 이미지 모델에선, 다운받은 파일이 전부였어: backbone, text encoder, VAE, 다 한 checkpoint 에. transformer 시대 모델이 그 가정도 깼어. 커뮤니티 포맷으로 공유되는 FLUX checkpoint 는 자주 transformer 전용이야 — DiT backbone 만 담고 나머진 없어. text encoder(CLIP 이랑 큰 T5)랑 VAE 는 그냥 파일에 없어. 옛 all-in-one checkpoint 처럼 로드하려 하면 프롬프트 읽을 방법 없는 모델을 얻어.
빠진 조각을 명시적으로 source 해
해법은 transformer 를 local 파일에서 로드하고 보조 컴포넌트 — T5, CLIP, VAE — 를 모델의 base repository 정의에서 source 하는 거야. 실전: transformer 를 from-single-file 경로로 로드하고, 그다음 그 transformer 를 공급하면서 base 컴포넌트는 알려진 정의에서 오게 두고 full pipeline 을 구성해. local 파일은 실제로 local 인 부분을 주고; 나머진 그 둘레로 조립돼.
첫 실행 함정: 빠진 tokenizer 의존성
여기 모두를 한 번 무는 날카로운 가장자리가 있어. 큰 T5 text encoder 는 작동하려면 특정 tokenizer 라이브러리가 설치돼야 해 — 없으면, 실패가 '이 라이브러리 설치해' 라고 안 해. tokenizer 를 로드하거나 변환 못 한다고 모호하게 말해. 진짜 원인은 환경에 빠진 패키지 두 개야. 이게 이 모델 family 의 canonical 첫 실행 함정이야: 에러 메시지가 증상을 가리키고, 해법은 네가 필요한지 몰랐던 의존성이야.
MPS 는 CUDA 가 아니고, 대개 괜찮아
이 모든 게 대부분의 diffusion 코드가 가정하는 CUDA 가 아니라 Apple Silicon 의 Metal backend 에서 돌아. 대부분의 경우 차이가 안 보여 — 같은 모델 코드가 Metal 디바이스에서 돌아. 근데 추상화가 완벽하진 않아: 어떤 연산은 미묘하게 다르게 행동하고, 어떤 dtype 선택은 더 중요하고, unified-memory 모델(OOM lesson 에서)이 메모리 계산을 바꿔. 규율은 compute backend 를 알려진 변수로 다루고, 실제 디바이스에서 테스트하고, CUDA-튜닝된 조언이 안 바뀌고 옮겨간다고 절대 가정 안 하는 거야.