Diffusers documentation
Pipelines
Pipelines
Pipelines cung cấp một cách đơn giản để chạy các mô hình diffusion tiên tiến trong suy luận bằng cách đóng gói tất cả các thành phần cần thiết (nhiều mô hình được huấn luyện độc lập, các trình lập lịch và bộ xử lý) vào một lớp end-to-end duy nhất. Pipelines linh hoạt và có thể được điều chỉnh để sử dụng các trình lập lịch khác nhau hoặc thậm chí các thành phần mô hình khác nhau.
Tất cả các pipeline được xây dựng từ lớp cơ sở DiffusionPipeline, cung cấp các chức năng cơ bản để tải, tải xuống và lưu trữ tất cả các thành phần. Các loại pipeline cụ thể (ví dụ StableDiffusionPipeline) được tải bằng from_pretrained() sẽ được tự động phát hiện, và các thành phần của pipeline sẽ được tải và truyền vào hàm __init__ của pipeline.
Bạn không nên sử dụng lớp DiffusionPipeline để huấn luyện. Các thành phần riêng lẻ (ví dụ, UNet2DModel và UNet2DConditionModel) của các pipeline khuếch tán thường được huấn luyện riêng biệt, vì vậy chúng tôi đề xuất làm việc trực tiếp với chúng.
Pipelines không cung cấp bất kỳ chức năng huấn luyện nào. Bạn sẽ nhận thấy autograd của PyTorch bị vô hiệu hóa bằng cách trang trí phương thức
__call__()với bộ trang trítorch.no_gradvì pipelines không nên được sử dụng để huấn luyện. Nếu bạn quan tâm đến huấn luyện, hãy xem các hướng dẫn về Training thay thế!
Sử dụng API > Pipelines ở thanh bên để xem tất cả các tham chiếu pipeline theo modality. Đối với các quy trình làm việc theo hướng tác vụ, hãy bắt đầu với Quickstart hoặc một hướng dẫn như text-to-image, image-to-image, inpainting hoặc video generation.
DiffusionPipeline
Lớp cơ sở cho tất cả các pipeline.
DiffusionPipeline lưu trữ tất cả các thành phần (mô hình, trình lập lịch và bộ xử lý) cho các pipeline khuếch tán và cung cấp các phương thức để tải, tải xuống và lưu trữ mô hình. Nó cũng bao gồm các phương thức để:
- di chuyển tất cả các module PyTorch sang thiết bị bạn chọn
- bật/tắt thanh tiến trình cho lần lặp khử nhiễu
Thuộc tính lớp:
- config_name (
str) — Tên tệp cấu hình lưu trữ tên lớp và tên module của tất cả các thành phần trong pipeline khuếch tán. - _optional_components (
List[str]) — Danh sách tất cả các thành phần tùy chọn không nhất thiết phải được truyền vào pipeline để hoạt động (nên được ghi đè bởi các lớp con).
thiết bị
< source >( ) → torch.device
Trả về
torch.device
Thiết bị torch mà pipeline được đặt trên đó. Khi các thành phần được chia tách giữa các thiết bị (ví dụ: text encoder trên CPU trong khi denoising backbone chạy trên accelerator), thiết bị accelerator sẽ được trả về.
đến
< source >( *args**kwargs ) → DiffusionPipeline
Tham số
- dtype (
torch.dtype, tùy chọn) — Trả về một pipeline vớidtypeđược chỉ định - device (
torch.Device, tùy chọn) — Trả về một pipeline vớideviceđược chỉ định - silence_dtype_warnings (
str, tùy chọn, mặc định làFalse) — Có nên bỏ qua các cảnh báo nếudtypeđích không tương thích vớideviceđích hay không.
Trả về
Pipeline đã được chuyển đổi sang dtype và/hoặc dtype được chỉ định.
Thực hiện chuyển đổi dtype và/hoặc device của Pipeline. Một torch.dtype và torch.device được suy ra từ các đối số của self.to(*args, **kwargs).
> Nếu pipeline đã có torch.dtype và torch.device đúng, thì nó được trả về nguyên vẹn. Ngược lại, > pipeline được trả về là bản sao của self với torch.dtype và torch.device mong muốn.
Dưới đây là các cách để gọi to:
to(dtype, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớidtypeđược chỉ địnhto(device, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớideviceđược chỉ địnhto(device=None, dtype=None, silence_dtype_warnings=False) → DiffusionPipelineđể trả về một pipeline vớidevicevàdtypeđược chỉ định
Thuộc tính self.components có thể hữu ích để chạy các pipeline khác nhau với cùng các trọng số và cấu hình mà không cần cấp phát thêm bộ nhớ.
Trả về (dict):
Một từ điển chứa tất cả các module cần thiết để khởi tạo pipeline.
Ví dụ:
>>> from diffusers import (
... StableDiffusionPipeline,
... StableDiffusionImg2ImgPipeline,
... StableDiffusionInpaintPipeline,
... )
>>> text2img = StableDiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> img2img = StableDiffusionImg2ImgPipeline(**text2img.components)
>>> inpaint = StableDiffusionInpaintPipeline(**text2img.components)Tắt tính toán chú ý dạng lát cắt. Nếu enable_attention_slicing đã được gọi trước đó, chú ý sẽ được tính toán trong một bước duy nhất.
Tắt chú ý tiết kiệm bộ nhớ từ xFormers.
tải xuống
< source >( pretrained_model_name**kwargs ) → os.PathLike
Tham số
- pretrained_model_name (
strhoặcos.PathLike, tùy chọn) — Một chuỗi, repository id (ví dụCompVis/ldm-text2im-large-256) của một pipeline được huấn luyện trước được lưu trữ trên Hub. - custom_pipeline (
str, tuỳ chọn) — Có thể là:-
Một chuỗi, repository id (ví dụ
CompVis/ldm-text2im-large-256) của một pipeline được huấn luyện trước có trên Hub. Repository phải chứa một tệp có tênpipeline.pyđịnh nghĩa pipeline tùy chỉnh. -
Một chuỗi, tên tệp của một pipeline cộng đồng được lưu trữ trên GitHub dưới Community. Tên tệp hợp lệ phải khớp với tên tệp chứ không phải script pipeline (
clip_guided_stable_diffusionthay vìclip_guided_stable_diffusion.py). Các pipeline cộng đồng luôn được tải từ nhánhmainhiện tại trên GitHub. -
Đường dẫn đến một thư mục (
./my_pipeline_directory/) chứa một pipeline tùy chỉnh. Thư mục phải chứa một tệp có tên làpipeline.pyđể định nghĩa pipeline tùy chỉnh.
> 🧪 Đây là một tính năng thử nghiệm và có thể thay đổi trong tương lai.
Để biết thêm thông tin về cách tải và tạo các pipeline tùy chỉnh, hãy xem Cách đóng góp một pipeline cộng đồng.
-
- 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], tùy 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, optional, 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ặc bool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization 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. - custom_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ẻ, hoặc id commit tương tự nhưrevisionkhi tải một pipeline tùy chỉnh từ Hub. Nó có thể là phiên bản 🤗 Diffusers khi tải một pipeline tùy chỉnh từ GitHub, nếu không, mặc định là"main"khi tải từ Hub. - mirror (
str, optional) — Nguồn mirror để giải quyết các vấn đề về khả năng truy cập nếu bạn đang tải xuống một model tại Trung Quốc. Chúng tôi không đảm bảo tính kịp thời hay an toàn của nguồn, và bạn nên tham khảo trang web mirror để biết thêm thông tin. - variant (
str, tùy chọn) — Tải trọng số từ tên tệp biến thể được chỉ định, chẳng hạn như"fp16"hoặc"ema". - use_safetensors (
bool, tùy chọn, mặc định làNone) — Nếu được đặt thànhNone, các trọng số safetensors sẽ được tải xuống nếu chúng có sẵn và nếu thư viện safetensors đã được cài đặt. Nếu được đặt thànhTrue, mô hình sẽ được tải bắt buộc từ các trọng số safetensors. Nếu được đặt thànhFalse, các trọng số safetensors sẽ không được tải. - use_onnx (
bool, tuỳ chọn, mặc định làFalse) — Nếu đặt thànhTrue, trọng số ONNX sẽ luôn được tải xuống nếu có sẵn. Nếu đặt thànhFalse, trọng số ONNX sẽ không bao giờ được tải xuống. Mặc định,use_onnxcó giá trị mặc định là thuộc tính lớp_is_onnx, vốn làFalseđối với các pipeline không phải ONNX vàTrueđối với các pipeline ONNX. Trọng số ONNX bao gồm cả các tệp kết thúc bằng.onnxvà.pb. - trust_remote_code (
bool, tùy chọn, mặc định làFalse) — Có cho phép các pipeline và thành phần tùy chỉnh được định nghĩa trên Hub trong các tệp riêng của chúng hay không. Chỉ nên đặt tùy chọn này thànhTruecho các kho bạn tin tưởng và đã đọc mã nguồn, vì nó sẽ thực thi mã có trên Hub trên máy cục bộ của bạn. - use_flashpack (
bool, tùy chọn, mặc định làFalse) — Nếu đặt thànhTrue, trọng số FlashPack sẽ luôn được tải xuống nếu có. Nếu đặt thànhFalse, trọng số FlashPack sẽ không bao giờ được tải xuống.
Trả về
os.PathLike
Đường dẫn đến pipeline đã tải xuống.
Tải xuống và lưu vào bộ nhớ đệm một pipeline khuếch tán PyTorch từ trọng số pipeline được huấn luyện trước.
> Để sử dụng các mô hình riêng tư hoặc mô hình có kiểm soát truy cập, hãy đăng nhập bằng `hf > auth login
enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Tham số
- slice_size (
strhoặcint, tùy chọn, mặc định là"auto") — Khi là"auto", đầu vào cho các attention heads sẽ được chia đôi, do đó attention sẽ được tính trong hai bước. Nếu là"max", lượng bộ nhớ được tiết kiệm tối đa bằng cách chỉ chạy một slice tại một thời điểm. Nếu cung cấp một số, số lượng slice sẽ bằngattention_head_dim // slice_size. Trong trường hợp này,attention_head_dimphải là bội số củaslice_size.
Bật tính toán chú ý dạng lát cắt. Khi tùy chọn này được bật, module chú ý sẽ chia tensor đầu vào thành các lát cắt để tính toán chú ý qua nhiều bước. Với nhiều hơn một đầu chú ý, phép tính được thực hiện tuần tự trên từng đầu. Điều này hữu ích để tiết kiệm một phần bộ nhớ, đổi lại là sự giảm tốc độ nhỏ.
> ⚠️ Không bật attention slicing nếu bạn đã đang sử dụng
scaled_dot_product_attention(SDPA) từ PyTorch > 2.0 hoặc xFormers. Các phép tính attention này đã rất hiệu quả về bộ nhớ nên bạn sẽ không cần bật > chức năng này. Nếu bật attention slicing cùng với SDPA hoặc xFormers, nó có thể gây ra sự giảm tốc độ nghiêm trọng!
Ví dụ:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]enable_group_offload
< source >( onload_device: deviceoffload_device: device = torch.device()offload_type: str = 'block_level'num_blocks_per_group: int | None = Nonenon_blocking: bool = Falseuse_stream: bool = Falserecord_stream: bool = Falselow_cpu_mem_usage = Falseoffload_to_disk_path: str | None = Noneexclude_modules: str | list[str] | None = None )
Tham số
- onload_device (
torch.device) — Thiết bị mà nhóm các module được onload lên. - offload_device (
torch.device, mặc định làtorch.device("cpu")) — Thiết bị mà nhóm các module được offload đến. Thông thường, đây nên là CPU. Mặc định là CPU. - offload_type (
strhoặcGroupOffloadingType, mặc định là “block_level”) — Loại offloading sẽ được áp dụng. Có thể là “block_level” hoặc “leaf_level”. Mặc định là “block_level”. - offload_to_disk_path (
str, tùy chọn, mặc định làNone) — Đường dẫn đến thư mục nơi các tham số sẽ được offload. Việc thiết lập tùy chọn này có thể hữu ích trong các môi trường có RAM hạn chế, nơi cần một sự đánh đổi hợp lý giữa tốc độ và bộ nhớ. - num_blocks_per_group (
int, tùy chọn) — Số lượng khối trong mỗi nhóm khi sử dụng offload_type=“block_level”. Tham số này là bắt buộc khi sử dụng offload_type=“block_level”. - non_blocking (
bool, mặc định làFalse) — Nếu là True, việc offloading và onloading sẽ được thực hiện với truyền dữ liệu không chặn (non-blocking). - use_stream (
bool, mặc định làFalse) — Nếu là True, việc offloading và onloading sẽ được thực hiện bất đồng bộ bằng cách sử dụng một CUDA stream. Điều này có thể hữu ích để chồng chéo giữa tính toán và truyền dữ liệu. - record_stream (
bool, mặc định làFalse) — Khi được bật cùng vớiuse_stream, nó đánh dấu tensor hiện tại là đã được sử dụng bởi stream này. Cách này nhanh hơn nhưng đổi lại tiêu tốn thêm một chút bộ nhớ. Xem tài liệu chính thức của PyTorch để biết thêm chi tiết. - low_cpu_mem_usage (
bool, mặc định làFalse) — Nếu là True, mức sử dụng bộ nhớ CPU được tối thiểu hóa bằng cách ghim (pin) các tensor theo thời gian thực thay vì ghim trước. Tùy chọn này chỉ có ý nghĩa khi sử dụng offloading CPU dạng luồng (tức làuse_stream=True). Điều này có thể hữu ích khi bộ nhớ CPU là điểm nghẽn, nhưng có thể làm giảm lợi ích của việc sử dụng luồng. - exclude_modules (
Union[str, List[str]], mặc định làNone) — Danh sách các module cần loại trừ khỏi quá trình offloading.
Áp dụng group offloading cho các lớp bên trong của một torch.nn.Module. Để hiểu group offloading là gì và khi nào nó mang lại lợi ích, trước tiên chúng ta cần cung cấp một số ngữ cảnh về cách các phương pháp offloading khác được hỗ trợ hoạt động.
Thông thường, việc offload được thực hiện ở hai cấp độ:
- Module-level: Trong Diffusers, tính năng này có thể được bật bằng phương thức
ModelMixin::enable_model_cpu_offload(). Nó hoạt động bằng cách offload từng thành phần của pipeline sang CPU để lưu trữ, và onload lên thiết bị accelerator khi cần cho tính toán. Phương thức này tiết kiệm bộ nhớ hơn so với việc giữ tất cả các thành phần trên accelerator, nhưng yêu cầu về bộ nhớ vẫn khá cao. Để phương thức này hoạt động, cần có bộ nhớ tương đương với kích thước của model trong runtime dtype + kích thước của các tensor kích hoạt trung gian lớn nhất để có thể hoàn thành forward pass. - Leaf-level: Trong Diffusers, tính năng này có thể được bật bằng phương thức
ModelMixin::enable_sequential_cpu_offload(). Nó hoạt động bằng cách offload các tham số ở mức lá thấp nhất của đồ thị tính toán sang CPU để lưu trữ, và onload chỉ các lá lên thiết bị accelerator để tính toán. Cách này sử dụng lượng bộ nhớ accelerator thấp nhất, nhưng có thể chậm hơn do số lượng đồng bộ hóa thiết bị quá lớn.
Group offloading là giải pháp trung gian giữa hai phương pháp. Phương pháp này hoạt động bằng cách offload các nhóm lớp bên trong (dạng torch.nn.ModuleList hoặc torch.nn.Sequential). Phương pháp này sử dụng bộ nhớ thấp hơn so với offloading ở cấp module. Nó cũng nhanh hơn so với offloading ở cấp leaf/sequential, vì số lần đồng bộ hóa thiết bị được giảm đi.
Một tính năng khác được hỗ trợ (cho các thiết bị CUDA có hỗ trợ các luồng chuyển dữ liệu bất đồng bộ) là khả năng chồng chéo giữa việc chuyển dữ liệu và tính toán để giảm thời gian thực thi tổng thể so với việc offload tuần tự. Tính năng này được kích hoạt bằng cách sử dụng layer prefetching với streams, tức là layer sẽ được thực thi tiếp theo bắt đầu onloading lên thiết bị tăng tốc trong khi layer hiện tại đang được thực thi - điều này làm tăng nhẹ yêu cầu về bộ nhớ. Lưu ý rằng cài đặt này cũng hỗ trợ offload ở cấp độ lá (leaf-level) nhưng có thể nhanh hơn nhiều khi sử dụng streams.
Ví dụ:
>>> from diffusers import DiffusionPipeline
>>> import torch
>>> pipe = DiffusionPipeline.from_pretrained("Qwen/Qwen-Image", dtype=torch.bfloat16)
>>> pipe.enable_group_offload(
... onload_device=torch.device("cuda"),
... offload_device=torch.device("cpu"),
... offload_type="leaf_level",
... use_stream=True,
... )
>>> image = pipe("a beautiful sunset").images[0]enable_model_cpu_offload
< source >( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )
Tham số
- gpu_id (
int, tùy chọn) — ID của bộ tăng tốc sẽ được sử dụng trong suy luận. Nếu không được chỉ định, giá trị mặc định sẽ là 0. - device (
torch.Devicehoặcstr, tuỳ chọn, mặc định là None) — Loại thiết bị PyTorch của bộ tăng tốc sẽ được sử dụng trong suy luận. Nếu không được chỉ định, hệ thống sẽ tự động phát hiện và sử dụng bộ tăng tốc khả dụng.
Tải tất cả các mô hình xuống CPU bằng accelerate, giảm mức sử dụng bộ nhớ với tác động thấp đến hiệu suất. So với enable_sequential_cpu_offload, phương pháp này di chuyển toàn bộ một mô hình tại một thời điểm lên bộ tăng tốc khi phương thức forward của nó được gọi, và mô hình sẽ ở lại trên bộ tăng tốc cho đến khi mô hình tiếp theo chạy. Mức tiết kiệm bộ nhớ thấp hơn so với enable_sequential_cpu_offload, nhưng hiệu suất tốt hơn nhiều nhờ việc thực hiện lặp lại của unet.
enable_sequential_cpu_offload
< source >( gpu_id: int | None = Nonedevice: typing.Union[torch.device, str] = None )
Tham số
- gpu_id (
int, tùy chọn) — ID của bộ tăng tốc sẽ được sử dụng trong suy luận. Nếu không được chỉ định, giá trị mặc định sẽ là 0. - device (
torch.Devicehoặcstr, tuỳ chọn, mặc định là None) — Loại thiết bị PyTorch của bộ tăng tốc sẽ được sử dụng trong suy luận. Nếu không được chỉ định, hệ thống sẽ tự động phát hiện và sử dụng bộ tăng tốc khả dụng.
Tải xuống tất cả các mô hình xuống CPU bằng 🤗 Accelerate, giảm đáng kể lượng bộ nhớ sử dụng. Khi được gọi, các state dict của tất cả các thành phần torch.nn.Module (trừ những thành phần nằm trong self._exclude_from_cpu_offload) sẽ được lưu xuống CPU, sau đó được chuyển sang torch.device('meta') và chỉ được tải lên accelerator khi phương thức forward của submodule cụ thể đó được gọi. Việc offload diễn ra theo từng submodule. Tiết kiệm bộ nhớ cao hơn so với enable_model_cpu_offload, nhưng hiệu suất thấp hơn.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Tham số
- attention_op (
Callable, tùy chọn) — Ghi đè toán tử mặc địnhNoneđể sử dụng làm đối sốopcho hàmmemory_efficient_attention()của xFormers.
Bật chú ý tiết kiệm bộ nhớ từ xFormers. Khi tùy chọn này được bật, bạn nên quan sát thấy mức sử dụng bộ nhớ GPU thấp hơn và có thể tăng tốc trong quá trình suy luận. Việc tăng tốc trong quá trình huấn luyện không được đảm bảo.
> ⚠️ Khi cả memory efficient attention và sliced attention đều được bật, memory efficient attention sẽ có > ưu tiên.
Ví dụ:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)from_pipe
< source >( pipeline**kwargs ) → DiffusionPipeline
Tạo một pipeline mới từ một pipeline đã cho. Phương thức này hữu ích để tạo một pipeline mới từ các thành phần pipeline hiện có mà không cần cấp phát thêm bộ nhớ.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike**kwargs )
Tham số
- pretrained_model_name_or_path (
strhoặcos.PathLike, tùy chọn) — Có thể là:- Một chuỗi, repo id (ví dụ
CompVis/ldm-text2im-large-256) của một pipeline được huấn luyện trước có trên Hub. - Đường dẫn đến một thư mục (ví dụ
./my_pipeline_directory/) chứa trọng số pipeline được lưu bằng save_pretrained().
- Một chuỗi, repo id (ví dụ
- dtype (
torch.dtypehoặcdict[str, Union[str, torch.dtype]], tuỳ chọn) — Ghi đètorch.dtypemặc định và nạp mô hình với một dtype khác. Để nạp các mô hình con với các dtype khác nhau, hãy truyền mộtdict(ví dụ{'transformer': torch.bfloat16, 'vae': torch.float16}). Đặt dtype mặc định cho các thành phần không được chỉ định bằngdefault(ví dụ{'transformer': torch.bfloat16, 'default': torch.float16}). Nếu một thành phần không được chỉ định và không có default được đặt,torch.float32sẽ được sử dụng. - custom_pipeline (
str, tuỳ chọn) —> 🧪 Đây là một tính năng thử nghiệm và có thể thay đổi trong tương lai.
Có thể là một trong các lựa chọn sau:
- Một chuỗi, repo id (ví dụ
hf-internal-testing/diffusers-dummy-pipeline) của một pipeline tùy chỉnh được lưu trữ trên Hub. Kho phải chứa một tệp có tên pipeline.py định nghĩa pipeline tùy chỉnh. - Một chuỗi, tên tệp của một pipeline cộng đồng được lưu trữ trên GitHub dưới
Community. Tên tệp hợp lệ phải khớp với tên tệp chứ không phải script pipeline (
clip_guided_stable_diffusionthay vìclip_guided_stable_diffusion.py). Các pipeline cộng đồng luôn được tải từ nhánh main hiện tại trên GitHub. - Đường dẫn đến một thư mục (
./my_pipeline_directory/) chứa một pipeline tùy chỉnh. Thư mục phải chứa một tệp có tên làpipeline.pyđể định nghĩa pipeline tùy chỉnh.
Để biết thêm thông tin về cách tải và tạo các pipeline tùy chỉnh, hãy xem Tải và Thêm các Pipeline tùy chỉnh
- Một chuỗi, repo id (ví dụ
- 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. - cache_dir (
Union[str, os.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. - proxies (
Dict[str, str], tùy 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, optional, 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ặc bool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization 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. - custom_revision (
str, tùy chọn) — 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ẻ, hoặc id commit tương tự nhưrevisionkhi tải một pipeline tùy chỉnh từ Hub. Mặc định là phiên bản 🤗 Diffusers ổn định mới nhất. - mirror (
str, optional) — Nguồn mirror để giải quyết các vấn đề về khả năng truy cập nếu bạn đang tải xuống một model tại Trung Quốc. Chúng tôi không đảm bảo tính kịp thời hay an toàn của nguồn, và bạn nên tham khảo trang web mirror để biết thêm thông tin. - device_map (
str, tùy chọn) — Chiến lược quy định cách các thành phần khác nhau của pipeline nên được đặt trên các thiết bị khả dụng. Hiện tại, chỉ hỗ trợdevice_map“balanced”. Xem đây để biết thêm. - max_memory (
Dict, tùy chọn) — Một từ điển định danh thiết bị cho bộ nhớ tối đa. Nếu không được đặt, giá trị mặc định sẽ là bộ nhớ tối đa khả dụng cho mỗi GPU và RAM CPU khả dụng. - offload_folder (
strhoặcos.PathLike, tùy chọn) — Đường dẫn để offload trọng số nếu device_map chứa giá trị"disk". - offload_state_dict (
bool, tùy chọn) — NếuTrue, sẽ tạm thời offload state dict trên CPU xuống ổ cứng để tránh hết RAM CPU nếu trọng số của state dict trên CPU + shard lớn nhất của checkpoint không vừa. Mặc định làTruekhi có offload xuống đĩa. - low_cpu_mem_usage (
bool, tùy chọn, mặc định làTruenếu phiên bản torch >= 1.9.0, ngược lại làFalse) — Tăng tốc quá trình tải mô hình bằng cách chỉ tải trọng số được huấn luyện trước mà không khởi tạo trọng số. Điều này cũng cố gắng không sử dụng nhiều hơn 1 lần kích thước mô hình trong bộ nhớ CPU (bao gồm bộ nhớ đỉnh) trong khi tải mô hình. Chỉ hỗ trợ cho PyTorch >= 1.9.0. Nếu bạn đang sử dụng phiên bản PyTorch cũ hơn, việc đặt tham số này thànhTruesẽ gây ra lỗi. - use_safetensors (
bool, tùy chọn, mặc định làNone) — Nếu được đặt thànhNone, các trọng số safetensors sẽ được tải xuống nếu chúng có sẵn và nếu thư viện safetensors đã được cài đặt. Nếu được đặt thànhTrue, mô hình sẽ được tải bắt buộc từ các trọng số safetensors. Nếu được đặt thànhFalse, các trọng số safetensors sẽ không được tải. - use_onnx (
bool, tuỳ chọn, mặc định làNone) — Nếu đặt thànhTrue, trọng số ONNX sẽ luôn được tải xuống nếu có. Nếu đặt thànhFalse, trọng số ONNX sẽ không bao giờ được tải xuống. Mặc định,use_onnxcó giá trị mặc định là thuộc tính lớp_is_onnx, vốn làFalseđối với các pipeline không phải ONNX vàTrueđối với các pipeline ONNX. Trọng số ONNX bao gồm cả các tệp kết thúc bằng.onnxvà.pb. - kwargs (từ điển các tham số từ khóa còn lại, tùy chọn) —
Có thể được dùng để ghi đè lên các biến load và saveable (các thành phần pipeline của lớp pipeline cụ thể). Các thành phần bị ghi đè sẽ được truyền trực tiếp vào phương thức
__init__của pipeline. Xem ví dụ bên dưới để biết thêm thông tin. - variant (
str, tùy chọn) — Tải trọng số từ tên tệp biến thể được chỉ định, chẳng hạn như"fp16"hoặc"ema". - disable_mmap (‘bool’, tùy chọn, mặc định là ‘False’) — Có vô hiệu hóa mmap khi tải mô hình Safetensors hay không. Tùy chọn này có thể cho hiệu suất tốt hơn khi mô hình nằm trên ổ đĩa mạng hoặc ổ cứng, những nơi có thể không xử lý tốt tính chất truy cập ngẫu nhiên (seeky) của mmap.
Tạo một pipeline khuếch tán PyTorch từ trọng số pipeline được huấn luyện trước.
Pipeline được đặt ở chế độ đánh giá (model.eval()) theo mặc định.
Nếu bạn nhận được thông báo lỗi bên dưới, bạn cần tinh chỉnh trọng số cho tác vụ hạ nguồn của mình:
Some weights of UNet2DConditionModel were not initialized from the model checkpoint at stable-diffusion-v1-5/stable-diffusion-v1-5 and are newly initialized because the shapes did not match:
- conv_in.weight: found shape torch.Size([320, 4, 3, 3]) in the checkpoint and torch.Size([320, 9, 3, 3]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.> Để sử dụng các mô hình riêng tư hoặc được kiểm soát, hãy đăng nhập bằng
hf > auth login.
Ví dụ:
>>> from diffusers import DiffusionPipeline
>>> # Download pipeline from huggingface.co and cache.
>>> pipeline = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")
>>> # Download pipeline that requires an authorization token
>>> # For more information on access tokens, please refer to this section
>>> # of the documentation](https://huggingface.co/docs/hub/security-tokens)
>>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")
>>> # Use a different scheduler
>>> from diffusers import LMSDiscreteScheduler
>>> scheduler = LMSDiscreteScheduler.from_config(pipeline.scheduler.config)
>>> pipeline.scheduler = schedulerPhương thức thực hiện các bước sau:
- Tải xuống tất cả các thành phần.
- Xóa tất cả các model hook đã được thêm vào khi sử dụng
enable_model_cpu_offload, sau đó áp dụng chúng lại. Trong trường hợp model chưa được offload, hàm này không thực hiện thao tác nào. - Đặt lại các hook có trạng thái của các thành phần denoiser trong diffusers nếu chúng được thêm bằng
register_hook().
Hãy đảm bảo thêm hàm này vào cuối hàm __call__ của pipeline của bạn để nó hoạt động chính xác khi áp dụng enable_model_cpu_offload.
Chuyển đổi một ảnh NumPy hoặc một lô ảnh thành ảnh PIL.
Xóa tất cả các hook đã được thêm vào khi sử dụng enable_sequential_cpu_offload hoặc enable_model_cpu_offload.
Đặt lại các bản đồ thiết bị (nếu có) thành None.
save_pretrained
< source >( save_directory: str | os.PathLikesafe_serialization: bool = Truevariant: str | None = Nonemax_shard_size: int | str | None = Nonepush_to_hub: bool = Falseuse_flashpack: bool = False**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục để lưu pipeline. Sẽ được tạo nếu chưa tồn tại. - safe_serialization (
bool, tùy chọn, mặc định làTrue) — Liệu có lưu mô hình bằngsafetensorshay theo cách truyền thống của PyTorch vớipicklehay 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. - max_shard_size (
inthoặcstr, mặc định làNone) — Kích thước tối đa của một checkpoint trước khi được chia nhỏ. Các checkpoint sau khi chia nhỏ sẽ có kích thước nhỏ hơn mức này. Nếu biểu diễn dưới dạng chuỗi, cần là các chữ số theo sau bởi một đơn vị (ví dụ"5GB"). Nếu biểu diễn dưới dạng số nguyên, đơn vị là byte. Lưu ý rằng giới hạn này sẽ được giảm sau một khoảng thời gian nhất định (bắt đầu từ tháng 10 năm 2024) để cho phép người dùng nâng cấp lên phiên bản mới nhất củadiffusers. Điều này nhằm thiết lập một kích thước mặc định chung cho tham số này giữa các thư viện khác nhau trong hệ sinh thái Hugging Face (ví dụ nhưtransformersvàaccelerate). - 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 model hub sau khi lưu hay không. Bạn có thể chỉ định kho lưu trữ muốn đẩy đến bằngrepo_id(mặc định sẽ là tên củasave_directorytrong namespace 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 tất cả các biến có thể lưu của pipeline vào một thư mục. Một biến pipeline có thể được lưu và nạp nếu lớp của nó triển khai cả phương thức lưu và nạp. Pipeline có thể được nạp lại một cách dễ dàng bằng cách sử dụng phương thức lớp from_pretrained().
diffusers.StableDiffusionMixin.enable_freeu
< source >( s1: floats2: floatb1: floatb2: float )
Tham số
- s1 (
float) — Hệ số tỷ lệ cho giai đoạn 1 để làm suy giảm đóng góp của các đặc trưng skip. Việc này được thực hiện để giảm thiểu “hiệu ứng làm mịn quá mức” trong quá trình khử nhiễu được tăng cường. - s2 (
float) — Hệ số tỷ lệ cho giai đoạn 2 để làm suy giảm đóng góp của các đặc trưng skip. Việc này được thực hiện để giảm thiểu “hiệu ứng làm mịn quá mức” trong quá trình khử nhiễu được tăng cường. - b1 (
float) — Hệ số tỷ lệ cho giai đoạn 1 để khuếch đại đóng góp của các đặc trưng backbone. - b2 (
float) — Hệ số tỷ lệ cho giai đoạn 2 để khuếch đại đóng góp của các đặc trưng backbone.
Bật cơ chế FreeU như trong https://huggingface.co/papers/2309.11497.
Các hậu tố sau các hệ số tỷ lệ đại diện cho các giai đoạn mà chúng được áp dụng.
Vui lòng tham khảo kho mã nguồn chính thức để biết các tổ hợp giá trị được biết là hoạt động tốt cho các pipeline khác nhau như Stable Diffusion v1, v2 và Stable Diffusion XL.
Tắt cơ chế FreeU nếu đang được bật.
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")Callbacks
lớp diffusers.callbacks.PipelineCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Lớp cơ sở cho tất cả các callback chính thức được sử dụng trong một pipeline. Lớp này cung cấp cấu trúc để triển khai các callback tùy chỉnh và đảm bảo rằng tất cả các callback đều có một giao diện nhất quán.
Hãy triển khai các phần sau: tensor_inputs: Phần này phải trả về một danh sách các đầu vào tensor cụ thể cho callback của bạn. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính ._callback_tensor_inputs của lớp pipeline của bạn. callback_fn: Phương thức này xác định chức năng cốt lõi của callback của bạn.
lớp diffusers.callbacks.SDCFGCutoffCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Hàm callback cho các Pipeline Stable Diffusion. Sau một số bước nhất định (được đặt bởi cutoff_step_ratio hoặc cutoff_step_index), callback này sẽ tắt CFG.
Lưu ý: Callback này thay đổi pipeline bằng cách đặt thuộc tính _guidance_scale thành 0.0 sau bước cắt.
lớp diffusers.callbacks.SDXLCFGCutoffCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Hàm callback cho các Pipeline Stable Diffusion XL cơ bản. Sau một số bước nhất định (được đặt bởi cutoff_step_ratio hoặc cutoff_step_index), hàm callback này sẽ tắt CFG.
Lưu ý: Callback này thay đổi pipeline bằng cách đặt thuộc tính _guidance_scale thành 0.0 sau bước cắt.
lớp diffusers.callbacks.SDXLControlnetCFGCutoffCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Hàm callback cho các Pipeline Controlnet Stable Diffusion XL. Sau một số bước nhất định (được đặt bởi cutoff_step_ratio hoặc cutoff_step_index), hàm callback này sẽ tắt CFG.
Lưu ý: Callback này thay đổi pipeline bằng cách đặt thuộc tính _guidance_scale thành 0.0 sau bước cắt.
lớp diffusers.callbacks.IPAdapterScaleCutoffCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Hàm callback cho bất kỳ pipeline nào kế thừa IPAdapterMixin. Sau một số bước nhất định (được đặt bởi cutoff_step_ratio hoặc cutoff_step_index), callback này sẽ đặt thang đo IP Adapter thành 0.0.
Lưu ý: Callback này thay đổi các bộ xử lý chú ý của IP Adapter bằng cách đặt scale thành 0.0 sau bước cutoff.
lớp diffusers.callbacks.SD3CFGCutoffCallback
< source >( cutoff_step_ratio = 1.0cutoff_step_index = None )
Hàm callback cho các Pipeline của Stable Diffusion 3. Sau một số bước nhất định (được đặt bởi cutoff_step_ratio hoặc cutoff_step_index), callback này sẽ tắt CFG.
Lưu ý: Callback này thay đổi pipeline bằng cách đặt thuộc tính _guidance_scale thành 0.0 sau bước cắt.