Diffusers documentation
PEFT
PEFT
Diffusers는 PeftAdapterMixin 클래스를 통해 PEFT 라이브러리로 LoRA와 같은 어댑터를 로드하는 것을 지원합니다. 이를 통해 Diffusers의 UNet2DConditionModel, SD3Transformer2DModel과 같은 모델링 클래스가 어댑터와 함께 작동할 수 있습니다.
Diffusers에서 추론을 위해 PEFT를 사용하는 방법에 대한 개요는 Inference with PEFT 튜토리얼을 참고하세요.
PeftAdapterMixin
PEFT 라이브러리에서 지원하는 어댑터 가중치를 로드하고 사용하는 데 필요한 모든 함수를 포함하는 클래스입니다. 어댑터 및 기본 모델에 이를 주입하는 방법에 대한 자세한 내용은 PEFT 문서를 참고하세요.
최신 버전의 PEFT를 설치하고 이 mixin을 사용하여 다음을 수행합니다:
- 모델에 새로운 어댑터를 연결합니다.
- 여러 어댑터를 연결하고 반복적으로 활성화/비활성화합니다.
- 모델의 모든 어댑터를 활성화/비활성화합니다.
- 활성 어댑터 목록을 가져옵니다.
모델의 현재 활성 어댑터 목록을 가져옵니다.
어댑터와 PEFT 방법에 익숙하지 않으시다면, PEFT 문서에서 더 자세히 읽어보시기를 권합니다.
add_adapter
< source >( adapter_configadapter_name: str = 'default' )
학습을 위해 현재 모델에 새로운 어댑터를 추가합니다. 어댑터 이름이 전달되지 않으면 PEFT 라이브러리의 명명 규칙을 따르는 기본 이름이 어댑터에 할당됩니다.
어댑터와 PEFT 방법에 익숙하지 않으시다면, PEFT 문서에서 더 자세히 읽어보시길 권해드립니다.
delete_adapters
< source >( adapter_names: list[str] | str )
adapter의 LoRA 레이어를 기반 모델에서 삭제합니다.
예:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")모델에 연결된 모든 어댑터를 비활성화하고 기본 모델만으로 추론하도록 전환합니다.
어댑터와 PEFT 방법에 익숙하지 않으시다면, PEFT 문서에서 더 자세히 읽어보시기를 권합니다.
기저 모델의 활성 LoRA 레이어를 비활성화합니다.
예:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()모델에 연결된 어댑터를 활성화합니다. 모델은 self.active_adapters()를 사용하여 활성화할 어댑터 목록을 가져옵니다.
어댑터와 PEFT 방법에 익숙하지 않으시다면, PEFT 문서에서 더 자세히 읽어보시기를 권합니다.
기저 모델의 활성 LoRA 레이어를 활성화합니다.
예:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()enable_lora_hotswap
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
LoRA 어댑터의 핫스왑을 가능하게 합니다.
…
load_lora_adapter
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
매개변수
- pretrained_model_name_or_path_or_dict (
str또는os.PathLike또는dict) — 다음 중 하나일 수 있습니다:- Hub에 호스팅된 사전 학습 모델의 model id 문자열(예:
google/ddpm-celebahq-256). ./my_model_directory와 같이 ModelMixin.save_pretrained()로 저장된 모델 가중치를 포함하는 디렉터리의 경로- torch 상태 사전입니다.
- Hub에 호스팅된 사전 학습 모델의 model id 문자열(예:
- prefix (
str, 선택 사항) — state dict를 필터링할 접두사. - cache_dir (
str | os.PathLike, 선택 사항) — 표준 캐시를 사용하지 않을 경우, 다운로드된 사전 학습 모델 구성이 캐시되는 디렉터리의 경로입니다. - force_download (
bool, 선택 사항, 기본값False) — 모델 가중치 및 구성 파일의 (재)다운로드를 강제할지 여부입니다. 캐시된 버전이 존재하는 경우 이를 무시합니다. - proxies (
dict[str, str], 선택) — 프로토콜 또는 엔드포인트별로 사용할 프록시 서버의 사전입니다. 예를 들어,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}와 같습니다. 각 요청에 프록시가 사용됩니다. - local_files_only (
bool, 선택 사항, 기본값False) — 로컬 모델 가중치 및 구성 파일만 로드할지 여부를 지정합니다.True로 설정하면 Hub에서 모델을 다운로드하지 않습니다. - token (
str또는 bool, 선택 사항) — 원격 파일에 대한 HTTP bearer 인증으로 사용할 토큰입니다.True인 경우,diffusers-cli login에서 생성된 토큰(~/.huggingface에 저장됨)이 사용됩니다. - revision (
str, 선택 사항, 기본값"main") — 사용할 특정 모델 버전입니다. Git에서 허용하는 브랜치 이름, 태그 이름, 커밋 ID 또는 기타 식별자일 수 있습니다. - subfolder (
str, 선택 사항, 기본값"") — Hub 또는 로컬의 더 큰 모델 저장소 내에서 모델 파일의 서브폴더 위치입니다. - network_alphas (
dict[str, float]) — 안정적인 학습과 underflow 방지를 위해 사용되는 network alpha 값입니다. 이 값은 kohya-ss trainer 스크립트의--network_alpha옵션과 동일한 의미를 가집니다. 이 링크를 참조하세요. - low_cpu_mem_usage (
bool, 선택) — 무작위 가중치를 초기화하지 않고 사전 학습된 LoRA 가중치만 로드하여 모델 로딩 속도를 높입니다. - hotswap — (
bool, 선택 사항) 기본값은False. 기존 (LoRA) 어댑터를 새로 로드한 어댑터로 제자리에서 교체할지 여부입니다. 즉, 추가 어댑터를 로드하는 대신 기존 어댑터의 가중치를 새 어댑터의 가중치로 대체합니다. 이는 더 빠르고 메모리 효율적일 수 있습니다. 그러나 hotswapping의 주요 이점은 모델이 torch.compile로 컴파일된 경우, 새 어댑터를 로드할 때 모델의 재컴파일이 필요하지 않다는 점입니다. hotswapping을 사용할 때 전달하는adapter_name는 이미 로드된 어댑터의 이름이어야 합니다.새 어댑터와 기존 어댑터의 랭크와/또는 LoRA 알파(즉, 스케일링)가 서로 다른 경우, 어댑터를 로드하기 전에 추가 메서드를 호출해야 합니다:
LoRA 어댑터를 기본 모델에 로드합니다.
save_lora_adapter
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
매개변수
- save_directory (
str또는os.PathLike) — LoRA 매개변수를 저장할 디렉터리입니다. 존재하지 않으면 생성됩니다. - adapter_name — (
str, 기본값 “default”): 직렬화할 어댑터의 이름입니다. 기본 모델에 여러 개의 어댑터가 로드된 경우 유용합니다. - upcast_before_saving (
bool, 기본값False) — 직렬화 전에 기본 모델을torch.float32로 변환할지 여부. - safe_serialization (
bool, 선택 사항, 기본값True) —safetensors를 사용하여 모델을 저장할지, 아니면pickle을 사용한 전통적인 PyTorch 방식으로 저장할지를 결정합니다. - weight_name — (
str, 선택 사항, 기본값None): state dict를 직렬화할 파일 이름.
기저 모델에 해당하는 LoRA 매개변수를 저장합니다.
set_adapter
< source >( adapter_name: str | list[str] )
모델이 해당 어댑터만 사용하도록 강제하여 특정 어댑터를 설정하고, 다른 어댑터는 비활성화합니다.
어댑터와 PEFT 방법에 익숙하지 않으시다면, PEFT 문서에서 더 자세히 읽어보시기를 권합니다.
set_adapters
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
확산 네트워크(예: unet, transformer 등)에서 사용할 현재 활성 어댑터를 설정합니다.
예:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])