ํ์ผ๋ค์ Hub๋ก ํธ์ํ๊ธฐ
[[open-in-colab]]
๐ค Diffusers๋ ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋๋ ํ์ดํ๋ผ์ธ์ Hub์ ์
๋ก๋ํ ์ ์๋ [~diffusers.utils.PushToHubMixin
]์ ์ ๊ณตํฉ๋๋ค. ์ด๋ Hub์ ๋น์ ์ ํ์ผ์ ์ ์ฅํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ฉฐ, ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ์์
์ ๊ณต์ ํ ์๋ ์์ต๋๋ค. ์ค์ ์ ์ผ๋ก [~diffusers.utils.PushToHubMixin
]๊ฐ ๋์ํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Hub์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋์ค์ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋๋ ํ์ดํ๋ผ์ธ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
- ์ด๋ฌํ ํ์ผ์ด ํฌํจ๋ ํด๋๋ฅผ Hub์ ์ ๋ก๋ํฉ๋๋ค.
์ด ๊ฐ์ด๋๋ [~diffusers.utils.PushToHubMixin
]์ ์ฌ์ฉํ์ฌ Hub์ ํ์ผ์ ์
๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
๋จผ์ ์ก์ธ์ค ํ ํฐ์ผ๋ก Hub ๊ณ์ ์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค:
from huggingface_hub import notebook_login
notebook_login()
๋ชจ๋ธ
๋ชจ๋ธ์ ํ๋ธ์ ํธ์ํ๋ ค๋ฉด [~diffusers.utils.PushToHubMixin.push_to_hub
]๋ฅผ ํธ์ถํ๊ณ Hub์ ์ ์ฅํ ๋ชจ๋ธ์ ๋ฆฌํฌ์งํ ๋ฆฌ id๋ฅผ ์ง์ ํฉ๋๋ค:
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")
๋ชจ๋ธ์ ๊ฒฝ์ฐ Hub์ ํธ์ํ ๊ฐ์ค์น์ ๋ณํ์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, fp16
๊ฐ์ค์น๋ฅผ ํธ์ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ธ์:
controlnet.push_to_hub("my-controlnet-model", variant="fp16")
[~diffusers.utils.PushToHubMixin.push_to_hub
] ํจ์๋ ๋ชจ๋ธ์ config.json
ํ์ผ์ ์ ์ฅํ๊ณ ๊ฐ์ค์น๋ safetensors
ํ์์ผ๋ก ์๋์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด์ Hub์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ชจ๋ธ์ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:
model = ControlNetModel.from_pretrained("your-namespace/my-controlnet-model")
์ค์ผ์ค๋ฌ
์ค์ผ์ค๋ฌ๋ฅผ ํ๋ธ์ ํธ์ํ๋ ค๋ฉด [~diffusers.utils.PushToHubMixin.push_to_hub
]๋ฅผ ํธ์ถํ๊ณ Hub์ ์ ์ฅํ ์ค์ผ์ค๋ฌ์ ๋ฆฌํฌ์งํ ๋ฆฌ id๋ฅผ ์ง์ ํฉ๋๋ค:
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")
[~diffusers.utils.PushToHubMixin.push_to_hub
] ํจ์๋ ์ค์ผ์ค๋ฌ์ scheduler_config.json
ํ์ผ์ ์ง์ ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
์ด์ ํ๋ธ์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ค์ผ์ค๋ฌ๋ฅผ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:
scheduler = DDIMScheduler.from_pretrained("your-namepsace/my-controlnet-scheduler")
ํ์ดํ๋ผ์ธ
๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋ ์ ์ฒด ํ์ดํ๋ผ์ธ์ Hub๋ก ํธ์ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ํ๋ ํ๋ผ๋ฏธํฐ๋ก [StableDiffusionPipeline
]์ ์ปดํฌ๋ํธ๋ค์ ์ด๊ธฐํํฉ๋๋ค:
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")
๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ [StableDiffusionPipeline
]์ ์ ๋ฌํ๊ณ [~diffusers.utils.PushToHubMixin.push_to_hub
]๋ฅผ ํธ์ถํ์ฌ ํ์ดํ๋ผ์ธ์ Hub๋ก ํธ์ํฉ๋๋ค:
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")
[~diffusers.utils.PushToHubMixin.push_to_hub
] ํจ์๋ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ์ ํด๋์ ์ ์ฅํฉ๋๋ค. ์ด์ Hub์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ์ดํ๋ผ์ธ์ ๋ค์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:
pipeline = StableDiffusionPipeline.from_pretrained("your-namespace/my-pipeline")
๋น๊ณต๊ฐ
๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋๋ ํ์ดํ๋ผ์ธ ํ์ผ๋ค์ ๋น๊ณต๊ฐ๋ก ๋๋ ค๋ฉด [~diffusers.utils.PushToHubMixin.push_to_hub
] ํจ์์์ private=True
๋ฅผ ์ค์ ํ์ธ์:
controlnet.push_to_hub("my-controlnet-model-private", private=True)
๋น๊ณต๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ณธ์ธ๋ง ๋ณผ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ์ฌ์ฉ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ ์ ์๊ณ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ์ ํ์๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋น๊ณต๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ URL์ ๊ฐ์ง๊ณ ์๋๋ผ๋ 404 - Sorry, we can't find the page you are looking for
๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ๋น๊ณต๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ชจ๋ธ์ ๋ก๋ํ๋ ค๋ฉด ๋ก๊ทธ์ธ ์ํ์ฌ์ผ ํฉ๋๋ค.