Buckets:
| # Пайплайны и компоненты сообщества | |
| Пайплайны сообщества — это классы [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.