"네가 가진 checkpoint 는 모델의 한 조각일 뿐이야. 나머지 조각은 어딘가에서 와야 하고, 그 어딘가가 어딘지 알아내는 게 일의 절반이야."
checkpoint 가 늘 모델 전부는 아니야
옛날 이미지 모델에서는 받아 온 파일 하나가 전부였어. backbone 도 text encoder 도 VAE 도 다 그 checkpoint 안에 있었지. transformer 시대 모델이 그 전제도 깼어. 커뮤니티 포맷으로 도는 FLUX checkpoint 는 대개 transformer 만 들어 있어. DiT backbone 만 있고 나머지는 없는 거야. text encoder(CLIP 이랑 큰 T5)랑 VAE 는 아예 파일에 없어. 옛날식 통짜 checkpoint 처럼 올리려고 하면 프롬프트를 읽을 방법이 없는 모델이 나와.
빠진 조각은 어디서 가져올지 명시해
해법은 transformer 는 local 파일에서 올리고, 딸려야 할 것들 — T5, CLIP, VAE — 은 그 모델의 base 정의에서 가져오는 거야. 실제로는 이렇게 해. transformer 를 단일 파일 경로로 올리고, 그 transformer 를 넘겨주면서 base 쪽에서 나머지를 가져오게 해서 pipeline 을 조립하는 거지. local 파일은 진짜로 local 인 부분만 주고, 나머지는 그 주위로 붙어.
첫 실행 함정: 빠진 tokenizer 의존성
여기 누구나 한 번은 물리는 날 선 데가 있어. 큰 T5 text encoder 는 특정 tokenizer 라이브러리가 깔려 있어야 돌아. 없으면 '이 라이브러리 깔아' 라고 안 알려 줘. tokenizer 를 못 올리겠다거나 못 바꾸겠다고 애매하게 말하고 말아. 진짜 원인은 환경에 패키지 두 개가 빠진 거고. 이게 이 모델 계열의 대표적인 첫 실행 함정이야. 에러 메시지는 증상만 가리키고, 해법은 필요한 줄도 몰랐던 의존성인 거지.
MPS 는 CUDA 가 아니고, 대개는 괜찮아
이게 다 대부분의 diffusion 코드가 전제하는 CUDA 가 아니라 Apple Silicon 의 Metal backend 에서 돌아. 대개는 차이가 안 느껴져. 같은 모델 코드가 Metal 디바이스에서도 그냥 돌거든. 그런데 그 추상화가 완벽하진 않아. 어떤 연산은 미묘하게 다르게 굴고, 어떤 dtype 선택은 더 중요해지고, 통합 메모리 구조(OOM lesson 에서 본 그거)가 메모리 계산을 바꿔 놔. 규율은 compute backend 를 알려진 변수로 다루고, 실제 디바이스에서 시험하고, CUDA 기준으로 쓰인 조언이 그대로 넘어온다고 절대 전제하지 않는 거야.