mirror of
https://github.com/huggingface/diffusers.git
synced 2026-01-27 17:22:53 +03:00
184 lines
5.4 KiB
Markdown
184 lines
5.4 KiB
Markdown
<!--Copyright 2025 The HuggingFace Team. All rights reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations under the License.
|
|
-->
|
|
|
|
[[open-in-colab]]
|
|
|
|
# Sharing pipelines and models
|
|
|
|
Share your pipeline or models and schedulers on the Hub with the [`~diffusers.utils.PushToHubMixin`] class. This class:
|
|
|
|
1. creates a repository on the Hub
|
|
2. saves your model, scheduler, or pipeline files so they can be reloaded later
|
|
3. uploads folder containing these files to the Hub
|
|
|
|
This guide will show you how to upload your files to the Hub with the [`~diffusers.utils.PushToHubMixin`] class.
|
|
|
|
Log in to your Hugging Face account with your access [token](https://huggingface.co/settings/tokens).
|
|
|
|
<hfoptions id="login">
|
|
<hfoption id="notebook">
|
|
|
|
```py
|
|
from huggingface_hub import notebook_login
|
|
|
|
notebook_login()
|
|
```
|
|
|
|
</hfoption>
|
|
<hfoption id="hf CLI">
|
|
|
|
```bash
|
|
hf auth login
|
|
```
|
|
|
|
</hfoption>
|
|
</hfoptions>
|
|
|
|
## Models
|
|
|
|
To push a model to the Hub, call [`~diffusers.utils.PushToHubMixin.push_to_hub`] and specify the repository id of the model.
|
|
|
|
```py
|
|
from diffusers import ControlNetModel
|
|
|
|
controlnet = ControlNetModel(
|
|
block_out_channels=(32, 64),
|
|
layers_per_block=2,
|
|
in_channels=4,
|
|
down_block_types=("DownBlock2D", "CrossAttnDownBlock2D"),
|
|
cross_attention_dim=32,
|
|
conditioning_embedding_out_channels=(16, 32),
|
|
)
|
|
controlnet.push_to_hub("my-controlnet-model")
|
|
```
|
|
|
|
The [`~diffusers.utils.PushToHubMixin.push_to_hub`] method saves the model's `config.json` file and the weights are automatically saved as safetensors files.
|
|
|
|
Load the model again with [`~DiffusionPipeline.from_pretrained`].
|
|
|
|
```py
|
|
model = ControlNetModel.from_pretrained("your-namespace/my-controlnet-model")
|
|
```
|
|
|
|
## Scheduler
|
|
|
|
To push a scheduler to the Hub, call [`~diffusers.utils.PushToHubMixin.push_to_hub`] and specify the repository id of the scheduler.
|
|
|
|
```py
|
|
from diffusers import DDIMScheduler
|
|
|
|
scheduler = DDIMScheduler(
|
|
beta_start=0.00085,
|
|
beta_end=0.012,
|
|
beta_schedule="scaled_linear",
|
|
clip_sample=False,
|
|
set_alpha_to_one=False,
|
|
)
|
|
scheduler.push_to_hub("my-controlnet-scheduler")
|
|
```
|
|
|
|
The [`~diffusers.utils.PushToHubMixin.push_to_hub`] function saves the scheduler's `scheduler_config.json` file to the specified repository.
|
|
|
|
Load the scheduler again with [`~SchedulerMixin.from_pretrained`].
|
|
|
|
```py
|
|
scheduler = DDIMScheduler.from_pretrained("your-namepsace/my-controlnet-scheduler")
|
|
```
|
|
|
|
## Pipeline
|
|
|
|
To push a pipeline to the Hub, initialize the pipeline components with your desired parameters.
|
|
|
|
```py
|
|
from diffusers import (
|
|
UNet2DConditionModel,
|
|
AutoencoderKL,
|
|
DDIMScheduler,
|
|
StableDiffusionPipeline,
|
|
)
|
|
from transformers import CLIPTextModel, CLIPTextConfig, CLIPTokenizer
|
|
|
|
unet = UNet2DConditionModel(
|
|
block_out_channels=(32, 64),
|
|
layers_per_block=2,
|
|
sample_size=32,
|
|
in_channels=4,
|
|
out_channels=4,
|
|
down_block_types=("DownBlock2D", "CrossAttnDownBlock2D"),
|
|
up_block_types=("CrossAttnUpBlock2D", "UpBlock2D"),
|
|
cross_attention_dim=32,
|
|
)
|
|
|
|
scheduler = DDIMScheduler(
|
|
beta_start=0.00085,
|
|
beta_end=0.012,
|
|
beta_schedule="scaled_linear",
|
|
clip_sample=False,
|
|
set_alpha_to_one=False,
|
|
)
|
|
|
|
vae = AutoencoderKL(
|
|
block_out_channels=[32, 64],
|
|
in_channels=3,
|
|
out_channels=3,
|
|
down_block_types=["DownEncoderBlock2D", "DownEncoderBlock2D"],
|
|
up_block_types=["UpDecoderBlock2D", "UpDecoderBlock2D"],
|
|
latent_channels=4,
|
|
)
|
|
|
|
text_encoder_config = CLIPTextConfig(
|
|
bos_token_id=0,
|
|
eos_token_id=2,
|
|
hidden_size=32,
|
|
intermediate_size=37,
|
|
layer_norm_eps=1e-05,
|
|
num_attention_heads=4,
|
|
num_hidden_layers=5,
|
|
pad_token_id=1,
|
|
vocab_size=1000,
|
|
)
|
|
text_encoder = CLIPTextModel(text_encoder_config)
|
|
tokenizer = CLIPTokenizer.from_pretrained("hf-internal-testing/tiny-random-clip")
|
|
```
|
|
|
|
Pass all components to the pipeline and call [`~diffusers.utils.PushToHubMixin.push_to_hub`].
|
|
|
|
```py
|
|
components = {
|
|
"unet": unet,
|
|
"scheduler": scheduler,
|
|
"vae": vae,
|
|
"text_encoder": text_encoder,
|
|
"tokenizer": tokenizer,
|
|
"safety_checker": None,
|
|
"feature_extractor": None,
|
|
}
|
|
|
|
pipeline = StableDiffusionPipeline(**components)
|
|
pipeline.push_to_hub("my-pipeline")
|
|
```
|
|
|
|
The [`~diffusers.utils.PushToHubMixin.push_to_hub`] method saves each component to a subfolder in the repository. Load the pipeline again with [`~DiffusionPipeline.from_pretrained`].
|
|
|
|
```py
|
|
pipeline = StableDiffusionPipeline.from_pretrained("your-namespace/my-pipeline")
|
|
```
|
|
|
|
## Privacy
|
|
|
|
Set `private=True` in [`~diffusers.utils.PushToHubMixin.push_to_hub`] to keep a model, scheduler, or pipeline files private.
|
|
|
|
```py
|
|
controlnet.push_to_hub("my-controlnet-model-private", private=True)
|
|
```
|
|
|
|
Private repositories are only visible to you. Other users won't be able to clone the repository and it won't appear in search results. Even if a user has the URL to your private repository, they'll receive a `404 - Sorry, we can't find the page you are looking for`. You must be [logged in](https://huggingface.co/docs/huggingface_hub/quick-start#login) to load a model from a private repository. |