Diffusers documentation
Yardımcılar
Yardımcılar
🤗 Diffusers ile çalışmak için yardımcı ve yardımcı işlevler.
numpy_to_pil
Bir numpy görüntüsünü veya görüntü grubunu bir PIL görüntüsüne dönüştürür.
pt_to_pil
Bir torch görüntüsünü PIL görüntüsüne dönüştürür.
load_image
diffusers.utils.load_image
< source >( image: str | PIL.Image.Imageconvert_method: typing.Optional[typing.Callable[[PIL.Image.Image], PIL.Image.Image]] = None ) → PIL.Image.Image
Parametreler
- image (
strveyaPIL.Image.Image) — PIL Image formatına dönüştürülecek görüntü. - convert_method (Callable[[PIL.Image.Image], PIL.Image.Image], isteğe bağlı) —
Görsel yüklendikten sonra uygulanacak dönüştürme yöntemi.
Noneolarak ayarlandığında görsel “RGB” olarak dönüştürülür.
Dönüş değeri
PIL.Image.Image
Bir PIL Görüntüsü.
image öğesini bir PIL Image olarak yükler.
load_video
diffusers.utils.load_video
< source >( video: strconvert_method: typing.Optional[typing.Callable[[list[PIL.Image.Image]], list[PIL.Image.Image]]] = Nonereturn_fps: bool = False ) → list[PIL.Image.Image] or tuple[list[PIL.Image.Image], float]
Parametreler
- video (
str) — PIL Image formatına dönüştürülecek bir videoya ait URL veya Path. - convert_method (Callable[[list[PIL.Image.Image]], list[PIL.Image.Image]], isteğe bağlı) —
Video yüklendikten sonra uygulanacak bir dönüştürme yöntemi.
Noneolarak ayarlandığında görüntüler “RGB”ye dönüştürülür. - return_fps (
bool, isteğe bağlı, varsayılanFalse) — Videonun kodlandığı kare hızının da döndürülüp döndürülmemesi. Girdiyi, modelin çalıştığı kare hızına yeniden örnekleyen hatlar tarafından gereklidir; çünkü kare listesi bu bilgiyi taşımaz.
Dönüş değeri
list[PIL.Image.Image] veya tuple[list[PIL.Image.Image], float]
PIL görüntüleri listesi olarak video ve return_fps ayarlanmışsa kare hızı.
video öğesini PIL Image listesine yükler.
export_to_gif
diffusers.utils.export_to_gif
< source >( image: list[PIL.Image.Image]output_gif_path: str = Nonefps: int = 10 )
export_to_video
diffusers.utils.export_to_video
< source >( video_frames: list[np.ndarray] | list[PIL.Image.Image]output_video_path: str = Nonefps: int = 10quality: float = 5.0bitrate: int | None = Nonemacro_block_size: int | None = 16 )
quality:
Video output quality. Default is 5. Uses variable bit rate. Highest quality is 10, lowest is 0. Set to None to
prevent variable bitrate flags to FFMPEG so you can manually specify them using output_params instead.
Specifying a fixed bitrate using bitrate disables this parameter.
bitrate:
Video kodlaması için sabit bir bitrate ayarlayın. Varsayılan değer None'dir ve bunun yerine quality parametresi kullanılır.
Bu parametreyle sabit bir bitrate belirtmek yerine quality değişken bitrate parametresini kullanmak, daha küçük dosya boyutlarıyla daha kaliteli videolar elde edilmesini sağlar.
macro_block_size: Video için boyut kısıtı. Genişlik ve yükseklik, bu sayıya bölünebilmelidir. Bu sayıya bölünemiyorsa imageio, ffmpeg'e görüntüyü bu sayıya bölünebilen bir sonraki en yakın boyuta ölçeklendirmesini söyler. Çoğu codec 16 (varsayılan) makro blok boyutuyla uyumludur, bazıları daha küçük (4, 8) olabilir. Bu otomatik özellik devre dışı bırakılacaksa değeri None veya 1 olarak ayarlayın; ancak birçok oynatıcının boyutu tek olan videoları çözemeyeceğini ve bazı codec'lerin kötü sonuçlar üretebileceğini veya başarısız olabileceğini unutmayın. https://en.wikipedia.org/wiki/Macroblock adresine bakın.
encode_video
diffusers.utils.encode_video
< source >( video: list[PIL.Image.Image] | np.ndarray | 'torch.Tensor' | Iterator['torch.Tensor']fps: intoutput_path: straudio: 'torch.Tensor' | None = Noneaudio_sample_rate: int | None = Nonevideo_chunks_number: int = 1 )
Parametreler
- video (
List[PIL.Image.Image]veyanp.ndarrayveyatorch.Tensor) — [0, 255] aralığında tamsayı piksel değerlerine sahip, [frames, height, width, channels] biçiminde bir video tensörü. Girdinp.ndarrayise, [0, 1] aralığında değerlere sahip bir float dizi olması beklenir (bu, hatlarınoutput_type="np"ile genellikle döndürdüğü şeydir). - fps (
int) — Kodlanmış videonun saniyedeki kare sayısı (FPS). - output_path (
str) — Kodlanmış videonun kaydedileceği yol. - audio (
torch.Tensor, isteğe bağlı) — [audio_channels, samples] biçiminde bir ses dalgası. - audio_sample_rate — (
int, isteğe bağlı): Ses dalgasının örneklem hızı. - video_chunks_number (
int, isteğe bağlı, varsayılan1) — Kodlama için videonun bölüneceği parça sayısı. Her parça ayrı ayrı kodlanır. Kullanılacak parça sayısı genellikle video VAE için döşeme yapılandırmasına bağlıdır.
PyAV kütüphanesini kullanarak isteğe bağlı sesle bir videoyu kodlar. Orijinal LTX-2 deposundaki koda dayanır: https://github.com/Lightricks/LTX-2/blob/4f410820b198e05074a1e92de793e3b59e9ab5a0/packages/ltx-pipelines/src/ltx_pipelines/utils/media_io.py#L182
make_image_grid
Tek bir görüntü ızgarası hazırlar. Görselleştirme amaçları için kullanışlıdır.
randn_tensor
diffusers.utils.torch_utils.randn_tensor
< source >( shape: tuple | listgenerator: list['torch.Generator'] | 'torch.Generator' | None = Nonedevice: str | 'torch.device' | None = Nonedtype: 'torch.dtype' | None = Nonelayout: 'torch.layout' | None = None )
İstenen device üzerinde istenen dtype ile rastgele tensörler oluşturmak için yardımcı bir işlev. Üreteçler listesi geçirildiğinde, her parti boyutu için ayrı ayrı tohum atılabilir. CPU üreteçleri geçirilirse, tensör her zaman CPU üzerinde oluşturulur.
TorchDeviceBackend
sınıf diffusers.utils.torch_utils.TorchDeviceBackend
< source >( device: str | torch.device | None = None )
Bir cihazın torch.<backend> ad alanının (torch.cuda, torch.xpu, torch.mps, …) vekili. Sınıfın tanımlamadığı öznitelikler, modülün kendi öznitelikleridir (synchronize, device_count, Stream, current_stream, …); burada tanımlanan yöntemler, kullanılabilirliği arka uçlar arasında farklılık gösteren ve yedek bir çözüm gerektiren işlemleri devre dışı bırakır: önbellek temizleme, tohumlama ve bellek sorguları. device belirtilmediğinde, torch.accelerator aracılığıyla ana bilgisayar hızlandırıcısını algılar. torch'un arka uç için bir modülü yoksa sessizce torch.cuda'ya geri dönmek yerine hata fırlatır.
Son sıfırlamadan bu yana cihazda ayrılan tepe bellek (bayt cinsinden); arka uç istatistik tutmuyorsa 0.
Bayt cinsinden boş ve toplam cihaz belleği.
apply_layerwise_casting
diffusers.hooks.apply_layerwise_casting
< source >( module: Modulestorage_dtype: dtypecompute_dtype: dtypeskip_modules_pattern: str | tuple[str, ...] = 'auto'skip_modules_classes: tuple[typing.Type[torch.nn.Module], ...] | None = Nonenon_blocking: bool = False )
Parametreler
- module (
torch.nn.Module) — Hesaplama için yaprak modülleri yüksek hassasiyetli bir veri türüne, depolama için ise düşük hassasiyetli bir veri türüne dönüştürülecek modül. - storage_dtype (
torch.dtype) — Depolama için ileri geçişten önce/sonra modülün dönüştürüleceği dtype. - compute_dtype (
torch.dtype) — İleri geçiş sırasında hesaplama için modülün dönüştürüleceği dtype. - skip_modules_pattern (
tuple[str, ...], varsayılan"auto") — Katman bazlı dökümleme (casting) işlemi sırasında atlanacak modüllerin adlarını eşleştirmek için kullanılan desenlerin listesi."auto"olarak ayarlanırsa, varsayılan desenler kullanılır.Noneolarak ayarlanırsa, hiçbir modül atlanmaz.Noneolarak ayarlanıpskip_modules_classesdeNoneise, katman bazlı dökümleme, modülün iç alt modülleri yerine doğrudan modüle uygulanır. - skip_modules_classes (
tuple[Type[torch.nn.Module], ...], varsayılanNone) — Katman bazlı dökümleme (casting) işlemi sırasında atlanacak modül sınıflarının listesi. - non_blocking (
bool, varsayılanFalse) —Trueise, ağırlık dönüştürme işlemleri engellenmez.
Verilen bir modüle katman bazlı döküm uygular. Burada beklenen modül bir Diffusers ModelMixin'dir ancak diffusers katmanları veya pytorch birincil yapılarını kullanan herhangi bir nn.Module olabilir.
Örnek:
>>> import torch
>>> from diffusers import CogVideoXTransformer3DModel
>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
... model_id, subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> apply_layerwise_casting(
... transformer,
... storage_dtype=torch.float8_e4m3fn,
... compute_dtype=torch.bfloat16,
... skip_modules_pattern=["patch_embed", "norm", "proj_out"],
... non_blocking=True,
... )apply_group_offloading
diffusers.hooks.apply_group_offloading
< source >( module: Moduleonload_device: typing.Union[str, torch.device]offload_device: typing.Union[str, torch.device] = torch.device()offload_type: str | diffusers.hooks.group_offloading.GroupOffloadingType = 'block_level'num_blocks_per_group: int | None = Nonenon_blocking: bool = Falseuse_stream: bool = Falserecord_stream: bool = Falselow_cpu_mem_usage: bool = Falseoffload_to_disk_path: str | None = Noneblock_modules: list[str] | None = Noneexclude_kwargs: list[str] | None = None )
Parametreler
- module (
torch.nn.Module) — Grup taşımalarının uygulandığı modül. - onload_device (
torch.device) — Modüller grubunun yüklendiği cihaz. - offload_device (
torch.device, varsayılantorch.device("cpu")) — Modül grubunun aktarıldığı cihaz. Bu genellikle CPU olmalıdır. Varsayılan değer CPU'dur. - offload_type (
strveyaGroupOffloadingType, varsayılan “block_level”) — Uygulanacak offloading türü. “block_level” veya “leaf_level” değerlerinden biri olabilir. Varsayılan değer “block_level”dir. - offload_to_disk_path (
str, isteğe bağlı, varsayılanNone) — Parametrelerin taşınacağı dizinin yolu. Bu seçeneğin ayarlanması, makul bir hız-bellek ödüşlemesi istenen sınırlı RAM ortamı ayarlarında faydalı olabilir. - num_blocks_per_group (
int, isteğe bağlı) — offload_type=“block_level” kullanıldığında grup başına blok sayısı. offload_type=“block_level” kullanıldığında zorunludur. - non_blocking (
bool, varsayılanFalse) — True ise, offloading ve onloading işlemleri bloklayıcı olmayan veri aktarımıyla yapılır. - use_stream (
bool, varsayılanFalse) — True ise, offloading ve onloading işlemleri bir CUDA stream kullanılarak asenkron olarak yapılır. Bu, hesaplama ve veri aktarımının üst üste binmesini sağlayarak faydalı olabilir. - record_stream (
bool, varsayılanFalse) —use_streamile etkinleştirildiğinde, mevcut tensörün bu akış tarafından kullanıldığını işaretler. Biraz daha fazla bellek kullanımı pahasına daha hızlıdır. Daha fazla ayrıntı için PyTorch resmi belgeleri'ne bakın. - low_cpu_mem_usage (
bool, varsayılanFalse) — True ise, tensörler önceden sabitlenmek yerine anlık olarak sabitlenerek CPU bellek kullanımı en aza indirilir. Bu seçenek yalnızca akışlı CPU dışa aktarma kullanıldığında (yaniuse_stream=True) önem taşır. CPU belleği darboğaz olduğunda faydalı olabilir ancak akışların kullanımından sağlanan avantajları azaltabilir. - block_modules (
list[str], isteğe bağlı) — Offloading için blok olarak ele alınacak modül adlarının listesi. Verildiğinde, blok düzeyinde offloading için yalnızca bu modüller dikkate alınır. Verilmediğinde, varsayılan blok algılama mantığı kullanılır. - exclude_kwargs (
list[str], isteğe bağlı) — send_to_device tarafından işlenmemesi gereken kwarg anahtarlarının listesi. Bu, forward geçişleri arasında nesne kimliklerini korumaları gereken önbellekleme listeleri gibi değişken durumlar için kullanışlıdır. Sağlanmazsa, modülün_skip_keysözniteliği varsa bu öznitelikten çıkarılır.
Bir torch.nn.Module'ün iç katmanlarına grup offloading uygular. Grup offloading'in ne olduğunu ve nerede faydalı olduğunu anlamak için, öncelikle diğer desteklenen offloading yöntemlerinin nasıl çalıştığına dair bazı bağlam sunmamız gerekir.
Genellikle, offloading iki düzeyde yapılır:
- Modül düzeyinde: Diffusers'ta bu,
ModelMixin::enable_model_cpu_offload()yöntemi kullanılarak etkinleştirilebilir. Çalışma mantığı, bir pipeline'ın her bileşenini depolama için CPU'ya aktarmak ve hesaplama için gerektiğinde hızlandırıcı cihaza geri yüklemektir. Bu yöntem, tüm bileşenleri hızlandırıcıda tutmaktan daha bellek verimlidir, ancak bellek gereksinimleri hâlâ oldukça yüksektir. Bu yöntemin çalışabilmesi için, ileri geçişi tamamlayabilmek adına çalışma zamanı veri türündeki model boyutuna eşdeğer bellek + en büyük ara aktivasyon tensörlerinin boyutu kadar belleğe ihtiyaç vardır. - Yaprak düzeyi: Diffusers'ta bu,
ModelMixin::enable_sequential_cpu_offload()yöntemi kullanılarak etkinleştirilebilir. Hesaplama grafiğinin en alt yaprak düzeyindeki parametrelerini depolama için CPU'ya aktararak ve hesaplama için yalnızca yaprakları hızlandırıcı cihaza yükleyerek çalışır. Bu, en düşük hızlandırıcı bellek miktarını kullanır ancak aşırı sayıda cihaz senkronizasyonu nedeniyle daha yavaş olabilir.
Grup offloading, iki yöntem arasında bir orta yol sunar. İç katman gruplarını (ya da torch.nn.ModuleList ya da torch.nn.Sequential) offload ederek çalışır. Bu yöntem, modül düzeyindeki offloading'e göre daha az bellek kullanır. Ayrıca, cihaz senkronizasyonlarının sayısı azaldığı için yaprak düzeyi/sıralı offloading'den daha hızlıdır.
CUDA cihazlarında asenkron veri aktarım akışlarını destekleyenler için desteklenen bir diğer özellik, ardışık offloading'e kıyasla genel çalışma süresini azaltmak için veri aktarımı ile hesaplamayı üst üste bindirme yeteneğidir. Bu, akışlar kullanılarak katman ön yükleme (layer prefetching) ile etkinleştirilir; yani bir sonraki çalıştırılacak katman, mevcut katman çalıştırılırken hızla hızlandırıcı cihaza onloading edilir - bu, bellek gereksinimlerini hafifçe artırır. Bu uygulamanın yaprak seviyesinde offloading'i de desteklediğini, ancak akışlar kullanıldığında çok daha hızlı hale gelebileceğini unutmayın.
Örnek:
>>> from diffusers import CogVideoXTransformer3DModel
>>> from diffusers.hooks import apply_group_offloading
>>> transformer = CogVideoXTransformer3DModel.from_pretrained(
... "THUDM/CogVideoX-5b", subfolder="transformer", torch_dtype=torch.bfloat16
... )
>>> apply_group_offloading(
... transformer,
... onload_device=torch.device("cuda"),
... offload_device=torch.device("cpu"),
... offload_type="block_level",
... num_blocks_per_group=2,
... use_stream=True,
... )