Buckets:
AuraFlow
AuraFlow는 Stable Diffusion 3에서 영감을 받아 개발되었으며, Apache 2.0 라이선스를 갖춘 텍스트-이미지 생성 모델 중 가장 큰 규모입니다. 이 모델은 GenEval 벤치마크에서 최첨단(SOTA) 결과를 달성합니다.
Fal 팀에서 개발했으며, 자세한 내용은 이 블로그 게시물에서 확인할 수 있습니다.
AuraFlow를 소비자용 하드웨어에서 실행하는 데 상당한 비용이 발생할 수 있습니다. 그러나 일련의 최적화를 수행하여 더 빠르고 메모리에 부담이 적은 방식으로 실행할 수 있습니다. 자세한 내용은 이 섹션을 참고하세요.
양자화
Quantization은 모델 가중치를 더 낮은 정밀도의 데이터 타입으로 저장하여 매우 큰 모델의 메모리 요구 사항을 줄이는 데 도움이 됩니다. 그러나 quantization은 비디오 모델에 따라 비디오 품질에 다양한 영향을 미칠 수 있습니다.
지원되는 양자화 백엔드와 사용 사례에 맞는 양자화 백엔드 선택에 대해 자세히 알아보려면 Quantization 개요를 참조하세요. 아래 예제는 bitsandbytes를 사용하여 추론을 위해 양자화된 AuraFlowPipeline을 로드하는 방법을 보여줍니다.
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, AuraFlowTransformer2DModel, AuraFlowPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
"fal/AuraFlow",
subfolder="text_encoder",
quantization_config=quant_config,
dtype=torch.float16,
)
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = AuraFlowTransformer2DModel.from_pretrained(
"fal/AuraFlow",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = AuraFlowPipeline.from_pretrained(
"fal/AuraFlow",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = "a tiny astronaut hatching from an egg on the moon"
image = pipeline(prompt).images[0]
image.save("auraflow.png")
GGUF 체크포인트 로딩도 지원됩니다:
import torch
from diffusers import (
AuraFlowPipeline,
GGUFQuantizationConfig,
AuraFlowTransformer2DModel,
)
transformer = AuraFlowTransformer2DModel.from_single_file(
"https://huggingface.co/city96/AuraFlow-v0.3-gguf/blob/main/aura_flow_0.3-Q2_K.gguf",
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
dtype=torch.bfloat16,
)
pipeline = AuraFlowPipeline.from_pretrained(
"fal/AuraFlow-v0.3",
transformer=transformer,
dtype=torch.bfloat16,
)
prompt = "a cute pony in a field of flowers"
image = pipeline(prompt).images[0]
image.save("auraflow.png")
torch.compile() 지원
AuraFlow는 torch.compile()로 컴파일하여 다양한 해상도에서도 추론 지연 시간을 단축할 수 있습니다. 먼저 여기의 지침에 따라 PyTorch nightly를 설치하세요. 아래 스니펫은 이를 활성화하는 데 필요한 변경 사항을 보여줍니다:
+ torch.fx.experimental._config.use_duck_shape = False
+ pipeline.transformer = torch.compile(
pipeline.transformer, fullgraph=True, dynamic=True
)
use_duck_shape를 False로 지정하면, 크기가 동일한 입력에 대해 동일한 기호 변수를 사용할지 여부를 컴파일러에 지시합니다. 자세한 내용은 이 댓글을 확인하세요.
이를 통해 100%(낮은 해상도에서)부터 30%(1536x1536 해상도에서)까지 속도 향상이 가능합니다.
위 내용이 다양한 해상도에서 작동하도록 AuraFlowTransformer2DModel 클래스를 다시 작성하는 데 도움을 주신 AstraliteHeart님께 감사드립니다 (PR).
AuraFlowPipeline[[diffusers.AuraFlowPipeline]]
diffusers.AuraFlowPipeline[[diffusers.AuraFlowPipeline]]
diffusers.AuraFlowPipeline(tokenizer: T5Tokenizer, text_encoder: UMT5EncoderModel, vae: AutoencoderKL, transformer: AuraFlowTransformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler)
매개변수:
tokenizer (T5TokenizerFast) : T5Tokenizer 클래스의 토크나이저.
text_encoder (T5EncoderModel) : 고정된 텍스트 인코더입니다. AuraFlow은 T5, 구체적으로 EleutherAI/pile-t5-xl 변형을 사용합니다.
vae (AutoencoderKL) : 이미지를 잠재 표현으로 인코딩하고 잠재 표현에서 이미지로 디코딩하는 Variational Auto-Encoder (VAE) 모델입니다.
transformer (AuraFlowTransformer2DModel) : 인코딩된 이미지 레이턴트를 디노이즈하기 위한 조건부 Transformer (MMDiT 및 DiT) 아키텍처.
scheduler (FlowMatchEulerDiscreteScheduler) : transformer와 함께 사용하여 인코딩된 이미지 라텐트를 디노이즈하는 데 사용되는 스케줄러입니다.
호출[[diffusers.AuraFlowPipeline.call]]
__call__(prompt: str | list[str] = None, negative_prompt: str | list[str] = None, num_inference_steps: int = 50, sigmas: list = None, guidance_scale: float = 3.5, num_images_per_prompt: int | None = 1, height: int | None = 1024, width: int | None = 1024, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 256, output_type: str | None = 'pil', return_dict: bool = True, attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list = ['latents'])
매개변수:
prompt (str 또는 list[str], 선택 사항) : 이미지 생성을 안내할 프롬프트입니다. 정의되지 않은 경우 prompt_embeds를 대신 전달해야 합니다.
negative_prompt (str 또는 list[str], 선택 사항) : 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 대신 negative_prompt_embeds를 전달해야 합니다. 가이던스를 사용하지 않는 경우 무시됩니다(즉, guidance_scale이 1보다 작은 경우 무시됩니다).
height (int, 선택 사항, 기본값은 self.transformer.config.sample_size * self.vae_scale_factor) : 생성된 이미지의 픽셀 단위 높이입니다. 최적의 결과를 위해 기본값은 1024로 설정됩니다.
width (int, 선택 사항, 기본값은 self.transformer.config.sample_size * self.vae_scale_factor) : 생성된 이미지의 픽셀 단위 너비입니다. 최적의 결과를 위해 기본값은 1024로 설정됩니다.
num_inference_steps (int, 선택 사항, 기본값 50) : 디노이징 단계의 수입니다. 디노이징 단계가 많을수록 일반적으로 추론 속도가 느려지는 대신 더 높은 품질의 이미지를 생성합니다.
sigmas (list[float], 선택 사항) : 스케줄러의 timestep 간격 전략을 재정의하는 데 사용되는 사용자 정의 sigmas입니다. sigmas가 전달되면 num_inference_steps와 timesteps는 None이어야 합니다.
guidance_scale (float, 선택 사항, 기본값 5.0) : Classifier-Free Diffusion Guidance에서 정의한 가이던스 스케일입니다. guidance_scale은 Imagen Paper의 2번 식의 w로 정의됩니다. guidance_scale > 1을 설정하여 가이던스 스케일을 활성화합니다. 가이던스 스케일이 높을수록 prompt 텍스트와 밀접하게 연결된 이미지를 생성하도록 장려하지만, 일반적으로 이미지 품질이 낮아지는 대가를 치릅니다.
num_images_per_prompt (int, 선택 사항, 기본값 1) : 프롬프트당 생성할 이미지의 수.
generator (torch.Generator 또는 list[torch.Generator], 선택 사항) : 생성을 결정적으로 만들기 위한 torch generator 하나 또는 목록.
latents (torch.FloatTensor, 선택 사항) : 이미지 생성의 입력으로 사용할 가우시안 분포에서 샘플링된 사전 생성된 노이즈된 latents입니다. 동일한 생성을 다른 프롬프트로 조정하는 데 사용할 수 있습니다. 제공되지 않으면, 제공된 랜덤 generator를 사용하여 샘플링하여 latents 텐서가 생성됩니다.
prompt_embeds (torch.FloatTensor, 선택 사항) : 미리 생성된 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 prompt 입력 인자로부터 텍스트 임베딩이 생성됩니다.
prompt_attention_mask (torch.Tensor, 선택 사항) : 텍스트 임베딩을 위한 사전 생성된 어텐션 마스크입니다.
negative_prompt_embeds (torch.FloatTensor, 선택) : 미리 생성된 부정 텍스트 임베딩입니다. 텍스트 입력을 쉽게 조정하는 데 사용할 수 있으며, 예를 들어 프롬프트 가중치 설정에 활용할 수 있습니다. 제공되지 않으면 negative_prompt 입력 인수에서 negative_prompt_embeds가 생성됩니다.
negative_prompt_attention_mask (torch.Tensor, 선택 사항) : 부정 텍스트 임베딩에 사용할 사전 생성된 어텐션 마스크입니다.
output_type (str, 선택 사항, 기본값 "pil") : 이미지 생성의 출력 형식입니다. PIL: PIL.Image.Image 또는 np.array 중 하나를 선택합니다.
return_dict (bool, 선택 사항, 기본값 True) : 일반 튜플 대신 ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput을 반환할지 여부.
attention_kwargs (dict, 선택 사항) : 지정된 경우 diffusers.models.attention_processor의 self.processor 아래에서 정의된 AttentionProcessor로 전달되는 kwargs 사전입니다.
callback_on_step_end (Callable, 선택 사항) : 추론 중 각 디노이징 단계의 끝에서 호출되는 함수입니다. 이 함수는 다음 인수를 받아 호출됩니다: 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 속성에 나열된 변수만 포함할 수 있습니다.
max_sequence_length (int 기본값은 256) : prompt에 사용할 최대 시퀀스 길이입니다.
반환값: ImagePipelineOutput 또는 tuple
return_dict가 True인 경우 ImagePipelineOutput가 반환되고, 그렇지 않으면 첫 번째 요소가 생성된 이미지의 목록인 tuple이 반환됩니다.
생성을 위해 파이프라인을 호출할 때 호출되는 함수.
예:
>>> import torch
>>> from diffusers import AuraFlowPipeline
>>> pipe = AuraFlowPipeline.from_pretrained("fal/AuraFlow", torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat holding a sign that says hello world"
>>> image = pipe(prompt).images[0]
>>> image.save("aura_flow.png")
encode_prompt[[diffusers.AuraFlowPipeline.encode_prompt]]
encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] = None, do_classifier_free_guidance: bool = True, num_images_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 256, lora_scale: float | None = None)
매개변수:
prompt (str 또는 list[str], 선택 사항) : 인코딩할 프롬프트
negative_prompt (str 또는 list[str], 선택 사항) : 이미지 생성을 안내하지 않을 프롬프트입니다. 정의되지 않은 경우 대신 negative_prompt_embeds를 전달해야 합니다. 가이던스를 사용하지 않는 경우 무시됩니다(즉, guidance_scale이 1보다 작은 경우 무시됩니다).
do_classifier_free_guidance (bool, 선택 사항, 기본값 True) : classifier free guidance를 사용할지 여부
num_images_per_prompt (int, 선택 사항, 기본값 1) : 프롬프트당 생성할 이미지 수
device : (torch.device, 선택 사항): 생성된 임베딩을 배치할 torch device
prompt_embeds (torch.Tensor, 선택 사항) : 미리 생성된 텍스트 임베딩입니다. 예를 들어 프롬프트 가중치와 같은 텍스트 입력을 쉽게 조정하는 데 사용할 수 있습니다. 제공되지 않으면 prompt 입력 인자에서 텍스트 임베딩이 생성됩니다.
prompt_attention_mask (torch.Tensor, 선택 사항) : 텍스트 임베딩을 위한 사전 생성된 어텐션 마스크입니다.
negative_prompt_embeds (torch.Tensor, 선택 사항) : 미리 생성된 부정 텍스트 임베딩.
negative_prompt_attention_mask (torch.Tensor, 선택 사항) : 부정 텍스트 임베딩에 사용할 사전 생성된 어텐션 마스크입니다.
max_sequence_length (int, 기본값 256) : 프롬프트에 사용할 최대 시퀀스 길이입니다.
lora_scale (float, 선택 사항) : LoRA 레이어가 로드된 경우, 텍스트 인코더의 모든 LoRA 레이어에 적용될 LoRA 스케일입니다.
프롬프트를 텍스트 인코더의 히든 상태로 인코딩합니다.
Xet Storage Details
- Size:
- 16.2 kB
- Xet hash:
- be4ba450334d476e26cff5e43a4c465ef0c9fdd30aa8ce0be70b1e29fd7346bf
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.