Buckets:

hf-doc-build/doc / diffusers /main /ru /using-diffusers /custom_pipeline_overview.md
mishig's picture
|
download
raw
12.6 kB
# Пайплайны и компоненты сообщества
Пайплайны сообщества — это классы [DiffusionPipeline](/docs/diffusers/main/ru/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>"` | ID репозитория на Hub или `trust_remote_code=True`, если `_class_name` указывает на пользовательский код |
| Процесс рецензирования | Откройте Pull Request на GitHub и пройдите процесс ревью от команды Diffusers перед слиянием. Этот вариант занимает больше времени. | Загрузите напрямую в репозиторий Hub без рецензирования. Это самый быстрый вариант. |
| Видимость | Входит в официальный репозиторий и документацию Diffusers. | Отображается на вашем профиле в Hub и набирает популярность за счёт вашего использования и продвижения. |
## Загрузка конвейера сообщества
Загрузите любой тип сообщества, передав `custom_pipeline` в [from_pretrained()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained).
```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/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained), чтобы загрузить community pipeline из конкретной версии (например, `v0.30.0` или `main`). По умолчанию community pipeline загружаются из последней стабильной версии 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 и убедиться в его безопасности.
Существует несколько способов загрузки конвейера сообщества.
- Передайте путь к `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/main/ru/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/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) особенно полезен для загрузки пайплайнов сообщества, поскольку многие из них не имеют предобученных весов. Как правило, пайплайны сообщества добавляют новую функцию поверх существующего пайплайна.
## Компоненты сообщества
Компоненты сообщества позволяют создавать конвейеры с кастомными трансформерами, UNet, VAE и планировщиками, которые не поддерживаются в Diffusers. Для этих компонентов требуются собственные модули 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. Загрузите [кастомный UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py), который уже реализован в [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py). Имя класса [UNet3DConditionModel](/docs/diffusers/main/ru/api/models/unet3d-cond#diffusers.UNet3DConditionModel) изменено на имя кастомной реализации, `ShowOneUNet3DConditionModel`, поскольку [UNet3DConditionModel](/docs/diffusers/main/ru/api/models/unet3d-cond#diffusers.UNet3DConditionModel) уже существует в Diffusers. Все компоненты, необходимые для класса `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`.
Инициализируйте `TextToVideoIFPipeline` с `ShowOneUNet3DConditionModel`.
```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")
```
После успешного запуска конвейера внесите следующие изменения.
- Измените атрибут `_class_name` в [model_index.json](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2) на `["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).
Чтобы выполнить инференс, добавьте аргумент `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` передайте хеш коммита в аргумент `revision` в [from_pretrained()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained), чтобы убедиться, что код не был обновлён с добавлением нового вредоносного кода (если вы полностью доверяете владельцам модели).
## Дальнейшие шаги
- См. задачу [#841](https://github.com/huggingface/diffusers/issues/841), чтобы узнать больше о том, почему мы добавляем community pipelines, чтобы помочь всем легко делиться своими работами без задержек.
- Ознакомьтесь с репозиторием [stabilityai/japanese-stable-diffusion-xl](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) для дополнительного примера community-пайплайна, который также использует функцию `trust_remote_code`.

Xet Storage Details

Size:
12.6 kB
·
Xet hash:
3a2ffc62077b96a0297a7507c4400caf95f4aced9bf0844af44c0a8f37f36342

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