파이프라인 로딩(Loading Pipelines)
파이프라인 로딩(Loading Pipelines)
디퓨전 모델은 UNet·디퓨전 트랜스포머(DiT), 텍스트 인코더, VAE, 스케줄러 같은 여러 구성 요소로 이뤄져 있어요. DiffusionPipeline은 이 모든 것을 하나의 쉬운 API로 감싸면서도 각 구성 요소를 바꿀 수 있는 유연성을 제공해요. 이 문서는 파이프라인을 불러오는 방법을 다뤄요.
파이프라인 로딩
DiffusionPipeline은 베이스 파이프라인 클래스예요. model_index.json 파일에서 클래스 이름을 스캔해 모델의 파이프라인 하위 클래스(예: QwenImagePipeline)를 자동으로 선택·반환해요. from_pretrained()에 모델 id를 넘기면 됩니다.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image",
torch_dtype=torch.bfloat16,
device_map="cuda",
)
출처: https://huggingface.co/docs/diffusers/using-diffusers/loading
각 모델은 DiffusionPipeline을 상속하는 특정 하위 클래스를 가져요. 하위 클래스는 보통 작업에 특화돼 있습니다.
| pipeline subclass | task |
|---|---|
QwenImagePipeline |
text-to-image |
QwenImageImg2ImgPipeline |
image-to-image |
QwenImageInpaintPipeline |
inpaint |
하위 클래스를 직접 쓸 수도 있어요.
import torch
from diffusers import QwenImagePipeline
pipeline = QwenImagePipeline.from_pretrained(
"Qwen/Qwen-Image",
torch_dtype=torch.bfloat16,
device_map="cuda",
)
로컬 파이프라인
파이프라인은 로컬에서도 실행할 수 있어요. snapshot_download로 모델 저장소를 내려받아요.
from huggingface_hub import snapshot_download
snapshot_download(repo_id="Qwen/Qwen-Image")
모델은 캐시에 다운로드돼요. 폴더 경로를 from_pretrained()에 넘기면 로드됩니다. 주의할 점은 from_pretrained()가 로컬 경로를 감지하면 허브에서 파일을 내려받지 않는다는 거예요. 즉 이후 모델에 반영된 업데이트도 자동으로 받지 않아요.
pipeline = QwenImagePipeline.from_pretrained(
"path/to/your/cache",
torch_dtype=torch.bfloat16,
device_map="cuda",
)
파이프라인 데이터 타입
from_pretrained()의 torch_dtype 인자로 특정 데이터 타입으로 모델을 로드할 수 있어요. 큰 트랜스포머 모델을 반정밀도로 로드하면 메모리를 줄일 수 있어요. 모델별 데이터 타입을 딕셔너리로 지정할 수도 있고, default 키로 기본 타입을 설정해요. 딕셔너리에 없고 default도 없으면 전체 정밀도(torch.float32)로 로드돼요.
pipeline = QwenImagePipeline.from_pretrained(
"Qwen/Qwen-Image",
torch_dtype={"transformer": torch.bfloat16, "default": torch.float16},
)
스케줄러 교체
파이프라인의 스케줄러는 .scheduler 속성으로 바꿀 수 있어요(스케줄러 문서에서 자세히 다뤄요).
더 알아보기
- 스케줄러: Schedulers
- 파이프라인 사용: Pipelines
- 퀵스타트: Quickstart