Diffusers documentation
Utilitas
Utilitas
Fungsi utilitas dan pembantu untuk bekerja dengan 🤗 Diffusers.
numpy_to_pil
Mengonversi gambar numpy atau batch gambar menjadi gambar PIL.
pt_to_pil
Mengubah gambar torch menjadi gambar PIL.
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
Parameter
- image (
stratauPIL.Image.Image) — Gambar yang akan dikonversi ke format PIL Image. - convert_method (Callable[[PIL.Image.Image], PIL.Image.Image], opsional) —
Metode konversi yang diterapkan pada gambar setelah dimuat. Jika diset ke
None, gambar akan dikonversi ke “RGB”.
Mengembalikan
PIL.Image.Image
Gambar PIL.
Memuat image ke dalam PIL Image.
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]
Parameter
- video (
str) — URL atau Path ke video yang akan dikonversi menjadi daftar format PIL Image. - convert_method (Callable[[list[PIL.Image.Image]], list[PIL.Image.Image]], opsional) —
Metode konversi yang diterapkan pada video setelah dimuat. Jika diset ke
None, gambar akan dikonversi ke “RGB”. - return_fps (
bool, opsional, defaultFalse) — Apakah juga mengembalikan frame rate yang digunakan saat video di-encode. Diperlukan oleh pipeline yang melakukan resampling input ke frame rate yang digunakan oleh modelnya, karena daftar frame tidak membawa informasi tersebut.
Mengembalikan
list[PIL.Image.Image] atau tuple[list[PIL.Image.Image], float]
Video sebagai daftar gambar PIL, dan frame rate-nya jika return_fps disetel.
Memuat video ke dalam daftar Gambar PIL.
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:
Kualitas output video. Default adalah 5. Menggunakan variable bit rate. Kualitas tertinggi adalah 10, terendah adalah 0. Atur ke None untuk
mencegah flag variable bitrate ke FFMPEG sehingga Anda dapat menentukannya secara manual menggunakan output_params.
Menentukan bitrate tetap menggunakan bitrate akan menonaktifkan parameter ini.
bitrate:
Atur bitrate konstan untuk pengkodean video. Nilai default adalah None sehingga parameter quality yang digunakan sebagai gantinya.
Video dengan kualitas lebih baik dan ukuran file yang lebih kecil akan dihasilkan dengan menggunakan parameter bitrate variabel quality
daripada menentukan bitrate tetap dengan parameter ini.
macro_block_size: Batasan ukuran untuk video. Lebar dan tinggi harus dapat dibagi habis oleh angka ini. Jika tidak dapat dibagi habis, imageio akan menginstruksikan ffmpeg untuk memperbesar gambar ke ukuran terdekat yang dapat dibagi habis oleh angka ini. Sebagian besar codec kompatibel dengan ukuran makroblok 16 (default), beberapa dapat lebih kecil (4, 8). Untuk menonaktifkan fitur otomatis ini, setel ke None atau 1, namun perlu diwaspadai bahwa banyak pemutar tidak dapat mendekode video yang ukurannya ganjil dan beberapa codec akan menghasilkan kualitas buruk atau gagal. Lihat https://en.wikipedia.org/wiki/Macroblock.
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 )
Parameter
- video (
List[PIL.Image.Image]ataunp.ndarrayatautorch.Tensor) — Tensor video dengan bentuk [frames, height, width, channels] yang berisi nilai piksel integer dalam rentang [0, 255]. Jika input berupanp.ndarray, array tersebut diharapkan berupa array float dengan nilai dalam rentang [0, 1] (yang merupakan hasil yang biasanya dikembalikan oleh pipeline denganoutput_type="np"). - fps (
int) — Jumlah frame per detik (FPS) dari video yang dikodekan. - output_path (
str) — Path untuk menyimpan video yang telah dikodekan. - audio (
torch.Tensor, opsional) — Gelombang audio dengan bentuk [audio_channels, samples]. - audio_sample_rate — (
int, opsional): Laju sampling dari waveform audio. - video_chunks_number (
int, opsional, default1) — Jumlah chunk untuk membagi video saat encoding. Setiap chunk akan di-encode secara terpisah. Jumlah chunk yang digunakan sering kali bergantung pada konfigurasi tiling untuk VAE video.
Mengodekan video dengan audio opsional menggunakan pustaka PyAV. Berdasarkan kode dari repo LTX-2 asli: https://github.com/Lightricks/LTX-2/blob/4f410820b198e05074a1e92de793e3b59e9ab5a0/packages/ltx-pipelines/src/ltx_pipelines/utils/media_io.py#L182
make_image_grid
diffusers.utils.make_image_grid
< source >( images: list[PIL.Image.Image]rows: intcols: intresize: int = None )
Menyiapkan satu grid gambar. Berguna untuk keperluan visualisasi.
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 )
Fungsi bantu untuk membuat tensor acak pada device yang diinginkan dengan dtype yang diinginkan. Saat meneruskan daftar generator, Anda dapat mengatur seed untuk setiap ukuran batch secara individual. Jika generator CPU diteruskan, tensor selalu dibuat di CPU.
TorchDeviceBackend
kelas diffusers.utils.torch_utils.TorchDeviceBackend
< source >( device: str | torch.device | None = None )
Proksi untuk namespace torch.<backend> (torch.cuda, torch.xpu, torch.mps, …) dari satu perangkat. Atribut yang tidak didefinisikan oleh kelas ini adalah milik modul itu sendiri (synchronize, device_count, Stream, current_stream, …); metode yang didefinisikan di sini menggantikan operasi yang ketersediaan dan perbedaannya antar backend serta memerlukan fallback: pembersihan cache, seeding, dan kueri memori. Tanpa device, mendeteksi akselerator host melalui torch.accelerator. Mengangkat error jika torch tidak memiliki modul untuk backend tersebut, alih-alih secara diam-diam kembali ke torch.cuda.
Puncak memori yang dialokasikan pada perangkat dalam byte sejak reset terakhir; 0 di mana backend tidak menyimpan statistik.
Memori perangkat gratis dan total dalam byte.
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 )
Parameter
- module (
torch.nn.Module) — Modul yang modul daunnya akan di-cast ke dtype presisi tinggi untuk komputasi, dan ke dtype presisi rendah untuk penyimpanan. - storage_dtype (
torch.dtype) — dtype untuk meng-cast modul sebelum/setelah forward pass untuk penyimpanan. - compute_dtype (
torch.dtype) — dtype untuk meng-cast modul selama forward pass untuk komputasi. - skip_modules_pattern (
tuple[str, ...], defaultnya"auto") — Daftar pola untuk mencocokkan nama modul yang akan dilewati selama proses casting layerwise. Jika diatur ke"auto", pola default digunakan. Jika diatur keNone, tidak ada modul yang dilewati. Jika diatur keNonebersamaan denganskip_modules_classesyang bernilaiNone, casting layerwise diterapkan langsung ke modul bukan ke submodul internalnya. - skip_modules_classes (
tuple[Type[torch.nn.Module], ...], defaultnyaNone) — Daftar kelas modul yang akan dilewati selama proses casting per lapisan. - non_blocking (
bool, defaultnyaFalse) — JikaTrue, operasi casting bobot bersifat non-blocking.
Menerapkan pencetakan per lapisan ke modul yang diberikan. Modul yang diharapkan di sini adalah ModelMixin Diffusers, tetapi bisa berupa nn.Module apa pun yang menggunakan lapisan diffusers atau primitif pytorch.
Contoh:
>>> 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 )
Parameter
- module (
torch.nn.Module) — Modul tempat offloading grup diterapkan. - onload_device (
torch.device) — Perangkat tempat grup modul dimuat ulang. - offload_device (
torch.device, defaultnyatorch.device("cpu")) — Perangkat tempat grup modul di-offload. Ini biasanya harus CPU. Defaultnya adalah CPU. - offload_type (
stratauGroupOffloadingType, default “block_level”) — Jenis offloading yang akan diterapkan. Bisa berupa “block_level” atau “leaf_level”. Default adalah “block_level”. - offload_to_disk_path (
str, opsional, defaultNone) — Path ke direktori tempat parameter akan di-offload. Mengatur opsi ini dapat berguna dalam lingkungan dengan RAM terbatas di mana trade-off antara kecepatan dan memori yang wajar diinginkan. - num_blocks_per_group (
int, opsional) — Jumlah blok per grup saat menggunakan offload_type=“block_level”. Ini wajib diisi saat menggunakan offload_type=“block_level”. - non_blocking (
bool, defaultnyaFalse) — Jika True, offloading dan onloading dilakukan dengan transfer data non-blocking. - use_stream (
bool, defaultnyaFalse) — Jika True, offloading dan onloading dilakukan secara asinkron menggunakan CUDA stream. Hal ini dapat berguna untuk menumpuk komputasi dan transfer data. - record_stream (
bool, defaultnyaFalse) — Saat diaktifkan bersamause_stream, menandai tensor saat ini sebagai telah digunakan oleh stream ini. Proses ini lebih cepat dengan sedikit peningkatan penggunaan memori. Lihat dokumentasi resmi PyTorch untuk detail lebih lanjut. - low_cpu_mem_usage (
bool, defaultnyaFalse) — Jika True, penggunaan memori CPU diminimalkan dengan cara pinning tensor secara on-the-fly alih-alih pre-pinning. Opsi ini hanya relevan saat menggunakan streamed CPU offloading (yaituuse_stream=True). Hal ini dapat berguna ketika memori CPU menjadi bottleneck, tetapi mungkin mengurangi manfaat dari penggunaan streams. - block_modules (
list[str], opsional) — Daftar nama modul yang harus diperlakukan sebagai blok untuk offloading. Jika disediakan, hanya modul-modul ini yang akan dipertimbangkan untuk offloading tingkat blok. Jika tidak disediakan, logika deteksi blok bawaan akan digunakan. - exclude_kwargs (
list[str], opsional) — Daftar kunci kwarg yang tidak boleh diproses oleh send_to_device. Ini berguna untuk state yang dapat diubah seperti daftar cache yang perlu mempertahankan identitas objeknya di antara forward passes. Jika tidak disediakan, akan disimpulkan dari atribut_skip_keysmodul jika ada.
Menerapkan group offloading ke lapisan internal dari torch.nn.Module. Untuk memahami apa itu group offloading dan di mana metode ini bermanfaat, kita perlu terlebih dahulu memberikan konteks tentang bagaimana metode offloading lain yang didukung bekerja.
Biasanya, offloading dilakukan pada dua tingkat:
- Tingkat modul: Di Diffusers, ini dapat diaktifkan menggunakan metode
ModelMixin::enable_model_cpu_offload(). Cara kerjanya adalah dengan memindahkan setiap komponen pipeline ke CPU untuk penyimpanan, lalu memuatnya kembali ke perangkat akselerator saat diperlukan untuk komputasi. Metode ini lebih hemat memori dibandingkan dengan menyimpan semua komponen di akselerator, tetapi persyaratan memori masih cukup tinggi. Agar metode ini berfungsi, diperlukan memori yang setara dengan ukuran model dalam dtype runtime + ukuran tensor aktivasi antara terbesar untuk dapat menyelesaikan forward pass. - Leaf-level: Di Diffusers, ini dapat diaktifkan menggunakan metode
ModelMixin::enable_sequential_cpu_offload(). Cara kerjanya adalah dengan memindahkan parameter leaf-level terendah dari graf komputasi ke CPU untuk penyimpanan, dan hanya memuat ulang leaf ke perangkat akselerator untuk komputasi. Metode ini menggunakan memori akselerator paling sedikit, tetapi bisa lebih lambat karena jumlah sinkronisasi perangkat yang berlebihan.
Group offloading merupakan jalan tengah antara kedua metode tersebut. Metode ini bekerja dengan cara meng-offload kelompok lapisan internal,
(yaitu torch.nn.ModuleList atau torch.nn.Sequential). Metode ini menggunakan memori lebih rendah daripada offloading tingkat modul.
Metode ini juga lebih cepat daripada offloading tingkat daun/sequential, karena jumlah sinkronisasi perangkat berkurang.
Fitur lain yang didukung (untuk perangkat CUDA dengan dukungan untuk stream transfer data asinkron) adalah kemampuan untuk menumpuk (overlap) transfer data dan komputasi guna mengurangi waktu eksekusi keseluruhan dibandingkan dengan offloading berurutan. Hal ini diaktifkan menggunakan prefetching layer dengan stream, yaitu layer yang akan dieksekusi berikutnya mulai melakukan onloading ke perangkat akselerator sementara layer saat ini sedang dieksekusi - ini sedikit meningkatkan persyaratan memori. Perhatikan bahwa implementasi ini juga mendukung offloading tingkat daun (leaf-level) tetapi dapat dibuat jauh lebih cepat saat menggunakan stream.
Contoh:
>>> 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,
... )