Buckets:

mishig's picture
|
download
raw
14 kB
# Format model
Model difusi biasanya disimpan dalam format Diffusers atau format file tunggal. File model dapat disimpan dalam berbagai jenis file seperti safetensors atau ckpt.
> [!TIP]
> Format merujuk pada apakah bobot disimpan dalam struktur direktori. Jenis file merujuk pada bagaimana bobot tersebut diserialisasi, seperti safetensors atau ckpt.
```text
Diffusers format Single-file format
model/ model.safetensors (or .ckpt)
├─ model_index.json └─ all components in one file
├─ unet/ (or transformer/)
├─ text_encoder/
├─ vae/
└─ scheduler/
```
Panduan ini akan menunjukkan cara memuat pipeline dan model dari format dan file ini.
## Format Diffusers
Format Diffusers menyimpan setiap model (UNet, transformer, text encoder) di subfolder terpisah. Ada beberapa keuntungan dari penyimpanan model secara terpisah.
- Inisialisasi pipeline keseluruhan lebih cepat karena Anda dapat memuat model individual yang Anda butuhkan atau memuat semuanya secara paralel.
- Penggunaan memori berkurang karena Anda tidak perlu memuat semua komponen pipeline jika hanya membutuhkan satu model. [Gunakan ulang](./loading#reusing-models-in-multiple-pipelines) model yang dibagikan di antara beberapa pipeline.
- Kebutuhan penyimpanan lebih rendah karena model umum yang dibagikan di antara beberapa pipeline hanya diunduh sekali.
- Fleksibilitas untuk menggunakan model baru atau yang telah ditingkatkan dalam sebuah pipeline.
## Format file tunggal
Format file tunggal menyimpan *semua* bobot model (UNet, transformer, text encoder) dalam satu file. Manfaat dari format file tunggal meliputi:
- Kompatibilitas yang lebih besar dengan [ComfyUI](https://github.com/comfyanonymous/ComfyUI) atau [Automatic1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui).
- Lebih mudah untuk mengunduh dan membagikan satu file.
Gunakan [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) untuk memuat satu file.
```py
import torch
from diffusers import StableDiffusionXLPipeline
pipeline = StableDiffusionXLPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
```
Metode [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) juga mendukung pengiriman model atau scheduler baru.
```py
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel
transformer = FluxTransformer2DModel.from_single_file(
"https://huggingface.co/Kijai/flux-fp8/blob/main/flux1-dev-fp8.safetensors", dtype=torch.bfloat16
)
pipeline = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
transformer=transformer,
dtype=torch.bfloat16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
```
### Opsi konfigurasi
Model dalam format Diffusers memiliki file `config.json` di repositori mereka yang berisi atribut penting seperti jumlah lapisan dan kepala perhatian. Metode [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) secara otomatis menentukan konfigurasi yang tepat untuk digunakan dari `config.json`. Namun, ini mungkin gagal dalam beberapa kasus langka, di mana Anda sebaiknya menggunakan argumen `config`.
Anda juga harus menggunakan argumen `config` jika model dalam pipeline berbeda dari implementasi aslinya atau jika model tersebut tidak memiliki metadata yang diperlukan untuk menentukan config yang benar.
```py
from diffusers import StableDiffusionXLPipeline
ckpt_path = "https://huggingface.co/segmind/SSD-1B/blob/main/SSD-1B.safetensors"
pipeline = StableDiffusionXLPipeline.from_single_file(ckpt_path, config="segmind/SSD-1B")
```
Saat Anda meneruskan `original_config` dengan `local_files_only=True`, Diffusers menyimpulkan komponen pipeline dari tanda tangan kelas pipeline. Ia tidak mengunduh file config dari Hub, yang menghindari perubahan yang merusak saat Anda offline. Jalur ini kurang andal daripada memberikan `config` jalur model lokal, dan dapat menghasilkan error. Jalankan sekali dengan `local_files_only=False` agar config masuk ke cache lokal jika Anda membutuhkannya secara offline kemudian.
Override konfigurasi default dengan meneruskan argumen secara langsung ke [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file). Contoh di bawah ini menunjukkan cara meng-override konfigurasi dalam pipeline atau model.
```py
from diffusers import StableDiffusionXLInstructPix2PixPipeline
ckpt_path = "https://huggingface.co/stabilityai/cosxl/blob/main/cosxl_edit.safetensors"
pipeline = StableDiffusionXLInstructPix2PixPipeline.from_single_file(
ckpt_path, config="diffusers/sdxl-instructpix2pix-768", is_cosxl_edit=True
)
```
```py
from diffusers import UNet2DConditionModel
ckpt_path = "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0_0.9vae.safetensors"
model = UNet2DConditionModel.from_single_file(ckpt_path, upcast_attention=True)
```
### File lokal
Metode [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) mencoba mengonfigurasi pipeline atau model dengan menginfer tipe model dari kunci di file checkpoint. Sebagai contoh, setiap checkpoint file tunggal yang didasarkan pada model dasar Stable Diffusion XL dikonfigurasi dari [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0).
Jika Anda bekerja dengan file lokal, unduh file konfigurasi dengan metode [snapshot_download](https://huggingface.co/docs/huggingface_hub/v2.4.0/en/package_reference/file_download#huggingface_hub.snapshot_download) dan checkpoint model dengan [hf_hub_download](https://huggingface.co/docs/huggingface_hub/v2.4.0/en/package_reference/file_download#huggingface_hub.hf_hub_download). File-file ini diunduh ke [cache directory](https://huggingface.co/docs/huggingface_hub/en/guides/manage-cache) Anda, tetapi Anda dapat mengunduhnya ke direktori tertentu dengan argumen `local_dir`.
```py
from huggingface_hub import hf_hub_download, snapshot_download
from diffusers import StableDiffusionXLPipeline
my_local_checkpoint_path = hf_hub_download(
repo_id="segmind/SSD-1B",
filename="SSD-1B.safetensors"
)
my_local_config_path = snapshot_download(
repo_id="segmind/SSD-1B",
allow_patterns=["*.json", "**/*.json", "*.txt", "**/*.txt"]
)
pipeline = StableDiffusionXLPipeline.from_single_file(
my_local_checkpoint_path, config=my_local_config_path, local_files_only=True
)
```
### Symlink
Jika Anda bekerja dengan sistem file yang tidak mendukung symlink, unduh file checkpoint ke direktori lokal terlebih dahulu dengan parameter `local_dir`. Penggunaan parameter `local_dir` secara otomatis menonaktifkan symlink.
```py
from huggingface_hub import hf_hub_download, snapshot_download
from diffusers import StableDiffusionXLPipeline
my_local_checkpoint_path = hf_hub_download(
repo_id="segmind/SSD-1B",
filename="SSD-1B.safetensors",
local_dir="my_local_checkpoints",
)
print("My local checkpoint: ", my_local_checkpoint_path)
my_local_config_path = snapshot_download(
repo_id="segmind/SSD-1B",
allow_patterns=["*.json", "**/*.json", "*.txt", "**/*.txt"]
)
print("My local config: ", my_local_config_path)
```
Lewatkan path-path ini ke [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file).
```py
pipeline = StableDiffusionXLPipeline.from_single_file(
my_local_checkpoint_path, config=my_local_config_path, local_files_only=True
)
```
## Jenis file
Model dapat disimpan dalam beberapa jenis file. Safetensors adalah jenis file yang paling umum, tetapi Anda mungkin akan menemukan jenis file lain di Hub atau komunitas difusi.
### safetensors
[Safetensors](https://hf.co/docs/safetensors) adalah tipe file yang aman dan cepat untuk menyimpan dan memuat tensor secara aman. Tipe file ini membatasi ukuran header untuk membatasi jenis serangan tertentu, mendukung lazy loading (berguna untuk setup terdistribusi), dan umumnya dimuat lebih cepat.
Diffusers memuat file safetensors secara default (sebagai dependensi yang diperlukan) jika file tersebut tersedia dan pustaka Safetensors terpasang.
Use [from_pretrained()](/docs/diffusers/v0.43.0/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) or [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) to load safetensor files.
```py
import torch
from diffusers import DiffusionPipeline, StableDiffusionXLPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
dtype=torch.float16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipeline = StableDiffusionXLPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
dtype=torch.float16,
)
```
Jika Anda menggunakan checkpoint yang dilatih dengan skrip pelatihan Diffusers, metadata seperti konfigurasi LoRA disimpan secara otomatis. Saat file dimuat, metadata tersebut diparsing sehingga LoRA dikonfigurasi dengan benar. Periksa metadata file safetensors dengan mengklik ikon di samping file di Hub.
Simpan metadata adapter LoRA untuk checkpoint yang tidak dilatih dengan Diffusers dengan meneruskannya ke [save_lora_weights()](/docs/diffusers/v0.43.0/id/api/loaders/lora#diffusers.loaders.FluxLoraLoaderMixin.save_lora_weights). Gunakan `transformer_lora_adapter_metadata` untuk transformer dan `text_encoder_lora_adapter_metadata` untuk text encoder. Anda juga harus meneruskan `save_directory` dan setidaknya salah satu dari `transformer_lora_layers` atau `text_encoder_lora_layers`. Jalur ini hanya didukung untuk file safetensors.
```py
import torch
from peft.utils import get_peft_model_state_dict
from diffusers import FluxPipeline
pipeline = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.load_lora_weights("linoyts/yarn_art_Flux_LoRA")
transformer_lora_layers = get_peft_model_state_dict(pipeline.transformer)
pipeline.save_lora_weights(
save_directory="path/to/lora",
transformer_lora_layers=transformer_lora_layers,
transformer_lora_adapter_metadata={"r": 8, "lora_alpha": 8},
)
```
### ckpt
Bobot model yang lebih lama umumnya disimpan menggunakan utilitas [pickle](https://docs.python.org/3/library/pickle.html) dari Python dalam file ckpt.
File pickled dapat tidak aman karena dapat dieksploitasi untuk menjalankan kode berbahaya. Disarankan untuk menggunakan file safetensors atau mengkonversi bobot ke file safetensors.
Gunakan [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) untuk memuat file ckpt.
```py
from diffusers import StableDiffusionPipeline
pipeline = StableDiffusionPipeline.from_single_file(
"https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/blob/main/v1-5-pruned.ckpt"
)
```
### GGUF
GGUF menyimpan bobot prekuantisasi dalam satu file. Diffusers memuat GGUF melalui model [from_single_file()](/docs/diffusers/v0.43.0/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) dengan [GGUFQuantizationConfig](/docs/diffusers/v0.43.0/id/api/quantization#diffusers.GGUFQuantizationConfig). Pemuatan GGUF pada level pipeline tidak didukung.
Lihat [GGUF](../quantization/gguf) untuk langkah instalasi dan contoh lengkap.
```py
import torch
from diffusers import FluxTransformer2DModel, GGUFQuantizationConfig
transformer = FluxTransformer2DModel.from_single_file(
"https://huggingface.co/city96/FLUX.1-dev-gguf/blob/main/flux1-dev-Q2_K.gguf",
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
)
```
## Mengonversi format dan file
Diffusers menyediakan skrip dan metode untuk mengonversi format dan file agar lebih banyak alat dalam ekosistem difusi dapat menggunakannya.
Lihat folder [diffusers/scripts](https://github.com/huggingface/diffusers/tree/main/scripts) untuk menemukan skrip konversi. Skrip dengan `"to_diffusers"` yang ditambahkan di akhir mengubah model ke format Diffusers. Setiap skrip memiliki set argumen spesifik untuk mengonfigurasi konversi. Pastikan Anda memeriksa argumen apa saja yang tersedia.
Contoh di bawah ini mengonversi model yang disimpan dalam format Diffusers ke format file tunggal. Berikan path ke model yang akan dikonversi dan lokasi untuk menyimpan model hasil konversi. Anda dapat secara opsional menentukan tipe file dan tipe data untuk menyimpan model.
```bash
python convert_diffusers_to_original_sdxl.py --model_path path/to/model/to/convert --checkpoint_path path/to/save/model/to --use_safetensors
```
Metode [save_pretrained()](/docs/diffusers/v0.43.0/id/api/pipelines/overview#diffusers.DiffusionPipeline.save_pretrained) juga menyimpan model dalam format Diffusers dan menangani pembuatan subfolder untuk setiap model. Secara default, file disimpan sebagai file safetensor.
```py
from diffusers import StableDiffusionXLPipeline
pipeline = StableDiffusionXLPipeline.from_single_file(
"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
)
pipeline.save_pretrained("path/to/save/model")
```
## Langkah selanjutnya
- Pelajari lebih lanjut tentang keputusan desain dan mengapa file safetensor lebih disukai untuk menyimpan dan memuat bobot model dalam blog post [Safetensors audited as really safe and becoming the default](https://blog.eleuther.ai/safetensors-security-audit/).

Xet Storage Details

Size:
14 kB
·
Xet hash:
f7a84dc2defc2df765dab2bf442211e32b2b720fb0d19369f13ef3cbada370f4

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.