Buckets:
| # 社区流水线与组件 | |
| 社区流水线是 [DiffusionPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline) 类,它们与原始论文中的实现有所不同。这些流水线提供了额外的功能,或对原始流水线实现进行了扩展。 | |
| > [!TIP] | |
| > 请查看 [diffusers/examples/community](https://github.com/huggingface/diffusers/tree/main/examples/community) 中的社区流水线,其中包含推理和训练示例,演示了如何使用它们。 | |
| 社区流水线存储在 Hub 或 Diffusers 的 GitHub 仓库中。Hub 流水线完全可定制(调度器、模型、流水线代码等),而 GitHub 流水线仅限于自定义流水线代码。下表对比了这两种流水线类型。 | |
| | | GitHub | Hub | | |
| |---|---|---| | |
| | 用法 | `custom_pipeline="<filename_without_.py>"` | Hub 仓库 ID,或者当 `_class_name` 指向自定义代码时使用 `trust_remote_code=True` | | |
| | 审查流程 | 在 GitHub 上发起 Pull Request,并在合并前接受 Diffusers 团队的审查流程。此选项速度较慢。 | 直接上传到 Hub 仓库,无需审核。这是最快的选项。 | | |
| | 可见性 | 包含在官方的 Diffusers 仓库和文档中。 | 包含在您的 Hub 个人资料中,并依赖于您自身的使用和推广来获得曝光度。 | | |
| ## 加载社区流水线 | |
| 通过向 [from_pretrained()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) 传递 `custom_pipeline` 来加载任意类型的社区流水线。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| 将 `custom_revision` 参数添加到 [from_pretrained()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) 中,以从特定版本(例如 `v0.30.0` 或 `main`)加载社区流水线。默认情况下,社区流水线从 Diffusers 的最新稳定版本加载。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix", | |
| custom_revision="main", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > 在 Hugging Face Hub [扫描](https://huggingface.co/docs/hub/security-malware)文件的同时,您仍应检查 Hub 流水线代码,确保其安全。 | |
| 加载社区 pipeline 有几种方法。 | |
| - 将路径传递给 `custom_pipeline` 以加载本地社区流水线。该目录必须包含一个 `pipeline.py` 文件,其中定义了流水线类。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="path/to/pipeline_directory", | |
| trust_remote_code=True, | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| - `custom_pipeline` 参数同样受 [from_pipe()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) 支持,这对于在不占用额外内存的情况下[复用流水线](./loading#reusing-models-in-multiple-pipelines)非常有用。它将内存使用量限制为仅加载的最大流水线。 | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline_sd = DiffusionPipeline.from_pretrained( | |
| "emilianJR/CyberRealistic_V3", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline_lpw = DiffusionPipeline.from_pipe( | |
| pipeline_sd, custom_pipeline="lpw_stable_diffusion" | |
| ) | |
| ``` | |
| [from_pipe()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) 方法对于加载社区流水线特别有用,因为许多社区流水线没有预训练权重。社区流水线通常是在现有流水线的基础上增加一项功能。 | |
| ## 社区组件 | |
| 社区组件允许您使用 Diffusers 不支持的自定义 transformer、UNet、VAE 和调度器来构建流水线。这些组件需要拥有自己的 Python 模块。 | |
| 本节以 [showlab/show-1-base](https://huggingface.co/showlab/show-1-base) 为例,展示用户如何使用社区组件来构建社区流水线。 | |
| 1. 加载所需的组件,即调度器和图像处理器。文本编码器通常从 [Transformers](https://huggingface.co/docs/transformers/index) 中导入。 | |
| ```python | |
| from transformers import T5Tokenizer, T5EncoderModel, CLIPImageProcessor | |
| from diffusers import DPMSolverMultistepScheduler | |
| pipeline_id = "showlab/show-1-base" | |
| tokenizer = T5Tokenizer.from_pretrained(pipeline_id, subfolder="tokenizer") | |
| text_encoder = T5EncoderModel.from_pretrained(pipeline_id, subfolder="text_encoder") | |
| scheduler = DPMSolverMultistepScheduler.from_pretrained(pipeline_id, subfolder="scheduler") | |
| feature_extractor = CLIPImageProcessor.from_pretrained(pipeline_id, subfolder="feature_extractor") | |
| ``` | |
| > [!WARNING] | |
| > 在第 2 步和第 3 步中,自定义的 [UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) 和 [pipeline](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) 实现必须与其文件中的格式一致,本示例才能正常运行。 | |
| 2. 加载一个已在 [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) 中实现的[自定义 UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py)。由于 [UNet3DConditionModel](/docs/diffusers/v0.43.0/zh/api/models/unet3d-cond#diffusers.UNet3DConditionModel) 在 Diffusers 中已存在,因此将 [UNet3DConditionModel](/docs/diffusers/v0.43.0/zh/api/models/unet3d-cond#diffusers.UNet3DConditionModel) 类名重命名为自定义实现 `ShowOneUNet3DConditionModel`。`ShowOneUNet3DConditionModel` 类所需的任何组件都应放置在 `showone_unet_3d_condition.py` 中。 | |
| ```python | |
| from showone_unet_3d_condition import ShowOneUNet3DConditionModel | |
| unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet") | |
| ``` | |
| 3. 加载自定义流水线代码(已在 [pipeline_t2v_base_pixel.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/pipeline_t2v_base_pixel.py) 中实现)。该脚本包含一个用于从文本生成视频的自定义 `TextToVideoIFPipeline` 类。与自定义 UNet 类似,`TextToVideoIFPipeline` 所需的任何代码都应放置在 `pipeline_t2v_base_pixel.py` 中。 | |
| 使用 `ShowOneUNet3DConditionModel` 初始化 `TextToVideoIFPipeline`。 | |
| ```python | |
| import torch | |
| from pipeline_t2v_base_pixel import TextToVideoIFPipeline | |
| pipeline = TextToVideoIFPipeline( | |
| unet=unet, | |
| text_encoder=text_encoder, | |
| tokenizer=tokenizer, | |
| scheduler=scheduler, | |
| feature_extractor=feature_extractor, | |
| ) | |
| pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| ``` | |
| 4. 将流水线推送到 Hub,与社区共享。 | |
| ```python | |
| pipeline.push_to_hub("custom-t2v-pipeline") | |
| ``` | |
| 成功推送流水线后,进行以下更改。 | |
| - 将 [model_index.json](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2) 中的 `_class_name` 属性更改为 `["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]`。 | |
| - 将 `showone_unet_3d_condition.py` 上传到 [unet](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) 子文件夹中。 | |
| - 将 `pipeline_t2v_base_pixel.py` 上传到 [pipeline 仓库](https://huggingface.co/sayakpaul/show-1-base-with-code/tree/main)。 | |
| 要运行推理,请在初始化 pipeline 时添加 `trust_remote_code` 参数,以处理所有幕后“魔法”。 | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16 | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > 作为额外的预防措施,在使用 `trust_remote_code=True` 时,请在 [from_pretrained()](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) 中向 `revision` 参数传入一个 commit hash,以确保代码未被更新为包含新的恶意代码(除非你完全信任模型所有者)。 | |
| ## 后续步骤 | |
| - 请查看 Issue [#841](https://github.com/huggingface/diffusers/issues/841),以了解更多关于我们为何要添加社区流水线(community pipelines)的背景信息,旨在帮助大家轻松分享自己的工作,而不受阻碍。 | |
| - 请查看 [stabilityai/japanese-stable-diffusion-xl](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) 仓库,了解另一个同样使用 `trust_remote_code` 功能的社区流水线示例。 | |
Xet Storage Details
- Size:
- 8.99 kB
- Xet hash:
- 9852c8d96bc847fcb9aeeed1c788c87ce5384510a975b30f3d571c83cd0448f5
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.