Diffusers documentation
Trình lập lịch
Trình lập lịch
🤗 Diffusers cung cấp nhiều hàm scheduler cho quá trình khuếch tán. Scheduler nhận đầu ra của mô hình (mẫu mà quá trình khuếch tán đang lặp lại) và một bước thời gian (timestep) để trả về một mẫu đã khử nhiễu. Timestep rất quan trọng vì nó xác định vị trí của bước hiện tại trong quá trình khuếch tán; dữ liệu được tạo ra bằng cách lặp tiến về phía trước n timestep và suy diễn (inference) được thực hiện bằng cách lan truyền ngược lại qua các timestep. Dựa vào timestep, một scheduler có thể là discrete, khi đó timestep là một int, hoặc continuous, khi đó timestep là một float.
Tùy thuộc vào ngữ cảnh, một scheduler định nghĩa cách thêm nhiễu lặp đi lặp lại vào một hình ảnh hoặc cách cập nhật một mẫu dựa trên đầu ra của mô hình:
- trong quá trình training, một scheduler sẽ thêm nhiễu (có các thuật toán khác nhau về cách thêm nhiễu) vào một mẫu để huấn luyện mô hình diffusion
- trong quá trình inference, một scheduler xác định cách cập nhật một mẫu dựa trên đầu ra của một mô hình được huấn luyện trước
Nhiều scheduler được triển khai từ thư viện k-diffusion của Katherine Crowson, và chúng cũng được sử dụng rộng rãi trong A1111. Để giúp bạn ánh xạ các scheduler từ k-diffusion và A1111 sang các scheduler trong 🤗 Diffusers, hãy xem bảng dưới đây:
| A1111/k-diffusion | 🤗 Diffusers | Cách sử dụng |
|---|---|---|
| DPM++ 2M | DPMSolverMultistepScheduler | |
| DPM++ 2M Karras | DPMSolverMultistepScheduler | khởi tạo với use_karras_sigmas=True |
| DPM++ 2M SDE | DPMSolverMultistepScheduler | khởi tạo với algorithm_type="sde-dpmsolver++" |
| DPM++ 2M SDE Karras | DPMSolverMultistepScheduler | khởi tạo với use_karras_sigmas=True và algorithm_type="sde-dpmsolver++" |
| DPM++ 2S a | N/A | rất giống với DPMSolverSinglestepScheduler |
| DPM++ 2S a Karras | N/A | rất giống với DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...) |
| DPM++ SDE | DPMSolverSinglestepScheduler | |
| DPM++ SDE Karras | DPMSolverSinglestepScheduler | khởi tạo với use_karras_sigmas=True |
| DPM2 | KDPM2DiscreteScheduler | |
| DPM2 Karras | KDPM2DiscreteScheduler | khởi tạo với use_karras_sigmas=True |
| DPM2 a | KDPM2AncestralDiscreteScheduler | |
| DPM2 a Karras | KDPM2AncestralDiscreteScheduler | khởi tạo với use_karras_sigmas=True |
| DPM thích ứng | N/A | |
| DPM nhanh | N/A | |
| Euler | EulerDiscreteScheduler | |
| Euler a | EulerAncestralDiscreteScheduler | |
| Heun | HeunDiscreteScheduler | |
| LMS | LMSDiscreteScheduler | |
| LMS Karras | LMSDiscreteScheduler | khởi tạo với use_karras_sigmas=True |
| N/A | DEISMultistepScheduler | |
| N/A | UniPCMultistepScheduler |
Lịch trình nhiễu và các loại lịch trình
| A1111/k-diffusion | 🤗 Diffusers |
|---|---|
| Karras | khởi tạo với use_karras_sigmas=True |
| sgm_uniform | khởi tạo với timestep_spacing="trailing" |
| đơn giản | khởi tạo với timestep_spacing="trailing" |
| exponential | khởi tạo với timestep_spacing="linspace", use_exponential_sigmas=True |
| beta | khởi tạo với timestep_spacing="linspace", use_beta_sigmas=True |
Tất cả các trình lập lịch đều được xây dựng từ lớp cơ sở SchedulerMixin, trong đó triển khai các tiện ích cấp thấp được chia sẻ bởi tất cả các trình lập lịch.
SchedulerMixin
Lớp cơ sở cho tất cả các trình lập lịch.
SchedulerMixin chứa các hàm dùng chung cho tất cả các scheduler, chẳng hạn như các chức năng tải và lưu trữ chung.
ConfigMixin chịu trách nhiệm lưu trữ các thuộc tính cấu hình (như num_train_timesteps) được truyền vào hàm __init__ của trình lập lịch, và các thuộc tính này có thể được truy cập bằng scheduler.config.num_train_timesteps.
Thuộc tính lớp:
- _compatibles (
list[str]) — Một danh sách các lớp scheduler tương thích với lớp scheduler cha. Sử dụng from_config() để nạp một lớp scheduler tương thích khác (nên được ghi đè bởi lớp cha).
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | None = Nonesubfolder: str | None = Nonereturn_unused_kwargs: bool = False**kwargs: Any ) → SchedulerMixin or tuple[SchedulerMixin, dict[str, Any]]
Tham số
- pretrained_model_name_or_path (
strhoặcos.PathLike, tùy chọn) — Có thể là:- Một chuỗi, model id (ví dụ
google/ddpm-celebahq-256) của một mô hình được huấn luyện trước có sẵn trên Hub. - Đường dẫn đến một thư mục (ví dụ
./my_model_directory) chứa cấu hình scheduler được lưu bằng save_pretrained().
- Một chuỗi, model id (ví dụ
- subfolder (
str, tùy chọn) — Vị trí thư mục con của tệp mô hình bên trong một kho lưu trữ mô hình lớn hơn trên Hub hoặc cục bộ. - return_unused_kwargs (
bool, tùy chọn, mặc định làFalse) — Liệu các kwargs không được lớp Python sử dụng có nên được trả về hay không. - cache_dir (
strhoặcos.PathLike, tùy chọn) — Đường dẫn đến thư mục nơi cấu hình mô hình được huấn luyện trước đã tải xuống được lưu đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn. - force_download (
bool, tùy chọn, mặc định làFalse) — Có nên buộc tải lại (re-download) trọng số mô hình và các tệp cấu hình, ghi đè lên các phiên bản đã được lưu trong bộ nhớ đệm nếu chúng tồn tại hay không. - proxies (
dict[str, str], tuỳ chọn) — Một từ điển các máy chủ proxy để sử dụng theo giao thức hoặc điểm cuối, ví dụ,{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Các proxy này được sử dụng cho mỗi yêu cầu. - output_loading_info (
bool, tùy chọn, mặc định làFalse) — Có nên trả về một từ điển chứa các khóa bị thiếu, các khóa không mong đợi và thông báo lỗi hay không. - local_files_only (
bool, tùy chọn, mặc định làFalse) — Xác định có chỉ tải trọng số và tệp cấu hình của mô hình từ cục bộ hay không. Nếu đặt thànhTrue, mô hình sẽ không được tải xuống từ Hub. - token (
strhoặcbool, tùy chọn) — Token được sử dụng làm xác thực HTTP bearer cho các tệp từ xa. NếuTrue, token được tạo từdiffusers-cli login(được lưu trong~/.huggingface) sẽ được sử dụng. - revision (
str, tùy chọn, mặc định là"main") — Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ, id commit, hoặc bất kỳ định danh nào được Git cho phép.
Trả về
SchedulerMixin hoặc tuple[SchedulerMixin, dict[str, Any]]
Trình lập lịch được khởi tạo từ cấu hình. Nếu return_unused_kwargs là True, một tuple sẽ được trả về, trong đó phần tử thứ hai là một từ điển chứa các đối số từ khóa không được sử dụng.
Tạo một scheduler từ tệp cấu hình JSON có sẵn trong thư mục cục bộ hoặc kho Hub.
> Để sử dụng các mô hình riêng tư hoặc có kiểm soát truy cập, hãy đăng nhập bằng
hf > auth login. Bạn cũng có thể kích hoạt chế độ đặc biệt > “offline-mode” để sử dụng phương pháp này trong môi trường có tường lửa.
save_pretrained
< source >( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs: Any )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục nơi tệp JSON cấu hình sẽ được lưu (sẽ được tạo nếu chưa tồn tại). - push_to_hub (
bool, tùy chọn, mặc định làFalse) — Có đẩy mô hình của bạn lên Hugging Face Hub sau khi lưu hay không. Bạn có thể chỉ định kho lưu trữ muốn đẩy bằngrepo_id(mặc định sẽ là tên củasave_directorytrong không gian tên của bạn). - kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung được truyền đến phương thức push_to_hub().
Lưu một đối tượng cấu hình scheduler vào một thư mục để có thể tải lại bằng phương thức lớp from_pretrained().
SchedulerOutput
lớp diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Lớp cơ sở cho kết quả của hàm step của một trình lập lịch.
KarrasDiffusionSchedulers
KarrasDiffusionSchedulers là một khái quát hóa rộng rãi của các scheduler trong 🤗 Diffusers. Các scheduler trong lớp này được phân biệt ở cấp độ cao bởi chiến lược lấy mẫu nhiễu, loại mạng và phép quy mô hóa, chiến lược huấn luyện, và cách trọng số hóa loss.
Các scheduler khác nhau trong lớp này, tùy thuộc vào loại bộ giải phương trình vi phân thường (ODE), thuộc về phân loại nêu trên và cung cấp một sự trừu tượng hóa tốt cho thiết kế của các scheduler chính được triển khai trong 🤗 Diffusers. Các scheduler trong lớp này được liệt kê tại đây.
PushToHubMixin
Một Mixin để đẩy mô hình, bộ lập lịch hoặc pipeline lên Hugging Face Hub.
push_to_hub
< source >( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )
Tham số
- repo_id (
str) — Tên của kho mà bạn muốn đẩy tệp mô hình, trình lập lịch hoặc pipeline của mình đến. Nó nên chứa tên tổ chức của bạn khi đẩy đến một tổ chức.repo_idcũng có thể là đường dẫn đến một thư mục cục bộ. - commit_message (
str, tùy chọn) — Thông điệp để commit khi đẩy. Mặc định là"Upload {object}". - private (
bool, optional) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu làNone(mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. - token (
str, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Token được tạo khi chạyhf auth login(được lưu trong~/.huggingface). - create_pr (
bool, tùy chọn, mặc định làFalse) — Có tạo PR với các tệp đã tải lên hay commit trực tiếp hay không. - safe_serialization (
bool, tùy chọn, mặc định làTrue) — Có chuyển đổi trọng số mô hình sang định dạngsafetensorshay không. - variant (
str, tùy chọn) — Nếu được chỉ định, trọng số sẽ được lưu ở định dạngpytorch_model.<variant>.bin.
Tải tệp mô hình, trình lập lịch hoặc pipeline lên 🤗 Hugging Face Hub.
Ví dụ:
from diffusers import UNet2DConditionModel
unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")
# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")
# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")