Diffusers documentation
텍스트-이미지
텍스트-이미지
Stable Diffusion 모델은 CompVis, Stability AI, Runway, LAION의 연구자와 엔지니어에 의해 개발되었습니다. StableDiffusionPipeline은 텍스트 입력을 주면 사진과 같은 사실적인 이미지를 생성할 수 있습니다. 이 모델은 LAION-5B 데이터셋의 하위 집합에서 가져온 512x512 이미지로 학습되었습니다. 텍스트 프롬프트에 기반하여 모델을 조건화하기 위해 동결된 CLIP ViT-L/14 텍스트 인코더를 사용합니다. 860M UNet과 123M 텍스트 인코더를 갖춘 이 모델은 상대적으로 가볍고 소비자용 GPU에서 실행할 수 있습니다. Stable Diffusion은 Latent diffusion 연구 위에 구축되었습니다. Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, Björn Ommer가 High-Resolution Image Synthesis with Latent Diffusion Models에서 제안했습니다.
해당 논문의 초록은 다음과 같습니다:
이미지 형성 과정을 노이즈 제거 오토인코더의 순차적 적용으로 분해함으로써, 확산 모델(DMs)은 이미지 데이터 및 그 이상의 영역에서 최첨단 합성 결과를 달성합니다. 또한, 이러한 모델의 수식적 구성은 재학습 없이 이미지 생성 과정을 제어하는 유도 메커니즘을 가능하게 합니다. 그러나 이러한 모델은 일반적으로 픽셀 공간에서 직접 작동하므로, 강력한 DM의 최적화는 수백 개의 GPU 데이를 소모하고, 순차적 평가로 인해 추론 비용이 높습니다. 제한된 계산 자원에서도 DM의 품질과 유연성을 유지하면서 학습을 가능하게 하기 위해, 우리는 강력한 사전 학습된 오토인코더의 잠재 공간에 이를 적용합니다. 이전 연구와 달리, 이러한 표현 위에서 확산 모델을 학습하면 복잡도 감소와 세부 정보 보존 사이의 거의 최적의 지점에 처음으로 도달할 수 있으며, 이를 통해 시각적 충실도가 크게 향상됩니다. 모델 아키텍처에 크로스 어텐션 레이어를 도입함으로써, 우리는 텍스트나 바운딩 박스 및 같은 일반적인 조건 입력에 대해 강력하고 유연한 생성기로 확산 모델을 전환시켰으며, 합성 방식의 고해상도 합성이 가능해졌습니다. 우리의 잠재 확산 모델(LDMs)은 이미지 인페인팅에서 새로운 최첨단 성능을 달성하고, 무조건 이미지 생성, 의미론적 장면 합성, 초해상도 등 다양한 작업에서 매우 경쟁력 있는 성능을 보여주며, 픽셀 기반 DM과 비교할 때 계산 요구 사항을 크게 줄입니다. 코드는 https://github.com/CompVis/latent-diffusion에서 사용할 수 있습니다.
스케줄러의 속도와 품질 사이의 트레이드오프를 탐색하는 방법과 파이프라인 구성 요소를 효율적으로 재사용하는 방법을 배우려면 Stable Diffusion Tips 섹션을 꼭 확인하세요!
특정 작업에 공식 체크포인트 중 하나를 사용하려는 경우, CompVis 및 Stability AI Hub 조직을 탐색해 보세요!
StableDiffusionPipeline
클래스 diffusers.StableDiffusionPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: CLIPVisionModelWithProjection = Nonerequires_safety_checker: bool = True )
매개변수
- vae (AutoencoderKL) — 이미지를 잠재 표현으로 인코딩하고 디코딩하는 Variational Auto-Encoder (VAE) 모델.
- text_encoder (CLIPTextModel) — 동결된 텍스트 인코더(clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
텍스트를 토큰화하기 위한
CLIPTokenizer입니다. - unet (UNet2DConditionModel) —
인코딩된 이미지 latents의 노이즈를 제거하기 위한
UNet2DConditionModel. - scheduler (SchedulerMixin) —
인코딩된 이미지 잠재를 디노이즈하기 위해
unet와 함께 사용할 스케줄러입니다. DDIMScheduler, LMSDiscreteScheduler, 또는 PNDMScheduler 중 하나일 수 있습니다. - safety_checker (
StableDiffusionSafetyChecker) — 생성된 이미지가 offensive 또는 harmful로 간주될 수 있는지 추정하는 분류 모듈입니다. 모델의 잠재적 해악에 대한 자세한 내용은 model card를 참고하세요. - feature_extractor (CLIPImageProcessor) —
생성된 이미지에서 특징을 추출하는
CLIPImageProcessor입니다.safety_checker의 입력으로 사용됩니다.
Stable Diffusion을 사용한 텍스트-이미지 생성을 위한 Pipeline입니다.
이 모델은 DiffusionPipeline에서 상속됩니다. 모든 파이프라인에 대해 구현된 일반적 메서드(다운로드, 저장, 특정 디바이스에서 실행 등)에 대해서는 상위 클래스 문서를 확인하세요.
파이프라인은 다음 로딩 메서드도 상속합니다:
- 텍스트 인버전 임베딩을 로드하는 load_textual_inversion()
- LoRA 가중치를 로드하는 load_lora_weights()
- LoRA 가중치를 저장하는 save_lora_weights()
.ckpt파일을 로드하기 위한 from_single_file()- IP Adapter를 로드하기 위한 load_ip_adapter()
__call__
< source >( prompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple
매개변수
- prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우prompt_embeds를 전달해야 합니다. - height (
int, 선택 사항, 기본값self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 높이입니다. - width (
int, 선택 사항, 기본값self.unet.config.sample_size * self.vae_scale_factor) — 생성된 이미지의 픽셀 단위 너비입니다. - num_inference_steps (
int, 선택 사항, 기본값 50) — 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 더 높은 품질의 이미지를 생성하지만, 추론 속도가 느려집니다. - timesteps (
list[int], 선택 사항) —timesteps인수를 지원하는 스케줄러의set_timesteps메서드에서 디노이징 과정에 사용할 커스텀 timesteps입니다. 정의되지 않은 경우,num_inference_steps가 전달될 때의 기본 동작이 사용됩니다. 내림차순으로 정렬되어 있어야 합니다. - sigmas (
list[float], 선택 사항) —set_timesteps메서드에sigmas인수를 지원하는 스케줄러의 노이즈 제거 과정에 사용할 커스텀 시그마입니다. 정의되지 않은 경우,num_inference_steps가 전달될 때의 기본 동작이 사용됩니다. - guidance_scale (
float, 선택 사항, 기본값 7.5) — guidance scale 값이 높을수록 모델은 이미지 품질이 낮아지는 대신 텍스트prompt와 밀접하게 연결된 이미지를 생성하도록 유도됩니다.guidance_scale > 1일 때 guidance scale이 활성화됩니다. - negative_prompt (
str또는list[str], 선택 사항) — 이미지 생성에 포함하지 않을 내용을 안내하는 프롬프트입니다. 정의되지 않은 경우negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때(guidance_scale < 1)에는 무시됩니다. - num_images_per_prompt (
int, 선택 사항, 기본값 1) — 프롬프트당 생성할 이미지의 수입니다. - eta (
float, 선택 사항, 기본값 0.0) — DDIM 논문에서 정의된 파라미터 eta (η)에 해당합니다. DDIMScheduler에만 적용되며, 다른 스케줄러에서는 무시됩니다. - generator (
torch.Generator또는list[torch.Generator], 선택 사항) — 생성을 결정적으로 만들기 위한torch.Generator. - latents (
torch.Tensor, 선택 사항) — 가우시안 분포에서 샘플링된 사전 생성된 노이즈 latents로, 이미지 생성의 입력으로 사용됩니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤generator를 사용하여 샘플링하여 latents 텐서를 생성합니다. - prompt_embeds (
torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력(프롬프트 가중치)을 쉽게 조정하는 데 사용할 수 있습니다. 제공되지 않으면prompt입력 인자에서 텍스트 임베딩이 생성됩니다. - negative_prompt_embeds (
torch.Tensor, 선택 사항) — 미리 생성된 부정 텍스트 임베딩입니다. 텍스트 입력(프롬프트 가중치)을 쉽게 조정하는 데 사용할 수 있습니다. 제공되지 않으면negative_prompt입력 인자로부터negative_prompt_embeds가 생성됩니다. - ip_adapter_image — (
PipelineImageInput, 선택): IP Adapters와 함께 사용할 선택적 이미지 입력입니다. - ip_adapter_image_embeds (
list[torch.Tensor], 선택 사항) — IP-Adapter를 위한 사전 생성된 이미지 임베딩입니다. IP-Adapter의 수와 동일한 길이의 리스트여야 합니다. 각 요소는(batch_size, num_images, emb_dim)형태의 텐서여야 합니다.do_classifier_free_guidance가True로 설정된 경우, 음의 이미지 임베딩을 포함해야 합니다. 제공되지 않으면ip_adapter_image입력 인자로부터 임베딩이 계산됩니다. - output_type (
str, 선택 사항, 기본값"pil") — 생성된 이미지의 출력 형식입니다.PIL.Image또는np.array중 하나를 선택합니다. - return_dict (
bool, 선택 사항, 기본값True) — 일반 튜플 대신 StableDiffusionPipelineOutput를 반환할지 여부. - cross_attention_kwargs (
dict, 선택 사항) — 지정된 경우self.processor에서 정의된AttentionProcessor로 전달되는 kwargs 사전입니다. - guidance_rescale (
float, 선택 사항, 기본값 0.0) — Common Diffusion Noise Schedules and Sample Steps are Flawed에서 제시한 guidance rescale 계수입니다. zero terminal SNR을 사용할 때 발생하는 과노출 문제를 수정하기 위해 guidance rescale 계수를 사용해야 합니다. - clip_skip (
int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, 선택 사항) — 추론 중 각 denoising 단계의 끝에서 호출되는 함수 또는PipelineCallback또는MultiPipelineCallbacks의 하위 클래스입니다. 다음 인수를 가집니다:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs에는callback_on_step_end_tensor_inputs로 지정된 모든 텐서 목록이 포함됩니다. - callback_on_step_end_tensor_inputs (
list, 선택 사항) —callback_on_step_end함수의 텐서 입력 목록입니다. 목록에 지정된 텐서는callback_kwargs인수로 전달됩니다. 파이프라인 클래스의._callback_tensor_inputs속성에 나열된 변수만 포함할 수 있습니다.
반환값
StableDiffusionPipelineOutput 또는 tuple
If return_dict is True, StableDiffusionPipelineOutput is returned,
otherwise a tuple is returned where the first element is a list with the generated images and the
second element is a list of bools indicating whether the corresponding generated image contains
“not-safe-for-work” (nsfw) content.
생성을 위한 pipeline의 호출 함수.
예:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
슬라이스된 어텐션 계산을 활성화합니다. 이 옵션이 활성화되면 어텐션 모듈은 입력 텐서를 슬라이스로 나누어 여러 단계에 걸쳐 어텐션을 계산합니다. 어텐션 헤드가 하나 이상인 경우, 각 헤드를 순차적으로 계산합니다. 이는 속도가 약간 감소하는 대신 메모리를 절약하는 데 유용합니다.
> ⚠️ PyTorch > 2.0 또는 xFormers의
scaled_dot_product_attention(SDPA)를 이미 사용 중이라면 attention slicing을 활성화하지 마세요. 이러한 attention 계산은 이미 메모리 효율성이 매우 높아 이 기능을 활성화할 필요가 없습니다. SDPA 또는 xFormers와 함께 attention slicing을 활성화하면 심각한 성능 저하가 발생할 수 있습니다!
예:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]슬라이스된 어텐션 계산 기능을 비활성화합니다. enable_attention_slicing가 이전에 호출된 경우, 어텐션은 한 번에 계산됩니다.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
매개변수
- attention_op (
Callable, 선택 사항) — xFormers의memory_efficient_attention()함수의op인수로 사용될None기본 연산자를 재정의합니다.
xFormers에서 메모리 효율적인 어텐션을 활성화합니다. 이 옵션을 활성화하면 추론 시 GPU 메모리 사용량이 감소하고 속도가 향상될 수 있습니다. 학습 시 속도 향상은 보장되지 않습니다.
> ⚠️ memory efficient attention과 sliced attention이 모두 활성화된 경우, memory efficient attention이 > 우선합니다.
예:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)xFormers에서 메모리 효율적 어텐션을 비활성화합니다.
load_textual_inversion
< source >( pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]]token: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None**kwargs )
매개변수
- pretrained_model_name_or_path (
str또는os.PathLike또는list[str or os.PathLike]또는Dict또는list[Dict]) — 다음 중 하나이거나, 이들의 목록일 수 있습니다:- Hub에 호스팅된 사전 학습된 모델의 model id 문자열(예:
sd-concepts-library/low-poly-hd-logos-icons). - 텍스트 인버전 가중치가 포함된 디렉터리의 경로(예:
./my_text_inversion_directory/) - 텍스트 인버전 가중치가 포함된 파일의 경로(예:
./my_text_inversions.pt). - torch 상태 사전입니다.
- Hub에 호스팅된 사전 학습된 모델의 model id 문자열(예:
- token (
str또는list[str], 선택 사항) — 텍스트 인버전 가중치에 사용할 토큰을 재정의합니다.pretrained_model_name_or_path가 리스트인 경우,token도 동일한 길이의 리스트여야 합니다. - text_encoder (CLIPTextModel, 선택 사항) — 동결된 텍스트 인코더(clip-vit-large-patch14). 지정하지 않으면 함수가 self.tokenizer를 사용합니다.
- tokenizer (CLIPTokenizer, 선택 사항) —
텍스트를 토큰화할
CLIPTokenizer입니다. 지정하지 않으면 함수가 self.tokenizer를 사용합니다. - weight_name (
str, 선택 사항) — 사용자 지정 가중치 파일의 이름. 다음 경우에 사용해야 합니다:- 저장된 텍스트 인버전 파일은 🤗 Diffusers 형식이지만,
text_inv.bin과 같은 특정 가중치 이름으로 저장되었습니다. - 저장된 텍스트 인버전 파일은 Automatic1111 형식입니다.
- 저장된 텍스트 인버전 파일은 🤗 Diffusers 형식이지만,
- 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에서 모델을 다운로드하지 않습니다. - hf_token (
str또는 bool, 선택 사항) — 원격 파일에 대한 HTTP bearer 인증으로 사용할 토큰입니다.True인 경우,diffusers-cli login에서 생성된 토큰(~/.huggingface에 저장됨)이 사용됩니다. - revision (
str, 선택 사항, 기본값"main") — 사용할 특정 모델 버전입니다. Git에서 허용하는 브랜치 이름, 태그 이름, 커밋 ID 또는 기타 식별자일 수 있습니다. - subfolder (
str, 선택 사항, 기본값"") — Hub 또는 로컬의 더 큰 모델 저장소 내에서 모델 파일의 서브폴더 위치입니다. - mirror (
str, 선택 사항) — 중국에서 모델을 다운로드할 때 접근성 문제를 해결하기 위한 미러 소스입니다. 소스의 적시성이나 안전성을 보장하지 않으며, 자세한 정보는 해당 미러 사이트를 참고하세요.
StableDiffusionPipeline의 텍스트 인코더에 Textual Inversion 임베딩을 로드합니다(🤗 Diffusers와 Automatic1111 형식 모두 지원).
예:
🤗 Diffusers 형식으로 Textual Inversion 임베딩 벡터를 로드하려면:
from diffusers import StableDiffusionPipeline
import torch
model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
pipe.load_textual_inversion("sd-concepts-library/cat-toy")
prompt = "A <cat-toy> backpack"
image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")Automatic1111 형식의 Textual Inversion 임베딩 벡터를 로드하려면 먼저 벡터를 다운로드(예: civitAI에서)한 다음 벡터를 로드해야 합니다
로컬에서:
from diffusers import StableDiffusionPipeline
import torch
model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")
prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."
image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")from_single_file
< source >( pretrained_model_link_or_path**kwargs )
매개변수
- pretrained_model_link_or_path (
str또는os.PathLike, 선택 사항) — 다음 중 하나일 수 있습니다:- Hub에 있는
.ckpt파일에 대한 링크(예:"https://huggingface.co/<repo_id>/blob/main/<path_to_file>.ckpt") - 모든 파이프라인 가중치가 포함된 파일의 경로입니다.
- Hub에 있는
- dtype (
str또는torch.dtype, 선택 사항) — 기본torch.dtype를 재정의하여 다른 dtype로 모델을 로드합니다. - force_download (
bool, 선택 사항, 기본값False) — 모델 가중치 및 구성 파일의 (재)다운로드를 강제할지 여부입니다. 캐시된 버전이 존재하는 경우 이를 무시합니다. - cache_dir (
str | os.PathLike, 선택 사항) — 표준 캐시를 사용하지 않을 경우, 다운로드된 사전 학습 모델 구성이 캐시되는 디렉터리의 경로입니다. - 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 또는 기타 식별자일 수 있습니다. - original_config_file (
str, 선택 사항) — 모델을 학습하는 데 사용된 원래 config 파일의 경로입니다. 제공되지 않으면 checkpoint 파일에서 config 파일을 추론합니다. - config (
str, 선택 사항) — 다음 중 하나일 수 있습니다:- Hub에 호스팅된 사전 학습된 파이프라인의 repo id(예:
CompVis/ldm-text2im-large-256) 문자열 - Diffusers 형식의 파이프라인 구성 요소 설정을 포함하는 디렉터리 경로(예:
./my_pipeline_directory/)
- Hub에 호스팅된 사전 학습된 파이프라인의 repo id(예:
- disable_mmap (‘bool’, 선택 사항, 기본값 ‘False’) — Safetensors 모델을 로드할 때 mmap을 비활성화할지 여부입니다. 모델이 네트워크 마운트나 하드 드라이브에 있는 경우 이 옵션을 사용하면 성능이 더 좋아질 수 있습니다.
- kwargs (나머지 키워드 인자 사전, 선택 사항) —
특정 파이프라인 클래스의 파이프라인 구성 요소인 로드 및 저장 가능 변수를 덮어쓸 수 있습니다. 덮어쓴 구성 요소는 파이프라인의
__init__메서드에 직접 전달됩니다. 자세한 내용은 아래 예시를 참조하세요.
.ckpt 또는 .safetensors 형식으로 저장된 사전 학습된 파이프라인 가중치에서 DiffusionPipeline을 초기화합니다. 파이프라인은 기본적으로 평가 모드(model.eval())로 설정됩니다.
예:
>>> from diffusers import StableDiffusionPipeline
>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = StableDiffusionPipeline.from_single_file(
... "https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors"
... )
>>> # Download pipeline from local file
>>> # file is downloaded under ./v1-5-pruned-emaonly.ckpt
>>> pipeline = StableDiffusionPipeline.from_single_file("./v1-5-pruned-emaonly.ckpt")
>>> # Enable float16 and move to GPU
>>> pipeline = StableDiffusionPipeline.from_single_file(
... "https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned-emaonly.ckpt",
... torch_dtype=torch.float16,
... )
>>> pipeline.to("cuda")load_lora_weights
< source >( pretrained_model_name_or_path_or_dict: str | dict[str, torch.Tensor]adapter_name: str | None = Nonehotswap: bool = False**kwargs )
매개변수
- pretrained_model_name_or_path_or_dict (
str또는os.PathLike또는dict) — lora_state_dict()를 참조하세요. - adapter_name (
str, 선택 사항) — 로드된 어댑터 모델을 참조할 때 사용할 어댑터 이름입니다. 지정하지 않으면, 로드 중인 어댑터의 총 개수를 i로 하여default_{i}를 사용합니다. - low_cpu_mem_usage (
bool, 선택) — 무작위 가중치를 초기화하지 않고 사전 학습된 LoRA 가중치만 로드하여 모델 로딩 속도를 높입니다. - hotswap (
bool, 선택 사항) — 기본값은False. 기존 (LoRA) 어댑터를 새로 로드한 어댑터로 제자리에서 교체할지 여부입니다. 즉, 추가 어댑터를 로드하는 대신 기존 어댑터의 가중치를 새 어댑터의 가중치로 대체합니다. 이는 더 빠르고 메모리 효율적일 수 있습니다. 그러나 hotswapping의 주요 이점은 모델이 torch.compile로 컴파일된 경우, 새 어댑터를 로드할 때 모델의 재컴파일이 필요하지 않다는 점입니다. hotswapping을 사용할 때 전달하는adapter_name는 이미 로드된 어댑터의 이름이어야 합니다.새 어댑터와 기존 어댑터의 랭크와/또는 LoRA 알파(즉, 스케일링)가 서로 다른 경우, 어댑터를 로드하기 전에 추가 메서드를 호출해야 합니다:
pretrained_model_name_or_path_or_dict에 지정된 LoRA 가중치를 self.unet와 self.text_encoder에 로드합니다.
모든 kwargs는 self.lora_state_dict로 전달됩니다.
state dict가 로드되는 방법에 대한 자세한 내용은 lora_state_dict()를 참조하세요.
self.unet에 상태 사전이 로드되는 방법에 대한 자세한 내용은 load_lora_into_unet()을 참조하세요.
self.text_encoder에 state dict가 로드되는 방법에 대한 자세한 내용은 load_lora_into_text_encoder()를 참조하세요.
save_lora_weights
< source >( save_directory: str | os.PathLikeunet_lora_layers: dict = Nonetext_encoder_lora_layers: dict = Noneis_main_process: bool = Trueweight_name: str = Nonesave_function: typing.Callable = Nonesafe_serialization: bool = Trueunet_lora_adapter_metadata = Nonetext_encoder_lora_adapter_metadata = None )
매개변수
- save_directory (
str또는os.PathLike) — LoRA 매개변수를 저장할 디렉터리입니다. 존재하지 않으면 생성됩니다. - unet_lora_layers (
dict[str, torch.nn.Module]또는dict[str, torch.Tensor]) —unet에 해당하는 LoRA 레이어의 state dict입니다. - text_encoder_lora_layers (
dict[str, torch.nn.Module]또는dict[str, torch.Tensor]) —text_encoder에 해당하는 LoRA 레이어의 state dict입니다. 🤗 Transformers에서 가져오므로 텍스트 인코더 LoRA state dict를 명시적으로 전달해야 합니다. - is_main_process (
bool, 선택 사항, 기본값True) — 이 함수를 호출하는 프로세스가 메인 프로세스인지 여부입니다. 분산 학습 중에 모든 프로세스에서 이 함수를 호출해야 하는 경우 유용합니다. 이 경우 레이스 조건을 피하기 위해 메인 프로세스에서만is_main_process=True로 설정하세요. - save_function (
Callable) — 상태 사전(state dictionary)을 저장하는 데 사용할 함수입니다. 분산 학습(distributed training) 중에torch.save를 다른 방법으로 대체해야 할 때 유용합니다. 환경 변수DIFFUSERS_SAVE_MODE로 설정할 수 있습니다. - safe_serialization (
bool, 선택 사항, 기본값True) —safetensors를 사용하여 모델을 저장할지, 아니면pickle을 사용한 전통적인 PyTorch 방식으로 저장할지를 결정합니다. - unet_lora_adapter_metadata — state dict와 함께 직렬화될 unet에 연결된 LoRA 어댑터 메타데이터.
- text_encoder_lora_adapter_metadata — state dict와 함께 직렬화될 text encoder에 연결된 LoRA 어댑터 메타데이터.
UNet과 텍스트 인코더에 해당하는 LoRA 매개변수를 저장합니다.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
매개변수
- prompt (
str또는list[str], 선택 사항) — 인코딩할 프롬프트 - device — (
torch.device): torch device - num_images_per_prompt (
int) — 프롬프트당 생성할 이미지 수 - do_classifier_free_guidance (
bool) — classifier free guidance를 사용할지 여부 - negative_prompt (
str또는list[str], 선택 사항) — 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우negative_prompt_embeds를 대신 전달해야 합니다. 가이던스를 사용하지 않을 때 무시됩니다(즉,guidance_scale이1보다 작으면 무시됩니다). - prompt_embeds (
torch.Tensor, 선택) — 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면prompt입력 인자로부터 텍스트 임베딩이 생성됩니다. - negative_prompt_embeds (
torch.Tensor, 선택 사항) — 미리 생성된 negative text embeddings입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면negative_prompt입력 인자로부터 negative_prompt_embeds가 생성됩니다. - lora_scale (
float, 선택 사항) — LoRA 레이어가 로드된 경우 텍스트 인코더의 모든 LoRA 레이어에 적용될 LoRA 스케일입니다. - clip_skip (
int, 선택 사항) — 프롬프트 임베딩을 계산할 때 CLIP에서 건너뛸 레이어의 수입니다. 값이 1이면 최종 레이어 바로 이전 레이어의 출력을 프롬프트 임베딩 계산에 사용합니다.
프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
StableDiffusionPipelineOutput
클래스 diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
Stable Diffusion 파이프라인의 출력 클래스입니다.