diff --git a/docs/source/ko/_toctree.yml b/docs/source/ko/_toctree.yml
index f2b7e96c6f7e..c63fe3d9718d 100644
--- a/docs/source/ko/_toctree.yml
+++ b/docs/source/ko/_toctree.yml
@@ -3,7 +3,7 @@
title: "๐งจ Diffusers"
- local: quicktour
title: "ํ์ด๋ณด๊ธฐ"
- - local: in_translation
+ - local: stable_diffusion
title: Stable Diffusion
- local: installation
title: "์ค์น"
@@ -13,12 +13,14 @@
title: ๊ฐ์
- local: using-diffusers/write_own_pipeline
title: ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ ์ดํดํ๊ธฐ
+ - local: in_translation
+ title: AutoPipeline
- local: tutorials/basic_training
title: Diffusion ๋ชจ๋ธ ํ์ตํ๊ธฐ
title: Tutorials
- sections:
- sections:
- - local: in_translation
+ - local: using-diffusers/loading_overview
title: ๊ฐ์
- local: using-diffusers/loading
title: ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋ถ๋ฌ์ค๊ธฐ
@@ -30,13 +32,15 @@
title: ์ธ์ดํํ
์ ๋ถ๋ฌ์ค๊ธฐ
- local: using-diffusers/other-formats
title: ๋ค๋ฅธ ํ์์ Stable Diffusion ๋ถ๋ฌ์ค๊ธฐ
+ - local: in_translation
+ title: Hub์ ํ์ผ pushํ๊ธฐ
title: ๋ถ๋ฌ์ค๊ธฐ & ํ๋ธ
- sections:
- local: using-diffusers/pipeline_overview
title: ๊ฐ์
- local: using-diffusers/unconditional_image_generation
title: Unconditional ์ด๋ฏธ์ง ์์ฑ
- - local: in_translation
+ - local: using-diffusers/conditional_image_generation
title: Text-to-image ์์ฑ
- local: using-diffusers/img2img
title: Text-guided image-to-image
@@ -44,27 +48,31 @@
title: Text-guided ์ด๋ฏธ์ง ์ธํ์ธํ
- local: using-diffusers/depth2img
title: Text-guided depth-to-image
- - local: in_translation
+ - local: using-diffusers/textual_inversion_inference
title: Textual inversion
- - local: in_translation
+ - local: training/distributed_inference
title: ์ฌ๋ฌ GPU๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ์ถ๋ก
+ - local: in_translation
+ title: Distilled Stable Diffusion ์ถ๋ก
- local: using-diffusers/reusing_seeds
title: Deterministic ์์ฑ์ผ๋ก ์ด๋ฏธ์ง ํ๋ฆฌํฐ ๋์ด๊ธฐ
- - local: in_translation
+ - local: using-diffusers/control_brightness
+ title: ์ด๋ฏธ์ง ๋ฐ๊ธฐ ์กฐ์ ํ๊ธฐ
+ - local: using-diffusers/reproducibility
title: ์ฌํ ๊ฐ๋ฅํ ํ์ดํ๋ผ์ธ ์์ฑํ๊ธฐ
- local: using-diffusers/custom_pipeline_examples
title: ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ๋ค
- - local: in_translation
+ - local: using-diffusers/contribute_pipeline
title: ์ปค๋ฎคํฐ๋ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ
- - local: in_translation
+ - local: using-diffusers/stable_diffusion_jax_how_to
title: JAX/Flax์์์ Stable Diffusion
- - local: in_translation
+ - local: using-diffusers/weighted_prompts
title: Weighting Prompts
title: ์ถ๋ก ์ ์ํ ํ์ดํ๋ผ์ธ
- sections:
- local: training/overview
title: ๊ฐ์
- - local: in_translation
+ - local: training/create_dataset
title: ํ์ต์ ์ํ ๋ฐ์ดํฐ์
์์ฑํ๊ธฐ
- local: training/adapt_a_model
title: ์๋ก์ด ํ์คํฌ์ ๋ชจ๋ธ ์ ์ฉํ๊ธฐ
@@ -78,11 +86,11 @@
title: Text-to-image
- local: training/lora
title: Low-Rank Adaptation of Large Language Models (LoRA)
- - local: in_translation
+ - local: training/controlnet
title: ControlNet
- - local: in_translation
+ - local: training/instructpix2pix
title: InstructPix2Pix ํ์ต
- - local: in_translation
+ - local: training/custom_diffusion
title: Custom Diffusion
title: Training
title: Diffusers ์ฌ์ฉํ๊ธฐ
@@ -99,12 +107,26 @@
title: ONNX
- local: optimization/open_vino
title: OpenVINO
- - local: in_translation
+ - local: optimization/coreml
title: Core ML
- local: optimization/mps
title: MPS
- local: optimization/habana
title: Habana Gaudi
- - local: in_translation
+ - local: optimization/tome
title: Token Merging
title: ์ต์ ํ/ํน์ ํ๋์จ์ด
+- sections:
+ - local: using-diffusers/controlling_generation
+ title: ์ ์ด๋ ์์ฑ
+ - local: in_translation
+ title: Diffusion Models ํ๊ฐํ๊ธฐ
+ title: ๊ฐ๋
๊ฐ์ด๋
+- sections:
+ - sections:
+ - sections:
+ - local: api/pipelines/stable_diffusion/stable_diffusion_xl
+ title: Stable Diffusion XL
+ title: Stable Diffusion
+ title: Pipelines
+ title: API
\ No newline at end of file
diff --git a/docs/source/ko/api/pipelines/stable_diffusion/stable_diffusion_xl.md b/docs/source/ko/api/pipelines/stable_diffusion/stable_diffusion_xl.md
new file mode 100644
index 000000000000..ab5a03ae81a0
--- /dev/null
+++ b/docs/source/ko/api/pipelines/stable_diffusion/stable_diffusion_xl.md
@@ -0,0 +1,400 @@
+
+
+# Stable diffusion XL
+
+Stable Diffusion XL์ Dustin Podell, Zion English, Kyle Lacey, Andreas Blattmann, Tim Dockhorn, Jonas Mรผller, Joe Penna, Robin Rombach์ ์ํด [SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis](https://arxiv.org/abs/2307.01952)์์ ์ ์๋์์ต๋๋ค.
+
+๋
ผ๋ฌธ ์ด๋ก์ ๋ค์์ ๋ฐ๋ฆ
๋๋ค:
+
+*text-to-image์ latent diffusion ๋ชจ๋ธ์ธ SDXL์ ์๊ฐํฉ๋๋ค. ์ด์ ๋ฒ์ ์ Stable Diffusion๊ณผ ๋น๊ตํ๋ฉด, SDXL์ ์ธ ๋ฐฐ ๋ํฐ ๊ท๋ชจ์ UNet ๋ฐฑ๋ณธ์ ํฌํจํฉ๋๋ค: ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ์ ์ฆ๊ฐ๋ ๋ง์ attention ๋ธ๋ญ์ ์ฌ์ฉํ๊ณ ๋ ํฐ cross-attention context๋ฅผ SDXL์ ๋ ๋ฒ์งธ ํ
์คํธ ์ธ์ฝ๋์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ค์ค ์ข
ํก๋น์ ๋ค์์ ์๋ก์ด conditioning ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ์ต๋๋ค. ๋ํ ํ์ ์์ ํ๋ image-to-image ๊ธฐ์ ์ ์ฌ์ฉํจ์ผ๋ก์จ SDXL์ ์ํด ์์ฑ๋ ์๊ฐ์ ํ์ง์ ํฅ์ํ๊ธฐ ์ํด ์ ์ ๋ ๋ชจ๋ธ์ ์๊ฐํฉ๋๋ค. SDXL์ ์ด์ ๋ฒ์ ์ Stable Diffusion๋ณด๋ค ์ฑ๋ฅ์ด ํฅ์๋์๊ณ , ์ด๋ฌํ black-box ์ต์ ์ด๋ฏธ์ง ์์ฑ์์ ๊ฒฝ์๋ ฅ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.*
+
+## ํ
+
+- Stable Diffusion XL์ ํนํ 786๊ณผ 1024์ฌ์ด์ ์ด๋ฏธ์ง์ ์ ์๋ํฉ๋๋ค.
+- Stable Diffusion XL์ ์๋์ ๊ฐ์ด ํ์ต๋ ๊ฐ ํ
์คํธ ์ธ์ฝ๋์ ๋ํด ์๋ก ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ๋์ผํ ํ๋กฌํํธ์ ๋ค๋ฅธ ๋ถ๋ถ์ ํ
์คํธ ์ธ์ฝ๋์ ์ ๋ฌํ ์๋ ์์ต๋๋ค.
+- Stable Diffusion XL ๊ฒฐ๊ณผ ์ด๋ฏธ์ง๋ ์๋์ ๋ณด์ฌ์ง๋ฏ์ด ์ ์ ๊ธฐ(refiner)๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํฅ์๋ ์ ์์ต๋๋ค.
+
+### ์ด์ฉ๊ฐ๋ฅํ ์ฒดํฌํฌ์ธํธ:
+
+- *Text-to-Image (1024x1024 ํด์๋)*: [`StableDiffusionXLPipeline`]์ ์ฌ์ฉํ [stabilityai/stable-diffusion-xl-base-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)
+- *Image-to-Image / ์ ์ ๊ธฐ(refiner) (1024x1024 ํด์๋)*: [`StableDiffusionXLImg2ImgPipeline`]๋ฅผ ์ฌ์ฉํ [stabilityai/stable-diffusion-xl-refiner-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0)
+
+## ์ฌ์ฉ ์์
+
+SDXL์ ์ฌ์ฉํ๊ธฐ ์ ์ `transformers`, `accelerate`, `safetensors` ์ `invisible_watermark`๋ฅผ ์ค์นํ์ธ์.
+๋ค์๊ณผ ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค:
+
+```
+pip install transformers
+pip install accelerate
+pip install safetensors
+pip install invisible-watermark>=0.2.0
+```
+
+### ์ํฐ๋ง์ปค
+
+Stable Diffusion XL๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ์ํฐ๋งํฌ๊ฐ ๋ณด์ด์ง ์๋๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๊ถ์ฅํ๋๋ฐ, ์ด๋ ๋ค์ด์คํธ๋ฆผ(downstream) ์ดํ๋ฆฌ์ผ์ด์
์์ ๊ธฐ๊ณ์ ํฉ์ฑ๋์๋์ง๋ฅผ ์๋ณํ๋๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด [invisible_watermark ๋ผ์ด๋ธ๋ฌ๋ฆฌ](https://pypi.org/project/invisible-watermark/)๋ฅผ ํตํด ์ค์นํด์ฃผ์ธ์:
+
+
+```
+pip install invisible-watermark>=0.2.0
+```
+
+`invisible-watermark` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋๋ฉด ์ํฐ๋ง์ปค๊ฐ **๊ธฐ๋ณธ์ ์ผ๋ก** ์ฌ์ฉ๋ ๊ฒ์
๋๋ค.
+
+์์ฑ ๋๋ ์์ ํ๊ฒ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ท์ ์ด ์๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์ํฐ๋ง์ปค๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค:
+
+```py
+pipe = StableDiffusionXLPipeline.from_pretrained(..., add_watermarker=False)
+```
+
+### Text-to-Image
+
+*text-to-image*๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด SDXL์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```py
+from diffusers import StableDiffusionXLPipeline
+import torch
+
+pipe = StableDiffusionXLPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
+image = pipe(prompt=prompt).images[0]
+```
+
+### Image-to-image
+
+*image-to-image*๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด SDXL์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```py
+import torch
+from diffusers import StableDiffusionXLImg2ImgPipeline
+from diffusers.utils import load_image
+
+pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe = pipe.to("cuda")
+url = "https://huggingface.co/datasets/patrickvonplaten/images/resolve/main/aa_xl/000000009.png"
+
+init_image = load_image(url).convert("RGB")
+prompt = "a photo of an astronaut riding a horse on mars"
+image = pipe(prompt, image=init_image).images[0]
+```
+
+### ์ธํ์ธํ
+
+*inpainting*๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด SDXL์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```py
+import torch
+from diffusers import StableDiffusionXLInpaintPipeline
+from diffusers.utils import load_image
+
+pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
+mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
+
+init_image = load_image(img_url).convert("RGB")
+mask_image = load_image(mask_url).convert("RGB")
+
+prompt = "A majestic tiger sitting on a bench"
+image = pipe(prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=50, strength=0.80).images[0]
+```
+
+### ์ด๋ฏธ์ง ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ ํ๊ธฐ
+
+[base ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)์์, StableDiffusion-XL ๋ํ ๊ณ ์ฃผํ ํ์ง์ ํฅ์์ํค๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ฎ์ ๋
ธ์ด์ฆ ๋จ๊ณ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ๋๋ฐ ํนํ๋ [refiner ์ฒดํฌํฌ์ธํธ](huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0)๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด refiner ์ฒดํฌํฌ์ธํธ๋ ์ด๋ฏธ์ง ํ์ง์ ํฅ์์ํค๊ธฐ ์ํด base ์ฒดํฌํฌ์ธํธ๋ฅผ ์คํํ ํ "๋ ๋ฒ์งธ ๋จ๊ณ" ํ์ดํ๋ผ์ธ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
+
+refiner๋ฅผ ์ฌ์ฉํ ๋, ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค
+- 1.) base ๋ชจ๋ธ๊ณผ refiner์ ์ฌ์ฉํ๋๋ฐ, ์ด๋ *Denoisers์ ์์๋ธ*์ ์ํ ์ฒซ ๋ฒ์งธ ์ ์๋ [eDiff-I](https://research.nvidia.com/labs/dir/eDiff-I/)๋ฅผ ์ฌ์ฉํ๊ฑฐ๋
+- 2.) base ๋ชจ๋ธ์ ๊ฑฐ์น ํ [SDEdit](https://arxiv.org/abs/2108.01073) ๋ฐฉ๋ฒ์ผ๋ก ๋จ์ํ๊ฒ refiner๋ฅผ ์คํ์ํฌ ์ ์์ต๋๋ค.
+
+**์ฐธ๊ณ **: SD-XL base์ refiner๋ฅผ ์์๋ธ๋ก ์ฌ์ฉํ๋ ์์ด๋์ด๋ ์ปค๋ฎค๋ํฐ ๊ธฐ์ฌ์๋ค์ด ์ฒ์์ผ๋ก ์ ์ํ์ผ๋ฉฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ์ `diffusers`๋ฅผ ๊ตฌํํ๋ ๋ฐ๋ ๋์์ ์ฃผ์
จ์ต๋๋ค.
+- [SytanSD](https://github.com/SytanSD)
+- [bghira](https://github.com/bghira)
+- [Birch-san](https://github.com/Birch-san)
+- [AmericanPresidentJimmyCarter](https://github.com/AmericanPresidentJimmyCarter)
+
+#### 1.) Denoisers์ ์์๋ธ
+
+base์ refiner ๋ชจ๋ธ์ denoiser์ ์์๋ธ๋ก ์ฌ์ฉํ ๋, base ๋ชจ๋ธ์ ๊ณ ์ฃผํ diffusion ๋จ๊ณ๋ฅผ ์ํ ์ ๋ฌธ๊ฐ์ ์ญํ ์ ํด์ผํ๊ณ , refiner๋ ๋ฎ์ ๋
ธ์ด์ฆ diffusion ๋จ๊ณ๋ฅผ ์ํ ์ ๋ฌธ๊ฐ์ ์ญํ ์ ํด์ผ ํฉ๋๋ค.
+
+2.)์ ๋นํด 1.)์ ์ฅ์ ์ ์ ์ฒด์ ์ผ๋ก denoising ๋จ๊ณ๊ฐ ๋ ํ์ํ๋ฏ๋ก ์๋๊ฐ ํจ์ฌ ๋ ๋นจ๋ผ์ง๋๋ค. ๋จ์ ์ base ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฌํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ์ฌ์ ํ ๋
ธ์ด์ฆ๊ฐ ์ฌํ๊ฒ ์ ๊ฑฐ๋ฉ๋๋ค.
+
+base ๋ชจ๋ธ๊ณผ refiner๋ฅผ denoiser์ ์์๋ธ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๊ฐ ๊ณ ๋
ธ์ด์ฆ(high-nosise) (*์ฆ* base ๋ชจ๋ธ)์ ์ ๋
ธ์ด์ฆ (*์ฆ* refiner ๋ชจ๋ธ)์ ๋
ธ์ด์ฆ๋ฅผ ์ ๊ฑฐํ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผํ๋ ํ์์คํ
์ ๊ธฐ๊ฐ์ ์ ์ํด์ผ ํฉ๋๋ค.
+base ๋ชจ๋ธ์ [`denoising_end`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline.__call__.denoising_end)์ refiner ๋ชจ๋ธ์ [`denoising_start`](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLImg2ImgPipeline.__call__.denoising_start)๋ฅผ ์ฌ์ฉํด ๊ฐ๊ฒฉ์ ์ ํฉ๋๋ค.
+
+`denoising_end`์ `denoising_start` ๋ชจ๋ 0๊ณผ 1์ฌ์ด์ ์ค์ ๊ฐ์ผ๋ก ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค.
+์ ๋ฌ๋๋ฉด ๋
ธ์ด์ฆ ์ ๊ฑฐ์ ๋๊ณผ ์์์ ๋ชจ๋ธ ์ค์ผ์ค์ ์ํด ์ ์๋ ์ด์ฐ์ (discrete) ์๊ฐ ๊ฐ๊ฒฉ์ ๋น์จ๋ก ์ ์๋ฉ๋๋ค.
+๋
ธ์ด์ฆ ์ ๊ฑฐ ๋จ๊ณ์ ์๋ ๋ชจ๋ธ์ด ํ์ต๋ ๋ถ์ฐ์์ ์ธ ์๊ฐ ๊ฐ๊ฒฉ๊ณผ ์ ์ธ๋ fractional cutoff์ ์ํด ๊ฒฐ์ ๋๋ฏ๋ก '๊ฐ๋' ๋ํ ์ ์ธ๋ ๊ฒฝ์ฐ ์ด ๊ฐ์ด '๊ฐ๋'๋ฅผ ์ฌ์ ์ํฉ๋๋ค.
+
+์์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
+์ฐ์ , ๋ ๊ฐ์ ํ์ดํ๋ผ์ธ์ ๊ฐ์ ธ์ต๋๋ค. ํ
์คํธ ์ธ์ฝ๋์ variational autoencoder๋ ๋์ผํ๋ฏ๋ก refiner๋ฅผ ์ํด ๋ค์ ๋ถ๋ฌ์ค์ง ์์๋ ๋ฉ๋๋ค.
+
+```py
+from diffusers import DiffusionPipeline
+import torch
+
+base = DiffusionPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+refiner = DiffusionPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-refiner-1.0",
+ text_encoder_2=base.text_encoder_2,
+ vae=base.vae,
+ torch_dtype=torch.float16,
+ use_safetensors=True,
+ variant="fp16",
+)
+refiner.to("cuda")
+```
+
+์ด์ ์ถ๋ก ๋จ๊ณ์ ์์ ๊ณ ๋
ธ์ด์ฆ์์ ๋
ธ์ด์ฆ๋ฅผ ์ ๊ฑฐํ๋ ๋จ๊ณ(*์ฆ* base ๋ชจ๋ธ)๋ฅผ ๊ฑฐ์ณ ์คํ๋๋ ์ง์ ์ ์ ์ํฉ๋๋ค.
+
+```py
+n_steps = 40
+high_noise_frac = 0.8
+```
+
+Stable Diffusion XL base ๋ชจ๋ธ์ ํ์์คํ
0-999์ ํ์ต๋๋ฉฐ Stable Diffusion XL refiner๋ ํฌ๊ด์ ์ธ ๋ฎ์ ๋
ธ์ด์ฆ ํ์์คํ
์ธ 0-199์ base ๋ชจ๋ธ๋ก ๋ถํฐ ํ์ธํ๋๋์ด, ์ฒซ 800 ํ์์คํ
(๋์ ๋
ธ์ด์ฆ)์ base ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ ๋ง์ง๋ง 200 ํ์
์คํ
(๋ฎ์ ๋
ธ์ด์ฆ)์์ refiner๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์, `high_noise_frac`๋ 0.8๋ก ์ค์ ํ๊ณ , ๋ชจ๋ 200-999 ์คํ
(๋
ธ์ด์ฆ ์ ๊ฑฐ ํ์์คํ
์ ์ฒซ 80%)์ base ๋ชจ๋ธ์ ์ํด ์ํ๋๋ฉฐ 0-199 ์คํ
(๋
ธ์ด์ฆ ์ ๊ฑฐ ํ์์คํ
์ ๋ง์ง๋ง 20%)์ refiner ๋ชจ๋ธ์ ์ํด ์ํ๋ฉ๋๋ค.
+
+๊ธฐ์ตํ์ธ์, ๋
ธ์ด์ฆ ์ ๊ฑฐ ์ ์ฐจ๋ **๋์ ๊ฐ**(๋์ ๋
ธ์ด์ฆ) ํ์์คํ
์์ ์์๋๊ณ , **๋ฎ์ ๊ฐ** (๋ฎ์ ๋
ธ์ด์ฆ) ํ์์คํ
์์ ๋๋ฉ๋๋ค.
+
+์ด์ ๋ ํ์ดํ๋ผ์ธ์ ์คํํด๋ด
์๋ค. `denoising_end`๊ณผ `denoising_start`๋ฅผ ๊ฐ์ ๊ฐ์ผ๋ก ์ค์ ํ๊ณ `num_inference_steps`๋ ์์๋ก ์ ์งํฉ๋๋ค. ๋ํ base ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ ์ฌ ๊ณต๊ฐ์ ์์ด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์:
+
+```py
+prompt = "A majestic lion jumping from a big stone at night"
+
+image = base(
+ prompt=prompt,
+ num_inference_steps=n_steps,
+ denoising_end=high_noise_frac,
+ output_type="latent",
+).images
+image = refiner(
+ prompt=prompt,
+ num_inference_steps=n_steps,
+ denoising_start=high_noise_frac,
+ image=image,
+).images[0]
+```
+
+์ด๋ฏธ์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+
+| ์๋์ ์ด๋ฏธ์ง | Denoiser๋ค์ ์์๋ธ |
+|---|---|
+|  | 
+
+๋์ผํ 40 ๋จ๊ณ์์ base ๋ชจ๋ธ์ ์คํํ๋ค๋ฉด, ์ด๋ฏธ์ง์ ๋ํ
์ผ(์: ์ฌ์์ ๋๊ณผ ์ฝ)์ด ๋จ์ด์ก์ ๊ฒ์
๋๋ค:
+
+
+
+์์๋ธ ๋ฐฉ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ค์ผ์ค๋ฌ์์ ์ ์๋ํฉ๋๋ค!
+
+
+
+#### 2.) ๋
ธ์ด์ฆ๊ฐ ์์ ํ ์ ๊ฑฐ๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง์์ ์ด๋ฏธ์ง ์ถ๋ ฅ์ ์ ์ ํ๊ธฐ
+
+์ผ๋ฐ์ ์ธ [`StableDiffusionImg2ImgPipeline`] ๋ฐฉ์์์, ๊ธฐ๋ณธ ๋ชจ๋ธ์์ ์์ฑ๋ ์์ ํ ๋
ธ์ด์ฆ๊ฐ ์ ๊ฑฐ๋ ์ด๋ฏธ์ง๋ [refiner checkpoint](huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0)๋ฅผ ์ฌ์ฉํด ๋ ํฅ์์ํฌ ์ ์์ต๋๋ค.
+
+์ด๋ฅผ ์ํด, ๋ณดํต์ "base" text-to-image ํ์ดํ๋ผ์ธ์ ์ํ ํ์ image-to-image ํ์ดํ๋ผ์ธ์ผ๋ก์จ refiner๋ฅผ ์คํ์ํฌ ์ ์์ต๋๋ค. base ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ ์ฌ ๊ณต๊ฐ์ ๋จ๊ฒจ๋ ์ ์์ต๋๋ค.
+
+```py
+from diffusers import DiffusionPipeline
+import torch
+
+pipe = DiffusionPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+refiner = DiffusionPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-refiner-1.0",
+ text_encoder_2=pipe.text_encoder_2,
+ vae=pipe.vae,
+ torch_dtype=torch.float16,
+ use_safetensors=True,
+ variant="fp16",
+)
+refiner.to("cuda")
+
+prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
+
+image = pipe(prompt=prompt, output_type="latent" if use_refiner else "pil").images[0]
+image = refiner(prompt=prompt, image=image[None, :]).images[0]
+```
+
+| ์๋์ ์ด๋ฏธ์ง | ์ ์ ๋ ์ด๋ฏธ์ง |
+|---|---|
+|  |  |
+
+
+
+refiner๋ ๋ํ ์ธํ์ธํ
์ค์ ์ ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋์ ๋ณด์ฌ์ง๋ฏ์ด [`StableDiffusionXLInpaintPipeline`] ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ๋ง๋ค์ด๋ณด์ธ์.
+
+
+
+Denoiser ์์๋ธ ์ค์ ์์ ์ธํ์ธํ
์ refiner๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์ํํ๋ฉด ๋ฉ๋๋ค:
+
+```py
+from diffusers import StableDiffusionXLInpaintPipeline
+from diffusers.utils import load_image
+
+pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+refiner = StableDiffusionXLInpaintPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-refiner-1.0",
+ text_encoder_2=pipe.text_encoder_2,
+ vae=pipe.vae,
+ torch_dtype=torch.float16,
+ use_safetensors=True,
+ variant="fp16",
+)
+refiner.to("cuda")
+
+img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
+mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
+
+init_image = load_image(img_url).convert("RGB")
+mask_image = load_image(mask_url).convert("RGB")
+
+prompt = "A majestic tiger sitting on a bench"
+num_inference_steps = 75
+high_noise_frac = 0.7
+
+image = pipe(
+ prompt=prompt,
+ image=init_image,
+ mask_image=mask_image,
+ num_inference_steps=num_inference_steps,
+ denoising_start=high_noise_frac,
+ output_type="latent",
+).images
+image = refiner(
+ prompt=prompt,
+ image=image,
+ mask_image=mask_image,
+ num_inference_steps=num_inference_steps,
+ denoising_start=high_noise_frac,
+).images[0]
+```
+
+์ผ๋ฐ์ ์ธ SDE ์ค์ ์์ ์ธํ์ธํ
์ refiner๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด, `denoising_end`์ `denoising_start`๋ฅผ ์ ๊ฑฐํ๊ณ refiner์ ์ถ๋ก ๋จ๊ณ์ ์๋ฅผ ์ ๊ฒ ์ ํํ์ธ์.
+
+### ๋จ๋
์ฒดํฌํฌ์ธํธ ํ์ผ / ์๋์ ํ์ผ ํ์์ผ๋ก ๋ถ๋ฌ์ค๊ธฐ
+
+[`~diffusers.loaders.FromSingleFileMixin.from_single_file`]๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์๋์ ํ์ผ ํ์์ `diffusers` ํ์์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค:
+
+```py
+from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
+import torch
+
+pipe = StableDiffusionXLPipeline.from_single_file(
+ "./sd_xl_base_1.0.safetensors", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+refiner = StableDiffusionXLImg2ImgPipeline.from_single_file(
+ "./sd_xl_refiner_1.0.safetensors", torch_dtype=torch.float16, use_safetensors=True, variant="fp16"
+)
+refiner.to("cuda")
+```
+
+### ๋ชจ๋ธ offloading์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ต์ ํํ๊ธฐ
+
+out-of-memory ์๋ฌ๊ฐ ๋๋ค๋ฉด, [`StableDiffusionXLPipeline.enable_model_cpu_offload`]์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
+
+```diff
+- pipe.to("cuda")
++ pipe.enable_model_cpu_offload()
+```
+
+๊ทธ๋ฆฌ๊ณ
+
+```diff
+- refiner.to("cuda")
++ refiner.enable_model_cpu_offload()
+```
+
+### `torch.compile`๋ก ์ถ๋ก ์๋๋ฅผ ์ฌ๋ฆฌ๊ธฐ
+
+`torch.compile`๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ถ๋ก ์๋๋ฅผ ์ฌ๋ฆด ์ ์์ต๋๋ค. ์ด๋ **ca.** 20% ์๋ ํฅ์์ด ๋ฉ๋๋ค.
+
+```diff
++ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
++ refiner.unet = torch.compile(refiner.unet, mode="reduce-overhead", fullgraph=True)
+```
+
+### `torch < 2.0`์ผ ๋ ์คํํ๊ธฐ
+
+**์ฐธ๊ณ ** Stable Diffusion XL์ `torch`๊ฐ 2.0 ๋ฒ์ ๋ฏธ๋ง์์ ์คํ์ํค๊ณ ์ถ์ ๋, xformers ์ดํ
์
์ ์ฌ์ฉํด์ฃผ์ธ์:
+
+```
+pip install xformers
+```
+
+```diff
++pipe.enable_xformers_memory_efficient_attention()
++refiner.enable_xformers_memory_efficient_attention()
+```
+
+## StableDiffusionXLPipeline
+
+[[autodoc]] StableDiffusionXLPipeline
+ - all
+ - __call__
+
+## StableDiffusionXLImg2ImgPipeline
+
+[[autodoc]] StableDiffusionXLImg2ImgPipeline
+ - all
+ - __call__
+
+## StableDiffusionXLInpaintPipeline
+
+[[autodoc]] StableDiffusionXLInpaintPipeline
+ - all
+ - __call__
+
+### ๊ฐ ํ
์คํธ ์ธ์ฝ๋์ ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ๊ธฐ
+
+Stable Diffusion XL๋ ๋ ๊ฐ์ ํ
์คํธ ์ธ์ฝ๋์ ํ์ต๋์์ต๋๋ค. ๊ธฐ๋ณธ ๋์์ ๊ฐ ํ๋กฌํํธ์ ๋์ผํ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ [์ผ๋ถ ์ฌ์ฉ์](https://github.com/huggingface/diffusers/issues/4004#issuecomment-1627764201)๊ฐ ํ์ง์ ํฅ์์ํฌ ์ ์๋ค๊ณ ์ง์ ํ ๊ฒ์ฒ๋ผ ํ
์คํธ ์ธ์ฝ๋๋ง๋ค ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ค๋ฉด, `prompt_2`์ `negative_prompt_2`๋ฅผ `prompt`์ `negative_prompt`์ ์ ๋ฌํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ, ์๋์ ํ๋กฌํํธ๋ค(`prompt`)๊ณผ ๋ถ์ ํ๋กฌํํธ๋ค(`negative_prompt`)๋ฅผ `ํ
์คํธ ์ธ์ฝ๋`์ ์ ๋ฌํ ๊ฒ์
๋๋ค.(๊ณต์ SDXL 0.9/1.0์ [OpenAI CLIP-ViT/L-14](https://huggingface.co/openai/clip-vit-large-patch14)์์ ๋ณผ ์ ์์ต๋๋ค.) ๊ทธ๋ฆฌ๊ณ `prompt_2`์ `negative_prompt_2`๋ `text_encoder_2`์ ์ ๋ฌ๋ฉ๋๋ค.(๊ณต์ SDXL 0.9/1.0์ [OpenCLIP-ViT/bigG-14](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k)์์ ๋ณผ ์ ์์ต๋๋ค.)
+
+```py
+from diffusers import StableDiffusionXLPipeline
+import torch
+
+pipe = StableDiffusionXLPipeline.from_pretrained(
+ "stabilityai/stable-diffusion-xl-base-0.9", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
+)
+pipe.to("cuda")
+
+# OAI CLIP-ViT/L-14์ prompt๊ฐ ์ ๋ฌ๋ฉ๋๋ค
+prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
+# OpenCLIP-ViT/bigG-14์ prompt_2๊ฐ ์ ๋ฌ๋ฉ๋๋ค
+prompt_2 = "monet painting"
+image = pipe(prompt=prompt, prompt_2=prompt_2).images[0]
+```
\ No newline at end of file
diff --git a/docs/source/ko/index.md b/docs/source/ko/index.md
index d01dff5c5e00..a83dd0d0b29e 100644
--- a/docs/source/ko/index.md
+++ b/docs/source/ko/index.md
@@ -16,48 +16,82 @@ specific language governing permissions and limitations under the License.
-# ๐งจ Diffusers
-
-๐ค Diffusers๋ ์ฌ์ ํ์ต๋ ๋น์ ๋ฐ ์ค๋์ค ํ์ฐ ๋ชจ๋ธ์ ์ ๊ณตํ๊ณ , ์ถ๋ก ๋ฐ ํ์ต์ ์ํ ๋ชจ๋์ ๋๊ตฌ ์์ ์ญํ ์ ํฉ๋๋ค.
-
-๋ณด๋ค ์ ํํ๊ฒ, ๐ค Diffusers๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค:
-
-- ๋จ ๋ช ์ค์ ์ฝ๋๋ก ์ถ๋ก ์ ์คํํ ์ ์๋ ์ต์ ํ์ฐ ํ์ดํ๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค. ([**Using Diffusers**](./using-diffusers/conditional_image_generation)๋ฅผ ์ดํด๋ณด์ธ์) ์ง์๋๋ ๋ชจ๋ ํ์ดํ๋ผ์ธ๊ณผ ํด๋น ๋
ผ๋ฌธ์ ๋ํ ๊ฐ์๋ฅผ ๋ณด๋ ค๋ฉด [**Pipelines**](#pipelines)์ ์ดํด๋ณด์ธ์.
-- ์ถ๋ก ์์ ์๋ vs ํ์ง์ ์ ์ถฉ์ ์ํด ์ํธ๊ตํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋
ธ์ด์ฆ ์ค์ผ์ค๋ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [**Schedulers**](./api/schedulers/overview)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
-- UNet๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ ํ์ ๋ชจ๋ธ์ end-to-end ํ์ฐ ์์คํ
์ ๊ตฌ์ฑ ์์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ [**Models**](./api/models)์ ์ฐธ๊ณ ํ์ธ์.
-- ๊ฐ์ฅ ์ธ๊ธฐ์๋ ํ์ฐ ๋ชจ๋ธ ํ
์คํฌ๋ฅผ ํ์ตํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์ ๋ค์ ์ ๊ณตํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [**Training**](./training/overview)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
-
-## ๐งจ Diffusers ํ์ดํ๋ผ์ธ
-
-๋ค์ ํ์๋ ๊ณต์์ ์ผ๋ก ์ง์๋๋ ๋ชจ๋ ํ์ดํ๋ผ์ธ, ๊ด๋ จ ๋
ผ๋ฌธ, ์ง์ ์ฌ์ฉํด ๋ณผ ์ ์๋ Colab ๋
ธํธ๋ถ(์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ)์ด ์์ฝ๋์ด ์์ต๋๋ค.
-
-| Pipeline | Paper | Tasks | Colab
-|---|---|:---:|:---:|
-| [alt_diffusion](./api/pipelines/alt_diffusion) | [**AltDiffusion**](https://arxiv.org/abs/2211.06679) | Image-to-Image Text-Guided Generation |
-| [audio_diffusion](./api/pipelines/audio_diffusion) | [**Audio Diffusion**](https://github.com/teticio/audio-diffusion.git) | Unconditional Audio Generation | [](https://colab.research.google.com/github/teticio/audio-diffusion/blob/master/notebooks/audio_diffusion_pipeline.ipynb)
-| [cycle_diffusion](./api/pipelines/cycle_diffusion) | [**Cycle Diffusion**](https://arxiv.org/abs/2210.05559) | Image-to-Image Text-Guided Generation |
-| [dance_diffusion](./api/pipelines/dance_diffusion) | [**Dance Diffusion**](https://github.com/williamberman/diffusers.git) | Unconditional Audio Generation |
-| [ddpm](./api/pipelines/ddpm) | [**Denoising Diffusion Probabilistic Models**](https://arxiv.org/abs/2006.11239) | Unconditional Image Generation |
-| [ddim](./api/pipelines/ddim) | [**Denoising Diffusion Implicit Models**](https://arxiv.org/abs/2010.02502) | Unconditional Image Generation |
-| [latent_diffusion](./api/pipelines/latent_diffusion) | [**High-Resolution Image Synthesis with Latent Diffusion Models**](https://arxiv.org/abs/2112.10752)| Text-to-Image Generation |
-| [latent_diffusion](./api/pipelines/latent_diffusion) | [**High-Resolution Image Synthesis with Latent Diffusion Models**](https://arxiv.org/abs/2112.10752)| Super Resolution Image-to-Image |
-| [latent_diffusion_uncond](./api/pipelines/latent_diffusion_uncond) | [**High-Resolution Image Synthesis with Latent Diffusion Models**](https://arxiv.org/abs/2112.10752) | Unconditional Image Generation |
-| [paint_by_example](./api/pipelines/paint_by_example) | [**Paint by Example: Exemplar-based Image Editing with Diffusion Models**](https://arxiv.org/abs/2211.13227) | Image-Guided Image Inpainting |
-| [pndm](./api/pipelines/pndm) | [**Pseudo Numerical Methods for Diffusion Models on Manifolds**](https://arxiv.org/abs/2202.09778) | Unconditional Image Generation |
-| [score_sde_ve](./api/pipelines/score_sde_ve) | [**Score-Based Generative Modeling through Stochastic Differential Equations**](https://openreview.net/forum?id=PxTIG12RRHS) | Unconditional Image Generation |
-| [score_sde_vp](./api/pipelines/score_sde_vp) | [**Score-Based Generative Modeling through Stochastic Differential Equations**](https://openreview.net/forum?id=PxTIG12RRHS) | Unconditional Image Generation |
-| [stable_diffusion](./api/pipelines/stable_diffusion/text2img) | [**Stable Diffusion**](https://stability.ai/blog/stable-diffusion-public-release) | Text-to-Image Generation | [](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/training_example.ipynb)
-| [stable_diffusion](./api/pipelines/stable_diffusion/img2img) | [**Stable Diffusion**](https://stability.ai/blog/stable-diffusion-public-release) | Image-to-Image Text-Guided Generation | [](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/image_2_image_using_diffusers.ipynb)
-| [stable_diffusion](./api/pipelines/stable_diffusion/inpaint) | [**Stable Diffusion**](https://stability.ai/blog/stable-diffusion-public-release) | Text-Guided Image Inpainting | [](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/in_painting_with_stable_diffusion_using_diffusers.ipynb)
-| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [**Stable Diffusion 2**](https://stability.ai/blog/stable-diffusion-v2-release) | Text-to-Image Generation |
-| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [**Stable Diffusion 2**](https://stability.ai/blog/stable-diffusion-v2-release) | Text-Guided Image Inpainting |
-| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [**Stable Diffusion 2**](https://stability.ai/blog/stable-diffusion-v2-release) | Text-Guided Super Resolution Image-to-Image |
-| [stable_diffusion_safe](./api/pipelines/stable_diffusion_safe) | [**Safe Stable Diffusion**](https://arxiv.org/abs/2211.05105) | Text-Guided Generation | [](https://colab.research.google.com/github/ml-research/safe-latent-diffusion/blob/main/examples/Safe%20Latent%20Diffusion.ipynb)
-| [stochastic_karras_ve](./api/pipelines/stochastic_karras_ve) | [**Elucidating the Design Space of Diffusion-Based Generative Models**](https://arxiv.org/abs/2206.00364) | Unconditional Image Generation |
-| [unclip](./api/pipelines/unclip) | [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://arxiv.org/abs/2204.06125) | Text-to-Image Generation |
-| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Text-to-Image Generation |
-| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Image Variations Generation |
-| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Dual Image and Text Guided Generation |
-| [vq_diffusion](./api/pipelines/vq_diffusion) | [Vector Quantized Diffusion Model for Text-to-Image Synthesis](https://arxiv.org/abs/2111.14822) | Text-to-Image Generation |
-
-**์ฐธ๊ณ **: ํ์ดํ๋ผ์ธ์ ํด๋น ๋ฌธ์์ ์ค๋ช
๋ ๋๋ก ํ์ฐ ์์คํ
์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํ ์์
๋๋ค.
+
+# Diffusers
+
+๐ค Diffusers๋ ์ด๋ฏธ์ง, ์ค๋์ค, ์ฌ์ง์ด ๋ถ์์ 3D ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ต์ฒจ๋จ ์ฌ์ ํ๋ จ๋ diffusion ๋ชจ๋ธ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๊ฐ๋จํ ์ถ๋ก ์๋ฃจ์
์ ์ฐพ๊ณ ์๋ , ์์ฒด diffusion ๋ชจ๋ธ์ ํ๋ จํ๊ณ ์ถ๋ , ๐ค Diffusers๋ ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํ๋ ๋ชจ๋์ ํด๋ฐ์ค์
๋๋ค. ์ ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ [์ฑ๋ฅ๋ณด๋ค ์ฌ์ฉ์ฑ](conceptual/philosophy#usability-over-performance), [๊ฐํธํจ๋ณด๋ค ๋จ์ํจ](conceptual/philosophy#simple-over-easy), ๊ทธ๋ฆฌ๊ณ [์ถ์ํ๋ณด๋ค ์ฌ์ฉ์ ์ง์ ๊ฐ๋ฅ์ฑ](conceptual/philosophy#tweakable-contributorfriendly-over-abstraction)์ ์ค์ ์ ๋๊ณ ์ค๊ณ๋์์ต๋๋ค.
+
+์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค:
+
+- ๋ช ์ค์ ์ฝ๋๋ง์ผ๋ก ์ถ๋ก ํ ์ ์๋ ์ต์ฒจ๋จ [diffusion ํ์ดํ๋ผ์ธ](api/pipelines/overview).
+- ์์ฑ ์๋์ ํ์ง ๊ฐ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ์ํธ๊ตํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ [๋
ธ์ด์ฆ ์ค์ผ์ค๋ฌ](api/schedulers/overview).
+- ๋น๋ฉ ๋ธ๋ก์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ์ค์ผ์ค๋ฌ์ ๊ฒฐํฉํ์ฌ ์์ฒด์ ์ธ end-to-end diffusion ์์คํ
์ ๋ง๋ค ์ ์๋ ์ฌ์ ํ์ต๋ [๋ชจ๋ธ](api/models).
+
+
+
+## Supported pipelines
+
+| Pipeline | Paper/Repository | Tasks |
+|---|---|:---:|
+| [alt_diffusion](./api/pipelines/alt_diffusion) | [AltCLIP: Altering the Language Encoder in CLIP for Extended Language Capabilities](https://arxiv.org/abs/2211.06679) | Image-to-Image Text-Guided Generation |
+| [audio_diffusion](./api/pipelines/audio_diffusion) | [Audio Diffusion](https://github.com/teticio/audio-diffusion.git) | Unconditional Audio Generation |
+| [controlnet](./api/pipelines/stable_diffusion/controlnet) | [Adding Conditional Control to Text-to-Image Diffusion Models](https://arxiv.org/abs/2302.05543) | Image-to-Image Text-Guided Generation |
+| [cycle_diffusion](./api/pipelines/cycle_diffusion) | [Unifying Diffusion Models' Latent Space, with Applications to CycleDiffusion and Guidance](https://arxiv.org/abs/2210.05559) | Image-to-Image Text-Guided Generation |
+| [dance_diffusion](./api/pipelines/dance_diffusion) | [Dance Diffusion](https://github.com/williamberman/diffusers.git) | Unconditional Audio Generation |
+| [ddpm](./api/pipelines/ddpm) | [Denoising Diffusion Probabilistic Models](https://arxiv.org/abs/2006.11239) | Unconditional Image Generation |
+| [ddim](./api/pipelines/ddim) | [Denoising Diffusion Implicit Models](https://arxiv.org/abs/2010.02502) | Unconditional Image Generation |
+| [if](./if) | [**IF**](./api/pipelines/if) | Image Generation |
+| [if_img2img](./if) | [**IF**](./api/pipelines/if) | Image-to-Image Generation |
+| [if_inpainting](./if) | [**IF**](./api/pipelines/if) | Image-to-Image Generation |
+| [latent_diffusion](./api/pipelines/latent_diffusion) | [High-Resolution Image Synthesis with Latent Diffusion Models](https://arxiv.org/abs/2112.10752)| Text-to-Image Generation |
+| [latent_diffusion](./api/pipelines/latent_diffusion) | [High-Resolution Image Synthesis with Latent Diffusion Models](https://arxiv.org/abs/2112.10752)| Super Resolution Image-to-Image |
+| [latent_diffusion_uncond](./api/pipelines/latent_diffusion_uncond) | [High-Resolution Image Synthesis with Latent Diffusion Models](https://arxiv.org/abs/2112.10752) | Unconditional Image Generation |
+| [paint_by_example](./api/pipelines/paint_by_example) | [Paint by Example: Exemplar-based Image Editing with Diffusion Models](https://arxiv.org/abs/2211.13227) | Image-Guided Image Inpainting |
+| [pndm](./api/pipelines/pndm) | [Pseudo Numerical Methods for Diffusion Models on Manifolds](https://arxiv.org/abs/2202.09778) | Unconditional Image Generation |
+| [score_sde_ve](./api/pipelines/score_sde_ve) | [Score-Based Generative Modeling through Stochastic Differential Equations](https://openreview.net/forum?id=PxTIG12RRHS) | Unconditional Image Generation |
+| [score_sde_vp](./api/pipelines/score_sde_vp) | [Score-Based Generative Modeling through Stochastic Differential Equations](https://openreview.net/forum?id=PxTIG12RRHS) | Unconditional Image Generation |
+| [semantic_stable_diffusion](./api/pipelines/semantic_stable_diffusion) | [Semantic Guidance](https://arxiv.org/abs/2301.12247) | Text-Guided Generation |
+| [stable_diffusion_text2img](./api/pipelines/stable_diffusion/text2img) | [Stable Diffusion](https://stability.ai/blog/stable-diffusion-public-release) | Text-to-Image Generation |
+| [stable_diffusion_img2img](./api/pipelines/stable_diffusion/img2img) | [Stable Diffusion](https://stability.ai/blog/stable-diffusion-public-release) | Image-to-Image Text-Guided Generation |
+| [stable_diffusion_inpaint](./api/pipelines/stable_diffusion/inpaint) | [Stable Diffusion](https://stability.ai/blog/stable-diffusion-public-release) | Text-Guided Image Inpainting |
+| [stable_diffusion_panorama](./api/pipelines/stable_diffusion/panorama) | [MultiDiffusion](https://multidiffusion.github.io/) | Text-to-Panorama Generation |
+| [stable_diffusion_pix2pix](./api/pipelines/stable_diffusion/pix2pix) | [InstructPix2Pix: Learning to Follow Image Editing Instructions](https://arxiv.org/abs/2211.09800) | Text-Guided Image Editing|
+| [stable_diffusion_pix2pix_zero](./api/pipelines/stable_diffusion/pix2pix_zero) | [Zero-shot Image-to-Image Translation](https://pix2pixzero.github.io/) | Text-Guided Image Editing |
+| [stable_diffusion_attend_and_excite](./api/pipelines/stable_diffusion/attend_and_excite) | [Attend-and-Excite: Attention-Based Semantic Guidance for Text-to-Image Diffusion Models](https://arxiv.org/abs/2301.13826) | Text-to-Image Generation |
+| [stable_diffusion_self_attention_guidance](./api/pipelines/stable_diffusion/self_attention_guidance) | [Improving Sample Quality of Diffusion Models Using Self-Attention Guidance](https://arxiv.org/abs/2210.00939) | Text-to-Image Generation Unconditional Image Generation |
+| [stable_diffusion_image_variation](./stable_diffusion/image_variation) | [Stable Diffusion Image Variations](https://github.com/LambdaLabsML/lambda-diffusers#stable-diffusion-image-variations) | Image-to-Image Generation |
+| [stable_diffusion_latent_upscale](./stable_diffusion/latent_upscale) | [Stable Diffusion Latent Upscaler](https://twitter.com/StabilityAI/status/1590531958815064065) | Text-Guided Super Resolution Image-to-Image |
+| [stable_diffusion_model_editing](./api/pipelines/stable_diffusion/model_editing) | [Editing Implicit Assumptions in Text-to-Image Diffusion Models](https://time-diffusion.github.io/) | Text-to-Image Model Editing |
+| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [Stable Diffusion 2](https://stability.ai/blog/stable-diffusion-v2-release) | Text-to-Image Generation |
+| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [Stable Diffusion 2](https://stability.ai/blog/stable-diffusion-v2-release) | Text-Guided Image Inpainting |
+| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [Depth-Conditional Stable Diffusion](https://github.com/Stability-AI/stablediffusion#depth-conditional-stable-diffusion) | Depth-to-Image Generation |
+| [stable_diffusion_2](./api/pipelines/stable_diffusion_2) | [Stable Diffusion 2](https://stability.ai/blog/stable-diffusion-v2-release) | Text-Guided Super Resolution Image-to-Image |
+| [stable_diffusion_safe](./api/pipelines/stable_diffusion_safe) | [Safe Stable Diffusion](https://arxiv.org/abs/2211.05105) | Text-Guided Generation |
+| [stable_unclip](./stable_unclip) | Stable unCLIP | Text-to-Image Generation |
+| [stable_unclip](./stable_unclip) | Stable unCLIP | Image-to-Image Text-Guided Generation |
+| [stochastic_karras_ve](./api/pipelines/stochastic_karras_ve) | [Elucidating the Design Space of Diffusion-Based Generative Models](https://arxiv.org/abs/2206.00364) | Unconditional Image Generation |
+| [text_to_video_sd](./api/pipelines/text_to_video) | [Modelscope's Text-to-video-synthesis Model in Open Domain](https://modelscope.cn/models/damo/text-to-video-synthesis/summary) | Text-to-Video Generation |
+| [unclip](./api/pipelines/unclip) | [Hierarchical Text-Conditional Image Generation with CLIP Latents](https://arxiv.org/abs/2204.06125)(implementation by [kakaobrain](https://github.com/kakaobrain/karlo)) | Text-to-Image Generation |
+| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Text-to-Image Generation |
+| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Image Variations Generation |
+| [versatile_diffusion](./api/pipelines/versatile_diffusion) | [Versatile Diffusion: Text, Images and Variations All in One Diffusion Model](https://arxiv.org/abs/2211.08332) | Dual Image and Text Guided Generation |
+| [vq_diffusion](./api/pipelines/vq_diffusion) | [Vector Quantized Diffusion Model for Text-to-Image Synthesis](https://arxiv.org/abs/2111.14822) | Text-to-Image Generation |
diff --git a/docs/source/ko/optimization/coreml.md b/docs/source/ko/optimization/coreml.md
new file mode 100644
index 000000000000..5ce81a20889b
--- /dev/null
+++ b/docs/source/ko/optimization/coreml.md
@@ -0,0 +1,168 @@
+
+
+# Core ML๋ก Stable Diffusion์ ์คํํ๋ ๋ฐฉ๋ฒ
+
+[Core ML](https://developer.apple.com/documentation/coreml)์ Apple ํ๋ ์์ํฌ์์ ์ง์ํ๋ ๋ชจ๋ธ ํ์ ๋ฐ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. macOS ๋๋ iOS/iPadOS ์ฑ ๋ด์์ Stable Diffusion ๋ชจ๋ธ์ ์คํํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ, ์ด ๊ฐ์ด๋์์๋ ๊ธฐ์กด PyTorch ์ฒดํฌํฌ์ธํธ๋ฅผ Core ML ํ์์ผ๋ก ๋ณํํ๊ณ ์ด๋ฅผ Python ๋๋ Swift๋ก ์ถ๋ก ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
+
+Core ML ๋ชจ๋ธ์ Apple ๊ธฐ๊ธฐ์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์ปดํจํ
์์ง๋ค, ์ฆ CPU, GPU, Apple Neural Engine(๋๋ Apple Silicon Mac ๋ฐ ์ต์ iPhone/iPad์์ ์ฌ์ฉํ ์ ์๋ ํ
์ ์ต์ ํ ๊ฐ์๊ธฐ์ธ ANE)์ ํ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ธ๊ณผ ์คํ ์ค์ธ ๊ธฐ๊ธฐ์ ๋ฐ๋ผ Core ML์ ์ปดํจํ
์์ง๋ ํผํฉํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ์๋ฅผ ๋ค์ด ๋ชจ๋ธ์ ์ผ๋ถ๊ฐ CPU์์ ์คํ๋๋ ๋ฐ๋ฉด ๋ค๋ฅธ ๋ถ๋ถ์ GPU์์ ์คํ๋ ์ ์์ต๋๋ค.
+
+
+
+PyTorch์ ๋ด์ฅ๋ `mps` ๊ฐ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ Apple Silicon Macs์์ `diffusers` Python ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์คํํ ์๋ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ [mps ๊ฐ์ด๋]์ ์์ธํ ์ค๋ช
๋์ด ์์ง๋ง ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ํธํ๋์ง ์์ต๋๋ค.
+
+
+
+## Stable Diffusion Core ML ์ฒดํฌํฌ์ธํธ
+
+Stable Diffusion ๊ฐ์ค์น(๋๋ ์ฒดํฌํฌ์ธํธ)๋ PyTorch ํ์์ผ๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ค์ดํฐ๋ธ ์ฑ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Core ML ํ์์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
+
+๋คํํ๋ Apple ์์ง๋์ด๋ค์ด `diffusers`๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ [๋ณํ ํด](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml)์ ๊ฐ๋ฐํ์ฌ PyTorch ์ฒดํฌํฌ์ธํธ๋ฅผ Core ML๋ก ๋ณํํ ์ ์์ต๋๋ค.
+
+๋ชจ๋ธ์ ๋ณํํ๊ธฐ ์ ์ ์ ์ ์๊ฐ์ ๋ด์ด Hugging Face Hub๋ฅผ ์ดํด๋ณด์ธ์. ๊ด์ฌ ์๋ ๋ชจ๋ธ์ด ์ด๋ฏธ Core ML ํ์์ผ๋ก ์ ๊ณต๋๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค:
+
+- [Apple](https://huggingface.co/apple) organization์๋ Stable Diffusion ๋ฒ์ 1.4, 1.5, 2.0 base ๋ฐ 2.1 base๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
+- [coreml](https://huggingface.co/coreml) organization์๋ ์ปค์คํ
DreamBooth๊ฐ ์ ์ฉ๋๊ฑฐ๋, ํ์ธํ๋๋ ๋ชจ๋ธ์ด ํฌํจ๋์ด ์์ต๋๋ค.
+- ์ด [ํํฐ](https://huggingface.co/models?pipeline_tag=text-to-image&library=coreml&p=2&sort=likes)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ Core ML ์ฒดํฌํฌ์ธํธ๋ค์ ๋ฐํํฉ๋๋ค.
+
+์ํ๋ ๋ชจ๋ธ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ Apple์ [๋ชจ๋ธ์ Core ML๋ก ๋ณํํ๊ธฐ](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml) ์ง์นจ์ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข์ต๋๋ค.
+
+## ์ฌ์ฉํ Core ML ๋ณํ(Variant) ์ ํํ๊ธฐ
+
+Stable Diffusion ๋ชจ๋ธ์ ๋ค์ํ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ Core ML ๋ณํ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค:
+
+- ์ฌ์ฉ๋๋ ์ดํ
์
๋ธ๋ก ์ ํ. ์ดํ
์
์ฐ์ฐ์ ์ด๋ฏธ์ง ํํ์ ์ฌ๋ฌ ์์ญ ๊ฐ์ ๊ด๊ณ์ '์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ' ์ด๋ฏธ์ง์ ํ
์คํธ ํํ์ด ์ด๋ป๊ฒ ์ฐ๊ด๋์ด ์๋์ง ์ดํดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ดํ
์
์ฐ์ฐ์ ์ปดํจํ
๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ง์ฝ์ ์ด๋ฏ๋ก ๋ค์ํ ์ฅ์น์ ํ๋์จ์ด ํน์ฑ์ ๊ณ ๋ คํ ๋ค์ํ ๊ตฌํ์ด ์กด์ฌํฉ๋๋ค. Core ML Stable Diffusion ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์ฃผ์ ๋ณํ์ด ์์ต๋๋ค:
+ * `split_einsum` ([Apple์์ ๋์
](https://machinelearning.apple.com/research/neural-engine-transformers)์ ์ต์ iPhone, iPad ๋ฐ M ์๋ฆฌ์ฆ ์ปดํจํฐ์์ ์ฌ์ฉํ ์ ์๋ ANE ์ฅ์น์ ์ต์ ํ๋์ด ์์ต๋๋ค.
+ * "์๋ณธ" ์ดํ
์
(`diffusers`์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ๊ตฌํ)๋ CPU/GPU์๋ง ํธํ๋๋ฉฐ ANE์๋ ํธํ๋์ง ์์ต๋๋ค. "์๋ณธ" ์ดํ
์
์ ์ฌ์ฉํ์ฌ CPU + GPU์์ ๋ชจ๋ธ์ ์คํํ๋ ๊ฒ์ด ANE๋ณด๋ค *๋* ๋น ๋ฅผ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ [์ด ์ฑ๋ฅ ๋ฒค์น๋งํฌ](https://huggingface.co/blog/fast-mac-diffusers#performance-benchmarks)์ ์ปค๋ฎค๋ํฐ์์ ์ ๊ณตํ๋ ์ผ๋ถ [์ถ๊ฐ ์ธก์ ](https://github.com/huggingface/swift-coreml-diffusers/issues/31)์ ์ฐธ์กฐํ์ญ์์ค.
+
+- ์ง์๋๋ ์ถ๋ก ํ๋ ์์ํฌ
+ * `packages`๋ Python ์ถ๋ก ์ ์ ํฉํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ฑ์ ํตํฉํ๊ธฐ ์ ์ ๋ณํ๋ Core ML ๋ชจ๋ธ์ ํ
์คํธํ๊ฑฐ๋, Core ML ์ฑ๋ฅ์ ์๊ณ ์ถ์ง๋ง ๋ค์ดํฐ๋ธ ์ฑ์ ์ง์ํ ํ์๋ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์น UI๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ Python Core ML ๋ฐฑ์๋๋ฅผ ์๋ฒฝํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+ * Swift ์ฝ๋์๋ `์ปดํ์ผ๋` ๋ชจ๋ธ์ด ํ์ํฉ๋๋ค. Hub์ `์ปดํ์ผ๋` ๋ชจ๋ธ์ iOS ๋ฐ iPadOS ๊ธฐ๊ธฐ์์ ํธํ์ฑ์ ์ํด ํฐ UNet ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ์ฌ๋ฌ ํ์ผ๋ก ๋ถํ ํฉ๋๋ค. ์ด๋ [`--chunk-unet` ๋ณํ ์ต์
](https://github.com/apple/ml-stable-diffusion#-converting-models-to-core-ml)์ ํด๋นํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ฑ์ ์ง์ํ๋ ค๋ฉด `์ปดํ์ผ๋` ๋ณํ์ ์ ํํด์ผ ํฉ๋๋ค.
+
+๊ณต์ Core ML Stable Diffusion [๋ชจ๋ธ](https://huggingface.co/apple/coreml-stable-diffusion-v1-4/tree/main)์๋ ์ด๋ฌํ ๋ณํ์ด ํฌํจ๋์ด ์์ง๋ง ์ปค๋ฎค๋ํฐ ๋ฒ์ ์ ๋ค๋ฅผ ์ ์์ต๋๋ค:
+
+```
+coreml-stable-diffusion-v1-4
+โโโ README.md
+โโโ original
+โ โโโ compiled
+โ โโโ packages
+โโโ split_einsum
+ โโโ compiled
+ โโโ packages
+```
+
+์๋์ ๊ฐ์ด ํ์ํ ๋ณํ์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+## Python์์ Core ML ์ถ๋ก
+
+Python์์ Core ML ์ถ๋ก ์ ์คํํ๋ ค๋ฉด ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์ธ์:
+
+```bash
+pip install huggingface_hub
+pip install git+https://github.com/apple/ml-stable-diffusion
+```
+
+### ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ ๋ค์ด๋ก๋ํ๊ธฐ
+
+`์ปดํ์ผ๋` ๋ฒ์ ์ Swift์๋ง ํธํ๋๋ฏ๋ก Python์์ ์ถ๋ก ์ ์คํํ๋ ค๋ฉด `packages` ํด๋์ ์ ์ฅ๋ ๋ฒ์ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ธ์. `์๋ณธ` ๋๋ `split_einsum` ์ดํ
์
์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํ ์ง ์ ํํ ์ ์์ต๋๋ค.
+
+๋ค์์ Hub์์ 'models'๋ผ๋ ๋๋ ํ ๋ฆฌ๋ก 'original' ์ดํ
์
๋ณํ์ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ๋ฒ์
๋๋ค:
+
+```Python
+from huggingface_hub import snapshot_download
+from pathlib import Path
+
+repo_id = "apple/coreml-stable-diffusion-v1-4"
+variant = "original/packages"
+
+model_path = Path("./models") / (repo_id.split("/")[-1] + "_" + variant.replace("/", "_"))
+snapshot_download(repo_id, allow_patterns=f"{variant}/*", local_dir=model_path, local_dir_use_symlinks=False)
+print(f"Model downloaded at {model_path}")
+```
+
+
+### ์ถ๋ก [[python-inference]]
+
+๋ชจ๋ธ์ snapshot์ ๋ค์ด๋ก๋ํ ํ์๋ Apple์ Python ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธํ ์ ์์ต๋๋ค.
+
+```shell
+python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" -i models/coreml-stable-diffusion-v1-4_original_packages -o --compute-unit CPU_AND_GPU --seed 93
+```
+
+``๋ ์ ๋จ๊ณ์์ ๋ค์ด๋ก๋ํ ์ฒดํฌํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ฉฐ, `--compute-unit`์ ์ถ๋ก ์ ํ์ฉํ ํ๋์จ์ด๋ฅผ ๋ํ๋
๋๋ค. ์ด๋ ๋ค์ ์ต์
์ค ํ๋์ด์ด์ผ ํฉ๋๋ค: `ALL`, `CPU_AND_GPU`, `CPU_ONLY`, `CPU_AND_NE`. ์ ํ์ ์ถ๋ ฅ ๊ฒฝ๋ก์ ์ฌํ์ฑ์ ์ํ ์๋๋ฅผ ์ ๊ณตํ ์๋ ์์ต๋๋ค.
+
+์ถ๋ก ์คํฌ๋ฆฝํธ์์๋ Stable Diffusion ๋ชจ๋ธ์ ์๋ ๋ฒ์ ์ธ `CompVis/stable-diffusion-v1-4`๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ถ๋ก ๋ช
๋ น์ค์์ `--model-version` ์ต์
์ ์ฌ์ฉํ์ฌ ํด๋น ํ๋ธ ID๋ฅผ *์ง์ *ํด์ผ ํฉ๋๋ค. ์ด๋ ์ด๋ฏธ ์ง์๋๋ ๋ชจ๋ธ๊ณผ ์ฌ์ฉ์๊ฐ ์ง์ ํ์ตํ๊ฑฐ๋ ํ์ธํ๋ํ ์ฌ์ฉ์ ์ง์ ๋ชจ๋ธ์ ์ ์ฉ๋ฉ๋๋ค.
+
+์๋ฅผ ๋ค์ด, [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5)๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์
๋๋ค:
+
+```shell
+python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" --compute-unit ALL -o output --seed 93 -i models/coreml-stable-diffusion-v1-5_original_packages --model-version runwayml/stable-diffusion-v1-5
+```
+
+
+## Swift์์ Core ML ์ถ๋ก ํ๊ธฐ
+
+Swift์์ ์ถ๋ก ์ ์คํํ๋ ๊ฒ์ ๋ชจ๋ธ์ด ์ด๋ฏธ `mlmodelc` ํ์์ผ๋ก ์ปดํ์ผ๋์ด ์๊ธฐ ๋๋ฌธ์ Python๋ณด๋ค ์ฝ๊ฐ ๋น ๋ฆ
๋๋ค. ์ด๋ ์ฑ์ด ์์๋ ๋ ๋ชจ๋ธ์ด ๋ถ๋ฌ์์ง๋ ๊ฒ์ด ๋์ ๋์ง๋ง, ์ดํ ์ฌ๋ฌ ๋ฒ ์คํํ๋ฉด ๋์ ๋์ง ์์ ๊ฒ์
๋๋ค.
+
+### ๋ค์ด๋ก๋
+
+Mac์์ Swift์์ ์ถ๋ก ์ ์คํํ๋ ค๋ฉด `์ปดํ์ผ๋` ์ฒดํฌํฌ์ธํธ ๋ฒ์ ์ค ํ๋๊ฐ ํ์ํฉ๋๋ค. ์ด์ ์์ ์ ์ ์ฌํ์ง๋ง `์ปดํ์ผ๋` ๋ณํ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ Python ์ฝ๋๋ฅผ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค:
+
+```Python
+from huggingface_hub import snapshot_download
+from pathlib import Path
+
+repo_id = "apple/coreml-stable-diffusion-v1-4"
+variant = "original/compiled"
+
+model_path = Path("./models") / (repo_id.split("/")[-1] + "_" + variant.replace("/", "_"))
+snapshot_download(repo_id, allow_patterns=f"{variant}/*", local_dir=model_path, local_dir_use_symlinks=False)
+print(f"Model downloaded at {model_path}")
+```
+
+### ์ถ๋ก [[swift-inference]]
+
+์ถ๋ก ์ ์คํํ๊ธฐ ์ํด์, Apple์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ์ธ์:
+
+```bash
+git clone https://github.com/apple/ml-stable-diffusion
+cd ml-stable-diffusion
+```
+
+๊ทธ ๋ค์ Apple์ ๋ช
๋ น์ด ๋๊ตฌ์ธ [Swift ํจํค์ง ๊ด๋ฆฌ์](https://www.swift.org/package-manager/#)๋ฅผ ์ฌ์ฉํฉ๋๋ค:
+
+```bash
+swift run StableDiffusionSample --resource-path models/coreml-stable-diffusion-v1-4_original_compiled --compute-units all "a photo of an astronaut riding a horse on mars"
+```
+
+`--resource-path`์ ์ด์ ๋จ๊ณ์์ ๋ค์ด๋ก๋ํ ์ฒดํฌํฌ์ธํธ ์ค ํ๋๋ฅผ ์ง์ ํด์ผ ํ๋ฏ๋ก ํ์ฅ์๊ฐ `.mlmodelc`์ธ ์ปดํ์ผ๋ Core ML ๋ฒ๋ค์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค. `--compute-units`๋ ๋ค์ ๊ฐ ์ค ํ๋์ด์ด์ผ ํฉ๋๋ค: `all`, `cpuOnly`, `cpuAndGPU`, `cpuAndNeuralEngine`.
+
+์์ธํ ๋ด์ฉ์ [Apple์ ๋ฆฌํฌ์งํ ๋ฆฌ ์์ ์ง์นจ](https://github.com/apple/ml-stable-diffusion)์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
+
+
+## ์ง์๋๋ Diffusers ๊ธฐ๋ฅ
+
+Core ML ๋ชจ๋ธ๊ณผ ์ถ๋ก ์ฝ๋๋ ๐งจ Diffusers์ ๋ง์ ๊ธฐ๋ฅ, ์ต์
๋ฐ ์ ์ฐ์ฑ์ ์ง์ํ์ง ์์ต๋๋ค. ๋ค์์ ์ ์ํด์ผ ํ ๋ช ๊ฐ์ง ์ ํ ์ฌํญ์
๋๋ค:
+
+- Core ML ๋ชจ๋ธ์ ์ถ๋ก ์๋ง ์ ํฉํฉ๋๋ค. ํ์ต์ด๋ ํ์ธํ๋์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+- Swift์ ํฌํ
๋ ์ค์ผ์ค๋ฌ๋ Stable Diffusion์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ `diffusers` ๊ตฌํ์์ Swift๋ก ํฌํ
ํ `DPMSolverMultistepScheduler` ๋ ๊ฐ๋ฟ์
๋๋ค. ์ด๋ค ์ค ์ฝ ์ ๋ฐ์ ์คํ
์ผ๋ก ๋์ผํ ํ์ง์ ์์ฑํ๋ `DPMSolverMultistepScheduler`๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+- ์ถ๋ก ์ฝ๋์์ ๋ค๊ฑฐํฐ๋ธ ํ๋กฌํํธ, classifier-free guidance scale ๋ฐ image-to-image ์์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. depth guidance, ControlNet, latent upscalers์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์์ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+Apple์ [๋ณํ ๋ฐ ์ถ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ](https://github.com/apple/ml-stable-diffusion)์ ์์ฒด [swift-coreml-diffusers](https://github.com/huggingface/swift-coreml-diffusers) ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ๊ตฌ์ถํ ์ ์๋ ๊ธฐ์ ์ ์ธ ๋ฐ๋ชจ์
๋๋ค.
+
+๋๋ฝ๋ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ธ์ ๋ ์ง ๊ธฐ๋ฅ์ ์์ฒญํ๊ฑฐ๋, ๋ ์ข์ ๋ฐฉ๋ฒ์ ๊ธฐ์ฌ PR์ ์ด์ด์ฃผ์ธ์. :)
+
+
+## ๋ค์ดํฐ๋ธ Diffusers Swift ์ฑ
+
+์์ฒด Apple ํ๋์จ์ด์์ Stable Diffusion์ ์คํํ๋ ์ฌ์ด ๋ฐฉ๋ฒ ์ค ํ๋๋ `diffusers`์ Apple์ ๋ณํ ๋ฐ ์ถ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ [์์ฒด ์คํ ์์ค Swift ๋ฆฌํฌ์งํ ๋ฆฌ](https://github.com/huggingface/swift-coreml-diffusers)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์ฝ๋๋ฅผ ๊ณต๋ถํ๊ณ [Xcode](https://developer.apple.com/xcode/)๋ก ์ปดํ์ผํ์ฌ ํ์์ ๋ง๊ฒ ์กฐ์ ํ ์ ์์ต๋๋ค. ํธ์๋ฅผ ์ํด ์ฑ์คํ ์ด์ [๋
๋ฆฝํ Mac ์ฑ](https://apps.apple.com/app/diffusers/id1666309574)๋ ์์ผ๋ฏ๋ก ์ฝ๋๋ IDE๋ฅผ ๋ค๋ฃจ์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ก์ Core ML์ด Stable Diffusion ์ฑ์ ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํ ์๋ฃจ์
์ด๋ผ๊ณ ํ๋จํ๋ค๋ฉด, ์ด ๊ฐ์ด๋์ ๋๋จธ์ง ๋ถ๋ถ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ์ด ๋ฌด์์ ๋น๋ํ ์ง ๊ธฐ๋๋ฉ๋๋ค. :)
\ No newline at end of file
diff --git a/docs/source/ko/optimization/tome.md b/docs/source/ko/optimization/tome.md
new file mode 100644
index 000000000000..43c59968d55e
--- /dev/null
+++ b/docs/source/ko/optimization/tome.md
@@ -0,0 +1,121 @@
+
+
+# Token Merging (ํ ํฐ ๋ณํฉ)
+
+Token Merging (introduced in [Token Merging: Your ViT But Faster](https://arxiv.org/abs/2210.09461))์ ํธ๋์คํฌ๋จธ ๊ธฐ๋ฐ ๋คํธ์ํฌ์ forward pass์์ ์ค๋ณต ํ ํฐ์ด๋ ํจ์น๋ฅผ ์ ์ง์ ์ผ๋ก ๋ณํฉํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ธฐ๋ฐ ๋คํธ์ํฌ์ ์ถ๋ก ์ง์ฐ ์๊ฐ์ ๋จ์ถํ ์ ์์ต๋๋ค.
+
+Token Merging(ToMe)์ด ์ถ์๋ ํ, ์ ์๋ค์ [Fast Stable Diffusion์ ์ํ ํ ํฐ ๋ณํฉ](https://arxiv.org/abs/2303.17604)์ ๋ฐํํ์ฌ Stable Diffusion๊ณผ ๋ ์ ํธํ๋๋ ToMe ๋ฒ์ ์ ์๊ฐํ์ต๋๋ค. ToMe๋ฅผ ์ฌ์ฉํ๋ฉด [`DiffusionPipeline`]์ ์ถ๋ก ์ง์ฐ ์๊ฐ์ ๋ถ๋๋ฝ๊ฒ ๋จ์ถํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์์์๋ ToMe๋ฅผ [`StableDiffusionPipeline`]์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ, ์์๋๋ ์๋ ํฅ์, [`StableDiffusionPipeline`]์์ ToMe๋ฅผ ์ฌ์ฉํ ๋์ ์ง์ ์ธก๋ฉด์ ๋ํด ์ค๋ช
ํฉ๋๋ค.
+
+## ToMe ์ฌ์ฉํ๊ธฐ
+
+ToMe์ ์ ์๋ค์ [`tomesd`](https://github.com/dbolya/tomesd)๋ผ๋ ํธ๋ฆฌํ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต๊ฐํ๋๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉด [`DiffusionPipeline`]์ ToMe๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฉํ ์ ์์ต๋๋ค:
+
+```diff
+from diffusers import StableDiffusionPipeline
+import tomesd
+
+pipeline = StableDiffusionPipeline.from_pretrained(
+ "runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
+).to("cuda")
++ tomesd.apply_patch(pipeline, ratio=0.5)
+
+image = pipeline("a photo of an astronaut riding a horse on mars").images[0]
+```
+
+์ด๊ฒ์ด ๋ค์
๋๋ค!
+
+`tomesd.apply_patch()`๋ ํ์ดํ๋ผ์ธ ์ถ๋ก ์๋์ ์์ฑ๋ ํ ํฐ์ ํ์ง ์ฌ์ด์ ๊ท ํ์ ๋ง์ถ ์ ์๋๋ก [์ฌ๋ฌ ๊ฐ์ ์ธ์](https://github.com/dbolya/tomesd#usage)๋ฅผ ๋
ธ์ถํฉ๋๋ค. ์ด๋ฌํ ์ธ์ ์ค ๊ฐ์ฅ ์ค์ํ ๊ฒ์ `ratio(๋น์จ)`์
๋๋ค. `ratio`์ forward pass ์ค์ ๋ณํฉ๋ ํ ํฐ์ ์๋ฅผ ์ ์ดํฉ๋๋ค. `tomesd`์ ๋ํ ์์ธํ ๋ด์ฉ์ ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ(https://github.com/dbolya/tomesd) ๋ฐ [๋
ผ๋ฌธ](https://arxiv.org/abs/2303.17604)์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
+
+## `StableDiffusionPipeline`์ผ๋ก `tomesd` ๋ฒค์น๋งํนํ๊ธฐ
+
+We benchmarked the impact of using `tomesd` on [`StableDiffusionPipeline`] along with [xformers](https://huggingface.co/docs/diffusers/optimization/xformers) across different image resolutions. We used A100 and V100 as our test GPU devices with the following development environment (with Python 3.8.5):
+๋ค์ํ ์ด๋ฏธ์ง ํด์๋์์ [xformers](https://huggingface.co/docs/diffusers/optimization/xformers)๋ฅผ ์ ์ฉํ ์ํ์์, [`StableDiffusionPipeline`]์ `tomesd`๋ฅผ ์ฌ์ฉํ์ ๋์ ์ํฅ์ ๋ฒค์น๋งํนํ์ต๋๋ค. ํ
์คํธ GPU ์ฅ์น๋ก A100๊ณผ V100์ ์ฌ์ฉํ์ผ๋ฉฐ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(Python 3.8.5 ์ฌ์ฉ):
+
+```bash
+- `diffusers` version: 0.15.1
+- Python version: 3.8.16
+- PyTorch version (GPU?): 1.13.1+cu116 (True)
+- Huggingface_hub version: 0.13.2
+- Transformers version: 4.27.2
+- Accelerate version: 0.18.0
+- xFormers version: 0.0.16
+- tomesd version: 0.1.2
+```
+
+๋ฒค์น๋งํน์๋ ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ต๋๋ค: [https://gist.github.com/sayakpaul/27aec6bca7eb7b0e0aa4112205850335](https://gist.github.com/sayakpaul/27aec6bca7eb7b0e0aa4112205850335). ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
+
+### A100
+
+| ํด์๋ | ๋ฐฐ์น ํฌ๊ธฐ | Vanilla | ToMe | ToMe + xFormers | ToMe ์๋ ํฅ์ (%) | ToMe + xFormers ์๋ ํฅ์ (%) |
+| --- | --- | --- | --- | --- | --- | --- |
+| 512 | 10 | 6.88 | 5.26 | 4.69 | 23.54651163 | 31.83139535 |
+| | | | | | | |
+| 768 | 10 | OOM | 14.71 | 11 | | |
+| | 8 | OOM | 11.56 | 8.84 | | |
+| | 4 | OOM | 5.98 | 4.66 | | |
+| | 2 | 4.99 | 3.24 | 3.1 | 35.07014028 | 37.8757515 |
+| | 1 | 3.29 | 2.24 | 2.03 | 31.91489362 | 38.29787234 |
+| | | | | | | |
+| 1024 | 10 | OOM | OOM | OOM | | |
+| | 8 | OOM | OOM | OOM | | |
+| | 4 | OOM | 12.51 | 9.09 | | |
+| | 2 | OOM | 6.52 | 4.96 | | |
+| | 1 | 6.4 | 3.61 | 2.81 | 43.59375 | 56.09375 |
+
+***๊ฒฐ๊ณผ๋ ์ด ๋จ์์
๋๋ค. ์๋ ํฅ์์ `Vanilla`๊ณผ ๋น๊ตํด ๊ณ์ฐ๋ฉ๋๋ค.***
+
+### V100
+
+| ํด์๋ | ๋ฐฐ์น ํฌ๊ธฐ | Vanilla | ToMe | ToMe + xFormers | ToMe ์๋ ํฅ์ (%) | ToMe + xFormers ์๋ ํฅ์ (%) |
+| --- | --- | --- | --- | --- | --- | --- |
+| 512 | 10 | OOM | 10.03 | 9.29 | | |
+| | 8 | OOM | 8.05 | 7.47 | | |
+| | 4 | 5.7 | 4.3 | 3.98 | 24.56140351 | 30.1754386 |
+| | 2 | 3.14 | 2.43 | 2.27 | 22.61146497 | 27.70700637 |
+| | 1 | 1.88 | 1.57 | 1.57 | 16.4893617 | 16.4893617 |
+| | | | | | | |
+| 768 | 10 | OOM | OOM | 23.67 | | |
+| | 8 | OOM | OOM | 18.81 | | |
+| | 4 | OOM | 11.81 | 9.7 | | |
+| | 2 | OOM | 6.27 | 5.2 | | |
+| | 1 | 5.43 | 3.38 | 2.82 | 37.75322284 | 48.06629834 |
+| | | | | | | |
+| 1024 | 10 | OOM | OOM | OOM | | |
+| | 8 | OOM | OOM | OOM | | |
+| | 4 | OOM | OOM | 19.35 | | |
+| | 2 | OOM | 13 | 10.78 | | |
+| | 1 | OOM | 6.66 | 5.54 | | |
+
+์์ ํ์์ ๋ณผ ์ ์๋ฏ์ด, ์ด๋ฏธ์ง ํด์๋๊ฐ ๋์์๋ก `tomesd`๋ฅผ ์ฌ์ฉํ ์๋ ํฅ์์ด ๋์ฑ ๋๋๋ฌ์ง๋๋ค. ๋ํ `tomesd`๋ฅผ ์ฌ์ฉํ๋ฉด 1024x1024์ ๊ฐ์ ๋ ๋์ ํด์๋์์ ํ์ดํ๋ผ์ธ์ ์คํํ ์ ์๋ค๋ ์ ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค.
+
+[`torch.compile()`](https://huggingface.co/docs/diffusers/optimization/torch2.0)์ ์ฌ์ฉํ๋ฉด ์ถ๋ก ์๋๋ฅผ ๋์ฑ ๋์ผ ์ ์์ต๋๋ค.
+
+## ํ์ง
+
+As reported in [the paper](https://arxiv.org/abs/2303.17604), ToMe can preserve the quality of the generated images to a great extent while speeding up inference. By increasing the `ratio`, it is possible to further speed up inference, but that might come at the cost of a deterioration in the image quality.
+
+To test the quality of the generated samples using our setup, we sampled a few prompts from the โParti Promptsโ (introduced in [Parti](https://parti.research.google/)) and performed inference with the [`StableDiffusionPipeline`] in the following settings:
+
+[๋
ผ๋ฌธ](https://arxiv.org/abs/2303.17604)์ ๋ณด๊ณ ๋ ๋ฐ์ ๊ฐ์ด, ToMe๋ ์์ฑ๋ ์ด๋ฏธ์ง์ ํ์ง์ ์๋น ๋ถ๋ถ ๋ณด์กดํ๋ฉด์ ์ถ๋ก ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. `ratio`์ ๋์ด๋ฉด ์ถ๋ก ์๋๋ฅผ ๋ ๋์ผ ์ ์์ง๋ง, ์ด๋ฏธ์ง ํ์ง์ด ์ ํ๋ ์ ์์ต๋๋ค.
+
+ํด๋น ์ค์ ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ํ์ ํ์ง์ ํ
์คํธํ๊ธฐ ์ํด, "Parti ํ๋กฌํํธ"([Parti](https://parti.research.google/)์์ ์๊ฐ)์์ ๋ช ๊ฐ์ง ํ๋กฌํํธ๋ฅผ ์ํ๋งํ๊ณ ๋ค์ ์ค์ ์์ [`StableDiffusionPipeline`]์ ์ฌ์ฉํ์ฌ ์ถ๋ก ์ ์ํํ์ต๋๋ค:
+
+- Vanilla [`StableDiffusionPipeline`]
+- [`StableDiffusionPipeline`] + ToMe
+- [`StableDiffusionPipeline`] + ToMe + xformers
+
+์์ฑ๋ ์ํ์ ํ์ง์ด ํฌ๊ฒ ์ ํ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ต๋๋ค. ๋ค์์ ์ํ์
๋๋ค:
+
+
+
+์์ฑ๋ ์ํ์ [์ฌ๊ธฐ](https://wandb.ai/sayakpaul/tomesd-results/runs/23j4bj3i?workspace=)์์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ์คํ์ ์ํํ๊ธฐ ์ํด [์ด ์คํฌ๋ฆฝํธ](https://gist.github.com/sayakpaul/8cac98d7f22399085a060992f411ecbd)๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
\ No newline at end of file
diff --git a/docs/source/ko/quicktour.md b/docs/source/ko/quicktour.md
index e0676ce2a9ca..e256f6c93223 100644
--- a/docs/source/ko/quicktour.md
+++ b/docs/source/ko/quicktour.md
@@ -9,43 +9,59 @@ Unless required by applicable law or agreed to in writing, software distributed
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]]
# ํ์ด๋ณด๊ธฐ
-๐งจ Diffusers๋ก ๋น ๋ฅด๊ฒ ์์ํ๊ณ ์คํํ์ธ์!
-์ด ํ์ด๋ณด๊ธฐ๋ ์ฌ๋ฌ๋ถ์ด ๊ฐ๋ฐ์, ์ผ๋ฐ์ฌ์ฉ์ ์๊ด์์ด ์์ํ๋ ๋ฐ ๋์์ ์ฃผ๋ฉฐ, ์ถ๋ก ์ ์ํด [`DiffusionPipeline`] ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
+Diffusion ๋ชจ๋ธ์ ์ด๋ฏธ์ง๋ ์ค๋์ค์ ๊ฐ์ ๊ด์ฌ ์ํ๋ค์ ์์ฑํ๊ธฐ ์ํด ๋๋ค ๊ฐ์ฐ์์ ๋
ธ์ด์ฆ๋ฅผ ๋จ๊ณ๋ณ๋ก ์ ๊ฑฐํ๋๋ก ํ์ต๋ฉ๋๋ค. ์ด๋ก ์ธํด ์์ฑ AI์ ๋ํ ๊ด์ฌ์ด ๋งค์ฐ ๋์์ก์ผ๋ฉฐ, ์ธํฐ๋ท์์ diffusion ์์ฑ ์ด๋ฏธ์ง์ ์๋ฅผ ๋ณธ ์ ์ด ์์ ๊ฒ์
๋๋ค. ๐งจ Diffusers๋ ๋๊ตฌ๋ diffusion ๋ชจ๋ธ๋ค์ ๋๋ฆฌ ์ด์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
-์์ํ๊ธฐ์ ์์์, ํ์ํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์:
+๊ฐ๋ฐ์๋ ์ผ๋ฐ ์ฌ์ฉ์๋ ์ด ํ์ด๋ณด๊ธฐ๋ฅผ ํตํด ๐งจ diffusers๋ฅผ ์๊ฐํ๊ณ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค! ์์์ผ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ํฌ๊ฒ ์ธ ๊ฐ์ง์
๋๋ค:
-```bash
-pip install --upgrade diffusers accelerate transformers
+* [`DiffusionPipeline`]์ ์ถ๋ก ์ ์ํด ์ฌ์ ํ์ต๋ diffusion ๋ชจ๋ธ์์ ์ํ์ ๋น ๋ฅด๊ฒ ์์ฑํ๋๋ก ์ค๊ณ๋ ๋์ ์์ค์ ์๋ํฌ์๋ ํด๋์ค์
๋๋ค.
+* Diffusion ์์คํ
์์ฑ์ ์ํ ๋น๋ฉ ๋ธ๋ก์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฌ์ ํ์ต๋ [model](./api/models) ์ํคํ
์ฒ ๋ฐ ๋ชจ๋.
+* ๋ค์ํ [schedulers](./api/schedulers/overview) - ํ์ต์ ์ํด ๋
ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ์ถ๋ก ์ค์ ๋
ธ์ด์ฆ ์ ๊ฑฐ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ์ดํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
+
+ํ์ด๋ณด๊ธฐ์์๋ ์ถ๋ก ์ ์ํด [`DiffusionPipeline`]์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค ๋ค์, ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ๊ฒฐํฉํ์ฌ [`DiffusionPipeline`] ๋ด๋ถ์์ ์ผ์ด๋๋ ์ผ์ ๋ณต์ ํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
+
+
+
+ํ์ด๋ณด๊ธฐ๋ ๊ฐ๊ฒฐํ ๋ฒ์ ์ ๐งจ Diffusers ์๊ฐ๋ก์ [๋
ธํธ๋ถ](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/diffusers_intro.ipynb) ๋น ๋ฅด๊ฒ ์์ํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค. ๋ํจ์ ์ ๋ชฉํ, ๋์์ธ ์ฒ ํ, ํต์ฌ API์ ๋ํ ์ถ๊ฐ ์ธ๋ถ ์ ๋ณด๋ฅผ ์์ธํ ์์๋ณด๋ ค๋ฉด ๋
ธํธ๋ถ์ ํ์ธํ์ธ์!
+
+
+
+์์ํ๊ธฐ ์ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์:
+
+```py
+# ์ฃผ์ ํ์ด์ Colab์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นํ๊ธฐ.
+#!pip install --upgrade diffusers accelerate transformers
```
-- [`accelerate`](https://huggingface.co/docs/accelerate/index)์ ์ถ๋ก ๋ฐ ํ์ต์ ์ํ ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ ์๋๋ฅผ ๋์
๋๋ค.
-- [`transformers`](https://huggingface.co/docs/transformers/index)๋ [Stable Diffusion](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/overview)๊ณผ ๊ฐ์ด ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ฐ ๋ชจ๋ธ์ ์คํํ๊ธฐ ์ํด ํ์ํฉ๋๋ค.
+- [๐ค Accelerate](https://huggingface.co/docs/accelerate/index)๋ ์ถ๋ก ๋ฐ ํ์ต์ ์ํ ๋ชจ๋ธ ๋ก๋ฉ ์๋๋ฅผ ๋์ฌ์ค๋๋ค.
+- [๐ค Transformers](https://huggingface.co/docs/transformers/index)๋ [Stable Diffusion](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/overview)๊ณผ ๊ฐ์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ diffusion ๋ชจ๋ธ์ ์คํํ๋ ๋ฐ ํ์ํฉ๋๋ค.
## DiffusionPipeline
-[`DiffusionPipeline`]์ ์ถ๋ก ์ ์ํด ์ฌ์ ํ์ต๋ ํ์ฐ ์์คํ
์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์
๋๋ค. ๋ค์ํ ์์์ ๋ง์ ์์
์ [`DiffusionPipeline`]์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ง์๋๋ ์์
์ ์๋์ ํ๋ฅผ ์ฐธ๊ณ ํ์ธ์:
+[`DiffusionPipeline`] ์ ์ถ๋ก ์ ์ํด ์ฌ์ ํ์ต๋ diffusion ์์คํ
์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์
๋๋ค. ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ํฌํจํ๋ ์๋ ํฌ ์๋ ์์คํ
์
๋๋ค. ๋ค์ํ ์์
์ [`DiffusionPipeline`]์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ํ์์ ์ง์๋๋ ๋ช ๊ฐ์ง ์์
์ ์ดํด๋ณด๊ณ , ์ง์๋๋ ์์
์ ์ ์ฒด ๋ชฉ๋ก์ [๐งจ Diffusers Summary](./api/pipelines/overview#diffusers-summary) ํ์์ ํ์ธํ ์ ์์ต๋๋ค.
| **Task** | **Description** | **Pipeline**
|------------------------------|--------------------------------------------------------------------------------------------------------------|-----------------|
-| Unconditional Image Generation | ๊ฐ์ฐ์์ ๋
ธ์ด์ฆ์์ ์ด๋ฏธ์ง ์์ฑ | [unconditional_image_generation](./using-diffusers/unconditional_image_generation`) |
-| Text-Guided Image Generation | ํ
์คํธ ํ๋กฌํํธ๋ก ์ด๋ฏธ์ง ์์ฑ | [conditional_image_generation](./using-diffusers/conditional_image_generation) |
-| Text-Guided Image-to-Image Translation | ํ
์คํธ ํ๋กฌํํธ์ ๋ฐ๋ผ ์ด๋ฏธ์ง ์กฐ์ | [img2img](./using-diffusers/img2img) |
-| Text-Guided Image-Inpainting | ๋ง์คํฌ ๋ฐ ํ
์คํธ ํ๋กฌํํธ๊ฐ ์ฃผ์ด์ง ์ด๋ฏธ์ง์ ๋ง์คํน๋ ๋ถ๋ถ์ ์ฑ์ฐ๊ธฐ | [inpaint](./using-diffusers/inpaint) |
-| Text-Guided Depth-to-Image Translation | ๊น์ด ์ถ์ ์ ํตํด ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์ ํ
์คํธ ํ๋กฌํํธ์ ๋ฐ๋ผ ์ด๋ฏธ์ง์ ์ผ๋ถ๋ฅผ ์กฐ์ | [depth2image](./using-diffusers/depth2image) |
+| Unconditional Image Generation | generate an image from Gaussian noise | [unconditional_image_generation](./using-diffusers/unconditional_image_generation) |
+| Text-Guided Image Generation | generate an image given a text prompt | [conditional_image_generation](./using-diffusers/conditional_image_generation) |
+| Text-Guided Image-to-Image Translation | adapt an image guided by a text prompt | [img2img](./using-diffusers/img2img) |
+| Text-Guided Image-Inpainting | fill the masked part of an image given the image, the mask and a text prompt | [inpaint](./using-diffusers/inpaint) |
+| Text-Guided Depth-to-Image Translation | adapt parts of an image guided by a text prompt while preserving structure via depth estimation | [depth2img](./using-diffusers/depth2img) |
+
+๋จผ์ [`DiffusionPipeline`]์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ค์ด๋ก๋ํ ํ์ดํ๋ผ์ธ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ง์ ํฉ๋๋ค.
+ํ๊น
ํ์ด์ค ํ๋ธ์ ์ ์ฅ๋ ๋ชจ๋ [checkpoint](https://huggingface.co/models?library=diffusers&sort=downloads)์ ๋ํด [`DiffusionPipeline`]์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+์ด ํ์ด๋ณด๊ธฐ์์๋ text-to-image ์์ฑ์ ์ํ [`stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5) ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ก๋ํฉ๋๋ค.
-ํ์ฐ ํ์ดํ๋ผ์ธ์ด ๋ค์ํ ์์
์ ๋ํด ์ด๋ป๊ฒ ์๋ํ๋์ง๋ [**Using Diffusers**](./using-diffusers/overview)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
+
-์๋ฅผ๋ค์ด, [`DiffusionPipeline`] ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ์์ํ๊ณ , ๋ค์ด๋ก๋ํ๋ ค๋ ํ์ดํ๋ผ์ธ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ง์ ํฉ๋๋ค.
-๋ชจ๋ [Diffusers' checkpoint](https://huggingface.co/models?library=diffusers&sort=downloads)์ ๋ํด [`DiffusionPipeline`]์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-ํ์ง๋ง, ์ด ๊ฐ์ด๋์์๋ [Stable Diffusion](https://huggingface.co/CompVis/stable-diffusion)์ ์ฌ์ฉํ์ฌ text-to-image๋ฅผ ํ๋๋ฐ [`DiffusionPipeline`]์ ์ฌ์ฉํฉ๋๋ค.
+[Stable Diffusion](https://huggingface.co/CompVis/stable-diffusion) ๋ชจ๋ธ์ ๊ฒฝ์ฐ, ๋ชจ๋ธ์ ์คํํ๊ธฐ ์ ์ [๋ผ์ด์ ์ค](https://huggingface.co/spaces/CompVis/stable-diffusion-license)๋ฅผ ๋จผ์ ์ฃผ์ ๊น๊ฒ ์ฝ์ด์ฃผ์ธ์. ๐งจ Diffusers๋ ๋ถ์พํ๊ฑฐ๋ ์ ํดํ ์ฝํ
์ธ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด [`safety_checker`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/safety_checker.py)๋ฅผ ๊ตฌํํ๊ณ ์์ง๋ง, ๋ชจ๋ธ์ ํฅ์๋ ์ด๋ฏธ์ง ์์ฑ ๊ธฐ๋ฅ์ผ๋ก ์ธํด ์ฌ์ ํ ์ ์ฌ์ ์ผ๋ก ์ ํดํ ์ฝํ
์ธ ๊ฐ ์์ฑ๋ ์ ์์ต๋๋ค.
-[Stable Diffusion](https://huggingface.co/CompVis/stable-diffusion) ๊ธฐ๋ฐ ๋ชจ๋ธ์ ์คํํ๊ธฐ ์ ์ [license](https://huggingface.co/spaces/CompVis/stable-diffusion-license)๋ฅผ ์ฃผ์ ๊น๊ฒ ์ฝ์ผ์ธ์.
-์ด๋ ๋ชจ๋ธ์ ํฅ์๋ ์ด๋ฏธ์ง ์์ฑ ๊ธฐ๋ฅ๊ณผ ์ด๊ฒ์ผ๋ก ์์ฑ๋ ์ ์๋ ์ ํดํ ์ฝํ
์ธ ๋๋ฌธ์
๋๋ค. ์ ํํ Stable Diffusion ๋ชจ๋ธ(*์*: [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5))๋ก ์ด๋ํ์ฌ ๋ผ์ด์ผ์ค๋ฅผ ์ฝ์ผ์ธ์.
+
-๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ธ์ ๋ก๋ํ ์ ์์ต๋๋ค:
+[`~DiffusionPipeline.from_pretrained`] ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ธ ๋ก๋ํ๊ธฐ:
```python
>>> from diffusers import DiffusionPipeline
@@ -53,71 +69,245 @@ pip install --upgrade diffusers accelerate transformers
>>> pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
```
-[`DiffusionPipeline`]์ ๋ชจ๋ ๋ชจ๋ธ๋ง, ํ ํฐํ ๋ฐ ์ค์ผ์ค๋ง ๊ตฌ์ฑ์์๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์บ์ํฉ๋๋ค.
-๋ชจ๋ธ์ ์ฝ 14์ต๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก GPU์์ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-PyTorch์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑ๊ธฐ ๊ฐ์ฒด๋ฅผ GPU๋ก ์ฎ๊ธธ ์ ์์ต๋๋ค.
+The [`DiffusionPipeline`]์ ๋ชจ๋ ๋ชจ๋ธ๋ง, ํ ํฐํ, ์ค์ผ์ค๋ง ์ปดํฌ๋ํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์บ์ํฉ๋๋ค. Stable Diffusion Pipeline์ ๋ฌด์๋ณด๋ค๋ [`UNet2DConditionModel`]๊ณผ [`PNDMScheduler`]๋ก ๊ตฌ์ฑ๋์ด ์์์ ์ ์ ์์ต๋๋ค:
+
+```py
+>>> pipeline
+StableDiffusionPipeline {
+ "_class_name": "StableDiffusionPipeline",
+ "_diffusers_version": "0.13.1",
+ ...,
+ "scheduler": [
+ "diffusers",
+ "PNDMScheduler"
+ ],
+ ...,
+ "unet": [
+ "diffusers",
+ "UNet2DConditionModel"
+ ],
+ "vae": [
+ "diffusers",
+ "AutoencoderKL"
+ ]
+}
+```
+
+์ด ๋ชจ๋ธ์ ์ฝ 14์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก GPU์์ ํ์ดํ๋ผ์ธ์ ์คํํ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
+PyTorch์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ GPU๋ก ์ด๋ํ ์ ์์ต๋๋ค:
```python
>>> pipeline.to("cuda")
```
-์ด์ `pipeline`์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+์ด์ `ํ์ดํ๋ผ์ธ`์ ํ
์คํธ ํ๋กฌํํธ๋ฅผ ์ ๋ฌํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ค์ ๋
ธ์ด์ฆ๊ฐ ์ ๊ฑฐ๋ ์ด๋ฏธ์ง์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ์ง ์ถ๋ ฅ์ [`PIL.Image`](https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=image#the-image-class) ๊ฐ์ฒด๋ก ๊ฐ์ธ์ง๋๋ค.
```python
>>> image = pipeline("An image of a squirrel in Picasso style").images[0]
+>>> image
```
-์ถ๋ ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก [PIL Image object](https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=image#the-image-class)๋ก ๋ํ๋ฉ๋๋ค.
+
+

+
-๋ค์๊ณผ ๊ฐ์ด ํจ์๋ฅผ ํธ์ถํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค:
+`save`๋ฅผ ํธ์ถํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค:
```python
>>> image.save("image_of_squirrel_painting.png")
```
-**์ฐธ๊ณ **: ๋ค์์ ํตํด ๊ฐ์ค์น๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ๋ก์ปฌ์์ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค:
+### ๋ก์ปฌ ํ์ดํ๋ผ์ธ
-```
-git lfs install
-git clone https://huggingface.co/runwayml/stable-diffusion-v1-5
+ํ์ดํ๋ผ์ธ์ ๋ก์ปฌ์์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ๊ฐ์ค์น๋ฅผ ๋จผ์ ๋ค์ด๋ก๋ํด์ผ ํ๋ค๋ ์ ์
๋๋ค:
+
+```bash
+!git lfs install
+!git clone https://huggingface.co/runwayml/stable-diffusion-v1-5
```
-๊ทธ๋ฆฌ๊ณ ์ ์ฅ๋ ๊ฐ์ค์น๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ต๋๋ค.
+๊ทธ๋ฐ ๋ค์ ์ ์ฅ๋ ๊ฐ์ค์น๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ก๋ํฉ๋๋ค:
```python
>>> pipeline = DiffusionPipeline.from_pretrained("./stable-diffusion-v1-5")
```
-ํ์ดํ๋ผ์ธ ์คํ์ ๋์ผํ ๋ชจ๋ธ ์ํคํ
์ฒ์ด๋ฏ๋ก ์์ ์ฝ๋์ ๋์ผํฉ๋๋ค.
+์ด์ ์ ์น์
์์์ ๊ฐ์ด ํ์ดํ๋ผ์ธ์ ์คํํ ์ ์์ต๋๋ค.
-```python
->>> generator.to("cuda")
->>> image = generator("An image of a squirrel in Picasso style").images[0]
->>> image.save("image_of_squirrel_painting.png")
-```
+### ์ค์ผ์ค๋ฌ ๊ต์ฒด
-ํ์ฐ ์์คํ
์ ๊ฐ๊ฐ ์ฅ์ ์ด ์๋ ์ฌ๋ฌ ๋ค๋ฅธ [schedulers](./api/schedulers/overview)์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Stable Diffusion์ `PNDMScheduler`๋ก ์คํ๋์ง๋ง ๋ค๋ฅธ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. *์* [`EulerDiscreteScheduler`] ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค:
+์ค์ผ์ค๋ฌ๋ง๋ค ๋
ธ์ด์ฆ ์ ๊ฑฐ ์๋์ ํ์ง์ด ์๋ก ๋ค๋ฆ
๋๋ค. ์์ ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ์ค์ผ์ค๋ฌ๋ฅผ ์ฐพ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ง์ ์ฌ์ฉํด ๋ณด๋ ๊ฒ์
๋๋ค! ๐งจ Diffusers์ ์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋๋ ์ค์ผ์ค๋ฌ ๊ฐ์ ์ฝ๊ฒ ์ ํ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ธ [`PNDMScheduler`]๋ฅผ [`EulerDiscreteScheduler`]๋ก ๋ฐ๊พธ๋ ค๋ฉด, [`~diffusers.ConfigMixin.from_config`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ํ์ธ์:
-```python
+```py
>>> from diffusers import EulerDiscreteScheduler
->>> pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
-
->>> # change scheduler to Euler
+>>> pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
```
-์ค์ผ์ค๋ฌ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [Using Schedulers](./using-diffusers/schedulers) ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
+์ ์ค์ผ์ค๋ฌ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํด๋ณด๊ณ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ํ์ธํด ๋ณด์ธ์!
+
+๋ค์ ์น์
์์๋ ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ๋ผ๋ [`DiffusionPipeline`]์ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ฅผ ์์ธํ ์ดํด๋ณด๊ณ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด๊ฒ ์ต๋๋ค.
+
+## ๋ชจ๋ธ
+
+๋๋ถ๋ถ์ ๋ชจ๋ธ์ ๋
ธ์ด์ฆ๊ฐ ์๋ ์ํ์ ๊ฐ์ ธ์ ๊ฐ ์๊ฐ ๊ฐ๊ฒฉ๋ง๋ค ๋
ธ์ด์ฆ๊ฐ ์ ์ ์ด๋ฏธ์ง์ ์
๋ ฅ ์ด๋ฏธ์ง ์ฌ์ด์ ์ฐจ์ด์ธ *๋
ธ์ด์ฆ ์์ฐจ*(๋ค๋ฅธ ๋ชจ๋ธ์ ์ด์ ์ํ์ ์ง์ ์์ธกํ๊ฑฐ๋ ์๋ ๋๋ [`v-prediction`](https://github.com/huggingface/diffusers/blob/5e5ce13e2f89ac45a0066cb3f369462a3cf1d9ef/src/diffusers/schedulers/scheduling_ddim.py#L110)์ ์์ธกํ๋ ํ์ต์ ํฉ๋๋ค)์ ์์ธกํฉ๋๋ค. ๋ชจ๋ธ์ ๋ฏน์ค ์ค ๋งค์นํ์ฌ ๋ค๋ฅธ diffusion ์์คํ
์ ๋ง๋ค ์ ์์ต๋๋ค.
+
+๋ชจ๋ธ์ [`~ModelMixin.from_pretrained`] ๋ฉ์๋๋ก ์์๋๋ฉฐ, ์ด ๋ฉ์๋๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ๋ก์ปฌ์ ์บ์ํ์ฌ ๋ค์์ ๋ชจ๋ธ์ ๋ก๋ํ ๋ ๋ ๋น ๋ฅด๊ฒ ๋ก๋ํ ์ ์์ต๋๋ค. ํ์ด๋ณด๊ธฐ์์๋ ๊ณ ์์ด ์ด๋ฏธ์ง์ ๋ํด ํ์ต๋ ์ฒดํฌํฌ์ธํธ๊ฐ ์๋ ๊ธฐ๋ณธ์ ์ธ unconditional ์ด๋ฏธ์ง ์์ฑ ๋ชจ๋ธ์ธ [`UNet2DModel`]์ ๋ก๋ํฉ๋๋ค:
+
+```py
+>>> from diffusers import UNet2DModel
+
+>>> repo_id = "google/ddpm-cat-256"
+>>> model = UNet2DModel.from_pretrained(repo_id)
+```
+
+๋ชจ๋ธ ๋งค๊ฐ๋ณ์์ ์ก์ธ์คํ๋ ค๋ฉด `model.config`๋ฅผ ํธ์ถํฉ๋๋ค:
+
+```py
+>>> model.config
+```
+
+๋ชจ๋ธ ๊ตฌ์ฑ์ ๐ง ๊ณ ์ ๋ ๐ง ๋์
๋๋ฆฌ๋ก, ๋ชจ๋ธ์ด ์์ฑ๋ ํ์๋ ํด๋น ๋งค๊ฐ ๋ณ์๋ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ์๋์ ์ธ ๊ฒ์ผ๋ก, ์ฒ์์ ๋ชจ๋ธ ์ํคํ
์ฒ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ ๋งค๊ฐ๋ณ์๋ ๋์ผํ๊ฒ ์ ์งํ๋ฉด์ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ ์ถ๋ก ์ค์ ์กฐ์ ํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
+
+๊ฐ์ฅ ์ค์ํ ๋งค๊ฐ๋ณ์๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
+
+* `sample_size`: ์
๋ ฅ ์ํ์ ๋์ด ๋ฐ ๋๋น ์น์์
๋๋ค.
+* `in_channels`: ์
๋ ฅ ์ํ์ ์
๋ ฅ ์ฑ๋ ์์
๋๋ค.
+* `down_block_types` ๋ฐ `up_block_types`: UNet ์ํคํ
์ฒ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ค์ด ๋ฐ ์
์ํ๋ง ๋ธ๋ก์ ์ ํ.
+* `block_out_channels`: ๋ค์ด์ํ๋ง ๋ธ๋ก์ ์ถ๋ ฅ ์ฑ๋ ์. ์
์ํ๋ง ๋ธ๋ก์ ์
๋ ฅ ์ฑ๋ ์์ ์ญ์์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
+* `layers_per_block`: ๊ฐ UNet ๋ธ๋ก์ ์กด์ฌํ๋ ResNet ๋ธ๋ก์ ์์
๋๋ค.
+
+์ถ๋ก ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ๋๋ค ๊ฐ์ฐ์์ ๋
ธ์ด์ฆ๋ก ์ด๋ฏธ์ง ๋ชจ์์ ๋ง๋ญ๋๋ค. ๋ชจ๋ธ์ด ์ฌ๋ฌ ๊ฐ์ ๋ฌด์์ ๋
ธ์ด์ฆ๋ฅผ ์์ ํ ์ ์์ผ๋ฏ๋ก 'batch' ์ถ, ์
๋ ฅ ์ฑ๋ ์์ ํด๋นํ๋ 'channel' ์ถ, ์ด๋ฏธ์ง์ ๋์ด์ ๋๋น๋ฅผ ๋ํ๋ด๋ 'sample_size' ์ถ์ด ์์ด์ผ ํฉ๋๋ค:
+
+```py
+>>> import torch
+
+>>> torch.manual_seed(0)
+
+>>> noisy_sample = torch.randn(1, model.config.in_channels, model.config.sample_size, model.config.sample_size)
+>>> noisy_sample.shape
+torch.Size([1, 3, 256, 256])
+```
+
+์ถ๋ก ์ ์ํด ๋ชจ๋ธ์ ๋
ธ์ด์ฆ๊ฐ ์๋ ์ด๋ฏธ์ง์ `timestep`์ ์ ๋ฌํฉ๋๋ค. 'timestep'์ ์
๋ ฅ ์ด๋ฏธ์ง์ ๋
ธ์ด์ฆ ์ ๋๋ฅผ ๋ํ๋ด๋ฉฐ, ์์ ๋ถ๋ถ์ ๋ ๋ง์ ๋
ธ์ด์ฆ๊ฐ ์๊ณ ๋ ๋ถ๋ถ์ ๋ ์ ์ ๋
ธ์ด์ฆ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ธ์ด diffusion ๊ณผ์ ์์ ์์ ๋๋ ๋์ ๋ ๊ฐ๊น์ด ์์น๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. `sample` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ ์ถ๋ ฅ์ ์ป์ต๋๋ค:
+
+```py
+>>> with torch.no_grad():
+... noisy_residual = model(sample=noisy_sample, timestep=2).sample
+```
+
+ํ์ง๋ง ์ค์ ์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋
ธ์ด์ฆ ์ ๊ฑฐ ํ๋ก์ธ์ค๋ฅผ ์๋ดํ ์ค์ผ์ค๋ฌ๊ฐ ํ์ํฉ๋๋ค. ๋ค์ ์น์
์์๋ ๋ชจ๋ธ์ ์ค์ผ์ค๋ฌ์ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ด
๋๋ค.
+
+## ์ค์ผ์ค๋ฌ
+
+์ค์ผ์ค๋ฌ๋ ๋ชจ๋ธ ์ถ๋ ฅ์ด ์ฃผ์ด์ก์ ๋ ๋
ธ์ด์ฆ๊ฐ ๋ง์ ์ํ์์ ๋
ธ์ด์ฆ๊ฐ ์ ์ ์ํ๋ก ์ ํํ๋ ๊ฒ์ ๊ด๋ฆฌํฉ๋๋ค - ์ด ๊ฒฝ์ฐ 'noisy_residual'.
+
+
+
+๐งจ Diffusers๋ Diffusion ์์คํ
์ ๊ตฌ์ถํ๊ธฐ ์ํ ํด๋ฐ์ค์
๋๋ค. [`DiffusionPipeline`]์ ์ฌ์ฉํ๋ฉด ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง Diffusion ์์คํ
์ ํธ๋ฆฌํ๊ฒ ์์ํ ์ ์์ง๋ง, ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ํํ์ฌ ์ฌ์ฉ์ ์ง์ Diffusion ์์คํ
์ ๊ตฌ์ถํ ์๋ ์์ต๋๋ค.
+
+
+
+ํ์ด๋ณด๊ธฐ์ ๊ฒฝ์ฐ, [`~diffusers.ConfigMixin.from_config`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ [`DDPMScheduler`]๋ฅผ ์ธ์คํด์คํํฉ๋๋ค:
+
+```py
+>>> from diffusers import DDPMScheduler
+
+>>> scheduler = DDPMScheduler.from_config(repo_id)
+>>> scheduler
+DDPMScheduler {
+ "_class_name": "DDPMScheduler",
+ "_diffusers_version": "0.13.1",
+ "beta_end": 0.02,
+ "beta_schedule": "linear",
+ "beta_start": 0.0001,
+ "clip_sample": true,
+ "clip_sample_range": 1.0,
+ "num_train_timesteps": 1000,
+ "prediction_type": "epsilon",
+ "trained_betas": null,
+ "variance_type": "fixed_small"
+}
+```
+
+
+
+๐ก ์ค์ผ์ค๋ฌ๊ฐ ๊ตฌ์ฑ์์ ์ด๋ป๊ฒ ์ธ์คํด์คํ๋๋์ง ์ฃผ๋ชฉํ์ธ์. ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ ์ค์ผ์ค๋ฌ์๋ ํ์ต ๊ฐ๋ฅํ ๊ฐ์ค์น๊ฐ ์์ผ๋ฉฐ ๋งค๊ฐ๋ณ์๋ ์์ต๋๋ค!
+
+
+
+๊ฐ์ฅ ์ค์ํ ๋งค๊ฐ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
+
+* `num_train_timesteps`: ๋
ธ์ด์ฆ ์ ๊ฑฐ ํ๋ก์ธ์ค์ ๊ธธ์ด, ์ฆ ๋๋ค ๊ฐ์ฐ์ค ๋
ธ์ด์ฆ๋ฅผ ๋ฐ์ดํฐ ์ํ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ํ์์คํ
์์
๋๋ค.
+* `beta_schedule`: ์ถ๋ก ๋ฐ ํ์ต์ ์ฌ์ฉํ ๋
ธ์ด์ฆ ์ค์ผ์ค ์ ํ์
๋๋ค.
+* `beta_start` ๋ฐ `beta_end`: ๋
ธ์ด์ฆ ์ค์ผ์ค์ ์์ ๋ฐ ์ข
๋ฃ ๋
ธ์ด์ฆ ๊ฐ์
๋๋ค.
+
+๋
ธ์ด์ฆ๊ฐ ์ฝ๊ฐ ์ ์ ์ด๋ฏธ์ง๋ฅผ ์์ธกํ๋ ค๋ฉด ์ค์ผ์ค๋ฌ์ [`~diffusers.DDPMScheduler.step`] ๋ฉ์๋์ ๋ชจ๋ธ ์ถ๋ ฅ, `timestep`, ํ์ฌ `sample`์ ์ ๋ฌํ์ธ์.
+
+```py
+>>> less_noisy_sample = scheduler.step(model_output=noisy_residual, timestep=2, sample=noisy_sample).prev_sample
+>>> less_noisy_sample.shape
+```
+
+`less_noisy_sample`์ ๋ค์ `timestep`์ผ๋ก ๋๊ธฐ๋ฉด ๋
ธ์ด์ฆ๊ฐ ๋ ์ค์ด๋ญ๋๋ค! ์ด์ ์ด ๋ชจ๋ ๊ฒ์ ํ๋ฐ ๋ชจ์ ์ ์ฒด ๋
ธ์ด์ฆ ์ ๊ฑฐ ๊ณผ์ ์ ์๊ฐํํด ๋ณด๊ฒ ์ต๋๋ค.
+
+๋จผ์ ๋
ธ์ด์ฆ ์ ๊ฑฐ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ฒ๋ฆฌํ์ฌ `PIL.Image`๋ก ํ์ํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค:
+
+```py
+>>> import PIL.Image
+>>> import numpy as np
+
+
+>>> def display_sample(sample, i):
+... image_processed = sample.cpu().permute(0, 2, 3, 1)
+... image_processed = (image_processed + 1.0) * 127.5
+... image_processed = image_processed.numpy().astype(np.uint8)
+
+... image_pil = PIL.Image.fromarray(image_processed[0])
+... display(f"Image at step {i}")
+... display(image_pil)
+```
+
+๋
ธ์ด์ฆ ์ ๊ฑฐ ํ๋ก์ธ์ค์ ์๋๋ฅผ ๋์ด๋ ค๋ฉด ์
๋ ฅ๊ณผ ๋ชจ๋ธ์ GPU๋ก ์ฎ๊ธฐ์ธ์:
+
+```py
+>>> model.to("cuda")
+>>> noisy_sample = noisy_sample.to("cuda")
+```
+
+์ด์ ๋
ธ์ด์ฆ๊ฐ ์ ์ ์ํ์ ์์ฐจ๋ฅผ ์์ธกํ๊ณ ์ค์ผ์ค๋ฌ๋ก ๋
ธ์ด์ฆ๊ฐ ์ ์ ์ํ์ ๊ณ์ฐํ๋ ๋
ธ์ด์ฆ ์ ๊ฑฐ ๋ฃจํ๋ฅผ ์์ฑํฉ๋๋ค:
+
+```py
+>>> import tqdm
+
+>>> sample = noisy_sample
+
+>>> for i, t in enumerate(tqdm.tqdm(scheduler.timesteps)):
+... # 1. predict noise residual
+... with torch.no_grad():
+... residual = model(sample, t).sample
+
+... # 2. compute less noisy image and set x_t -> x_t-1
+... sample = scheduler.step(residual, t, sample).prev_sample
+
+... # 3. optionally look at image
+... if (i + 1) % 50 == 0:
+... display_sample(sample, i + 1)
+```
-[Stability AI's](https://stability.ai/)์ Stable Diffusion ๋ชจ๋ธ์ ์ธ์์ ์ธ ์ด๋ฏธ์ง ์์ฑ ๋ชจ๋ธ์ด๋ฉฐ ํ
์คํธ์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์์
์ ์ํํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ Stable Diffusion๋ง์ ์ํ ์ ์ฒด ๋ฌธ์ ํ์ด์ง๋ฅผ ์ ๊ณตํฉ๋๋ค [link](./conceptual/stable_diffusion).
+๊ฐ๋งํ ์์์ ๊ณ ์์ด๊ฐ ์์์ผ๋ก๋ง ์์ฑ๋๋ ๊ฒ์ ์ง์ผ๋ณด์ธ์!๐ป
-๋ง์ฝ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ, ๋ ๋์ ์ถ๋ก ์๋, Mac๊ณผ ๊ฐ์ ํน์ ํ๋์จ์ด ๋๋ ONNX ๋ฐํ์์์ ์คํ๋๋๋ก Stable Diffusion์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ๋ค๋ฉด ์ต์ ํ ํ์ด์ง๋ฅผ ์ดํด๋ณด์ธ์:
+
+

+
-- [Optimized PyTorch on GPU](./optimization/fp16)
-- [Mac OS with PyTorch](./optimization/mps)
-- [ONNX](./optimization/onnx)
-- [OpenVINO](./optimization/open_vino)
+## ๋ค์ ๋จ๊ณ
-ํ์ฐ ๋ชจ๋ธ์ ๋ฏธ์ธ์กฐ์ ํ๊ฑฐ๋ ํ์ต์ํค๋ ค๋ฉด, [**training section**](./training/overview)์ ์ดํด๋ณด์ธ์.
+์ด๋ฒ ํ์ด๋ณด๊ธฐ์์ ๐งจ Diffusers๋ก ๋ฉ์ง ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ๋ณด์
จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค! ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ์ธ์:
-๋ง์ง๋ง์ผ๋ก, ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ๋ฐฐํฌํ ๋ ์ ์ค์ ๊ธฐํด ์ฃผ์ธ์ ๐ค.
\ No newline at end of file
+* [training](./tutorials/basic_training) ํํ ๋ฆฌ์ผ์์ ๋ชจ๋ธ์ ํ์ตํ๊ฑฐ๋ ํ์ธํ๋ํ์ฌ ๋๋ง์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
+* ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก๋ ๊ณต์ ๋ฐ ์ปค๋ฎค๋ํฐ [ํ์ต ๋๋ ํ์ธํ๋ ์คํฌ๋ฆฝํธ](https://github.com/huggingface/diffusers/tree/main/examples#-diffusers-examples) ์์๋ฅผ ์ฐธ์กฐํ์ธ์.
+* ์ค์ผ์ค๋ฌ ๋ก๋, ์ก์ธ์ค, ๋ณ๊ฒฝ ๋ฐ ๋น๊ต์ ๋ํ ์์ธํ ๋ด์ฉ์ [๋ค๋ฅธ ์ค์ผ์ค๋ฌ ์ฌ์ฉ](./using-diffusers/schedulers) ๊ฐ์ด๋์์ ํ์ธํ์ธ์.
+* [Stable Diffusion](./stable_diffusion) ๊ฐ์ด๋์์ ํ๋กฌํํธ ์์ง๋์ด๋ง, ์๋ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ, ๊ณ ํ์ง ์ด๋ฏธ์ง ์์ฑ์ ์ํ ํ๊ณผ ์๋ น์ ์ดํด๋ณด์ธ์.
+* [GPU์์ ํ์ดํ ์น ์ต์ ํ](./optimization/fp16) ๊ฐ์ด๋์ [์ ํ ์ค๋ฆฌ์ฝ(M1/M2)์์์ Stable Diffusion](./optimization/mps) ๋ฐ [ONNX ๋ฐํ์](./optimization/onnx) ์คํ์ ๋ํ ์ถ๋ก ๊ฐ์ด๋๋ฅผ ํตํด ๐งจ Diffuser ์๋๋ฅผ ๋์ด๋ ๋ฐฉ๋ฒ์ ๋ ์์ธํ ์์๋ณด์ธ์.
\ No newline at end of file
diff --git a/docs/source/ko/stable_diffusion.md b/docs/source/ko/stable_diffusion.md
new file mode 100644
index 000000000000..65575700e77e
--- /dev/null
+++ b/docs/source/ko/stable_diffusion.md
@@ -0,0 +1,279 @@
+
+
+# ํจ๊ณผ์ ์ด๊ณ ํจ์จ์ ์ธ Diffusion
+
+[[open-in-colab]]
+
+ํน์ ์คํ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ฑฐ๋ ์ํ๋ ๋ด์ฉ์ ํฌํจํ๋๋ก[`DiffusionPipeline`]์ ์ค์ ํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ์ข
์ข
๋ง์กฑ์ค๋ฌ์ด ์ด๋ฏธ์ง๋ฅผ ์ป๊ธฐ๊น์ง [`DiffusionPipeline`]์ ์ฌ๋ฌ ๋ฒ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌด์์ ์ ๋ฅผ ์ฐฝ์กฐํ๋ ๊ฒ์ ํนํ ์ถ๋ก ์ ๋ฐ๋ณตํด์ ์คํํ๋ ๊ฒฝ์ฐ ๊ณ์ฐ ์ง์ฝ์ ์ธ ํ๋ก์ธ์ค์
๋๋ค.
+
+๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ดํ๋ผ์ธ์์ *๊ณ์ฐ*(์๋) ๋ฐ *๋ฉ๋ชจ๋ฆฌ*(GPU RAM) ํจ์จ์ฑ์ ๊ทน๋ํํ์ฌ ์ถ๋ก ์ฃผ๊ธฐ ์ฌ์ด์ ์๊ฐ์ ๋จ์ถํ์ฌ ๋ ๋น ๋ฅด๊ฒ ๋ฐ๋ณตํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
+
+์ด ํํ ๋ฆฌ์ผ์์๋ [`DiffusionPipeline`]์ ์ฌ์ฉํ์ฌ ๋ ๋น ๋ฅด๊ณ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
+
+[`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5) ๋ชจ๋ธ์ ๋ถ๋ฌ์์ ์์ํฉ๋๋ค:
+
+```python
+from diffusers import DiffusionPipeline
+
+model_id = "runwayml/stable-diffusion-v1-5"
+pipeline = DiffusionPipeline.from_pretrained(model_id)
+```
+
+์์ ํ๋กฌํํธ๋ "portrait of an old warrior chief" ์ด์ง๋ง, ์์ ๋กญ๊ฒ ์์ ๋ง์ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํด๋ ๋ฉ๋๋ค:
+
+```python
+prompt = "portrait photo of a old warrior chief"
+```
+
+## ์๋
+
+
+
+๐ก GPU์ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ GPU ์ ๊ณต์
์ฒด์์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค!. [Colab](https://colab.research.google.com/)
+
+
+
+์ถ๋ก ์๋๋ฅผ ๋์ด๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ ์ค ํ๋๋ Pytorch ๋ชจ๋์ ์ฌ์ฉํ ๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก GPU์ ํ์ดํ๋ผ์ธ์ ๋ฐฐ์นํ๋ ๊ฒ์
๋๋ค:
+
+```python
+pipeline = pipeline.to("cuda")
+```
+
+๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ์ ํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด [`Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html)๋ฅผ ์ฌ์ฉํ๊ณ [์ฌํ์ฑ](./using-diffusers/reproducibility)์ ๋ํ ์๋๋ฅผ ์ค์ ํ์ธ์:
+
+```python
+import torch
+
+generator = torch.Generator("cuda").manual_seed(0)
+```
+
+์ด์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค:
+
+```python
+image = pipeline(prompt, generator=generator).images[0]
+image
+```
+
+
+

+
+
+์ด ํ๋ก์ธ์ค๋ T4 GPU์์ ์ฝ 30์ด๊ฐ ์์๋์์ต๋๋ค(ํ ๋น๋ GPU๊ฐ T4๋ณด๋ค ๋์ ๊ฒฝ์ฐ ๋ ๋น ๋ฅผ ์ ์์). ๊ธฐ๋ณธ์ ์ผ๋ก [`DiffusionPipeline`]์ 50๊ฐ์ ์ถ๋ก ๋จ๊ณ์ ๋ํด ์ ์ฒด `float32` ์ ๋ฐ๋๋ก ์ถ๋ก ์ ์คํํฉ๋๋ค. `float16`๊ณผ ๊ฐ์ ๋ ๋ฎ์ ์ ๋ฐ๋๋ก ์ ํํ๊ฑฐ๋ ์ถ๋ก ๋จ๊ณ๋ฅผ ๋ ์ ๊ฒ ์คํํ์ฌ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
+
+`float16`์ผ๋ก ๋ชจ๋ธ์ ๋ก๋ํ๊ณ ์ด๋ฏธ์ง๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค:
+
+
+```python
+import torch
+
+pipeline = DiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
+pipeline = pipeline.to("cuda")
+generator = torch.Generator("cuda").manual_seed(0)
+image = pipeline(prompt, generator=generator).images[0]
+image
+```
+
+
+

+
+
+์ด๋ฒ์๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์ฝ 11์ด๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์ ์ด์ ๋ณด๋ค 3๋ฐฐ ๊ฐ๊น์ด ๋นจ๋ผ์ก์ต๋๋ค!
+
+
+
+๐ก ํ์ดํ๋ผ์ธ์ ํญ์ `float16`์์ ์คํํ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํ๋ฉฐ, ์ง๊ธ๊น์ง ์ถ๋ ฅ ํ์ง์ด ์ ํ๋๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์์ต๋๋ค.
+
+
+
+๋ ๋ค๋ฅธ ์ต์
์ ์ถ๋ก ๋จ๊ณ์ ์๋ฅผ ์ค์ด๋ ๊ฒ์
๋๋ค. ๋ณด๋ค ํจ์จ์ ์ธ ์ค์ผ์ค๋ฌ๋ฅผ ์ ํํ๋ฉด ์ถ๋ ฅ ํ์ง ์ ํ ์์ด ๋จ๊ณ ์๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ํ์ฌ ๋ชจ๋ธ๊ณผ ํธํ๋๋ ์ค์ผ์ค๋ฌ๋ `compatibles` ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ [`DiffusionPipeline`]์์ ์ฐพ์ ์ ์์ต๋๋ค:
+
+```python
+pipeline.scheduler.compatibles
+[
+ diffusers.schedulers.scheduling_lms_discrete.LMSDiscreteScheduler,
+ diffusers.schedulers.scheduling_unipc_multistep.UniPCMultistepScheduler,
+ diffusers.schedulers.scheduling_k_dpm_2_discrete.KDPM2DiscreteScheduler,
+ diffusers.schedulers.scheduling_deis_multistep.DEISMultistepScheduler,
+ diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler,
+ diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler,
+ diffusers.schedulers.scheduling_ddpm.DDPMScheduler,
+ diffusers.schedulers.scheduling_dpmsolver_singlestep.DPMSolverSinglestepScheduler,
+ diffusers.schedulers.scheduling_k_dpm_2_ancestral_discrete.KDPM2AncestralDiscreteScheduler,
+ diffusers.schedulers.scheduling_heun_discrete.HeunDiscreteScheduler,
+ diffusers.schedulers.scheduling_pndm.PNDMScheduler,
+ diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler,
+ diffusers.schedulers.scheduling_ddim.DDIMScheduler,
+]
+```
+
+Stable Diffusion ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ 50๊ฐ์ ์ถ๋ก ๋จ๊ณ๊ฐ ํ์ํ [`PNDMScheduler`]๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง๋ง, [`DPMSolverMultistepScheduler`]์ ๊ฐ์ด ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋ ์ค์ผ์ค๋ฌ๋ ์ฝ 20๊ฐ ๋๋ 25๊ฐ์ ์ถ๋ก ๋จ๊ณ๋ง ํ์๋ก ํฉ๋๋ค. ์ ์ค์ผ์ค๋ฌ๋ฅผ ๋ก๋ํ๋ ค๋ฉด [`ConfigMixin.from_config`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค:
+
+```python
+from diffusers import DPMSolverMultistepScheduler
+
+pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
+```
+
+`num_inference_steps`๋ฅผ 20์ผ๋ก ์ค์ ํฉ๋๋ค:
+
+```python
+generator = torch.Generator("cuda").manual_seed(0)
+image = pipeline(prompt, generator=generator, num_inference_steps=20).images[0]
+image
+```
+
+
+

+
+
+์ถ๋ก ์๊ฐ์ 4์ด๋ก ๋จ์ถํ ์ ์์์ต๋๋ค! โก๏ธ
+
+## ๋ฉ๋ชจ๋ฆฌ
+
+ํ์ดํ๋ผ์ธ ์ฑ๋ฅ ํฅ์์ ๋ ๋ค๋ฅธ ํต์ฌ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ ๊ฒ์ธ๋ฐ, ์ด๋น ์์ฑ๋๋ ์ด๋ฏธ์ง ์๋ฅผ ์ต๋ํํ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ์ผ๋ก ๋ ๋น ๋ฅธ ์๋๋ฅผ ์๋ฏธํฉ๋๋ค. ํ ๋ฒ์ ์์ฑํ ์ ์๋ ์ด๋ฏธ์ง ์๋ฅผ ํ์ธํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ `OutOfMemoryError`(OOM)์ด ๋ฐ์ํ ๋๊น์ง ๋ค์ํ ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์๋ํด ๋ณด๋ ๊ฒ์
๋๋ค.
+
+ํ๋กฌํํธ ๋ชฉ๋ก๊ณผ `Generators`์์ ์ด๋ฏธ์ง ๋ฐฐ์น๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค. ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ `Generator`์ ์๋๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค.
+
+```python
+def get_inputs(batch_size=1):
+ generator = [torch.Generator("cuda").manual_seed(i) for i in range(batch_size)]
+ prompts = batch_size * [prompt]
+ num_inference_steps = 20
+
+ return {"prompt": prompts, "generator": generator, "num_inference_steps": num_inference_steps}
+```
+
+๋ํ ๊ฐ ์ด๋ฏธ์ง ๋ฐฐ์น๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค:
+
+```python
+from PIL import Image
+
+
+def image_grid(imgs, rows=2, cols=2):
+ w, h = imgs[0].size
+ grid = Image.new("RGB", size=(cols * w, rows * h))
+
+ for i, img in enumerate(imgs):
+ grid.paste(img, box=(i % cols * w, i // cols * h))
+ return grid
+```
+
+`batch_size=4`๋ถํฐ ์์ํด ์ผ๋ง๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋์ง ํ์ธํฉ๋๋ค:
+
+```python
+images = pipeline(**get_inputs(batch_size=4)).images
+image_grid(images)
+```
+
+RAM์ด ๋ ๋ง์ GPU๊ฐ ์๋๋ผ๋ฉด ์์ ์ฝ๋์์ `OOM` ์ค๋ฅ๊ฐ ๋ฐํ๋์์ ๊ฒ์
๋๋ค! ๋๋ถ๋ถ์ ๋ฉ๋ชจ๋ฆฌ๋ cross-attention ๋ ์ด์ด๊ฐ ์ฐจ์งํฉ๋๋ค. ์ด ์์
์ ๋ฐฐ์น๋ก ์คํํ๋ ๋์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ฉด ์๋นํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค. ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ์ฌ [`~DiffusionPipeline.enable_attention_slicing`] ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค:
+
+
+```python
+pipeline.enable_attention_slicing()
+```
+
+์ด์ `batch_size`๋ฅผ 8๋ก ๋๋ ค๋ณด์ธ์!
+
+```python
+images = pipeline(**get_inputs(batch_size=8)).images
+image_grid(images, rows=2, cols=4)
+```
+
+
+

+
+
+์ด์ ์๋ 4๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์น๋ก ์์ฑํ ์๋ ์์์ง๋ง, ์ด์ ๋ ์ด๋ฏธ์ง๋น ์ฝ 3.5์ด ๋ง์ 8๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์น๋ก ์์ฑํ ์ ์์ต๋๋ค! ์ด๋ ์๋ง๋ ํ์ง ์ ํ ์์ด T4 GPU์์ ๊ฐ์ฅ ๋น ๋ฅธ ์๋์ผ ๊ฒ์
๋๋ค.
+
+## ํ์ง
+
+์ง๋ ๋ ์น์
์์๋ `fp16`์ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ์ ์๋๋ฅผ ์ต์ ํํ๊ณ , ๋ ์ฑ๋ฅ์ด ์ข์ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ก ๋จ๊ณ์ ์๋ฅผ ์ค์ด๊ณ , attention slicing์ ํ์ฑํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ์ด์ ์์ฑ๋ ์ด๋ฏธ์ง์ ํ์ง์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ง์ค์ ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
+
+
+### ๋ ๋์ ์ฒดํฌํฌ์ธํธ
+
+๊ฐ์ฅ ํ์คํ ๋จ๊ณ๋ ๋ ๋์ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. Stable Diffusion ๋ชจ๋ธ์ ์ข์ ์ถ๋ฐ์ ์ด๋ฉฐ, ๊ณต์ ์ถ์ ์ดํ ๋ช ๊ฐ์ง ๊ฐ์ ๋ ๋ฒ์ ๋ ์ถ์๋์์ต๋๋ค. ํ์ง๋ง ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๋ค๊ณ ํด์ ์๋์ผ๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์ฌ์ ํ ๋ค์ํ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ง์ ์คํํด๋ณด๊ณ , [negative prompts](https://minimaxir.com/2022/11/stable-diffusion-negative-prompt/) ์ฌ์ฉ ๋ฑ ์ฝ๊ฐ์ ์กฐ์ฌ๋ฅผ ํตํด ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด์ผ ํฉ๋๋ค.
+
+์ด ๋ถ์ผ๊ฐ ์ฑ์ฅํจ์ ๋ฐ๋ผ ํน์ ์คํ์ผ์ ์ฐ์ถํ ์ ์๋๋ก ์ธ๋ฐํ๊ฒ ์กฐ์ ๋ ๊ณ ํ์ง ์ฒดํฌํฌ์ธํธ๊ฐ ์ ์ ๋ ๋ง์์ง๊ณ ์์ต๋๋ค. [Hub](https://huggingface.co/models?library=diffusers&sort=downloads)์ [Diffusers Gallery](https://huggingface.co/spaces/huggingface-projects/diffusers-gallery)๋ฅผ ๋๋ฌ๋ณด๊ณ ๊ด์ฌ ์๋ ๊ฒ์ ์ฐพ์๋ณด์ธ์!
+
+
+### ๋ ๋์ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ ์์
+
+ํ์ฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ ์์๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํด ๋ณผ ์๋ ์์ต๋๋ค. Stability AI์ ์ต์ [autodecoder](https://huggingface.co/stabilityai/stable-diffusion-2-1/tree/main/vae)๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ก๋ํ๊ณ ๋ช ๊ฐ์ง ์ด๋ฏธ์ง๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค:
+
+
+```python
+from diffusers import AutoencoderKL
+
+vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-mse", torch_dtype=torch.float16).to("cuda")
+pipeline.vae = vae
+images = pipeline(**get_inputs(batch_size=8)).images
+image_grid(images, rows=2, cols=4)
+```
+
+
+

+
+
+### ๋ ๋์ ํ๋กฌํํธ ์์ง๋์ด๋ง
+
+์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ
์คํธ ํ๋กฌํํธ๋ *prompt engineering*์ด๋ผ๊ณ ํ ์ ๋๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค. ํ๋กฌํํธ ์์ง๋์ด๋ง ์ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
+
+- ์์ฑํ๋ ค๋ ์ด๋ฏธ์ง ๋๋ ์ ์ฌํ ์ด๋ฏธ์ง๊ฐ ์ธํฐ๋ท์ ์ด๋ป๊ฒ ์ ์ฅ๋์ด ์๋๊ฐ?
+- ๋ด๊ฐ ์ํ๋ ์คํ์ผ๋ก ๋ชจ๋ธ์ ์ ๋ํ๊ธฐ ์ํด ์ด๋ค ์ถ๊ฐ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋๊ฐ?
+
+์ด๋ฅผ ์ผ๋์ ๋๊ณ ์์๊ณผ ๋ ๋์ ํ์ง์ ๋ํ
์ผ์ ํฌํจํ๋๋ก ํ๋กฌํํธ๋ฅผ ๊ฐ์ ํด ๋ด
์๋ค:
+
+
+```python
+prompt += ", tribal panther make up, blue on red, side profile, looking away, serious eyes"
+prompt += " 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta"
+```
+
+์๋ก์ด ํ๋กฌํํธ๋ก ์ด๋ฏธ์ง ๋ฐฐ์น๋ฅผ ์์ฑํฉ๋๋ค:
+
+```python
+images = pipeline(**get_inputs(batch_size=8)).images
+image_grid(images, rows=2, cols=4)
+```
+
+
+

+
+
+๊ฝค ์ธ์์ ์
๋๋ค! `1`์ ์๋๋ฅผ ๊ฐ์ง `Generator`์ ํด๋นํ๋ ๋ ๋ฒ์งธ ์ด๋ฏธ์ง์ ํผ์ฌ์ฒด์ ๋์ด์ ๋ํ ํ
์คํธ๋ฅผ ์ถ๊ฐํ์ฌ ์กฐ๊ธ ๋ ์กฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค:
+
+```python
+prompts = [
+ "portrait photo of the oldest warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta",
+ "portrait photo of a old warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta",
+ "portrait photo of a warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta",
+ "portrait photo of a young warrior chief, tribal panther make up, blue on red, side profile, looking away, serious eyes 50mm portrait photography, hard rim lighting photography--beta --ar 2:3 --beta --upbeta",
+]
+
+generator = [torch.Generator("cuda").manual_seed(1) for _ in range(len(prompts))]
+images = pipeline(prompt=prompts, generator=generator, num_inference_steps=25).images
+image_grid(images)
+```
+
+
+

+
+
+## ๋ค์ ๋จ๊ณ
+
+์ด ํํ ๋ฆฌ์ผ์์๋ ๊ณ์ฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์ด๊ณ ์์ฑ๋ ์ถ๋ ฅ์ ํ์ง์ ๊ฐ์ ํ๊ธฐ ์ํด [`DiffusionPipeline`]์ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ต๋๋ค. ํ์ดํ๋ผ์ธ์ ๋ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ๋ค์ ๋ฆฌ์์ค๋ฅผ ์ดํด๋ณด์ธ์:
+
+- [PyTorch 2.0](./optimization/torch2.0) ๋ฐ [`torch.compile`](https://pytorch.org/docs/stable/generated/torch.compile.html)์ด ์ด๋ป๊ฒ ์ถ๋ก ์๋๋ฅผ 5~300% ํฅ์์ํฌ ์ ์๋์ง ์์๋ณด์ธ์. A100 GPU์์๋ ์ถ๋ก ์๋๊ฐ ์ต๋ 50%๊น์ง ๋นจ๋ผ์ง ์ ์์ต๋๋ค!
+- PyTorch 2๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ, [xFormers](./optimization/xformers)๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ธ ์ดํ
์
๋ฉ์ปค๋์ฆ์ PyTorch 1.13.1๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ์ค์ด๋ญ๋๋ค.
+- ๋ชจ๋ธ ์คํ๋ก๋ฉ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ต์ ํ ๊ธฐ๋ฒ์ [์ด ๊ฐ์ด๋](./optimization/fp16)์์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
\ No newline at end of file
diff --git a/docs/source/ko/training/controlnet.md b/docs/source/ko/training/controlnet.md
new file mode 100644
index 000000000000..46632fb8d18d
--- /dev/null
+++ b/docs/source/ko/training/controlnet.md
@@ -0,0 +1,331 @@
+
+
+# ControlNet
+
+[Adding Conditional Control to Text-to-Image Diffusion Models](https://arxiv.org/abs/2302.05543) (ControlNet)์ Lvmin Zhang๊ณผ Maneesh Agrawala์ ์ํด ์ฐ์ฌ์ก์ต๋๋ค.
+
+์ด ์์๋ [์๋ณธ ControlNet ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์์ ํ์ตํ๊ธฐ](https://github.com/lllyasviel/ControlNet/blob/main/docs/train.md)์ ๊ธฐ๋ฐํฉ๋๋ค. ControlNet์ ์๋ค์ ์ฑ์ฐ๊ธฐ ์ํด [small synthetic dataset](https://huggingface.co/datasets/fusing/fill50k)์ ์ฌ์ฉํด์ ํ์ต๋ฉ๋๋ค.
+
+## ์์กด์ฑ ์ค์นํ๊ธฐ
+
+์๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ต ์์กด์ฑ์ ์ค์นํด์ผ ํฉ๋๋ค.
+
+
+
+๊ฐ์ฅ ์ต์ ๋ฒ์ ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํ๊ธฐ ์ํด์๋, ์์ค์์ ์ค์นํ๊ณ ์ต์ ๋ฒ์ ์ ์ค์น๋ฅผ ์ ์งํ๋ ๊ฒ์ ๊ฐ๋ ฅํ๊ฒ ์ถ์ฒํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ ์คํฌ๋ฆฝํธ๋ค์ ์์ฃผ ์
๋ฐ์ดํธํ๊ณ ์์์ ๋ง์ถ ํน์ ํ ์๊ตฌ์ฌํญ์ ์ค์นํฉ๋๋ค.
+
+
+
+์ ์ฌํญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด์, ์๋ก์ด ๊ฐ์ํ๊ฒฝ์์ ๋ค์ ์ผ๋ จ์ ์คํ
์ ์คํํ์ธ์:
+
+```bash
+git clone https://github.com/huggingface/diffusers
+cd diffusers
+pip install -e .
+```
+
+๊ทธ ๋ค์์๋ [์์ ํด๋](https://github.com/huggingface/diffusers/tree/main/examples/controlnet)์ผ๋ก ์ด๋ํฉ๋๋ค.
+
+```bash
+cd examples/controlnet
+```
+
+์ด์ ์คํํ์ธ์:
+
+```bash
+pip install -r requirements.txt
+```
+
+[๐คAccelerate](https://github.com/huggingface/accelerate/) ํ๊ฒฝ์ ์ด๊ธฐํ ํฉ๋๋ค:
+
+```bash
+accelerate config
+```
+
+ํน์ ์ฌ๋ฌ๋ถ์ ํ๊ฒฝ์ด ๋ฌด์์ธ์ง ๋ชฐ๋ผ๋ ๊ธฐ๋ณธ์ ์ธ ๐คAccelerate ๊ตฌ์ฑ์ผ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค:
+
+```bash
+accelerate config default
+```
+
+ํน์ ๋น์ ์ ํ๊ฒฝ์ด ๋
ธํธ๋ถ ๊ฐ์ ์ํธ์์ฉํ๋ ์์ ์ง์ํ์ง ์๋๋ค๋ฉด, ์๋์ ์ฝ๋๋ก ์ด๊ธฐํ ํ ์ ์์ต๋๋ค:
+
+```python
+from accelerate.utils import write_basic_config
+
+write_basic_config()
+```
+
+## ์์ ์ฑ์ฐ๋ ๋ฐ์ดํฐ์
+
+์๋ณธ ๋ฐ์ดํฐ์
์ ControlNet [repo](https://huggingface.co/lllyasviel/ControlNet/blob/main/training/fill50k.zip)์ ์ฌ๋ผ์์์ง๋ง, ์ฐ๋ฆฌ๋ [์ฌ๊ธฐ](https://huggingface.co/datasets/fusing/fill50k)์ ์๋กญ๊ฒ ๋ค์ ์ฌ๋ ค์ ๐ค Datasets ๊ณผ ํธํ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋์ ํ์ต ์คํฌ๋ฆฝํธ ์์์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
+
+์ฐ๋ฆฌ์ ํ์ต ์์๋ ์๋ ControlNet์ ํ์ต์ ์ฐ์๋ [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5)์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ ์ง๋ง ControlNet์ ๋์๋๋ ์ด๋ Stable Diffusion ๋ชจ๋ธ([`CompVis/stable-diffusion-v1-4`](https://huggingface.co/CompVis/stable-diffusion-v1-4)) ํน์ [`stabilityai/stable-diffusion-2-1`](https://huggingface.co/stabilityai/stable-diffusion-2-1)์ ์ฆ๊ฐ๋ฅผ ์ํด ํ์ต๋ ์ ์์ต๋๋ค.
+
+์์ฒด ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ [ํ์ต์ ์ํ ๋ฐ์ดํฐ์
์์ฑํ๊ธฐ](create_dataset) ๊ฐ์ด๋๋ฅผ ํ์ธํ์ธ์.
+
+## ํ์ต
+
+์ด ํ์ต์ ์ฌ์ฉ๋ ๋ค์ ์ด๋ฏธ์ง๋ค์ ๋ค์ด๋ก๋ํ์ธ์:
+
+```sh
+wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png
+
+wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png
+```
+
+`MODEL_NAME` ํ๊ฒฝ ๋ณ์ (Hub ๋ชจ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ ์์ด๋ ํน์ ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ๋ ์ฃผ์)๋ฅผ ๋ช
์ํ๊ณ [`pretrained_model_name_or_path`](https://huggingface.co/docs/diffusers/en/api/diffusion_pipeline#diffusers.DiffusionPipeline.from_pretrained.pretrained_model_name_or_path) ์ธ์๋ก ํ๊ฒฝ๋ณ์๋ฅผ ๋ณด๋
๋๋ค.
+
+ํ์ต ์คํฌ๋ฆฝํธ๋ ๋น์ ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ `diffusion_pytorch_model.bin` ํ์ผ์ ์์ฑํ๊ณ ์ ์ฅํฉ๋๋ค.
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --learning_rate=1e-5 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=4 \
+ --push_to_hub
+```
+
+์ด ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ผ๋ก๋ ~38GB VRAM์ด ํ์ํฉ๋๋ค.
+
+๊ธฐ๋ณธ์ ์ผ๋ก ํ์ต ์คํฌ๋ฆฝํธ๋ ๊ฒฐ๊ณผ๋ฅผ ํ
์๋ณด๋์ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ์ค์น(weight)์ ํธํฅ(bias)์ ์ฌ์ฉํ๊ธฐ ์ํด `--report_to wandb` ๋ฅผ ์ ๋ฌํฉ๋๋ค.
+
+๋ ์์ batch(๋ฐฐ์น) ํฌ๊ธฐ๋ก gradient accumulation(๊ธฐ์ธ๊ธฐ ๋์ )์ ํ๋ฉด ํ์ต ์๊ตฌ์ฌํญ์ ~20 GB VRAM์ผ๋ก ์ค์ผ ์ ์์ต๋๋ค.
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --learning_rate=1e-5 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=1 \
+ --gradient_accumulation_steps=4 \
+ --push_to_hub
+```
+
+## ์ฌ๋ฌ๊ฐ GPU๋ก ํ์ตํ๊ธฐ
+
+`accelerate` ์ seamless multi-GPU ํ์ต์ ๊ณ ๋ คํฉ๋๋ค. `accelerate`๊ณผ ํจ๊ป ๋ถ์ฐ๋ ํ์ต์ ์คํํ๊ธฐ ์ํด [์ฌ๊ธฐ](https://huggingface.co/docs/accelerate/basic_tutorials/launch)
+์ ์ค๋ช
์ ํ์ธํ์ธ์. ์๋๋ ์์ ๋ช
๋ น์ด์
๋๋ค:
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch --mixed_precision="fp16" --multi_gpu train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --learning_rate=1e-5 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=4 \
+ --mixed_precision="fp16" \
+ --tracker_project_name="controlnet-demo" \
+ --report_to=wandb \
+ --push_to_hub
+```
+
+## ์์ ๊ฒฐ๊ณผ
+
+#### ๋ฐฐ์น ์ฌ์ด์ฆ 8๋ก 300 ์คํ
์ดํ:
+
+| | |
+|-------------------|:-------------------------:|
+| | ํธ๋ฅธ ๋ฐฐ๊ฒฝ๊ณผ ๋นจ๊ฐ ์ |
+ |  |
+| | ๊ฐ์ ๊ฝ ๋ฐฐ๊ฒฝ๊ณผ ์ฒญ๋ก์ ์ |
+ |  |
+
+#### ๋ฐฐ์น ์ฌ์ด์ฆ 8๋ก 6000 ์คํ
์ดํ:
+
+| | |
+|-------------------|:-------------------------:|
+| | ํธ๋ฅธ ๋ฐฐ๊ฒฝ๊ณผ ๋นจ๊ฐ ์ |
+ |  |
+| | ๊ฐ์ ๊ฝ ๋ฐฐ๊ฒฝ๊ณผ ์ฒญ๋ก์ ์ |
+ |  |
+
+## 16GB GPU์์ ํ์ตํ๊ธฐ
+
+16GB GPU์์ ํ์ตํ๊ธฐ ์ํด ๋ค์์ ์ต์ ํ๋ฅผ ์งํํ์ธ์:
+
+- ๊ธฐ์ธ๊ธฐ ์ฒดํฌํฌ์ธํธ ์ ์ฅํ๊ธฐ
+- bitsandbyte์ [8-bit optimizer](https://github.com/TimDettmers/bitsandbytes#requirements--installation)๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด ๋งํฌ์ ์ฐ๊ฒฐ๋ ์ค๋ช
์๋ฅผ ๋ณด์ธ์.
+
+์ด์ ํ์ต ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ ์ ์์ต๋๋ค:
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --learning_rate=1e-5 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=1 \
+ --gradient_accumulation_steps=4 \
+ --gradient_checkpointing \
+ --use_8bit_adam \
+ --push_to_hub
+```
+
+## 12GB GPU์์ ํ์ตํ๊ธฐ
+
+12GB GPU์์ ์คํํ๊ธฐ ์ํด ๋ค์์ ์ต์ ํ๋ฅผ ์งํํ์ธ์:
+
+- ๊ธฐ์ธ๊ธฐ ์ฒดํฌํฌ์ธํธ ์ ์ฅํ๊ธฐ
+- bitsandbyte์ 8-bit [optimizer](https://github.com/TimDettmers/bitsandbytes#requirements--installation)(๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด ๋งํฌ์ ์ฐ๊ฒฐ๋ ์ค๋ช
์๋ฅผ ๋ณด์ธ์)
+- [xFormers](https://huggingface.co/docs/diffusers/training/optimization/xformers)(๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด ๋งํฌ์ ์ฐ๊ฒฐ๋ ์ค๋ช
์๋ฅผ ๋ณด์ธ์)
+- ๊ธฐ์ธ๊ธฐ๋ฅผ `None`์ผ๋ก ์ค์
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --learning_rate=1e-5 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=1 \
+ --gradient_accumulation_steps=4 \
+ --gradient_checkpointing \
+ --use_8bit_adam \
+ --enable_xformers_memory_efficient_attention \
+ --set_grads_to_none \
+ --push_to_hub
+```
+
+`pip install xformers`์ผ๋ก `xformers`์ ํ์คํ ์ค์นํ๊ณ `enable_xformers_memory_efficient_attention`์ ์ฌ์ฉํ์ธ์.
+
+## 8GB GPU์์ ํ์ตํ๊ธฐ
+
+์ฐ๋ฆฌ๋ ControlNet์ ์ง์ํ๊ธฐ ์ํ DeepSpeed๋ฅผ ์ฒ ์ ํ๊ฒ ํ
์คํธํ์ง ์์์ต๋๋ค. ํ๊ฒฝ์ค์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฅํ ๋,
+๊ทธ ํ๊ฒฝ์ด ์ฑ๊ณต์ ์ผ๋ก ํ์ตํ๋์ง๋ฅผ ํ์ ํ์ง ์์์ต๋๋ค. ์ฑ๊ณตํ ํ์ต ์คํ์ ์ํด ์ค์ ์ ๋ณ๊ฒฝํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
+
+8GB GPU์์ ์คํํ๊ธฐ ์ํด ๋ค์์ ์ต์ ํ๋ฅผ ์งํํ์ธ์:
+
+- ๊ธฐ์ธ๊ธฐ ์ฒดํฌํฌ์ธํธ ์ ์ฅํ๊ธฐ
+- bitsandbyte์ 8-bit [optimizer](https://github.com/TimDettmers/bitsandbytes#requirements--installation)(๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด ๋งํฌ์ ์ฐ๊ฒฐ๋ ์ค๋ช
์๋ฅผ ๋ณด์ธ์)
+- [xFormers](https://huggingface.co/docs/diffusers/training/optimization/xformers)(๊ฐ ์ค์น๋์ง ์์๋ค๋ฉด ๋งํฌ์ ์ฐ๊ฒฐ๋ ์ค๋ช
์๋ฅผ ๋ณด์ธ์)
+- ๊ธฐ์ธ๊ธฐ๋ฅผ `None`์ผ๋ก ์ค์
+- DeepSpeed stage 2 ๋ณ์์ optimizer ์์๊ธฐ
+- fp16 ํผํฉ ์ ๋ฐ๋(precision)
+
+[DeepSpeed](https://www.deepspeed.ai/)๋ CPU ๋๋ NVME๋ก ํ
์๋ฅผ VRAM์์ ์คํ๋ก๋ํ ์ ์์ต๋๋ค.
+์ด๋ฅผ ์ํด์ ํจ์ฌ ๋ ๋ง์ RAM(์ฝ 25 GB)๊ฐ ํ์ํฉ๋๋ค.
+
+DeepSpeed stage 2๋ฅผ ํ์ฑํํ๊ธฐ ์ํด์ `accelerate config`๋ก ํ๊ฒฝ์ ๊ตฌ์ฑํด์ผํฉ๋๋ค.
+
+๊ตฌ์ฑ(configuration) ํ์ผ์ ์ด๋ฐ ๋ชจ์ต์ด์ด์ผ ํฉ๋๋ค:
+
+```yaml
+compute_environment: LOCAL_MACHINE
+deepspeed_config:
+ gradient_accumulation_steps: 4
+ offload_optimizer_device: cpu
+ offload_param_device: cpu
+ zero3_init_flag: false
+ zero_stage: 2
+distributed_type: DEEPSPEED
+```
+
+<ํ>
+
+[๋ฌธ์](https://huggingface.co/docs/accelerate/usage_guides/deepspeed)๋ฅผ ๋ ๋ง์ DeepSpeed ์ค์ ์ต์
์ ์ํด ๋ณด์ธ์.
+
+<ํ>
+
+๊ธฐ๋ณธ Adam optimizer๋ฅผ DeepSpeed'์ Adam
+`deepspeed.ops.adam.DeepSpeedCPUAdam` ์ผ๋ก ๋ฐ๊พธ๋ฉด ์๋นํ ์๋ ํฅ์์ ์ด๋ฃฐ์ ์์ง๋ง,
+Pytorch์ ๊ฐ์ ๋ฒ์ ์ CUDA toolchain์ด ํ์ํฉ๋๋ค. 8-๋นํธ optimizer๋ ํ์ฌ DeepSpeed์
+ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
+
+```bash
+export MODEL_DIR="runwayml/stable-diffusion-v1-5"
+export OUTPUT_DIR="path to save model"
+
+accelerate launch train_controlnet.py \
+ --pretrained_model_name_or_path=$MODEL_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --dataset_name=fusing/fill50k \
+ --resolution=512 \
+ --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
+ --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
+ --train_batch_size=1 \
+ --gradient_accumulation_steps=4 \
+ --gradient_checkpointing \
+ --enable_xformers_memory_efficient_attention \
+ --set_grads_to_none \
+ --mixed_precision fp16 \
+ --push_to_hub
+```
+
+## ์ถ๋ก
+
+ํ์ต๋ ๋ชจ๋ธ์ [`StableDiffusionControlNetPipeline`]๊ณผ ํจ๊ป ์คํ๋ ์ ์์ต๋๋ค.
+`base_model_path`์ `controlnet_path` ์ ๊ฐ์ ์ง์ ํ์ธ์ `--pretrained_model_name_or_path` ์
+`--output_dir` ๋ ํ์ต ์คํฌ๋ฆฝํธ์ ๊ฐ๋ณ์ ์ผ๋ก ์ง์ ๋ฉ๋๋ค.
+
+```py
+from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
+from diffusers.utils import load_image
+import torch
+
+base_model_path = "path to model"
+controlnet_path = "path to controlnet"
+
+controlnet = ControlNetModel.from_pretrained(controlnet_path, torch_dtype=torch.float16)
+pipe = StableDiffusionControlNetPipeline.from_pretrained(
+ base_model_path, controlnet=controlnet, torch_dtype=torch.float16
+)
+
+# ๋ ๋น ๋ฅธ ์ค์ผ์ค๋ฌ์ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ก diffusion ํ๋ก์ธ์ค ์๋ ์ฌ๋ฆฌ๊ธฐ
+pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
+# xformers๊ฐ ์ค์น๋์ง ์์ผ๋ฉด ์๋ ์ค์ ์ญ์ ํ๊ธฐ
+pipe.enable_xformers_memory_efficient_attention()
+
+pipe.enable_model_cpu_offload()
+
+control_image = load_image("./conditioning_image_1.png")
+prompt = "pale golden rod circle with old lace background"
+
+# ์ด๋ฏธ์ง ์์ฑํ๊ธฐ
+generator = torch.manual_seed(0)
+image = pipe(prompt, num_inference_steps=20, generator=generator, image=control_image).images[0]
+
+image.save("./output.png")
+```
diff --git a/docs/source/ko/training/create_dataset.md b/docs/source/ko/training/create_dataset.md
new file mode 100644
index 000000000000..0e5f5018f4c5
--- /dev/null
+++ b/docs/source/ko/training/create_dataset.md
@@ -0,0 +1,98 @@
+# ํ์ต์ ์ํ ๋ฐ์ดํฐ์
๋ง๋ค๊ธฐ
+
+[Hub](https://huggingface.co/datasets?task_categories=task_categories:text-to-image&sort=downloads) ์๋ ๋ชจ๋ธ ๊ต์ก์ ์ํ ๋ง์ ๋ฐ์ดํฐ์
์ด ์์ง๋ง,
+๊ด์ฌ์ด ์๊ฑฐ๋ ์ฌ์ฉํ๊ณ ์ถ์ ๋ฐ์ดํฐ์
์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ๐ค [Datasets](hf.co/docs/datasets) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
์ ๋ง๋ค ์ ์์ต๋๋ค.
+๋ฐ์ดํฐ์
๊ตฌ์กฐ๋ ๋ชจ๋ธ์ ํ์ตํ๋ ค๋ ์์
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
+๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ์
๊ตฌ์กฐ๋ unconditional ์ด๋ฏธ์ง ์์ฑ๊ณผ ๊ฐ์ ์์
์ ์ํ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์
๋๋ค.
+๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์
๊ตฌ์กฐ๋ ์ด๋ฏธ์ง ๋๋ ํ ๋ฆฌ์ text-to-image ์์ฑ๊ณผ ๊ฐ์ ์์
์ ํด๋นํ๋ ํ
์คํธ ์บก์
์ด ํฌํจ๋ ํ
์คํธ ํ์ผ์ผ ์ ์์ต๋๋ค.
+
+์ด ๊ฐ์ด๋์๋ ํ์ธ ํ๋ํ ๋ฐ์ดํฐ์
์ ๋ง๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค:
+
+- ์ด๋ฏธ์ง ํด๋๋ฅผ `--train_data_dir` ์ธ์์ ์ ๊ณตํฉ๋๋ค.
+- ๋ฐ์ดํฐ์
์ Hub์ ์
๋ก๋ํ๊ณ ๋ฐ์ดํฐ์
๋ฆฌํฌ์งํ ๋ฆฌ id๋ฅผ `--dataset_name` ์ธ์์ ์ ๋ฌํฉ๋๋ค.
+
+
+
+๐ก ํ์ต์ ์ฌ์ฉํ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์
์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ด๋ฏธ์ง ๋ฐ์ดํฐ์
๋ง๋ค๊ธฐ](https://huggingface.co/docs/datasets/image_dataset) ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
+
+
+
+## ํด๋ ํํ๋ก ๋ฐ์ดํฐ์
๊ตฌ์ถํ๊ธฐ
+
+Unconditional ์์ฑ์ ์ํด ์ด๋ฏธ์ง ํด๋๋ก ์์ ์ ๋ฐ์ดํฐ์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
+ํ์ต ์คํฌ๋ฆฝํธ๋ ๐ค Datasets์ [ImageFolder](https://huggingface.co/docs/datasets/en/image_dataset#imagefolder) ๋น๋๋ฅผ ์ฌ์ฉํ์ฌ
+์๋์ผ๋ก ํด๋์์ ๋ฐ์ดํฐ์
์ ๊ตฌ์ถํฉ๋๋ค. ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค :
+
+```bash
+data_dir/xxx.png
+data_dir/xxy.png
+data_dir/[...]/xxz.png
+```
+
+๋ฐ์ดํฐ์
๋๋ ํฐ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ `--train_data_dir` ์ธ์๋ก ์ ๋ฌํ ๋ค์ ํ์ต์ ์์ํ ์ ์์ต๋๋ค:
+
+```bash
+accelerate launch train_unconditional.py \
+ # argument๋ก ํด๋ ์ง์ ํ๊ธฐ \
+ --train_data_dir \
+
+```
+
+## Hub์ ๋ฐ์ดํฐ ์ฌ๋ฆฌ๊ธฐ
+
+
+
+๐ก ๋ฐ์ดํฐ์
์ ๋ง๋ค๊ณ Hub์ ์
๋ก๋ํ๋ ๊ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [๐ค Datasets์ ์ฌ์ฉํ ์ด๋ฏธ์ง ๊ฒ์](https://huggingface.co/blog/image-search-datasets) ๊ฒ์๋ฌผ์ ์ฐธ๊ณ ํ์ธ์.
+
+
+
+PIL ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ `์ด๋ฏธ์ง` ์ด์ ์์ฑํ๋ [์ด๋ฏธ์ง ํด๋](https://huggingface.co/docs/datasets/image_load#imagefolder) ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
์์ฑ์ ์์ํฉ๋๋ค.
+
+`data_dir` ๋๋ `data_files` ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์
์ ์์น๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
+`data_files` ๋งค๊ฐ๋ณ์๋ ํน์ ํ์ผ์ `train` ์ด๋ `test` ๋ก ๋ถ๋ฆฌํ ๋ฐ์ดํฐ์
์ ๋งคํํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค:
+
+```python
+from datasets import load_dataset
+
+# ์์ 1: ๋ก์ปฌ ํด๋
+dataset = load_dataset("imagefolder", data_dir="path_to_your_folder")
+
+# ์์ 2: ๋ก์ปฌ ํ์ผ (์ง์ ํฌ๋งท : tar, gzip, zip, xz, rar, zstd)
+dataset = load_dataset("imagefolder", data_files="path_to_zip_file")
+
+# ์์ 3: ์๊ฒฉ ํ์ผ (์ง์ ํฌ๋งท : tar, gzip, zip, xz, rar, zstd)
+dataset = load_dataset(
+ "imagefolder",
+ data_files="https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip",
+)
+
+# ์์ 4: ์ฌ๋ฌ๊ฐ๋ก ๋ถํ
+dataset = load_dataset(
+ "imagefolder", data_files={"train": ["path/to/file1", "path/to/file2"], "test": ["path/to/file3", "path/to/file4"]}
+)
+```
+
+[push_to_hub(https://huggingface.co/docs/datasets/v2.13.1/en/package_reference/main_classes#datasets.Dataset.push_to_hub) ์ ์ฌ์ฉํด์ Hub์ ๋ฐ์ดํฐ์
์ ์
๋ก๋ ํฉ๋๋ค:
+
+```python
+# ํฐ๋ฏธ๋์์ huggingface-cli login ์ปค๋งจ๋๋ฅผ ์ด๋ฏธ ์คํํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค
+dataset.push_to_hub("name_of_your_dataset")
+
+# ๊ฐ์ธ repo๋ก push ํ๊ณ ์ถ๋ค๋ฉด, `private=True` ์ ์ถ๊ฐํ์ธ์:
+dataset.push_to_hub("name_of_your_dataset", private=True)
+```
+
+์ด์ ๋ฐ์ดํฐ์
์ด๋ฆ์ `--dataset_name` ์ธ์์ ์ ๋ฌํ์ฌ ๋ฐ์ดํฐ์
์ ํ์ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```bash
+accelerate launch --mixed_precision="fp16" train_text_to_image.py \
+ --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5" \
+ --dataset_name="name_of_your_dataset" \
+
+```
+
+## ๋ค์ ๋จ๊ณ
+
+๋ฐ์ดํฐ์
์ ์์ฑํ์ผ๋ ์ด์ ํ์ต ์คํฌ๋ฆฝํธ์ `train_data_dir` (๋ฐ์ดํฐ์
์ด ๋ก์ปฌ์ด๋ฉด) ํน์ `dataset_name` (Hub์ ๋ฐ์ดํฐ์
์ ์ฌ๋ ธ์ผ๋ฉด) ์ธ์์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
+
+๋ค์ ๋จ๊ณ์์๋ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ์ฌ [unconditional ์์ฑ](https://huggingface.co/docs/diffusers/v0.18.2/en/training/unconditional_training) ๋๋ [ํ
์คํธ-์ด๋ฏธ์ง ์์ฑ](https://huggingface.co/docs/diffusers/training/text2image)์ ์ํ ๋ชจ๋ธ์ ํ์ต์์ผ๋ณด์ธ์!
diff --git a/docs/source/ko/training/custom_diffusion.md b/docs/source/ko/training/custom_diffusion.md
new file mode 100644
index 000000000000..0923c046cc6f
--- /dev/null
+++ b/docs/source/ko/training/custom_diffusion.md
@@ -0,0 +1,300 @@
+
+
+# ์ปค์คํ
Diffusion ํ์ต ์์
+
+[์ปค์คํ
Diffusion](https://arxiv.org/abs/2212.04488)์ ํผ์ฌ์ฒด์ ์ด๋ฏธ์ง ๋ช ์ฅ(4~5์ฅ)๋ง ์ฃผ์ด์ง๋ฉด Stable Diffusion์ฒ๋ผ text-to-image ๋ชจ๋ธ์ ์ปค์คํฐ๋ง์ด์งํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
+'train_custom_diffusion.py' ์คํฌ๋ฆฝํธ๋ ํ์ต ๊ณผ์ ์ ๊ตฌํํ๊ณ ์ด๋ฅผ Stable Diffusion์ ๋ง๊ฒ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
+
+์ด ๊ต์ก ์ฌ๋ก๋ [Nupur Kumari](https://nupurkmr9.github.io/)๊ฐ ์ ๊ณตํ์์ต๋๋ค. (Custom Diffusion์ ์ ์ ์ค ํ๋ช
).
+
+## ๋ก์ปฌ์์ PyTorch๋ก ์คํํ๊ธฐ
+
+### Dependencies ์ค์นํ๊ธฐ
+
+์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ต dependencies๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค:
+
+**์ค์**
+
+์์ ์คํฌ๋ฆฝํธ์ ์ต์ ๋ฒ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์คํํ๋ ค๋ฉด **์์ค๋ก๋ถํฐ ์ค์น**ํ๋ ๊ฒ์ ๋งค์ฐ ๊ถ์ฅํ๋ฉฐ, ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฃผ ์
๋ฐ์ดํธํ๋ ๋งํผ ์ผ๋ถ ์์ ๋ณ ์๊ตฌ ์ฌํญ์ ์ค์นํ๊ณ ์ค์น๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ์ํด ์ ๊ฐ์ ํ๊ฒฝ์์ ๋ค์ ๋จ๊ณ๋ฅผ ์คํํ์ธ์:
+
+
+```bash
+git clone https://github.com/huggingface/diffusers
+cd diffusers
+pip install -e .
+```
+
+[example folder](https://github.com/huggingface/diffusers/tree/main/examples/custom_diffusion)๋ก cdํ์ฌ ์ด๋ํ์ธ์.
+
+```
+cd examples/custom_diffusion
+```
+
+์ด์ ์คํ
+
+```bash
+pip install -r requirements.txt
+pip install clip-retrieval
+```
+
+๊ทธ๋ฆฌ๊ณ [๐คAccelerate](https://github.com/huggingface/accelerate/) ํ๊ฒฝ์ ์ด๊ธฐํ:
+
+```bash
+accelerate config
+```
+
+๋๋ ์ฌ์ฉ์ ํ๊ฒฝ์ ๋ํ ์ง๋ฌธ์ ๋ตํ์ง ์๊ณ ๊ธฐ๋ณธ ๊ฐ์ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ธ์.
+
+```bash
+accelerate config default
+```
+
+๋๋ ์ฌ์ฉ ์ค์ธ ํ๊ฒฝ์ด ๋ํํ ์
ธ์ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ(์: jupyter notebook)
+
+```python
+from accelerate.utils import write_basic_config
+
+write_basic_config()
+```
+### ๊ณ ์์ด ์์ ๐บ
+
+์ด์ ๋ฐ์ดํฐ์
์ ๊ฐ์ ธ์ต๋๋ค. [์ฌ๊ธฐ](https://www.cs.cmu.edu/~custom-diffusion/assets/data.zip)์์ ๋ฐ์ดํฐ์
์ ๋ค์ด๋ก๋ํ๊ณ ์์ถ์ ํ๋๋ค. ์ง์ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ๋ ค๋ฉด [ํ์ต์ฉ ๋ฐ์ดํฐ์
์์ฑํ๊ธฐ](create_dataset) ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
+
+๋ํ 'clip-retrieval'์ ์ฌ์ฉํ์ฌ 200๊ฐ์ ์ค์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๊ณ , regularization์ผ๋ก์ ์ด๋ฅผ ํ์ต ๋ฐ์ดํฐ์
์ ํ๊ฒ ์ด๋ฏธ์ง์ ๊ฒฐํฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฃผ์ด์ง ํ๊ฒ ์ด๋ฏธ์ง์ ๋ํ ๊ณผ์ ํฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ๋ค์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด `prior_loss_weight=1.`๋ก `prior_preservation`, `real_prior` regularization์ ํ์ฑํํ ์ ์์ต๋๋ค.
+ํด๋์ค_ํ๋กฌํํธ`๋ ๋์ ์ด๋ฏธ์ง์ ๋์ผํ ์นดํ
๊ณ ๋ฆฌ ์ด๋ฆ์ด์ด์ผ ํฉ๋๋ค. ์์ง๋ ์ค์ ์ด๋ฏธ์ง์๋ `class_prompt`์ ์ ์ฌํ ํ
์คํธ ์บก์
์ด ์์ต๋๋ค. ๊ฒ์๋ ์ด๋ฏธ์ง๋ `class_data_dir`์ ์ ์ฅ๋ฉ๋๋ค. ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ regularization์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด `real_prior`๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์ค์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ ค๋ฉด ํ๋ จ ์ ์ ์ด ๋ช
๋ น์ ๋จผ์ ์ฌ์ฉํ์ญ์์ค.
+
+```bash
+pip install clip-retrieval
+python retrieve.py --class_prompt cat --class_data_dir real_reg/samples_cat --num_class_images 200
+```
+
+**___์ฐธ๊ณ : [stable-diffusion-2](https://huggingface.co/stabilityai/stable-diffusion-2) 768x768 ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ 'ํด์๋'๋ฅผ 768๋ก ๋ณ๊ฒฝํ์ธ์.___**
+
+์คํฌ๋ฆฝํธ๋ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ์ `pytorch_custom_diffusion_weights.bin` ํ์ผ์ ์์ฑํ์ฌ ์ ์ฅ์์ ์ ์ฅํฉ๋๋ค.
+
+```bash
+export MODEL_NAME="CompVis/stable-diffusion-v1-4"
+export OUTPUT_DIR="path-to-save-model"
+export INSTANCE_DIR="./data/cat"
+
+accelerate launch train_custom_diffusion.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --instance_data_dir=$INSTANCE_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --class_data_dir=./real_reg/samples_cat/ \
+ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \
+ --class_prompt="cat" --num_class_images=200 \
+ --instance_prompt="photo of a cat" \
+ --resolution=512 \
+ --train_batch_size=2 \
+ --learning_rate=1e-5 \
+ --lr_warmup_steps=0 \
+ --max_train_steps=250 \
+ --scale_lr --hflip \
+ --modifier_token "" \
+ --push_to_hub
+```
+
+**๋ ๋ฎ์ VRAM ์๊ตฌ ์ฌํญ(GPU๋น 16GB)์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ํ๋ จํ๋ ค๋ฉด `--enable_xformers_memory_efficient_attention`์ ์ฌ์ฉํ์ธ์. ์ค์น ๋ฐฉ๋ฒ์ [๊ฐ์ด๋](https://github.com/facebookresearch/xformers)๋ฅผ ๋ฐ๋ฅด์ธ์.**
+
+๊ฐ์ค์น ๋ฐ ํธํฅ(`wandb`)์ ์ฌ์ฉํ์ฌ ์คํ์ ์ถ์ ํ๊ณ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ค๋ฉด(๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค) ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
+
+* `wandb` ์ค์น: `pip install wandb`.
+* ๋ก๊ทธ์ธ : `wandb login`.
+* ๊ทธ๋ฐ ๋ค์ ํธ๋ ์ด๋์ ์์ํ๋ ๋์ `validation_prompt`๋ฅผ ์ง์ ํ๊ณ `report_to`๋ฅผ `wandb`๋ก ์ค์ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ด๋ จ ์ธ์๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค:
+ * `num_validation_images`
+ * `validation_steps`
+
+```bash
+accelerate launch train_custom_diffusion.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --instance_data_dir=$INSTANCE_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --class_data_dir=./real_reg/samples_cat/ \
+ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \
+ --class_prompt="cat" --num_class_images=200 \
+ --instance_prompt="photo of a cat" \
+ --resolution=512 \
+ --train_batch_size=2 \
+ --learning_rate=1e-5 \
+ --lr_warmup_steps=0 \
+ --max_train_steps=250 \
+ --scale_lr --hflip \
+ --modifier_token "" \
+ --validation_prompt=" cat sitting in a bucket" \
+ --report_to="wandb" \
+ --push_to_hub
+```
+
+๋ค์์ [Weights and Biases page](https://wandb.ai/sayakpaul/custom-diffusion/runs/26ghrcau)์ ์์์ด๋ฉฐ, ์ฌ๋ฌ ํ์ต ์ธ๋ถ ์ ๋ณด์ ํจ๊ป ์ค๊ฐ ๊ฒฐ๊ณผ๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
+
+`--push_to_hub`๋ฅผ ์ง์ ํ๋ฉด ํ์ต๋ ํ๋ผ๋ฏธํฐ๊ฐ ํ๊น
ํ์ด์ค ํ๋ธ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋ฉ๋๋ค. ๋ค์์ [์์ ๋ฆฌํฌ์งํ ๋ฆฌ](https://huggingface.co/sayakpaul/custom-diffusion-cat)์
๋๋ค.
+
+### ๋ฉํฐ ์ปจ์
์ ๋ํ ํ์ต ๐ฑ๐ชต
+
+[this](https://github.com/ShivamShrirao/diffusers/blob/main/examples/dreambooth/train_dreambooth.py)์ ์ ์ฌํ๊ฒ ๊ฐ ์ปจ์
์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ [json](https://github.com/adobe-research/custom-diffusion/blob/main/assets/concept_list.json) ํ์ผ์ ์ ๊ณตํฉ๋๋ค.
+
+์ค์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ ค๋ฉด json ํ์ผ์ ๊ฐ ์ปจ์
์ ๋ํด ์ด ๋ช
๋ น์ ์คํํฉ๋๋ค.
+
+```bash
+pip install clip-retrieval
+python retrieve.py --class_prompt {} --class_data_dir {} --num_class_images 200
+```
+
+๊ทธ๋ผ ์ฐ๋ฆฌ๋ ํ์ต์ํฌ ์ค๋น๊ฐ ๋์์ต๋๋ค!
+
+```bash
+export MODEL_NAME="CompVis/stable-diffusion-v1-4"
+export OUTPUT_DIR="path-to-save-model"
+
+accelerate launch train_custom_diffusion.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --output_dir=$OUTPUT_DIR \
+ --concepts_list=./concept_list.json \
+ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \
+ --resolution=512 \
+ --train_batch_size=2 \
+ --learning_rate=1e-5 \
+ --lr_warmup_steps=0 \
+ --max_train_steps=500 \
+ --num_class_images=200 \
+ --scale_lr --hflip \
+ --modifier_token "+" \
+ --push_to_hub
+```
+
+๋ค์์ [Weights and Biases page](https://wandb.ai/sayakpaul/custom-diffusion/runs/3990tzkg)์ ์์์ด๋ฉฐ, ๋ค๋ฅธ ํ์ต ์ธ๋ถ ์ ๋ณด์ ํจ๊ป ์ค๊ฐ ๊ฒฐ๊ณผ๋ค์ ํ์ธํ ์ ์์ต๋๋ค.
+
+### ์ฌ๋ ์ผ๊ตด์ ๋ํ ํ์ต
+
+์ฌ๋ ์ผ๊ตด์ ๋ํ ํ์ธํ๋์ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ด ๋ ํจ๊ณผ์ ์ด๋ผ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค: `learning_rate=5e-6`, `max_train_steps=1000 to 2000`, `freeze_model=crossattn`์ ์ต์ 15~20๊ฐ์ ์ด๋ฏธ์ง๋ก ์ค์ ํฉ๋๋ค.
+
+์ค์ ์ด๋ฏธ์ง๋ฅผ ์์งํ๋ ค๋ฉด ํ๋ จ ์ ์ ์ด ๋ช
๋ น์ ๋จผ์ ์ฌ์ฉํ์ญ์์ค.
+
+```bash
+pip install clip-retrieval
+python retrieve.py --class_prompt person --class_data_dir real_reg/samples_person --num_class_images 200
+```
+
+์ด์ ํ์ต์ ์์ํ์ธ์!
+
+```bash
+export MODEL_NAME="CompVis/stable-diffusion-v1-4"
+export OUTPUT_DIR="path-to-save-model"
+export INSTANCE_DIR="path-to-images"
+
+accelerate launch train_custom_diffusion.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --instance_data_dir=$INSTANCE_DIR \
+ --output_dir=$OUTPUT_DIR \
+ --class_data_dir=./real_reg/samples_person/ \
+ --with_prior_preservation --real_prior --prior_loss_weight=1.0 \
+ --class_prompt="person" --num_class_images=200 \
+ --instance_prompt="photo of a person" \
+ --resolution=512 \
+ --train_batch_size=2 \
+ --learning_rate=5e-6 \
+ --lr_warmup_steps=0 \
+ --max_train_steps=1000 \
+ --scale_lr --hflip --noaug \
+ --freeze_model crossattn \
+ --modifier_token "" \
+ --enable_xformers_memory_efficient_attention \
+ --push_to_hub
+```
+
+## ์ถ๋ก
+
+์ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์ํจ ํ์๋ ์๋ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ก ์ ์คํํ ์ ์์ต๋๋ค. ํ๋กฌํํธ์ 'modifier token'(์: ์ ์์ ์์๋ \)์ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค.
+
+```python
+import torch
+from diffusers import DiffusionPipeline
+
+pipe = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16).to("cuda")
+pipe.unet.load_attn_procs("path-to-save-model", weight_name="pytorch_custom_diffusion_weights.bin")
+pipe.load_textual_inversion("path-to-save-model", weight_name=".bin")
+
+image = pipe(
+ " cat sitting in a bucket",
+ num_inference_steps=100,
+ guidance_scale=6.0,
+ eta=1.0,
+).images[0]
+image.save("cat.png")
+```
+
+ํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด๋ฌํ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ๋ก๋ํ ์ ์์ต๋๋ค:
+
+```python
+import torch
+from huggingface_hub.repocard import RepoCard
+from diffusers import DiffusionPipeline
+
+model_id = "sayakpaul/custom-diffusion-cat"
+card = RepoCard.load(model_id)
+base_model_id = card.data.to_dict()["base_model"]
+
+pipe = DiffusionPipeline.from_pretrained(base_model_id, torch_dtype=torch.float16).to("cuda")
+pipe.unet.load_attn_procs(model_id, weight_name="pytorch_custom_diffusion_weights.bin")
+pipe.load_textual_inversion(model_id, weight_name=".bin")
+
+image = pipe(
+ " cat sitting in a bucket",
+ num_inference_steps=100,
+ guidance_scale=6.0,
+ eta=1.0,
+).images[0]
+image.save("cat.png")
+```
+
+๋ค์์ ์ฌ๋ฌ ์ปจ์
์ผ๋ก ์ถ๋ก ์ ์ํํ๋ ์์ ์
๋๋ค:
+
+```python
+import torch
+from huggingface_hub.repocard import RepoCard
+from diffusers import DiffusionPipeline
+
+model_id = "sayakpaul/custom-diffusion-cat-wooden-pot"
+card = RepoCard.load(model_id)
+base_model_id = card.data.to_dict()["base_model"]
+
+pipe = DiffusionPipeline.from_pretrained(base_model_id, torch_dtype=torch.float16).to("cuda")
+pipe.unet.load_attn_procs(model_id, weight_name="pytorch_custom_diffusion_weights.bin")
+pipe.load_textual_inversion(model_id, weight_name=".bin")
+pipe.load_textual_inversion(model_id, weight_name=".bin")
+
+image = pipe(
+ "the cat sculpture in the style of a wooden pot",
+ num_inference_steps=100,
+ guidance_scale=6.0,
+ eta=1.0,
+).images[0]
+image.save("multi-subject.png")
+```
+
+์ฌ๊ธฐ์ '๊ณ ์์ด'์ '๋๋ฌด ๋๋น'๋ ์ฌ๋ฌ ์ปจ์
์ ๋งํฉ๋๋ค.
+
+### ํ์ต๋ ์ฒดํฌํฌ์ธํธ์์ ์ถ๋ก ํ๊ธฐ
+
+`--checkpointing_steps` ์ธ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ต ๊ณผ์ ์์ ์ ์ฅ๋ ์ ์ฒด ์ฒดํฌํฌ์ธํธ ์ค ํ๋์์ ์ถ๋ก ์ ์ํํ ์๋ ์์ต๋๋ค.
+
+## Grads๋ฅผ None์ผ๋ก ์ค์
+
+๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ์ `--set_grads_to_none` ์ธ์๋ฅผ ์ ๋ฌํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ์ ์ด 0์ด ์๋ ์์์ผ๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํน์ ๋์์ด ๋ณ๊ฒฝ๋๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด ์ธ์๋ฅผ ์ ๊ฑฐํ์ธ์.
+
+์์ธํ ์ ๋ณด: https://pytorch.org/docs/stable/generated/torch.optim.Optimizer.zero_grad.html
+
+## ์คํ ๊ฒฐ๊ณผ
+
+์คํ์ ๋ํ ์์ธํ ๋ด์ฉ์ [๋น์ฌ ์นํ์ด์ง](https://www.cs.cmu.edu/~custom-diffusion/)๋ฅผ ์ฐธ์กฐํ์ธ์.
\ No newline at end of file
diff --git a/docs/source/ko/training/distributed_inference.md b/docs/source/ko/training/distributed_inference.md
new file mode 100644
index 000000000000..826a7bbff352
--- /dev/null
+++ b/docs/source/ko/training/distributed_inference.md
@@ -0,0 +1,92 @@
+# ์ฌ๋ฌ GPU๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ์ถ๋ก
+
+๋ถ์ฐ ์ค์ ์์๋ ์ฌ๋ฌ ๊ฐ์ ํ๋กฌํํธ๋ฅผ ๋์์ ์์ฑํ ๋ ์ ์ฉํ ๐ค [Accelerate](https://huggingface.co/docs/accelerate/index) ๋๋ [PyTorch Distributed](https://pytorch.org/tutorials/beginner/dist_overview.html)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ GPU์์ ์ถ๋ก ์ ์คํํ ์ ์์ต๋๋ค.
+
+์ด ๊ฐ์ด๋์์๋ ๋ถ์ฐ ์ถ๋ก ์ ์ํด ๐ค Accelerate์ PyTorch Distributed๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฝ๋๋ค.
+
+## ๐ค Accelerate
+
+๐ค [Accelerate](https://huggingface.co/docs/accelerate/index)๋ ๋ถ์ฐ ์ค์ ์์ ์ถ๋ก ์ ์ฝ๊ฒ ํ๋ จํ๊ฑฐ๋ ์คํํ ์ ์๋๋ก ์ค๊ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๋ถ์ฐ ํ๊ฒฝ ์ค์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ์ฌ PyTorch ์ฝ๋์ ์ง์คํ ์ ์๋๋ก ํด์ค๋๋ค.
+
+์์ํ๋ ค๋ฉด Python ํ์ผ์ ์์ฑํ๊ณ [`accelerate.PartialState`]๋ฅผ ์ด๊ธฐํํ์ฌ ๋ถ์ฐ ํ๊ฒฝ์ ์์ฑํ๋ฉด, ์ค์ ์ด ์๋์ผ๋ก ๊ฐ์ง๋๋ฏ๋ก `rank` ๋๋ `world_size`๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ํ ํ์๊ฐ ์์ต๋๋ค. ['DiffusionPipeline`]์ `distributed_state.device`๋ก ์ด๋ํ์ฌ ๊ฐ ํ๋ก์ธ์ค์ GPU๋ฅผ ํ ๋นํฉ๋๋ค.
+
+์ด์ ์ปจํ
์คํธ ๊ด๋ฆฌ์๋ก [`~accelerate.PartialState.split_between_processes`] ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค ์์ ๋ฐ๋ผ ํ๋กฌํํธ๋ฅผ ์๋์ผ๋ก ๋ถ๋ฐฐํฉ๋๋ค.
+
+
+```py
+from accelerate import PartialState
+from diffusers import DiffusionPipeline
+
+pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
+distributed_state = PartialState()
+pipeline.to(distributed_state.device)
+
+with distributed_state.split_between_processes(["a dog", "a cat"]) as prompt:
+ result = pipeline(prompt).images[0]
+ result.save(f"result_{distributed_state.process_index}.png")
+```
+
+Use the `--num_processes` argument to specify the number of GPUs to use, and call `accelerate launch` to run the script:
+
+```bash
+accelerate launch run_distributed.py --num_processes=2
+```
+
+์์ธํ ๋ด์ฉ์ [๐ค Accelerate๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ์ถ๋ก ](https://huggingface.co/docs/accelerate/en/usage_guides/distributed_inference#distributed-inference-with-accelerate) ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+
+
+## Pytoerch ๋ถ์ฐ
+
+PyTorch๋ ๋ฐ์ดํฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ [`DistributedDataParallel`](https://pytorch.org/docs/stable/generated/torch.nn.parallel.DistributedDataParallel.html)์ ์ง์ํฉ๋๋ค.
+
+์์ํ๋ ค๋ฉด Python ํ์ผ์ ์์ฑํ๊ณ `torch.distributed` ๋ฐ `torch.multiprocessing`์ ์ํฌํธํ์ฌ ๋ถ์ฐ ํ๋ก์ธ์ค ๊ทธ๋ฃน์ ์ค์ ํ๊ณ ๊ฐ GPU์์ ์ถ๋ก ์ฉ ํ๋ก์ธ์ค๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ [`DiffusionPipeline`]๋ ์ด๊ธฐํํด์ผ ํฉ๋๋ค:
+
+ํ์ฐ ํ์ดํ๋ผ์ธ์ `rank`๋ก ์ด๋ํ๊ณ `get_rank`๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ก์ธ์ค์ GPU๋ฅผ ํ ๋นํ๋ฉด ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค:
+
+```py
+import torch
+import torch.distributed as dist
+import torch.multiprocessing as mp
+
+from diffusers import DiffusionPipeline
+
+sd = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
+```
+
+์ฌ์ฉํ ๋ฐฑ์๋ ์ ํ, ํ์ฌ ํ๋ก์ธ์ค์ `rank`, `world_size` ๋๋ ์ฐธ์ฌํ๋ ํ๋ก์ธ์ค ์๋ก ๋ถ์ฐ ํ๊ฒฝ ์์ฑ์ ์ฒ๋ฆฌํ๋ ํจ์[`init_process_group`]๋ฅผ ๋ง๋ค์ด ์ถ๋ก ์ ์คํํด์ผ ํฉ๋๋ค.
+
+2๊ฐ์ GPU์์ ์ถ๋ก ์ ๋ณ๋ ฌ๋ก ์คํํ๋ ๊ฒฝ์ฐ `world_size`๋ 2์
๋๋ค.
+
+```py
+def run_inference(rank, world_size):
+ dist.init_process_group("nccl", rank=rank, world_size=world_size)
+
+ sd.to(rank)
+
+ if torch.distributed.get_rank() == 0:
+ prompt = "a dog"
+ elif torch.distributed.get_rank() == 1:
+ prompt = "a cat"
+
+ image = sd(prompt).images[0]
+ image.save(f"./{'_'.join(prompt)}.png")
+```
+
+๋ถ์ฐ ์ถ๋ก ์ ์คํํ๋ ค๋ฉด [`mp.spawn`](https://pytorch.org/docs/stable/multiprocessing.html#torch.multiprocessing.spawn)์ ํธ์ถํ์ฌ `world_size`์ ์ ์๋ GPU ์์ ๋ํด `run_inference` ํจ์๋ฅผ ์คํํฉ๋๋ค:
+
+```py
+def main():
+ world_size = 2
+ mp.spawn(run_inference, args=(world_size,), nprocs=world_size, join=True)
+
+
+if __name__ == "__main__":
+ main()
+```
+
+์ถ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฃํ์ผ๋ฉด `--nproc_per_node` ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ GPU ์๋ฅผ ์ง์ ํ๊ณ `torchrun`์ ํธ์ถํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค:
+
+```bash
+torchrun run_distributed.py --nproc_per_node=2
+```
\ No newline at end of file
diff --git a/docs/source/ko/training/instructpix2pix.md b/docs/source/ko/training/instructpix2pix.md
new file mode 100644
index 000000000000..7d80ef6328fc
--- /dev/null
+++ b/docs/source/ko/training/instructpix2pix.md
@@ -0,0 +1,211 @@
+
+
+# InstructPix2Pix
+
+[InstructPix2Pix](https://arxiv.org/abs/2211.09800)๋ text-conditioned diffusion ๋ชจ๋ธ์ด ํ ์ด๋ฏธ์ง์ ํธ์ง์ ๋ฐ๋ฅผ ์ ์๋๋ก ํ์ธํ๋ํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ธํ๋๋ ๋ชจ๋ธ์ ๋ค์์ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํฉ๋๋ค:
+
+
+
+
+
+์ถ๋ ฅ์ ์
๋ ฅ ์ด๋ฏธ์ง์ ํธ์ง ์ง์๊ฐ ๋ฐ์๋ "์์ ๋" ์ด๋ฏธ์ง์
๋๋ค:
+
+
+
+
+
+`train_instruct_pix2pix.py` ์คํฌ๋ฆฝํธ([์ฌ๊ธฐ](https://github.com/huggingface/diffusers/blob/main/examples/instruct_pix2pix/train_instruct_pix2pix.py)์์ ์ฐพ์ ์ ์์ต๋๋ค.)๋ ํ์ต ์ ์ฐจ๋ฅผ ์ค๋ช
ํ๊ณ Stable Diffusion์ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
+
+
+*** `train_instruct_pix2pix.py`๋ [์๋ ๊ตฌํ](https://github.com/timothybrooks/instruct-pix2pix)์ ์ถฉ์คํ๋ฉด์ InstructPix2Pix ํ์ต ์ ์ฐจ๋ฅผ ๊ตฌํํ๊ณ ์์ง๋ง, [์๊ท๋ชจ ๋ฐ์ดํฐ์
](https://huggingface.co/datasets/fusing/instructpix2pix-1000-samples)์์๋ง ํ
์คํธ๋ฅผ ํ์ต๋๋ค. ์ด๋ ์ต์ข
๊ฒฐ๊ณผ์ ์ํฅ์ ๋ผ์น ์ ์์ต๋๋ค. ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ํด, ๋ ํฐ ๋ฐ์ดํฐ์
์์ ๋ ๊ธธ๊ฒ ํ์ตํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. [์ฌ๊ธฐ](https://huggingface.co/datasets/timbrooks/instructpix2pix-clip-filtered)์์ InstructPix2Pix ํ์ต์ ์ํด ํฐ ๋ฐ์ดํฐ์
์ ์ฐพ์ ์ ์์ต๋๋ค.
+***
+
+## PyTorch๋ก ๋ก์ปฌ์์ ์คํํ๊ธฐ
+
+### ์ข
์์ฑ(dependencies) ์ค์นํ๊ธฐ
+
+์ด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ต ์ข
์์ฑ์ ์ค์นํ์ธ์:
+
+**์ค์**
+
+์ต์ ๋ฒ์ ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํ๊ธฐ ์ํด, **์๋ณธ์ผ๋ก๋ถํฐ ์ค์น**ํ๋ ๊ฒ๊ณผ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฃผ ์
๋ฐ์ดํธํ๊ณ ์์ ๋ณ ์๊ตฌ์ฌํญ์ ์ค์นํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ฅผ ์ํด, ์๋ก์ด ๊ฐ์ ํ๊ฒฝ์์ ๋ค์ ์คํ
์ ์คํํ์ธ์:
+
+```bash
+git clone https://github.com/huggingface/diffusers
+cd diffusers
+pip install -e .
+```
+
+cd ๋ช
๋ น์ด๋ก ์์ ํด๋๋ก ์ด๋ํ์ธ์.
+```bash
+cd examples/instruct_pix2pix
+```
+
+์ด์ ์คํํ์ธ์.
+```bash
+pip install -r requirements.txt
+```
+
+๊ทธ๋ฆฌ๊ณ [๐คAccelerate](https://github.com/huggingface/accelerate/) ํ๊ฒฝ์์ ์ด๊ธฐํํ์ธ์:
+
+```bash
+accelerate config
+```
+
+ํน์ ํ๊ฒฝ์ ๋ํ ์ง๋ฌธ ์์ด ๊ธฐ๋ณธ์ ์ธ accelerate ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์์ ์คํํ์ธ์.
+
+```bash
+accelerate config default
+```
+
+ํน์ ์ฌ์ฉ ์ค์ธ ํ๊ฒฝ์ด notebook๊ณผ ๊ฐ์ ๋ํํ ์์ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ๋ ๋ค์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ฃผ์ธ์.
+
+```python
+from accelerate.utils import write_basic_config
+
+write_basic_config()
+```
+
+### ์์
+
+์ด์ ์ ์ธ๊ธํ๋ฏ์ด, ํ์ต์ ์ํด [์์ ๋ฐ์ดํฐ์
](https://huggingface.co/datasets/fusing/instructpix2pix-1000-samples)์ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ๊ทธ ๋ฐ์ดํฐ์
์ InstructPix2Pix ๋
ผ๋ฌธ์์ ์ฌ์ฉ๋ [์๋์ ๋ฐ์ดํฐ์
](https://huggingface.co/datasets/timbrooks/instructpix2pix-clip-filtered)๋ณด๋ค ์์ ๋ฒ์ ์
๋๋ค. ์์ ์ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ๊ธฐ ์ํด, [ํ์ต์ ์ํ ๋ฐ์ดํฐ์
๋ง๋ค๊ธฐ](create_dataset) ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ธ์.
+
+`MODEL_NAME` ํ๊ฒฝ ๋ณ์(ํ๋ธ ๋ชจ๋ธ ๋ ํฌ์งํ ๋ฆฌ ๋๋ ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ํฌํจ๋ ํด๋ ๊ฒฝ๋ก)๋ฅผ ์ง์ ํ๊ณ [`pretrained_model_name_or_path`](https://huggingface.co/docs/diffusers/en/api/diffusion_pipeline#diffusers.DiffusionPipeline.from_pretrained.pretrained_model_name_or_path) ์ธ์์ ์ ๋ฌํฉ๋๋ค. `DATASET_ID`์ ๋ฐ์ดํฐ์
์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค:
+
+
+```bash
+export MODEL_NAME="runwayml/stable-diffusion-v1-5"
+export DATASET_ID="fusing/instructpix2pix-1000-samples"
+```
+
+์ง๊ธ, ํ์ต์ ์คํํ ์ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ๋ ํฌ์งํ ๋ฆฌ์ ํ์ ํด๋์ ๋ชจ๋ ๊ตฌ์ฑ์์(`feature_extractor`, `scheduler`, `text_encoder`, `unet` ๋ฑ)๋ฅผ ์ ์ฅํฉ๋๋ค.
+
+```bash
+accelerate launch --mixed_precision="fp16" train_instruct_pix2pix.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --dataset_name=$DATASET_ID \
+ --enable_xformers_memory_efficient_attention \
+ --resolution=256 --random_flip \
+ --train_batch_size=4 --gradient_accumulation_steps=4 --gradient_checkpointing \
+ --max_train_steps=15000 \
+ --checkpointing_steps=5000 --checkpoints_total_limit=1 \
+ --learning_rate=5e-05 --max_grad_norm=1 --lr_warmup_steps=0 \
+ --conditioning_dropout_prob=0.05 \
+ --mixed_precision=fp16 \
+ --seed=42 \
+ --push_to_hub
+```
+
+
+์ถ๊ฐ์ ์ผ๋ก, ๊ฐ์ค์น์ ๋ฐ์ด์ด์ค๋ฅผ ํ์ต ๊ณผ์ ์ ๋ชจ๋ํฐ๋งํ์ฌ ๊ฒ์ฆ ์ถ๋ก ์ ์ํํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. `report_to="wandb"`์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```bash
+accelerate launch --mixed_precision="fp16" train_instruct_pix2pix.py \
+ --pretrained_model_name_or_path=$MODEL_NAME \
+ --dataset_name=$DATASET_ID \
+ --enable_xformers_memory_efficient_attention \
+ --resolution=256 --random_flip \
+ --train_batch_size=4 --gradient_accumulation_steps=4 --gradient_checkpointing \
+ --max_train_steps=15000 \
+ --checkpointing_steps=5000 --checkpoints_total_limit=1 \
+ --learning_rate=5e-05 --max_grad_norm=1 --lr_warmup_steps=0 \
+ --conditioning_dropout_prob=0.05 \
+ --mixed_precision=fp16 \
+ --val_image_url="https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png" \
+ --validation_prompt="make the mountains snowy" \
+ --seed=42 \
+ --report_to=wandb \
+ --push_to_hub
+ ```
+
+๋ชจ๋ธ ๋๋ฒ๊น
์ ์ ์ฉํ ์ด ํ๊ฐ ๋ฐฉ๋ฒ ๊ถ์ฅํฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด `wandb`๋ฅผ ์ค์นํ๋ ๊ฒ์ ์ฃผ๋ชฉํด์ฃผ์ธ์. `pip install wandb`๋ก ์คํํด `wandb`๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
+
+[์ฌ๊ธฐ](https://wandb.ai/sayakpaul/instruct-pix2pix/runs/ctr3kovq), ๋ช ๊ฐ์ง ํ๊ฐ ๋ฐฉ๋ฒ๊ณผ ํ์ต ํ๋ผ๋ฏธํฐ๋ฅผ ํฌํจํ๋ ์์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
+
+ ***์ฐธ๊ณ : ์๋ณธ ๋
ผ๋ฌธ์์, ์ ์๋ค์ 256x256 ์ด๋ฏธ์ง ํด์๋๋ก ํ์ตํ ๋ชจ๋ธ๋ก 512x512์ ๊ฐ์ ๋ ํฐ ํด์๋๋ก ์ ์ผ๋ฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์์์ต๋๋ค. ์ด๋ ํ์ต์ ์ฌ์ฉํ ํฐ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
๋๋ค.***
+
+ ## ๋ค์์ GPU๋ก ํ์ตํ๊ธฐ
+
+`accelerate`๋ ์ํํ ๋ค์์ GPU๋ก ํ์ต์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. `accelerate`๋ก ๋ถ์ฐ ํ์ต์ ์คํํ๋ [์ฌ๊ธฐ](https://huggingface.co/docs/accelerate/basic_tutorials/launch) ์ค๋ช
์ ๋ฐ๋ผ ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์์์ ๋ช
๋ น์ด ์
๋๋ค:
+
+
+```bash
+accelerate launch --mixed_precision="fp16" --multi_gpu train_instruct_pix2pix.py \
+ --pretrained_model_name_or_path=runwayml/stable-diffusion-v1-5 \
+ --dataset_name=sayakpaul/instructpix2pix-1000-samples \
+ --use_ema \
+ --enable_xformers_memory_efficient_attention \
+ --resolution=512 --random_flip \
+ --train_batch_size=4 --gradient_accumulation_steps=4 --gradient_checkpointing \
+ --max_train_steps=15000 \
+ --checkpointing_steps=5000 --checkpoints_total_limit=1 \
+ --learning_rate=5e-05 --lr_warmup_steps=0 \
+ --conditioning_dropout_prob=0.05 \
+ --mixed_precision=fp16 \
+ --seed=42 \
+ --push_to_hub
+```
+
+ ## ์ถ๋ก ํ๊ธฐ
+
+์ผ๋จ ํ์ต์ด ์๋ฃ๋๋ฉด, ์ถ๋ก ํ ์ ์์ต๋๋ค:
+
+ ```python
+import PIL
+import requests
+import torch
+from diffusers import StableDiffusionInstructPix2PixPipeline
+
+model_id = "your_model_id" # <- ์ด๋ฅผ ์์ ํ์ธ์.
+pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
+generator = torch.Generator("cuda").manual_seed(0)
+
+url = "https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/test_pix2pix_4.png"
+
+
+def download_image(url):
+ image = PIL.Image.open(requests.get(url, stream=True).raw)
+ image = PIL.ImageOps.exif_transpose(image)
+ image = image.convert("RGB")
+ return image
+
+
+image = download_image(url)
+prompt = "wipe out the lake"
+num_inference_steps = 20
+image_guidance_scale = 1.5
+guidance_scale = 10
+
+edited_image = pipe(
+ prompt,
+ image=image,
+ num_inference_steps=num_inference_steps,
+ image_guidance_scale=image_guidance_scale,
+ guidance_scale=guidance_scale,
+ generator=generator,
+).images[0]
+edited_image.save("edited_image.png")
+```
+
+ํ์ต ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ์ป์ ์์์ ๋ชจ๋ธ ๋ ํฌ์งํ ๋ฆฌ๋ ์ฌ๊ธฐ [sayakpaul/instruct-pix2pix](https://huggingface.co/sayakpaul/instruct-pix2pix)์์ ํ์ธํ ์ ์์ต๋๋ค.
+
+์ฑ๋ฅ์ ์ํ ์๋์ ํ์ง์ ์ ์ดํ๊ธฐ ์ํด ์ธ ๊ฐ์ง ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค:
+
+* `num_inference_steps`
+* `image_guidance_scale`
+* `guidance_scale`
+
+ํนํ, `image_guidance_scale`์ `guidance_scale`๋ ์์ฑ๋("์์ ๋") ์ด๋ฏธ์ง์์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.([์ฌ๊ธฐ](https://twitter.com/RisingSayak/status/1628392199196151808?s=20)์์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.)
+
+
+๋ง์ฝ InstructPix2Pix ํ์ต ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ค๋ฉด, ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ[Instruction-tuning Stable Diffusion with InstructPix2Pix](https://huggingface.co/blog/instruction-tuning-sd)์ ํ์ธํด์ฃผ์ธ์.
\ No newline at end of file
diff --git a/docs/source/ko/training/lora.md b/docs/source/ko/training/lora.md
index 42023d28417e..7a6320d6b156 100644
--- a/docs/source/ko/training/lora.md
+++ b/docs/source/ko/training/lora.md
@@ -47,7 +47,7 @@ huggingface-cli login
์์ญ์ต ๊ฐ์ ํ๋ผ๋ฉํฐ๋ค์ด ์๋ Stable Diffusion๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ํ์ธํ๋ํ๋ ๊ฒ์ ๋๋ฆฌ๊ณ ์ด๋ ค์ธ ์ ์์ต๋๋ค. LoRA๋ฅผ ์ฌ์ฉํ๋ฉด diffusion ๋ชจ๋ธ์ ํ์ธํ๋ํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ๊ณ ๋น ๋ฆ
๋๋ค. 8๋นํธ ์ตํฐ๋ง์ด์ ์ ๊ฐ์ ํธ๋ฆญ์ ์์กดํ์ง ์๊ณ ๋ 11GB์ GPU RAM์ผ๋ก ํ๋์จ์ด์์ ์คํํ ์ ์์ต๋๋ค.
-### ํ์ต [[text-to-image ํ์ต]]
+### ํ์ต[[dreambooth-training]]
[Pokรฉmon BLIP ์บก์
](https://huggingface.co/datasets/lambdalabs/pokemon-blip-captions) ๋ฐ์ดํฐ์
์ผ๋ก [`stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5)๋ฅผ ํ์ธํ๋ํด ๋๋ง์ ํฌ์ผ๋ชฌ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
@@ -89,7 +89,7 @@ accelerate launch train_dreambooth_lora.py \
--push_to_hub
```
-### ์ถ๋ก [[dreambooth ์ถ๋ก ]]
+### ์ถ๋ก [[dreambooth-inference]]
์ด์ [`StableDiffusionPipeline`]์์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ถ๋ฌ์ ์ถ๋ก ์ ์ํด ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
diff --git a/docs/source/ko/tutorials/basic_training.md b/docs/source/ko/tutorials/basic_training.md
index b780eeefee87..e18c82c4fd4b 100644
--- a/docs/source/ko/tutorials/basic_training.md
+++ b/docs/source/ko/tutorials/basic_training.md
@@ -96,7 +96,7 @@ huggingface-cli login
>>> dataset = load_dataset(config.dataset_name, split="train")
```
-๐ก[HugGan Community Event](https://huggingface.co/huggan) ์์ ์ถ๊ฐ์ ๋ฐ์ดํฐ์
์ ์ฐพ๊ฑฐ๋ ๋ก์ปฌ์ [`ImageFolder`](https://huggingface.co/docs/datasets/image_dataset#imagefolder)๋ฅผ ๋ง๋ฆ์ผ๋ก์จ ๋๋ง์ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. HugGan Community Event ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ์
์ ๊ฒฝ์ฐ ๋ ํฌ์งํ ๋ฆฌ์ id๋ก `config.dataset_name` ์ ์ค์ ํ๊ณ , ๋๋ง์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ `imagefolder` ๋ฅผ ์ค์ ํฉ๋๋ค.
+๐ก[HugGan Community Event](https://huggingface.co/huggan) ์์ ์ถ๊ฐ์ ๋ฐ์ดํฐ์
์ ์ฐพ๊ฑฐ๋ ๋ก์ปฌ์ [`ImageFolder`](https://huggingface.co/docs/datasets/image_dataset#imagefolder)๋ฅผ ๋ง๋ฆ์ผ๋ก์จ ๋๋ง์ ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. HugGan Community Event ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ์
์ ๊ฒฝ์ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ id๋ก `config.dataset_name` ์ ์ค์ ํ๊ณ , ๋๋ง์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ `imagefolder` ๋ฅผ ์ค์ ํฉ๋๋ค.
๐ค Datasets์ [`~datasets.Image`] ๊ธฐ๋ฅ์ ์ฌ์ฉํด ์๋์ผ๋ก ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉํ๊ณ [`PIL.Image`](https://pillow.readthedocs.io/en/stable/reference/Image.html)๋ก ๋ถ๋ฌ์ต๋๋ค. ์ด๋ฅผ ์๊ฐํ ํด๋ณด๋ฉด:
@@ -277,7 +277,7 @@ Output shape: torch.Size([1, 3, 128, 128])
... image_grid.save(f"{test_dir}/{epoch:04d}.png")
```
-TensorBoard์ ๋ก๊น
, ๊ทธ๋๋์ธํธ ๋์ ๋ฐ ํผํฉ ์ ๋ฐ๋ ํ์ต์ ์ฝ๊ฒ ์ํํ๊ธฐ ์ํด ๐ค Accelerate๋ฅผ ํ์ต ๋ฃจํ์ ํจ๊ป ์์ ๋งํ ๋ชจ๋ ๊ตฌ์ฑ ์ ๋ณด๋ค์ ๋ฌถ์ด ์งํํ ์ ์์ต๋๋ค. ํ๋ธ์ ๋ชจ๋ธ์ ์
๋ก๋ ํ๊ธฐ ์ํด ๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ ๋ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํจ์๋ฅผ ์์ฑํ๊ณ ํ๋ธ์ ์
๋ก๋ํ ์ ์์ต๋๋ค.
+TensorBoard์ ๋ก๊น
, ๊ทธ๋๋์ธํธ ๋์ ๋ฐ ํผํฉ ์ ๋ฐ๋ ํ์ต์ ์ฝ๊ฒ ์ํํ๊ธฐ ์ํด ๐ค Accelerate๋ฅผ ํ์ต ๋ฃจํ์ ํจ๊ป ์์ ๋งํ ๋ชจ๋ ๊ตฌ์ฑ ์ ๋ณด๋ค์ ๋ฌถ์ด ์งํํ ์ ์์ต๋๋ค. ํ๋ธ์ ๋ชจ๋ธ์ ์
๋ก๋ ํ๊ธฐ ์ํด ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ๋ฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํจ์๋ฅผ ์์ฑํ๊ณ ํ๋ธ์ ์
๋ก๋ํ ์ ์์ต๋๋ค.
๐ก์๋์ ํ์ต ๋ฃจํ๋ ์ด๋ ต๊ณ ๊ธธ์ด ๋ณด์ผ ์ ์์ง๋ง, ๋์ค์ ํ ์ค์ ์ฝ๋๋ก ํ์ต์ ํ๋ค๋ฉด ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ ๊ฒ์
๋๋ค! ๋ง์ฝ ๊ธฐ๋ค๋ฆฌ์ง ๋ชปํ๊ณ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด, ์๋ ์ฝ๋๋ฅผ ์์ ๋กญ๊ฒ ๋ถ์ฌ๋ฃ๊ณ ์๋์ํค๋ฉด ๋ฉ๋๋ค. ๐ค
diff --git a/docs/source/ko/using-diffusers/conditional_image_generation.md b/docs/source/ko/using-diffusers/conditional_image_generation.md
new file mode 100644
index 000000000000..5525ac990ca4
--- /dev/null
+++ b/docs/source/ko/using-diffusers/conditional_image_generation.md
@@ -0,0 +1,60 @@
+
+
+# ์กฐ๊ฑด๋ถ ์ด๋ฏธ์ง ์์ฑ
+
+[[open-in-colab]]
+
+์กฐ๊ฑด๋ถ ์ด๋ฏธ์ง ์์ฑ์ ์ฌ์ฉํ๋ฉด ํ
์คํธ ํ๋กฌํํธ์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ํ
์คํธ๋ ์๋ฒ ๋ฉ์ผ๋ก ๋ณํ๋๋ฉฐ, ์๋ฒ ๋ฉ์ ๋
ธ์ด์ฆ์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋๋ก ๋ชจ๋ธ์ ์กฐ๊ฑดํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
+
+[`DiffusionPipeline`]์ ์ถ๋ก ์ ์ํด ์ฌ์ ํ๋ จ๋ diffusion ์์คํ
์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์
๋๋ค.
+
+๋จผ์ [`DiffusionPipeline`]์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ค์ด๋ก๋ํ ํ์ดํ๋ผ์ธ [์ฒดํฌํฌ์ธํธ](https://huggingface.co/models?library=diffusers&sort=downloads)๋ฅผ ์ง์ ํฉ๋๋ค.
+
+์ด ๊ฐ์ด๋์์๋ [์ ์ฌ Diffusion](https://huggingface.co/CompVis/ldm-text2im-large-256)๊ณผ ํจ๊ป ํ
์คํธ-์ด๋ฏธ์ง ์์ฑ์ [`DiffusionPipeline`]์ ์ฌ์ฉํฉ๋๋ค:
+
+```python
+>>> from diffusers import DiffusionPipeline
+
+>>> generator = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")
+```
+
+[`DiffusionPipeline`]์ ๋ชจ๋ ๋ชจ๋ธ๋ง, ํ ํฐํ, ์ค์ผ์ค๋ง ๊ตฌ์ฑ ์์๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์บ์ํฉ๋๋ค.
+์ด ๋ชจ๋ธ์ ์ฝ 14์ต ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ GPU์์ ์คํํ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
+PyTorch์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑ๊ธฐ ๊ฐ์ฒด๋ฅผ GPU๋ก ์ด๋ํ ์ ์์ต๋๋ค:
+
+```python
+>>> generator.to("cuda")
+```
+
+์ด์ ํ
์คํธ ํ๋กฌํํธ์์ `์์ฑ๊ธฐ`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```python
+>>> image = generator("An image of a squirrel in Picasso style").images[0]
+```
+
+์ถ๋ ฅ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก [`PIL.Image`](https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=image#the-image-class) ๊ฐ์ฒด๋ก ๋ํ๋ฉ๋๋ค.
+
+ํธ์ถํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค:
+
+```python
+>>> image.save("image_of_squirrel_painting.png")
+```
+
+์๋ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์๋ด ๋ฐฐ์จ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ๋กญ๊ฒ ์กฐ์ ํ์ฌ ์ด๋ฏธ์ง ํ์ง์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํด ๋ณด์ธ์!
+
+
\ No newline at end of file
diff --git a/docs/source/ko/using-diffusers/contribute_pipeline.md b/docs/source/ko/using-diffusers/contribute_pipeline.md
new file mode 100644
index 000000000000..415d3da1a10d
--- /dev/null
+++ b/docs/source/ko/using-diffusers/contribute_pipeline.md
@@ -0,0 +1,182 @@
+
+
+# ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ
+
+
+
+๐ก ๋ชจ๋ ์ฌ๋์ด ์๋ ์ ํ ์์ด ์ฝ๊ฒ ์์
์ ๊ณต์ ํ ์ ์๋๋ก ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ถ๊ฐํ๋ ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ GitHub ์ด์ [#841](https://github.com/huggingface/diffusers/issues/841)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+
+
+์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ๋ฉด [`DiffusionPipeline`] ์์ ์ํ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. `DiffusionPipeline` ์์ ๊ตฌ์ถํ ๋์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๊ตฌ๋ ์ธ์๋ฅผ ํ๋๋ง ์ถ๊ฐํ๋ฉด ํ์ดํ๋ผ์ธ์ ๋ก๋ํ๊ณ ์ฌ์ฉํ ์ ์์ด ์ปค๋ฎค๋ํฐ๊ฐ ๋งค์ฐ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
+
+์ด๋ฒ ๊ฐ์ด๋์์๋ ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ ์๋ฆฌ๋ฅผ ์ค๋ช
ํฉ๋๋ค.
+๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ธฐ ์ํด `UNet`์ด ๋จ์ผ forward pass๋ฅผ ์ํํ๊ณ ์ค์ผ์ค๋ฌ๋ฅผ ํ ๋ฒ ํธ์ถํ๋ "one-step" ํ์ดํ๋ผ์ธ์ ๋ง๋ค๊ฒ ์ต๋๋ค.
+
+## ํ์ดํ๋ผ์ธ ์ด๊ธฐํ
+
+์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ํ `one_step_unet.py` ํ์ผ์ ์์ฑํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด ํ์ผ์์, Hub์์ ๋ชจ๋ธ ๊ฐ์ค์น์ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ๋ก๋ํ ์ ์๋๋ก [`DiffusionPipeline`]์ ์์ํ๋ ํ์ดํ๋ผ์ธ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค. one-step ํ์ดํ๋ผ์ธ์๋ `UNet`๊ณผ ์ค์ผ์ค๋ฌ๊ฐ ํ์ํ๋ฏ๋ก ์ด๋ฅผ `__init__` ํจ์์ ์ธ์๋ก ์ถ๊ฐํด์ผํฉ๋๋ค:
+
+```python
+from diffusers import DiffusionPipeline
+import torch
+
+
+class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
+ def __init__(self, unet, scheduler):
+ super().__init__()
+```
+
+ํ์ดํ๋ผ์ธ๊ณผ ๊ทธ ๊ตฌ์ฑ์์(`unet` and `scheduler`)๋ฅผ [`~DiffusionPipeline.save_pretrained`]์ผ๋ก ์ ์ฅํ ์ ์๋๋ก ํ๋ ค๋ฉด `register_modules` ํจ์์ ์ถ๊ฐํ์ธ์:
+
+```diff
+ from diffusers import DiffusionPipeline
+ import torch
+
+ class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
+ def __init__(self, unet, scheduler):
+ super().__init__()
+
++ self.register_modules(unet=unet, scheduler=scheduler)
+```
+
+์ด์ '์ด๊ธฐํ' ๋จ๊ณ๊ฐ ์๋ฃ๋์์ผ๋ forward pass๋ก ์ด๋ํ ์ ์์ต๋๋ค! ๐ฅ
+
+## Forward pass ์ ์
+
+Forward pass ์์๋(`__call__`๋ก ์ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค) ์ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ์์ ํ ์ฐฝ์ ์์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋๋ผ์ด one-step ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ, ์์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ `timestep=1`์ ์ค์ ํ์ฌ `unet`๊ณผ `scheduler`๋ฅผ ํ ๋ฒ๋ง ํธ์ถํฉ๋๋ค:
+
+```diff
+ from diffusers import DiffusionPipeline
+ import torch
+
+
+ class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
+ def __init__(self, unet, scheduler):
+ super().__init__()
+
+ self.register_modules(unet=unet, scheduler=scheduler)
+
++ def __call__(self):
++ image = torch.randn(
++ (1, self.unet.config.in_channels, self.unet.config.sample_size, self.unet.config.sample_size),
++ )
++ timestep = 1
+
++ model_output = self.unet(image, timestep).sample
++ scheduler_output = self.scheduler.step(model_output, timestep, image).prev_sample
+
++ return scheduler_output
+```
+
+๋๋ฌ์ต๋๋ค! ๐ ์ด์ ์ด ํ์ดํ๋ผ์ธ์ `unet`๊ณผ `scheduler`๋ฅผ ์ ๋ฌํ์ฌ ์คํํ ์ ์์ต๋๋ค:
+
+```python
+from diffusers import DDPMScheduler, UNet2DModel
+
+scheduler = DDPMScheduler()
+unet = UNet2DModel()
+
+pipeline = UnetSchedulerOneForwardPipeline(unet=unet, scheduler=scheduler)
+
+output = pipeline()
+```
+
+ํ์ง๋ง ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ค์น๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ก๋ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด one-step ํ์ดํ๋ผ์ธ์ [`google/ddpm-cifar10-32`](https://huggingface.co/google/ddpm-cifar10-32) ๊ฐ์ค์น๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค:
+
+```python
+pipeline = UnetSchedulerOneForwardPipeline.from_pretrained("google/ddpm-cifar10-32")
+
+output = pipeline()
+```
+
+## ํ์ดํ๋ผ์ธ ๊ณต์
+
+๐งจDiffusers [๋ฆฌํฌ์งํ ๋ฆฌ](https://github.com/huggingface/diffusers)์์ Pull Request๋ฅผ ์ด์ด [examples/community](https://github.com/huggingface/diffusers/tree/main/examples/community) ํ์ ํด๋์ `one_step_unet.py`์ ๋ฉ์ง ํ์ดํ๋ผ์ธ์ ์ถ๊ฐํ์ธ์.
+
+๋ณํฉ์ด ๋๋ฉด, `diffusers >= 0.4.0`์ด ์ค์น๋ ์ฌ์ฉ์๋ผ๋ฉด ๋๊ตฌ๋ `custom_pipeline` ์ธ์์ ์ง์ ํ์ฌ ์ด ํ์ดํ๋ผ์ธ์ ๋ง์ ์ฒ๋ผ ๐ช ์ฌ์ฉํ ์ ์์ต๋๋ค:
+
+```python
+from diffusers import DiffusionPipeline
+
+pipe = DiffusionPipeline.from_pretrained("google/ddpm-cifar10-32", custom_pipeline="one_step_unet")
+pipe()
+```
+
+์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ณต์ ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ Hub ์์ ์ ํธํ๋ [๋ชจ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ](https://huggingface.co/docs/hub/models-uploading)์ ์ง์ `one_step_unet.py` ํ์ผ์ ์
๋ก๋ํ๋ ๊ฒ์
๋๋ค. `one_step_unet.py` ํ์ผ์ ์ง์ ํ๋ ๋์ ๋ชจ๋ธ ์ ์ฅ์ id๋ฅผ `custom_pipeline` ์ธ์์ ์ ๋ฌํ์ธ์:
+
+```python
+from diffusers import DiffusionPipeline
+
+pipeline = DiffusionPipeline.from_pretrained("google/ddpm-cifar10-32", custom_pipeline="stevhliu/one_step_unet")
+```
+
+๋ค์ ํ์์ ๋ ๊ฐ์ง ๊ณต์ ์ํฌํ๋ก์ฐ๋ฅผ ๋น๊ตํ์ฌ ์์ ์๊ฒ ๊ฐ์ฅ ์ ํฉํ ์ต์
์ ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋๋ ์ ๋ณด๋ฅผ ํ์ธํ์ธ์:
+
+| | GitHub ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ | HF Hub ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ |
+|----------------|------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
+| ์ฌ์ฉ๋ฒ | ๋์ผ | ๋์ผ |
+| ๋ฆฌ๋ทฐ ๊ณผ์ | ๋ณํฉํ๊ธฐ ์ ์ GitHub์์ Pull Request๋ฅผ ์ด๊ณ Diffusers ํ์ ๊ฒํ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์๋๊ฐ ๋๋ฆด ์ ์์ต๋๋ค. | ๊ฒํ ์์ด Hub ์ ์ฅ์์ ๋ฐ๋ก ์
๋ก๋ํฉ๋๋ค. ๊ฐ์ฅ ๋น ๋ฅธ ์ํฌํ๋ก์ฐ ์
๋๋ค. |
+| ๊ฐ์์ฑ | ๊ณต์ Diffusers ์ ์ฅ์ ๋ฐ ๋ฌธ์์ ํฌํจ๋์ด ์์ต๋๋ค. | HF ํ๋ธ ํ๋กํ์ ํฌํจ๋๋ฉฐ ๊ฐ์์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ์์ ์ ์ฌ์ฉ๋/ํ๋ก๋ชจ์
์ ์์กดํฉ๋๋ค. |
+
+
+
+๐ก ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ ํ์ผ์ ์ํ๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ํจํค์ง๋ฅผ ์ค์นํ๊ธฐ๋ง ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค. ํ์ดํ๋ผ์ธ์ด ์๋์ผ๋ก ๊ฐ์ง๋๋ฏ๋ก `DiffusionPipeline`์์ ์์ํ๋ ํ์ดํ๋ผ์ธ ํด๋์ค๊ฐ ํ๋๋ง ์๋์ง ํ์ธํ์ธ์.
+
+
+
+## ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ด๋ป๊ฒ ์๋ํ๋์?
+
+์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ [`DiffusionPipeline`]์ ์์ํ๋ ํด๋์ค์
๋๋ค:
+
+- [`custom_pipeline`] ์ธ์๋ก ๋ก๋ํ ์ ์์ต๋๋ค.
+- ๋ชจ๋ธ ๊ฐ์ค์น ๋ฐ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ [`pretrained_model_name_or_path`]์์ ๋ก๋๋ฉ๋๋ค.
+- ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ฝ๋๋ `pipeline.py` ํ์ผ์ ์ ์๋์ด ์์ต๋๋ค.
+
+๊ณต์ ์ ์ฅ์์์ ๋ชจ๋ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ ์์ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ํ์ดํ๋ผ์ธ์ ์ง์ ์ ๋ฌํด์ผ ํฉ๋๋ค:
+
+```python
+from diffusers import DiffusionPipeline
+from transformers import CLIPFeatureExtractor, CLIPModel
+
+model_id = "CompVis/stable-diffusion-v1-4"
+clip_model_id = "laion/CLIP-ViT-B-32-laion2B-s34B-b79K"
+
+feature_extractor = CLIPFeatureExtractor.from_pretrained(clip_model_id)
+clip_model = CLIPModel.from_pretrained(clip_model_id, torch_dtype=torch.float16)
+
+pipeline = DiffusionPipeline.from_pretrained(
+ model_id,
+ custom_pipeline="clip_guided_stable_diffusion",
+ clip_model=clip_model,
+ feature_extractor=feature_extractor,
+ scheduler=scheduler,
+ torch_dtype=torch.float16,
+)
+```
+
+์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ง๋ฒ์ ๋ค์ ์ฝ๋์ ๋ด๊ฒจ ์์ต๋๋ค. ์ด ์ฝ๋๋ฅผ ํตํด ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ GitHub ๋๋ Hub์์ ๋ก๋ํ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ๐งจ Diffusers ํจํค์ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+```python
+# 2. ํ์ดํ๋ผ์ธ ํด๋์ค๋ฅผ ๋ก๋ํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Hub์์ ๋ก๋ํฉ๋๋ค
+# ๋ช
์์ ํด๋์ค์์ ๋ก๋ํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
+if custom_pipeline is not None:
+ pipeline_class = get_class_from_dynamic_module(
+ custom_pipeline, module_file=CUSTOM_PIPELINE_FILE_NAME, cache_dir=custom_pipeline
+ )
+elif cls != DiffusionPipeline:
+ pipeline_class = cls
+else:
+ diffusers_module = importlib.import_module(cls.__module__.split(".")[0])
+ pipeline_class = getattr(diffusers_module, config_dict["_class_name"])
+```
diff --git a/docs/source/ko/using-diffusers/control_brightness.md b/docs/source/ko/using-diffusers/control_brightness.md
new file mode 100644
index 000000000000..522da736ec64
--- /dev/null
+++ b/docs/source/ko/using-diffusers/control_brightness.md
@@ -0,0 +1,45 @@
+# ์ด๋ฏธ์ง ๋ฐ๊ธฐ ์กฐ์ ํ๊ธฐ
+
+Stable Diffusion ํ์ดํ๋ผ์ธ์ [์ผ๋ฐ์ ์ธ ๋ํจ์ ๋
ธ์ด์ฆ ์ค์ผ์ค๊ณผ ์ํ ๋จ๊ณ์ ๊ฒฐํจ์ด ์์](https://huggingface.co/papers/2305.08891) ๋
ผ๋ฌธ์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ ๋งค์ฐ ๋ฐ๊ฑฐ๋ ์ด๋์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ๋ ์ฑ๋ฅ์ด ํ๋ฒํฉ๋๋ค. ์ด ๋
ผ๋ฌธ์์ ์ ์ํ ์๋ฃจ์
์ ํ์ฌ [`DDIMScheduler`]์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ ์ด๋ฏธ์ง์ ๋ฐ๊ธฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+
+
+๐ก ์ ์๋ ์๋ฃจ์
์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ ๋งํฌ๋ ๋
ผ๋ฌธ์ ์ฐธ๊ณ ํ์ธ์!
+
+
+
+ํด๊ฒฐ์ฑ
์ค ํ๋๋ *v ์์ธก๊ฐ*๊ณผ *v ๋ก์ค*๋ก ๋ชจ๋ธ์ ํ๋ จํ๋ ๊ฒ์
๋๋ค. ๋ค์ flag๋ฅผ [`train_text_to_image.py`](https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image.py) ๋๋ [`train_text_to_image_lora.py`](https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image_lora.py) ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํ์ฌ `v_prediction`์ ํ์ฑํํฉ๋๋ค:
+
+```bash
+--prediction_type="v_prediction"
+```
+
+์๋ฅผ ๋ค์ด, `v_prediction`์ผ๋ก ๋ฏธ์ธ ์กฐ์ ๋ [`ptx0/pseudo-journey-v2`](https://huggingface.co/ptx0/pseudo-journey-v2) ์ฒดํฌํฌ์ธํธ๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
+
+๋ค์์ผ๋ก [`DDIMScheduler`]์์ ๋ค์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํฉ๋๋ค:
+
+1. rescale_betas_zero_snr=True`, ๋
ธ์ด์ฆ ์ค์ผ์ค์ ์ ๋ก ํฐ๋ฏธ๋ ์ ํธ ๋ ์ก์๋น(SNR)๋ก ์ฌ์กฐ์ ํฉ๋๋ค.
+2. `timestep_spacing="trailing"`, ๋ง์ง๋ง ํ์์คํ
๋ถํฐ ์ํ๋ง ์์
+
+```py
+>>> from diffusers import DiffusionPipeline, DDIMScheduler
+
+>>> pipeline = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2")
+# switch the scheduler in the pipeline to use the DDIMScheduler
+
+>>> pipeline.scheduler = DDIMScheduler.from_config(
+... pipeline.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
+... )
+>>> pipeline.to("cuda")
+```
+
+๋ง์ง๋ง์ผ๋ก ํ์ดํ๋ผ์ธ์ ๋ํ ํธ์ถ์์ `guidance_rescale`์ ์ค์ ํ์ฌ ๊ณผ๋ค ๋
ธ์ถ์ ๋ฐฉ์งํฉ๋๋ค:
+
+```py
+prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
+image = pipeline(prompt, guidance_rescale=0.7).images[0]
+```
+
+
+

+
\ No newline at end of file
diff --git a/docs/source/ko/using-diffusers/controlling_generation.md b/docs/source/ko/using-diffusers/controlling_generation.md
new file mode 100644
index 000000000000..b018aab9b970
--- /dev/null
+++ b/docs/source/ko/using-diffusers/controlling_generation.md
@@ -0,0 +1,226 @@
+
+
+# ์ ์ด๋ ์์ฑ
+
+Diffusion ๋ชจ๋ธ์ ์ํด ์์ฑ๋ ์ถ๋ ฅ์ ์ ์ดํ๋ ๊ฒ์ ์ปค๋ฎค๋ํฐ์์ ์ค๋ซ๋์ ์ถ๊ตฌํด ์์ผ๋ฉฐ ํ์ฌ ํ๋ฐํ ์ฐ๊ตฌ ์ฃผ์ ์
๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ง์ diffusion ๋ชจ๋ธ์์๋ ์ด๋ฏธ์ง์ ํ
์คํธ ํ๋กฌํํธ ๋ฑ ์
๋ ฅ์ ๋ฏธ๋ฌํ ๋ณํ๋ก ์ธํด ์ถ๋ ฅ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด์์ ์ธ ์ธ๊ณ์์๋ ์๋ฏธ๊ฐ ์ ์ง๋๊ณ ๋ณ๊ฒฝ๋๋ ๋ฐฉ์์ ์ ์ดํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
+
+์๋ฏธ ๋ณด์กด์ ๋๋ถ๋ถ์ ์๋ ์
๋ ฅ์ ๋ณํ๋ฅผ ์ถ๋ ฅ์ ๋ณํ์ ์ ํํ๊ฒ ๋งคํํ๋ ๊ฒ์ผ๋ก ์ถ์๋ฉ๋๋ค. ์ฆ, ํ๋กฌํํธ์์ ํผ์ฌ์ฒด์ ํ์ฉ์ฌ๋ฅผ ์ถ๊ฐํ๋ฉด ์ ์ฒด ์ด๋ฏธ์ง๊ฐ ๋ณด์กด๋๊ณ ๋ณ๊ฒฝ๋ ํผ์ฌ์ฒด๋ง ์์ ๋ฉ๋๋ค. ๋๋ ํน์ ํผ์ฌ์ฒด์ ์ด๋ฏธ์ง๋ฅผ ๋ณํํ๋ฉด ํผ์ฌ์ฒด์ ํฌ์ฆ๊ฐ ์ ์ง๋ฉ๋๋ค.
+
+์ถ๊ฐ์ ์ผ๋ก ์์ฑ๋ ์ด๋ฏธ์ง์ ํ์ง์๋ ์๋ฏธ ๋ณด์กด ์ธ์๋ ์ํฅ์ ๋ฏธ์น๊ณ ์ ํ๋ ํ์ง์ด ์์ต๋๋ค. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฌผ์ ํ์ง์ด ์ข๊ฑฐ๋ ํน์ ์คํ์ผ์ ๊ณ ์ํ๊ฑฐ๋ ์ฌ์ค์ ์ด๊ธฐ๋ฅผ ์ํฉ๋๋ค.
+
+diffusion ๋ชจ๋ธ ์์ฑ์ ์ ์ดํ๊ธฐ ์ํด `diffusers`๊ฐ ์ง์ํ๋ ๋ช ๊ฐ์ง ๊ธฐ์ ์ ๋ฌธ์ํํฉ๋๋ค. ๋ง์ ๋ถ๋ถ์ด ์ต์ฒจ๋จ ์ฐ๊ตฌ์ด๋ฉฐ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค. ๋ช
ํํ ์ค๋ช
์ด ํ์ํ๊ฑฐ๋ ์ ์ ์ฌํญ์ด ์์ผ๋ฉด ์ฃผ์ ํ์ง ๋ง์๊ณ [ํฌ๋ผ](https://discuss.huggingface.co/) ๋๋ [GitHub ์ด์](https://github.com/huggingface/diffusers/issues)์์ ํ ๋ก ์ ์์ํ์ธ์.
+
+์์ฑ ์ ์ด ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ต์ ์ธ ์ค๋ช
๊ณผ ๊ธฐ์ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐ์ ์ ๋ํ ์์ธํ ์ค๋ช
์ ํ์ดํ๋ผ์ธ์์ ๋งํฌ๋ ์๋ณธ ๋
ผ๋ฌธ์ ์ฐธ์กฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
+
+์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ์ ์ ํ ๊ธฐ์ ์ ์ ํํด์ผ ํฉ๋๋ค. ๋ง์ ๊ฒฝ์ฐ ์ด๋ฌํ ๊ธฐ๋ฒ์ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ
์คํธ ๋ฐ์ ๊ณผ SEGA๋ฅผ ๊ฒฐํฉํ์ฌ ํ
์คํธ ๋ฐ์ ์ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ถ๋ ฅ์ ๋ ๋ง์ ์๋ฏธ์ ์ง์นจ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
+
+๋ณ๋์ ์ธ๊ธ์ด ์๋ ํ, ์ด๋ฌํ ๊ธฐ๋ฒ์ ๊ธฐ์กด ๋ชจ๋ธ๊ณผ ํจ๊ป ์๋ํ๋ฉฐ ์์ฒด ๊ฐ์ค์น๊ฐ ํ์ํ์ง ์์ ๊ธฐ๋ฒ์
๋๋ค.
+
+1. [Instruct Pix2Pix](#instruct-pix2pix)
+2. [Pix2Pix Zero](#pix2pixzero)
+3. [Attend and Excite](#attend-and-excite)
+4. [Semantic Guidance](#semantic-guidance)
+5. [Self-attention Guidance](#self-attention-guidance)
+6. [Depth2Image](#depth2image)
+7. [MultiDiffusion Panorama](#multidiffusion-panorama)
+8. [DreamBooth](#dreambooth)
+9. [Textual Inversion](#textual-inversion)
+10. [ControlNet](#controlnet)
+11. [Prompt Weighting](#prompt-weighting)
+12. [Custom Diffusion](#custom-diffusion)
+13. [Model Editing](#model-editing)
+14. [DiffEdit](#diffedit)
+15. [T2I-Adapter](#t2i-adapter)
+
+ํธ์๋ฅผ ์ํด, ์ถ๋ก ๋ง ํ๊ฑฐ๋ ํ์ธํ๋/ํ์ตํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
+
+| **Method** | **Inference only** | **Requires training /
fine-tuning** | **Comments** |
+| :-------------------------------------------------: | :----------------: | :-------------------------------------: | :---------------------------------------------------------------------------------------------: |
+| [Instruct Pix2Pix](#instruct-pix2pix) | โ
| โ | Can additionally be
fine-tuned for better
performance on specific
edit instructions. |
+| [Pix2Pix Zero](#pix2pixzero) | โ
| โ | |
+| [Attend and Excite](#attend-and-excite) | โ
| โ | |
+| [Semantic Guidance](#semantic-guidance) | โ
| โ | |
+| [Self-attention Guidance](#self-attention-guidance) | โ
| โ | |
+| [Depth2Image](#depth2image) | โ
| โ | |
+| [MultiDiffusion Panorama](#multidiffusion-panorama) | โ
| โ | |
+| [DreamBooth](#dreambooth) | โ | โ
| |
+| [Textual Inversion](#textual-inversion) | โ | โ
| |
+| [ControlNet](#controlnet) | โ
| โ | A ControlNet can be
trained/fine-tuned on
a custom conditioning. |
+| [Prompt Weighting](#prompt-weighting) | โ
| โ | |
+| [Custom Diffusion](#custom-diffusion) | โ | โ
| |
+| [Model Editing](#model-editing) | โ
| โ | |
+| [DiffEdit](#diffedit) | โ
| โ | |
+| [T2I-Adapter](#t2i-adapter) | โ
| โ | |
+
+## Pix2Pix Instruct
+
+[Paper](https://arxiv.org/abs/2211.09800)
+
+[Instruct Pix2Pix](../api/pipelines/stable_diffusion/pix2pix) ๋ ์
๋ ฅ ์ด๋ฏธ์ง ํธ์ง์ ์ง์ํ๊ธฐ ์ํด stable diffusion์์ ๋ฏธ์ธ-์กฐ์ ๋์์ต๋๋ค. ์ด๋ฏธ์ง์ ํธ์ง์ ์ค๋ช
ํ๋ ํ๋กฌํํธ๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ์ ํธ์ง๋ ์ด๋ฏธ์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
+Instruct Pix2Pix๋ [InstructGPT](https://openai.com/blog/instruction-following/)์ ๊ฐ์ ํ๋กฌํํธ์ ์ ์๋ํ๋๋ก ๋ช
์์ ์ผ๋ก ํ๋ จ๋์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/pix2pix)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Pix2Pix Zero
+
+[Paper](https://arxiv.org/abs/2302.03027)
+
+[Pix2Pix Zero](../api/pipelines/stable_diffusion/pix2pix_zero)๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ์ด๋ฏธ์ง ์๋ฏธ๋ฅผ ์ ์งํ๋ฉด์ ํ ๊ฐ๋
์ด๋ ํผ์ฌ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ๋
์ด๋ ํผ์ฌ์ฒด๋ก ๋ณํ๋๋๋ก ์ด๋ฏธ์ง๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
+
+๋
ธ์ด์ฆ ์ ๊ฑฐ ํ๋ก์ธ์ค๋ ํ ๊ฐ๋
์ ์๋ฒ ๋ฉ์์ ๋ค๋ฅธ ๊ฐ๋
์ ์๋ฒ ๋ฉ์ผ๋ก ์๋ด๋ฉ๋๋ค. ์ค๊ฐ ์ ๋ณต(intermediate latents)์ ๋๋
ธ์ด์ง(denoising?) ํ๋ก์ธ์ค ์ค์ ์ต์ ํ๋์ด ์ฐธ์กฐ ์ฃผ์ ์ง๋(reference attention maps)๋ฅผ ํฅํด ๋์๊ฐ๋๋ค. ์ฐธ์กฐ ์ฃผ์ ์ง๋(reference attention maps)๋ ์
๋ ฅ ์ด๋ฏธ์ง์ ๋
ธ์ด์ฆ ์ ๊ฑฐ(?) ํ๋ก์ธ์ค์์ ๋์จ ๊ฒ์ผ๋ก ์๋ฏธ ๋ณด์กด์ ์ฅ๋ คํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
+
+Pix2Pix Zero๋ ํฉ์ฑ ์ด๋ฏธ์ง์ ์ค์ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๋ ๋ฐ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+- ํฉ์ฑ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๋ ค๋ฉด ๋จผ์ ์บก์
์ด ์ง์ ๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
+ ๋ค์์ผ๋ก ํธ์งํ ์ปจ์
๊ณผ ์๋ก์ด ํ๊ฒ ์ปจ์
์ ๋ํ ์ด๋ฏธ์ง ์บก์
์ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ์ํด [Flan-T5](https://huggingface.co/docs/transformers/model_doc/flan-t5)์ ๊ฐ์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ
์คํธ ์ธ์ฝ๋๋ฅผ ํตํด ์์ค ๊ฐ๋
๊ณผ ๋์ ๊ฐ๋
๋ชจ๋์ ๋ํ "ํ๊ท " ํ๋กฌํํธ ์๋ฒ ๋ฉ์ ์์ฑํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ํฉ์ฑ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๊ธฐ ์ํด pix2pix-zero ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
+- ์ค์ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๋ ค๋ฉด ๋จผ์ [BLIP](https://huggingface.co/docs/transformers/model_doc/blip)๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ์บก์
์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋กฌํํธ์ ์ด๋ฏธ์ง์ ddim ๋ฐ์ ์ ์ ์ฉํ์ฌ "์ญ(inverse)" latents์ ์์ฑํฉ๋๋ค. ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ค ๋ฐ ๋์ ๊ฐ๋
๋ชจ๋์ ๋ํ "ํ๊ท (mean)" ํ๋กฌํํธ ์๋ฒ ๋ฉ์ด ์์ฑ๋๊ณ ๋ง์ง๋ง์ผ๋ก "์ญ(inverse)" latents์ ๊ฒฐํฉ๋ pix2pix-zero ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ฏธ์ง๋ฅผ ํธ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
+
+
+
+Pix2Pix Zero๋ '์ ๋ก ์ท(zero-shot)' ์ด๋ฏธ์ง ํธ์ง์ด ๊ฐ๋ฅํ ์ต์ด์ ๋ชจ๋ธ์
๋๋ค.
+์ฆ, ์ด ๋ชจ๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ๋ฐ ์๋น์์ฉ GPU์์ 1๋ถ ์ด๋ด์ ์ด๋ฏธ์ง๋ฅผ ํธ์งํ ์ ์์ต๋๋ค(../api/pipelines/stable_diffusion/pix2pix_zero#usage-example).
+
+
+
+์์์ ์ธ๊ธํ๋ฏ์ด Pix2Pix Zero์๋ ํน์ ๊ฐ๋
์ผ๋ก ์ธ๋๋ฅผ ์ ๋ํ๊ธฐ ์ํด (UNet, VAE ๋๋ ํ
์คํธ ์ธ์ฝ๋๊ฐ ์๋) latents์ ์ต์ ํํ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค.์ฆ, ์ ์ฒด ํ์ดํ๋ผ์ธ์ ํ์ค [StableDiffusionPipeline](../api/pipelines/stable_diffusion/text2img)๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/pix2pix_zero)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Attend and Excite
+
+[Paper](https://arxiv.org/abs/2301.13826)
+
+[Attend and Excite](../api/pipelines/stable_diffusion/attend_and_excite)๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋กฌํํธ์ ํผ์ฌ์ฒด๊ฐ ์ต์ข
์ด๋ฏธ์ง์ ์ถฉ์คํ๊ฒ ํํ๋๋๋ก ํ ์ ์์ต๋๋ค.
+
+์ด๋ฏธ์ง์ ์กด์ฌํด์ผ ํ๋ ํ๋กฌํํธ์ ํผ์ฌ์ฒด์ ํด๋นํ๋ ์ผ๋ จ์ ํ ํฐ ์ธ๋ฑ์ค๊ฐ ์
๋ ฅ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ๋
ธ์ด์ฆ ์ ๊ฑฐ ์ค์ ๊ฐ ํ ํฐ ์ธ๋ฑ์ค๋ ์ด๋ฏธ์ง์ ์ต์ ํ ํจ์น ์ด์์ ๋ํด ์ต์ ์ฃผ์ ์๊ณ๊ฐ์ ๊ฐ๋๋ก ๋ณด์ฅ๋ฉ๋๋ค. ๋ชจ๋ ํผ์ฌ์ฒด ํ ํฐ์ ๋ํด ์ฃผ์ ์๊ณ๊ฐ์ด ํต๊ณผ๋ ๋๊น์ง ๋
ธ์ด์ฆ ์ ๊ฑฐ ํ๋ก์ธ์ค ์ค์ ์ค๊ฐ ์ ๋ณต๊ธฐ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ์ต์ ํ๋์ด ๊ฐ์ฅ ์ํํ ์ทจ๊ธ๋๋ ํผ์ฌ์ฒด ํ ํฐ์ ์ฃผ์๋ ฅ์ ๊ฐํํฉ๋๋ค.
+
+Pix2Pix Zero์ ๋ง์ฐฌ๊ฐ์ง๋ก Attend and Excite ์ญ์ ํ์ดํ๋ผ์ธ์ ๋ฏธ๋ ์ต์ ํ ๋ฃจํ(์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ๊ทธ๋๋ก ๋ ์ฑ)๊ฐ ํฌํจ๋๋ฉฐ, ์ผ๋ฐ์ ์ธ 'StableDiffusionPipeline'๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/attend_and_excite)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Semantic Guidance (SEGA)
+
+[Paper](https://arxiv.org/abs/2301.12247)
+
+์๋ฏธ์ ๋(SEGA)๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ์ง์์ ํ๋ ์ด์์ ์ปจ์
์ ์ ์ฉํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ปจ์
์ ๊ฐ๋๋ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ฆ, ์ค๋ง์ผ ์ปจ์
์ ์ฌ์ฉํ์ฌ ์ธ๋ฌผ ์ฌ์ง์ ์ค๋ง์ผ์ ์ ์ง์ ์ผ๋ก ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ์ ์์ต๋๋ค.
+
+๋ถ๋ฅ๊ธฐ ๋ฌด๋ฃ ์๋ด(classifier free guidance)๊ฐ ๋น ํ๋กฌํํธ ์
๋ ฅ์ ํตํด ์๋ด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ, SEGA๋ ๊ฐ๋
ํ๋กฌํํธ์ ๋ํ ์๋ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ฐ๋
ํ๋กฌํํธ๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ๊ฐ๋
ํ๋กฌํํธ๋ ์๋ด๊ฐ ๊ธ์ ์ ์ผ๋ก ์ ์ฉ๋๋์ง ๋๋ ๋ถ์ ์ ์ผ๋ก ์ ์ฉ๋๋์ง์ ๋ฐ๋ผ ํด๋น ๊ฐ๋
์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
+
+Pix2Pix Zero ๋๋ Attend and Excite์ ๋ฌ๋ฆฌ SEGA๋ ๋ช
์์ ์ธ ๊ทธ๋ผ๋ฐ์ด์
๊ธฐ๋ฐ ์ต์ ํ๋ฅผ ์ํํ๋ ๋์ ํ์ฐ ํ๋ก์ธ์ค์ ์ง์ ์ํธ ์์ฉํฉ๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/semantic_stable_diffusion)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Self-attention Guidance (SAG)
+
+[Paper](https://arxiv.org/abs/2210.00939)
+
+[์๊ธฐ ์ฃผ์ ์๋ด](../api/pipelines/stable_diffusion/self_attention_guidance)๋ ์ด๋ฏธ์ง์ ์ ๋ฐ์ ์ธ ํ์ง์ ๊ฐ์ ํฉ๋๋ค.
+
+SAG๋ ๊ณ ๋น๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์์ ์์ธก์์ ์์ ํ ์กฐ๊ฑดํ๋ ์ด๋ฏธ์ง์ ์ด๋ฅด๊ธฐ๊น์ง ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ณ ๋น๋ ๋ํ
์ผ์ UNet ์๊ธฐ ์ฃผ์ ๋งต์์ ์ถ์ถ๋ฉ๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/self_attention_guidance)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Depth2Image
+
+[Project](https://huggingface.co/stabilityai/stable-diffusion-2-depth)
+
+[Depth2Image](../pipelines/stable_diffusion_2#depthtoimage)๋ ํ
์คํธ ์๋ด ์ด๋ฏธ์ง ๋ณํ์ ๋ํ ์๋งจํฑ์ ๋ ์ ๋ณด์กดํ๋๋ก ์์ ์ ํ์ฐ์์ ๋ฏธ์ธ ์กฐ์ ๋์์ต๋๋ค.
+
+์๋ณธ ์ด๋ฏธ์ง์ ๋จ์(monocular) ๊น์ด ์ถ์ ์น๋ฅผ ์กฐ๊ฑด์ผ๋ก ํฉ๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion_2#depthtoimage)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+
+
+InstructPix2Pix์ Pix2Pix Zero์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ค์ํ ์ฐจ์ด์ ์ ์ ์์ ๊ฒฝ์ฐ
+๋ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ๋ ๋ฐ๋ฉด, ํ์๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
+์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์์ ์ ํ์ฐ ๋ชจ๋ธ์ Pix2Pix Zero๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
+
+
+
+## MultiDiffusion Panorama
+
+[Paper](https://arxiv.org/abs/2302.08113)
+
+MultiDiffusion์ ์ฌ์ ํ์ต๋ diffusion model์ ํตํด ์๋ก์ด ์์ฑ ํ๋ก์ธ์ค๋ฅผ ์ ์ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ๊ณ ํ์ง์ ๋ค์ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ ์ฌ๋ฌ diffusion ์์ฑ ๋ฐฉ๋ฒ์ ํ๋๋ก ๋ฌถ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ํ๋ ์ข
ํก๋น(์: ํ๋
ธ๋ผ๋ง) ๋ฐ ํ์ดํธํ ๋ถํ ๋ง์คํฌ์์ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ด๋ฅด๋ ๊ณต๊ฐ ์๋ด ์ ํธ์ ๊ฐ์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ ์ด๋ฅผ ์ค์ํฉ๋๋ค.
+[MultiDiffusion ํ๋
ธ๋ผ๋ง](../api/pipelines/stable_diffusion/panorama)๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ์ข
ํก๋น(์: ํ๋
ธ๋ผ๋ง)๋ก ๊ณ ํ์ง ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
+
+ํ๋
ธ๋ผ๋ง ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/panorama)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## ๋๋ง์ ๋ชจ๋ธ ํ์ธํ๋
+
+์ฌ์ ํ์ต๋ ๋ชจ๋ธ ์ธ์๋ Diffusers๋ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ๋ฐ์ดํฐ์ ๋ํด ๋ชจ๋ธ์ ํ์ธํ๋ํ ์ ์๋ ํ์ต ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค.
+
+## DreamBooth
+
+[DreamBooth](../training/dreambooth)๋ ๋ชจ๋ธ์ ํ์ธํ๋ํ์ฌ ์๋ก์ด ์ฃผ์ ์ ๋ํด ๊ฐ๋ฅด์นฉ๋๋ค. ์ฆ, ํ ์ฌ๋์ ์ฌ์ง ๋ช ์ฅ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ์คํ์ผ๋ก ๊ทธ ์ฌ๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../training/dreambooth)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Textual Inversion
+
+[Textual Inversion](../training/text_inversion)์ ๋ชจ๋ธ์ ํ์ธํ๋ํ์ฌ ์๋ก์ด ๊ฐ๋
์ ๋ํด ํ์ต์ํต๋๋ค. ์ฆ, ํน์ ์คํ์ผ์ ์ํธ์ ์ฌ์ง ๋ช ์ฅ์ ์ฌ์ฉํ์ฌ ํด๋น ์คํ์ผ์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../training/text_inversion)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## ControlNet
+
+[Paper](https://arxiv.org/abs/2302.05543)
+
+[ControlNet](../api/pipelines/stable_diffusion/controlnet)์ ์ถ๊ฐ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ ๋ณด์กฐ ๋คํธ์ํฌ์
๋๋ค.
+๊ฐ์ฅ์๋ฆฌ ๊ฐ์ง, ๋์, ๊น์ด ๋งต, ์๋ฏธ์ ์ธ๊ทธ๋จผํธ์ ๊ฐ์ ๋ค์ํ ์กฐ๊ฑด์ ๋ํด ํ๋ จ๋ 8๊ฐ์ ํ์ค ์ฌ์ ํ๋ จ๋ ControlNet์ด ์์ต๋๋ค,
+๊น์ด ๋งต, ์๋งจํฑ ์ธ๊ทธ๋จผํ
์ด์
๊ณผ ๊ฐ์ ๋ค์ํ ์กฐ๊ฑด์ผ๋ก ํ๋ จ๋ 8๊ฐ์ ํ์ค ์ ์ด๋ง์ด ์์ต๋๋ค.
+
+์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ [์ฌ๊ธฐ](../api/pipelines/stable_diffusion/controlnet)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Prompt Weighting
+
+ํ๋กฌํํธ ๊ฐ์ค์น๋ ํ
์คํธ์ ํน์ ๋ถ๋ถ์ ๋ ๋ง์ ๊ด์ฌ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๊ฐ๋จํ ๊ธฐ๋ฒ์
๋๋ค.
+์
๋ ฅ์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๊ฐ๋จํ ๊ธฐ๋ฒ์
๋๋ค.
+
+์์ธํ ์ค๋ช
๊ณผ ์์๋ [์ฌ๊ธฐ](../using-diffusers/weighted_prompts)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Custom Diffusion
+
+[Custom Diffusion](../training/custom_diffusion)์ ์ฌ์ ํ์ต๋ text-to-image ๊ฐ ํ์ฐ ๋ชจ๋ธ์ ๊ต์ฐจ ๊ด์ฌ๋ ๋งต๋ง ๋ฏธ์ธ ์กฐ์ ํฉ๋๋ค.
+๋ํ textual inversion์ ์ถ๊ฐ๋ก ์ํํ ์ ์์ต๋๋ค. ์ค๊ณ์ ๋ค์ค ๊ฐ๋
ํ๋ จ์ ์ง์ํฉ๋๋ค.
+DreamBooth ๋ฐ Textual Inversion ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ์ฉ์ ์ง์ ํ์ฐ์ ์ฌ์ ํ์ต๋ text-to-image diffusion ๋ชจ๋ธ์ ์๋ก์ด ๊ฐ๋
์ ํ์ต์์ผ ๊ด์ฌ ์๋ ๊ฐ๋
๊ณผ ๊ด๋ จ๋ ์ถ๋ ฅ์ ์์ฑํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ฉ๋๋ค.
+
+์์ธํ ์ค๋ช
์ [๊ณต์ ๋ฌธ์](../training/custom_diffusion)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## Model Editing
+
+[Paper](https://arxiv.org/abs/2303.08084)
+
+[ํ
์คํธ-์ด๋ฏธ์ง ๋ชจ๋ธ ํธ์ง ํ์ดํ๋ผ์ธ](../api/pipelines/model_editing)์ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ์ต๋ text-to-image diffusion ๋ชจ๋ธ์ด ์
๋ ฅ ํ๋กฌํํธ์ ์๋ ํผ์ฌ์ฒด์ ๋ํด ๋ด๋ฆด ์ ์๋ ์๋ชป๋ ์์์ ๊ฐ์ ์ ์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
+์๋ฅผ ๋ค์ด, ์์ ์ ํ์ฐ์ "A pack of roses"์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํ๋ฉด ์์ฑ๋ ์ด๋ฏธ์ง์ ์ฅ๋ฏธ๋ ๋นจ๊ฐ์์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด ํ์ดํ๋ผ์ธ์ ์ด๋ฌํ ๊ฐ์ ์ ๋ณ๊ฒฝํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
+
+์์ธํ ์ค๋ช
์ [๊ณต์ ๋ฌธ์](../api/pipelines/model_editing)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## DiffEdit
+
+[Paper](https://arxiv.org/abs/2210.11427)
+
+[DiffEdit](../api/pipelines/diffedit)๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ ์
๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ต๋ํ ๋ณด์กดํ๋ฉด์ ์
๋ ฅ ํ๋กฌํํธ์ ํจ๊ป ์
๋ ฅ ์ด๋ฏธ์ง์ ์๋ฏธ๋ก ์ ํธ์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
+
+
+์์ธํ ์ค๋ช
์ [๊ณต์ ๋ฌธ์](../api/pipelines/diffedit)๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+## T2I-Adapter
+
+[Paper](https://arxiv.org/abs/2302.08453)
+
+[T2I-์ด๋ํฐ](../api/pipelines/stable_diffusion/adapter)๋ ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ ์ถ๊ฐํ๋ auxiliary ๋คํธ์ํฌ์
๋๋ค.
+๊ฐ์ฅ์๋ฆฌ ๊ฐ์ง, ์ค์ผ์น, depth maps, semantic segmentations์ ๊ฐ์ ๋ค์ํ ์กฐ๊ฑด์ ๋ํด ํ๋ จ๋ 8๊ฐ์ ํ์ค ์ฌ์ ํ๋ จ๋ adapter๊ฐ ์์ต๋๋ค,
+
+[๊ณต์ ๋ฌธ์](api/pipelines/stable_diffusion/adapter)์์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.
\ No newline at end of file
diff --git a/docs/source/ko/using-diffusers/img2img.md b/docs/source/ko/using-diffusers/img2img.md
index 32435603c910..d99d803339f1 100644
--- a/docs/source/ko/using-diffusers/img2img.md
+++ b/docs/source/ko/using-diffusers/img2img.md
@@ -12,7 +12,7 @@ specific language governing permissions and limitations under the License.
# ํ
์คํธ ๊ธฐ๋ฐ image-to-image ์์ฑ
-[[Colab์์ ์ด๊ธฐ]]
+[[open-in-colab]]
[`StableDiffusionImg2ImgPipeline`]์ ์ฌ์ฉํ๋ฉด ํ
์คํธ ํ๋กฌํํธ์ ์์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฌํ์ฌ ์ ์ด๋ฏธ์ง ์์ฑ์ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค.
diff --git a/docs/source/ko/using-diffusers/inpaint.md b/docs/source/ko/using-diffusers/inpaint.md
index 3646edb9a20d..c817a8fa80dd 100644
--- a/docs/source/ko/using-diffusers/inpaint.md
+++ b/docs/source/ko/using-diffusers/inpaint.md
@@ -12,7 +12,7 @@ specific language governing permissions and limitations under the License.
# Text-guided ์ด๋ฏธ์ง ์ธํ์ธํ
(inpainting)
-[[์ฝ๋ฉ์์ ์ด๊ธฐ]]
+[[open-in-colab]]
[`StableDiffusionInpaintPipeline`]์ ๋ง์คํฌ์ ํ
์คํธ ํ๋กฌํํธ๋ฅผ ์ ๊ณตํ์ฌ ์ด๋ฏธ์ง์ ํน์ ๋ถ๋ถ์ ํธ์งํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ธํ์ธํ
์์
์ ์ํด ํน๋ณํ ํ๋ จ๋ [`runwayml/stable-diffusion-inpainting`](https://huggingface.co/runwayml/stable-diffusion-inpainting)๊ณผ ๊ฐ์ Stable Diffusion ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค.
diff --git a/docs/source/ko/using-diffusers/loading.md b/docs/source/ko/using-diffusers/loading.md
index c54824a17bbf..8b21ed4478b1 100644
--- a/docs/source/ko/using-diffusers/loading.md
+++ b/docs/source/ko/using-diffusers/loading.md
@@ -105,7 +105,7 @@ stable_diffusion = DiffusionPipeline.from_pretrained(repo_id)
stable_diffusion.scheduler.compatibles
```
-์ด๋ฒ์๋ [`SchedulerMixin.from_pretrained`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์, ๊ธฐ์กด ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์๋ [`PNDMScheduler`]๋ฅผ ๋ณด๋ค ์ฐ์ํ ์ฑ๋ฅ์ [`EulerDiscreteScheduler`]๋ก ๋ฐ๊ฟ๋ด
์๋ค. ์ค์ผ์ค๋ฌ๋ฅผ ๋ก๋ํ ๋๋ `subfolder` ์ธ์๋ฅผ ํตํด, ํด๋น ํ์ดํ๋ผ์ธ์ ๋ ํฌ์งํ ๋ฆฌ์์ [์ค์ผ์ค๋ฌ์ ๊ดํ ํ์ํด๋](https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main/scheduler)๋ฅผ ๋ช
์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
+์ด๋ฒ์๋ [`SchedulerMixin.from_pretrained`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์, ๊ธฐ์กด ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์๋ [`PNDMScheduler`]๋ฅผ ๋ณด๋ค ์ฐ์ํ ์ฑ๋ฅ์ [`EulerDiscreteScheduler`]๋ก ๋ฐ๊ฟ๋ด
์๋ค. ์ค์ผ์ค๋ฌ๋ฅผ ๋ก๋ํ ๋๋ `subfolder` ์ธ์๋ฅผ ํตํด, ํด๋น ํ์ดํ๋ผ์ธ์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ [์ค์ผ์ค๋ฌ์ ๊ดํ ํ์ํด๋](https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main/scheduler)๋ฅผ ๋ช
์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ ๋ค์ ์๋กญ๊ฒ ์์ฑํ [`EulerDiscreteScheduler`] ์ธ์คํด์ค๋ฅผ [`DiffusionPipeline`]์ `scheduler` ์ธ์์ ์ ๋ฌํฉ๋๋ค.
@@ -177,7 +177,7 @@ Variant๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฒดํฌํฌ์ธํธ๋ค์ ์๋ฏธํฉ๋
-๐ก ๋ชจ๋ธ ๊ตฌ์กฐ๋ ๋์ผํ์ง๋ง ์๋ก ๋ค๋ฅธ ํ์ต ํ๊ฒฝ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์
์ผ๋ก ํ์ต๋ ์ฒดํฌํฌ์ธํธ๋ค์ด ์์ ๊ฒฝ์ฐ, ํด๋น ์ฒดํฌํฌ์ธํธ๋ค์ variant ๋จ๊ณ๊ฐ ์๋ ๋ ํฌ์งํ ๋ฆฌ ๋จ๊ณ์์ ๋ถ๋ฆฌ๋์ด ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค. (์ฆ, ํด๋น ์ฒดํฌํฌ์ธํธ๋ค์ ์๋ก ๋ค๋ฅธ ๋ ํฌ์งํ ๋ฆฌ์์ ๋ฐ๋ก ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์์: [`stable-diffusion-v1-4`], [`stable-diffusion-v1-5`]).
+๐ก ๋ชจ๋ธ ๊ตฌ์กฐ๋ ๋์ผํ์ง๋ง ์๋ก ๋ค๋ฅธ ํ์ต ํ๊ฒฝ์์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์
์ผ๋ก ํ์ต๋ ์ฒดํฌํฌ์ธํธ๋ค์ด ์์ ๊ฒฝ์ฐ, ํด๋น ์ฒดํฌํฌ์ธํธ๋ค์ variant ๋จ๊ณ๊ฐ ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๋จ๊ณ์์ ๋ถ๋ฆฌ๋์ด ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค. (์ฆ, ํด๋น ์ฒดํฌํฌ์ธํธ๋ค์ ์๋ก ๋ค๋ฅธ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฐ๋ก ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์์: [`stable-diffusion-v1-4`], [`stable-diffusion-v1-5`]).
@@ -190,7 +190,7 @@ Variant๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฒดํฌํฌ์ธํธ๋ค์ ์๋ฏธํฉ๋
variant๋ฅผ ๋ก๋ํ ๋ 2๊ฐ์ ์ค์ํ argument๊ฐ ์์ต๋๋ค.
* `torch_dtype`์ ๋ถ๋ฌ์ฌ ์ฒดํฌํฌ์ธํธ์ ๋ถ๋์์์ ์ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด `torch_dtype=torch.float16`์ ๋ช
์ํจ์ผ๋ก์จ ๊ฐ์ค์น์ ๋ถ๋์์์ ํ์
์ `fl16`์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. (๋ง์ฝ ๋ฐ๋ก ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ๊ฐ์ผ๋ก `fp32` ํ์
์ ๊ฐ์ค์น๊ฐ ๋ก๋ฉ๋ฉ๋๋ค.) ๋ํ `variant` ์ธ์๋ฅผ ๋ช
์ํ์ง ์์ ์ฑ๋ก ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ถ๋ฌ์จ ๋ค์, ํด๋น ์ฒดํฌํฌ์ธํธ๋ฅผ `torch_dtype=torch.float16` ์ธ์๋ฅผ ํตํด `fp16` ํ์
์ผ๋ก ๋ณํํ๋ ๊ฒ ์ญ์ ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋ `fp32` ๊ฐ์ค์น๊ฐ ๋จผ์ ๋ค์ด๋ก๋๋๊ณ , ํด๋น ๊ฐ์ค์น๋ค์ ๋ถ๋ฌ์จ ๋ค์ `fp16` ํ์
์ผ๋ก ๋ณํํ๊ฒ ๋ฉ๋๋ค.
-* `variant` ์ธ์๋ ๋ ํฌ์งํ ๋ฆฌ์์ ์ด๋ค variant๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒ์ธ๊ฐ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ๋ น [`diffusers/stable-diffusion-variants`](https://huggingface.co/diffusers/stable-diffusion-variants/tree/main/unet) ๋ ํฌ์งํ ๋ฆฌ๋ก๋ถํฐ `non_ema` ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์ ํ๋ค๋ฉด, `variant="non_ema"` ์ธ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
+* `variant` ์ธ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด๋ค variant๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒ์ธ๊ฐ๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ๋ น [`diffusers/stable-diffusion-variants`](https://huggingface.co/diffusers/stable-diffusion-variants/tree/main/unet) ๋ฆฌํฌ์งํ ๋ฆฌ๋ก๋ถํฐ `non_ema` ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์ ํ๋ค๋ฉด, `variant="non_ema"` ์ธ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
```python
from diffusers import DiffusionPipeline
@@ -238,7 +238,7 @@ repo_id = "runwayml/stable-diffusion-v1-5"
model = UNet2DConditionModel.from_pretrained(repo_id, subfolder="unet")
```
-ํน์ [ํด๋น ๋ชจ๋ธ์ ๋ ํฌ์งํ ๋ฆฌ](https://huggingface.co/google/ddpm-cifar10-32/tree/main)๋ก๋ถํฐ ๋ค์ด๋ ํธ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ ์ญ์ ๊ฐ๋ฅํฉ๋๋ค.
+ํน์ [ํด๋น ๋ชจ๋ธ์ ๋ฆฌํฌ์งํ ๋ฆฌ](https://huggingface.co/google/ddpm-cifar10-32/tree/main)๋ก๋ถํฐ ๋ค์ด๋ ํธ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ ์ญ์ ๊ฐ๋ฅํฉ๋๋ค.
```python
from diffusers import UNet2DModel
@@ -295,7 +295,7 @@ pipeline = StableDiffusionPipeline.from_pretrained(repo_id, scheduler=dpm)
- ์ฒซ์งธ๋ก, `from_pretrained` ๋ฉ์๋๋ ์ต์ ๋ฒ์ ์ ํ์ดํ๋ผ์ธ์ ๋ค์ด๋ก๋ํ๊ณ , ์บ์์ ์ ์ฅํฉ๋๋ค. ์ด๋ฏธ ๋ก์ปฌ ์บ์์ ์ต์ ๋ฒ์ ์ ํ์ดํ๋ผ์ธ์ด ์ ์ฅ๋์ด ์๋ค๋ฉด, [`DiffusionPipeline.from_pretrained`]์ ํด๋น ํ์ผ๋ค์ ๋ค์ ๋ค์ด๋ก๋ํ์ง ์๊ณ , ๋ก์ปฌ ์บ์์ ์ ์ฅ๋์ด ์๋ ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ต๋๋ค.
- `model_index.json` ํ์ผ์ ํตํด ์ฒดํฌํฌ์ธํธ์ ๋์๋๋ ์ ํฉํ ํ์ดํ๋ผ์ธ ํด๋์ค๋ก ๋ถ๋ฌ์ต๋๋ค.
-ํ์ดํ๋ผ์ธ์ ํด๋ ๊ตฌ์กฐ๋ ํด๋น ํ์ดํ๋ผ์ธ ํด๋์ค์ ๊ตฌ์กฐ์ ์ง์ ์ ์ผ๋ก ์ผ์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด [`StableDiffusionPipeline`] ํด๋์ค๋ [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5) ๋ ํฌ์งํ ๋ฆฌ์ ๋์๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค.
+ํ์ดํ๋ผ์ธ์ ํด๋ ๊ตฌ์กฐ๋ ํด๋น ํ์ดํ๋ผ์ธ ํด๋์ค์ ๊ตฌ์กฐ์ ์ง์ ์ ์ผ๋ก ์ผ์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด [`StableDiffusionPipeline`] ํด๋์ค๋ [`runwayml/stable-diffusion-v1-5`](https://huggingface.co/runwayml/stable-diffusion-v1-5) ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋์๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค.
```python
from diffusers import DiffusionPipeline
diff --git a/docs/source/ko/using-diffusers/loading_overview.md b/docs/source/ko/using-diffusers/loading_overview.md
new file mode 100644
index 000000000000..a99c6b04c8f6
--- /dev/null
+++ b/docs/source/ko/using-diffusers/loading_overview.md
@@ -0,0 +1,18 @@
+
+
+# Overview
+
+๐งจ Diffusers๋ ์์ฑ ์์
์ ์ํ ๋ค์ํ ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์ต๋ํ ๊ฐ๋จํ๊ฒ ๋ก๋ํ ์ ์๋๋ก ๋จ์ผ ํตํฉ ๋ฉ์๋์ธ `from_pretrained()`๋ฅผ ์ ๊ณตํ์ฌ Hugging Face [Hub](https://huggingface.co/models?library=diffusers&sort=downloads) ๋๋ ๋ก์ปฌ ๋จธ์ ์์ ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค. ํ์ดํ๋ผ์ธ์ด๋ ๋ชจ๋ธ์ ๋ก๋ํ ๋๋ง๋ค, ์ต์ ํ์ผ์ด ์๋์ผ๋ก ๋ค์ด๋ก๋๋๊ณ ์บ์๋๋ฏ๋ก, ๋ค์์ ํ์ผ์ ๋ค์ ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋ ๋น ๋ฅด๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
+
+์ด ์น์
์ ํ์ดํ๋ผ์ธ ๋ก๋ฉ, ํ์ดํ๋ผ์ธ์์ ๋ค์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ, ์ฒดํฌํฌ์ธํธ variants๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์์ผ ํ ๋ชจ๋ ๊ฒ๋ค์ ๋ค๋ฃน๋๋ค. ๋ํ ์ค์ผ์ค๋ฌ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ๊ณผ ์๋ก ๋ค๋ฅธ ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์๋์ ํ์ง๊ฐ์ ํธ๋ ์ด๋ ์คํ๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ ์ญ์ ๋ค๋ฃน๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ๐งจ Diffusers์ ํจ๊ป ํ์ดํ ์น์์ ์ฌ์ฉํ ์ ์๋๋ก KerasCV ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ณํํ๊ณ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ์ดํด๋ด
๋๋ค.
+
diff --git a/docs/source/ko/using-diffusers/reproducibility.md b/docs/source/ko/using-diffusers/reproducibility.md
new file mode 100644
index 000000000000..fdbfa036caa8
--- /dev/null
+++ b/docs/source/ko/using-diffusers/reproducibility.md
@@ -0,0 +1,201 @@
+
+
+# ์ฌํ ๊ฐ๋ฅํ ํ์ดํ๋ผ์ธ ์์ฑํ๊ธฐ
+
+[[open-in-colab]]
+
+์ฌํ์ฑ์ ํ
์คํธ, ๊ฒฐ๊ณผ ์ฌํ, ๊ทธ๋ฆฌ๊ณ [์ด๋ฏธ์ง ํ๋ฆฌํฐ ๋์ด๊ธฐ](resuing_seeds)์์ ์ค์ํฉ๋๋ค.
+๊ทธ๋ฌ๋ diffusion ๋ชจ๋ธ์ ๋ฌด์์์ฑ์ ๋งค๋ฒ ๋ชจ๋ธ์ด ๋์๊ฐ ๋๋ง๋ค ํ์ดํ๋ผ์ธ์ด ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ ์ด์ ๋ก ํ์ํฉ๋๋ค.
+ํ๋ซํผ ๊ฐ์ ์ ํํ๊ฒ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์๋ ์์ง๋ง, ํน์ ํ์ฉ ๋ฒ์ ๋ด์์ ๋ฆด๋ฆฌ์ค ๋ฐ ํ๋ซํผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฌํํ ์๋ ์์ต๋๋ค.
+๊ทธ๋ผ์๋ diffusion ํ์ดํ๋ผ์ธ๊ณผ ์ฒดํฌํฌ์ธํธ์ ๋ฐ๋ผ ํ์ฉ ์ค์ฐจ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
+
+diffusion ๋ชจ๋ธ์์ ๋ฌด์์์ฑ์ ์์ฒ์ ์ ์ดํ๊ฑฐ๋ ๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ ์ด์ ์
๋๋ค.
+
+
+
+๐ก Pytorch์ [์ฌํ์ฑ์ ๋ํ ์ ์ธ](https://pytorch.org/docs/stable/notes/randomness.html)๋ฅผ ๊ผญ ์ฝ์ด๋ณด๊ธธ ์ถ์ฒํฉ๋๋ค:
+
+> ์์ ํ๊ฒ ์ฌํ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ Pytorch ๋ฐฐํฌ, ๊ฐ๋ณ์ ์ธ ์ปค๋ฐ, ํน์ ๋ค๋ฅธ ํ๋ซํผ๋ค์์ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
+> ๋ํ, ๊ฒฐ๊ณผ๋ CPU์ GPU ์คํ๊ฐ์ ์ฌ์ง์ด ๊ฐ์ seed๋ฅผ ์ฌ์ฉํ ๋๋ ์ฌํ ๊ฐ๋ฅํ์ง ์์ ์ ์์ต๋๋ค.
+
+
+
+## ๋ฌด์์์ฑ ์ ์ดํ๊ธฐ
+
+์ถ๋ก ์์, ํ์ดํ๋ผ์ธ์ ๋
ธ์ด์ฆ๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ฐ์ฐ์์ ๋
ธ์ด์ฆ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ค์ผ์ค๋ง ๋จ๊ณ์ ๋
ธ์ด์ฆ๋ฅผ ๋ํ๋ ๋ฑ์ ๋๋ค ์ํ๋ง ์คํ์ ํฌ๊ฒ ์์กดํฉ๋๋ค,
+
+[DDIMPipeline](https://huggingface.co/docs/diffusers/v0.18.0/en/api/pipelines/ddim#diffusers.DDIMPipeline)์์ ๋ ์ถ๋ก ๋จ๊ณ ์ดํ์ ํ
์ ๊ฐ์ ์ดํด๋ณด์ธ์:
+
+```python
+from diffusers import DDIMPipeline
+import numpy as np
+
+model_id = "google/ddpm-cifar10-32"
+
+# ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ
+ddim = DDIMPipeline.from_pretrained(model_id)
+
+# ๋ ๊ฐ์ ๋จ๊ณ์ ๋ํด์ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ numpy tensor๋ก ๊ฐ์ ๋ฐํํ๊ธฐ
+image = ddim(num_inference_steps=2, output_type="np").images
+print(np.abs(image).sum())
+```
+
+์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ํ๋์ ๊ฐ์ด ๋์ค์ง๋ง, ๋ค์ ์คํํ๋ฉด ๋ค๋ฅธ ๊ฐ์ด ๋์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋ ๊ฑธ๊น์?
+
+ํ์ดํ๋ผ์ธ์ด ์คํ๋ ๋๋ง๋ค, [torch.randn](https://pytorch.org/docs/stable/generated/torch.randn.html)์
+๋จ๊ณ์ ์ผ๋ก ๋
ธ์ด์ฆ ์ ๊ฑฐ๋๋ ๊ฐ์ฐ์์ ๋
ธ์ด์ฆ๊ฐ ์์ฑํ๊ธฐ ์ํ ๋ค๋ฅธ ๋๋ค seed๋ฅผ ์ฌ์ฉํฉ๋๋ค.
+
+๊ทธ๋ฌ๋ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์์ ์ ์ผ๋ก ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ CPU์์ ํ์ดํ๋ผ์ธ์ ์คํํ๋์ง GPU์์ ์คํํ๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
+
+### CPU
+
+CPU์์ ์ฌํ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ ค๋ฉด, PyTorch [Generator](https://pytorch.org/docs/stable/generated/torch.randn.html)๋ก seed๋ฅผ ๊ณ ์ ํฉ๋๋ค:
+
+```python
+import torch
+from diffusers import DDIMPipeline
+import numpy as np
+
+model_id = "google/ddpm-cifar10-32"
+
+# ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ ๋ถ๋ฌ์ค๊ธฐ
+ddim = DDIMPipeline.from_pretrained(model_id)
+
+# ์ฌํ์ฑ์ ์ํด generator ๋ง๋ค๊ธฐ
+generator = torch.Generator(device="cpu").manual_seed(0)
+
+# ๋ ๊ฐ์ ๋จ๊ณ์ ๋ํด์ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ numpy tensor๋ก ๊ฐ์ ๋ฐํํ๊ธฐ
+image = ddim(num_inference_steps=2, output_type="np", generator=generator).images
+print(np.abs(image).sum())
+```
+
+์ด์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด seed๋ฅผ ๊ฐ์ง `Generator` ๊ฐ์ฒด๊ฐ ํ์ดํ๋ผ์ธ์ ๋ชจ๋ ๋๋ค ํจ์์ ์ ๋ฌ๋๋ฏ๋ก ํญ์ `1491.1711` ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
+
+ํน์ ํ๋์จ์ด ๋ฐ PyTorch ๋ฒ์ ์์ ์ด ์ฝ๋ ์์ ๋ฅผ ์คํํ๋ฉด ๋์ผํ์ง๋ ์๋๋ผ๋ ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
+
+
+
+๐ก ์ฒ์์๋ ์๋๋ฅผ ๋ํ๋ด๋ ์ ์๊ฐ ๋์ ์ `Generator` ๊ฐ์ฒด๋ฅผ ํ์ดํ๋ผ์ธ์ ์ ๋ฌํ๋ ๊ฒ์ด ์ฝ๊ฐ ๋น์ง๊ด์ ์ผ ์ ์์ง๋ง,
+`Generator`๋ ์์ฐจ์ ์ผ๋ก ์ฌ๋ฌ ํ์ดํ๋ผ์ธ์ ์ ๋ฌ๋ ์ ์๋ \๋๋ค์ํ\์ด๊ธฐ ๋๋ฌธ์ PyTorch์์ ํ๋ฅ ๋ก ์ ๋ชจ๋ธ์ ๋ค๋ฃฐ ๋ ๊ถ์ฅ๋๋ ์ค๊ณ์
๋๋ค.
+
+
+
+### GPU
+
+์๋ฅผ ๋ค๋ฉด, GPU ์์์ ๊ฐ์ ์ฝ๋ ์์๋ฅผ ์คํํ๋ฉด:
+
+```python
+import torch
+from diffusers import DDIMPipeline
+import numpy as np
+
+model_id = "google/ddpm-cifar10-32"
+
+# ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ ๋ถ๋ฌ์ค๊ธฐ
+ddim = DDIMPipeline.from_pretrained(model_id)
+ddim.to("cuda")
+
+# ์ฌํ์ฑ์ ์ํ generator ๋ง๋ค๊ธฐ
+generator = torch.Generator(device="cuda").manual_seed(0)
+
+# ๋ ๊ฐ์ ๋จ๊ณ์ ๋ํด์ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ numpy tensor๋ก ๊ฐ์ ๋ฐํํ๊ธฐ
+image = ddim(num_inference_steps=2, output_type="np", generator=generator).images
+print(np.abs(image).sum())
+```
+
+GPU๊ฐ CPU์ ๋ค๋ฅธ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ผํ ์๋๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ง ์์ต๋๋ค.
+
+์ด ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ๐งจ Diffusers๋ CPU์ ์์์ ๋
ธ์ด์ฆ๋ฅผ ์์ฑํ ๋ค์ ํ์์ ๋ฐ๋ผ ํ
์๋ฅผ GPU๋ก ์ด๋์ํค๋
+[randn_tensor()](https://huggingface.co/docs/diffusers/v0.18.0/en/api/utilities#diffusers.utils.randn_tensor)๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
+`randn_tensor` ๊ธฐ๋ฅ์ ํ์ดํ๋ผ์ธ ๋ด๋ถ ์ด๋์์๋ ์ฌ์ฉ๋๋ฏ๋ก ํ์ดํ๋ผ์ธ์ด GPU์์ ์คํ๋๋๋ผ๋ **ํญ์** CPU `Generator`๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค.
+
+์ด์ ๊ฒฐ๊ณผ์ ํจ์ฌ ๋ ๋ค๊ฐ์์ต๋๋ค!
+
+```python
+import torch
+from diffusers import DDIMPipeline
+import numpy as np
+
+model_id = "google/ddpm-cifar10-32"
+
+# ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ ๋ถ๋ฌ์ค๊ธฐ
+ddim = DDIMPipeline.from_pretrained(model_id)
+ddim.to("cuda")
+
+#์ฌํ์ฑ์ ์ํ generator ๋ง๋ค๊ธฐ (GPU์ ์ฌ๋ฆฌ์ง ์๋๋ก ์กฐ์ฌํ๋ค!)
+generator = torch.manual_seed(0)
+
+# ๋ ๊ฐ์ ๋จ๊ณ์ ๋ํด์ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ numpy tensor๋ก ๊ฐ์ ๋ฐํํ๊ธฐ
+image = ddim(num_inference_steps=2, output_type="np", generator=generator).images
+print(np.abs(image).sum())
+```
+
+
+
+๐ก ์ฌํ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ํญ์ CPU generator๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
+์ฑ๋ฅ ์์ค์ ๋ฌด์ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ํ์ดํ๋ผ์ธ์ด GPU์์ ์คํ๋์์ ๋๋ณด๋ค ํจ์ฌ ๋ ๋น์ทํ ๊ฐ์ ์์ฑํ ์ ์์ต๋๋ค.
+
+
+
+๋ง์ง๋ง์ผ๋ก [UnCLIPPipeline](https://huggingface.co/docs/diffusers/v0.18.0/en/api/pipelines/unclip#diffusers.UnCLIPPipeline)๊ณผ ๊ฐ์
+๋ ๋ณต์กํ ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ, ์ด๋ค์ ์ข
์ข
์ ๋ฐ ์ค์ฐจ ์ ํ์ ๊ทน๋๋ก ์ทจ์ฝํฉ๋๋ค.
+๋ค๋ฅธ GPU ํ๋์จ์ด ๋๋ PyTorch ๋ฒ์ ์์ ์ ์ฌํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ํ์ง ๋ง์ธ์.
+์ด ๊ฒฝ์ฐ ์์ ํ ์ฌํ์ฑ์ ์ํด ์์ ํ ๋์ผํ ํ๋์จ์ด ๋ฐ PyTorch ๋ฒ์ ์ ์คํํด์ผ ํฉ๋๋ค.
+
+## ๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ
+
+๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ฌํ ๊ฐ๋ฅํ ํ์ดํ๋ผ์ธ์ ์์ฑํ๋๋ก PyTorch๋ฅผ ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค.
+๊ทธ๋ฌ๋ ๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋๋ฆฌ๊ณ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
+ํ์ง๋ง ์ฌํ์ฑ์ด ์ค์ํ๋ค๋ฉด, ์ด๊ฒ์ด ์ต์ ์ ๋ฐฉ๋ฒ์
๋๋ค!
+
+๋ ์ด์์ CUDA ์คํธ๋ฆผ์์ ์์
์ด ์์๋ ๋ ๋น๊ฒฐ์ ๋ก ์ ๋์์ด ๋ฐ์ํฉ๋๋ค.
+์ด ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ํ๊ฒฝ ๋ณ์ [CUBLAS_WORKSPACE_CONFIG](https://docs.nvidia.com/cuda/cublas/index.html#results-reproducibility)๋ฅผ `:16:8`๋ก ์ค์ ํด์
+๋ฐํ์ ์ค์ ์ค์ง ํ๋์ ๋ฒํผ ํฌ๋ฆฌ๋ง ์ฌ์ฉํ๋๋ก ์ค์ ํฉ๋๋ค.
+
+PyTorch๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๊ธฐ ์ํด ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ฒค์น๋งํนํฉ๋๋ค.
+ํ์ง๋ง ์ฌํ์ฑ์ ์ํ๋ ๊ฒฝ์ฐ, ๋ฒค์น๋งํฌ๊ฐ ๋งค ์๊ฐ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
+๋ง์ง๋ง์ผ๋ก, [torch.use_deterministic_algorithms](https://pytorch.org/docs/stable/generated/torch.use_deterministic_algorithms.html)์
+`True`๋ฅผ ํต๊ณผ์์ผ ๊ฒฐ์ ๋ก ์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ฑํ ๋๋๋ก ํฉ๋๋ค.
+
+```py
+import os
+
+os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":16:8"
+
+torch.backends.cudnn.benchmark = False
+torch.use_deterministic_algorithms(True)
+```
+
+์ด์ ๋์ผํ ํ์ดํ๋ผ์ธ์ ๋๋ฒ ์คํํ๋ฉด ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
+
+```py
+import torch
+from diffusers import DDIMScheduler, StableDiffusionPipeline
+import numpy as np
+
+model_id = "runwayml/stable-diffusion-v1-5"
+pipe = StableDiffusionPipeline.from_pretrained(model_id).to("cuda")
+pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
+g = torch.Generator(device="cuda")
+
+prompt = "A bear is playing a guitar on Times Square"
+
+g.manual_seed(0)
+result1 = pipe(prompt=prompt, num_inference_steps=50, generator=g, output_type="latent").images
+
+g.manual_seed(0)
+result2 = pipe(prompt=prompt, num_inference_steps=50, generator=g, output_type="latent").images
+
+print("L_inf dist = ", abs(result1 - result2).max())
+"L_inf dist = tensor(0., device='cuda:0')"
+```
diff --git a/docs/source/ko/using-diffusers/stable_diffusion_jax_how_to.md b/docs/source/ko/using-diffusers/stable_diffusion_jax_how_to.md
new file mode 100644
index 000000000000..e5785374413c
--- /dev/null
+++ b/docs/source/ko/using-diffusers/stable_diffusion_jax_how_to.md
@@ -0,0 +1,264 @@
+
+
+# JAX / Flax์์์ ๐งจ Stable Diffusion!
+
+[[open-in-colab]]
+
+๐ค Hugging Face [Diffusers] (https://github.com/huggingface/diffusers) ๋ ๋ฒ์ 0.5.1๋ถํฐ Flax๋ฅผ ์ง์ํฉ๋๋ค! ์ด๋ฅผ ํตํด Colab, Kaggle, Google Cloud Platform์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ Google TPU์์ ์ด๊ณ ์ ์ถ๋ก ์ด ๊ฐ๋ฅํฉ๋๋ค.
+
+์ด ๋
ธํธ๋ถ์ JAX / Flax๋ฅผ ์ฌ์ฉํด ์ถ๋ก ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. Stable Diffusion์ ์๋ ๋ฐฉ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ํ๊ฑฐ๋ GPU์์ ์คํํ๋ ค๋ฉด ์ด [๋
ธํธ๋ถ] ](https://huggingface.co/docs/diffusers/stable_diffusion)์ ์ฐธ์กฐํ์ธ์.
+
+๋จผ์ , TPU ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํฉ๋๋ค. Colab์์ ์ด ๋
ธํธ๋ถ์ ์คํํ๋ ๊ฒฝ์ฐ, ๋ฉ๋ด์์ ๋ฐํ์์ ์ ํํ ๋ค์ "๋ฐํ์ ์ ํ ๋ณ๊ฒฝ" ์ต์
์ ์ ํํ ๋ค์ ํ๋์จ์ด ๊ฐ์๊ธฐ ์ค์ ์์ TPU๋ฅผ ์ ํํฉ๋๋ค.
+
+JAX๋ TPU ์ ์ฉ์ ์๋์ง๋ง ๊ฐ TPU ์๋ฒ์๋ 8๊ฐ์ TPU ๊ฐ์๊ธฐ๊ฐ ๋ณ๋ ฌ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ํด๋น ํ๋์จ์ด์์ ๋ ๋น์ ๋ฐํ๋ค๋ ์ ์ ์์๋์ธ์.
+
+
+## Setup
+
+๋จผ์ diffusers๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
+
+```bash
+!pip install jax==0.3.25 jaxlib==0.3.25 flax transformers ftfy
+!pip install diffusers
+```
+
+```python
+import jax.tools.colab_tpu
+
+jax.tools.colab_tpu.setup_tpu()
+import jax
+```
+
+```python
+num_devices = jax.device_count()
+device_type = jax.devices()[0].device_kind
+
+print(f"Found {num_devices} JAX devices of type {device_type}.")
+assert (
+ "TPU" in device_type
+), "Available device is not a TPU, please select TPU from Edit > Notebook settings > Hardware accelerator"
+```
+
+```python out
+Found 8 JAX devices of type Cloud TPU.
+```
+
+๊ทธ๋ฐ ๋ค์ ๋ชจ๋ dependencies๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
+
+```python
+import numpy as np
+import jax
+import jax.numpy as jnp
+
+from pathlib import Path
+from jax import pmap
+from flax.jax_utils import replicate
+from flax.training.common_utils import shard
+from PIL import Image
+
+from huggingface_hub import notebook_login
+from diffusers import FlaxStableDiffusionPipeline
+```
+
+## ๋ชจ๋ธ ๋ถ๋ฌ์ค๊ธฐ
+
+TPU ์ฅ์น๋ ํจ์จ์ ์ธ half-float ์ ํ์ธ bfloat16์ ์ง์ํฉ๋๋ค. ํ
์คํธ์๋ ์ด ์ ํ์ ์ฌ์ฉํ์ง๋ง ๋์ float32๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ ๋ฐ๋(full precision)๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
+
+```python
+dtype = jnp.bfloat16
+```
+
+Flax๋ ํจ์ํ ํ๋ ์์ํฌ์ด๋ฏ๋ก ๋ชจ๋ธ์ ๋ฌด์ํ(stateless)ํ์ด๋ฉฐ ๋งค๊ฐ๋ณ์๋ ๋ชจ๋ธ ์ธ๋ถ์ ์ ์ฅ๋ฉ๋๋ค. ์ฌ์ ํ์ต๋ Flax ํ์ดํ๋ผ์ธ์ ๋ถ๋ฌ์ค๋ฉด ํ์ดํ๋ผ์ธ ์์ฒด์ ๋ชจ๋ธ ๊ฐ์ค์น(๋๋ ๋งค๊ฐ๋ณ์)๊ฐ ๋ชจ๋ ๋ฐํ๋ฉ๋๋ค. ์ ํฌ๋ bf16 ๋ฒ์ ์ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์ ํ ๊ฒฝ๊ณ ๊ฐ ํ์๋์ง๋ง ๋ฌด์ํด๋ ๋ฉ๋๋ค.
+
+```python
+pipeline, params = FlaxStableDiffusionPipeline.from_pretrained(
+ "CompVis/stable-diffusion-v1-4",
+ revision="bf16",
+ dtype=dtype,
+)
+```
+
+## ์ถ๋ก
+
+TPU์๋ ์ผ๋ฐ์ ์ผ๋ก 8๊ฐ์ ๋๋ฐ์ด์ค๊ฐ ๋ณ๋ ฌ๋ก ์๋ํ๋ฏ๋ก ๋ณด์ ํ ๋๋ฐ์ด์ค ์๋งํผ ํ๋กฌํํธ๋ฅผ ๋ณต์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ๊ฐ ํ๋์ ์ด๋ฏธ์ง ์์ฑ์ ๋ด๋นํ๋ 8๊ฐ์ ๋๋ฐ์ด์ค์์ ํ ๋ฒ์ ์ถ๋ก ์ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ์นฉ์ด ํ๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋์ผํ ์๊ฐ์ 8๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ์ป์ ์ ์์ต๋๋ค.
+
+ํ๋กฌํํธ๋ฅผ ๋ณต์ ํ๊ณ ๋๋ฉด ํ์ดํ๋ผ์ธ์ `prepare_inputs` ํจ์๋ฅผ ํธ์ถํ์ฌ ํ ํฐํ๋ ํ
์คํธ ID๋ฅผ ์ป์ต๋๋ค. ํ ํฐํ๋ ํ
์คํธ์ ๊ธธ์ด๋ ๊ธฐ๋ณธ CLIP ํ
์คํธ ๋ชจ๋ธ์ ๊ตฌ์ฑ์ ๋ฐ๋ผ 77ํ ํฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
+
+```python
+prompt = "A cinematic film still of Morgan Freeman starring as Jimi Hendrix, portrait, 40mm lens, shallow depth of field, close up, split lighting, cinematic"
+prompt = [prompt] * jax.device_count()
+prompt_ids = pipeline.prepare_inputs(prompt)
+prompt_ids.shape
+```
+
+```python out
+(8, 77)
+```
+
+### ๋ณต์ฌ(Replication) ๋ฐ ์ ๋ ฌํ
+
+๋ชจ๋ธ ๋งค๊ฐ๋ณ์์ ์
๋ ฅ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ณด์ ํ 8๊ฐ์ ๋ณ๋ ฌ ์ฅ์น์ ๋ณต์ฌ(Replication)๋์ด์ผ ํฉ๋๋ค. ๋งค๊ฐ๋ณ์ ๋์
๋๋ฆฌ๋ `flax.jax_utils.replicate`(๋์
๋๋ฆฌ๋ฅผ ์ํํ๋ฉฐ ๊ฐ์ค์น์ ๋ชจ์์ ๋ณ๊ฒฝํ์ฌ 8๋ฒ ๋ฐ๋ณตํ๋ ํจ์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌ๋ฉ๋๋ค. ๋ฐฐ์ด์ `shard`๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ ๋ฉ๋๋ค.
+
+```python
+p_params = replicate(params)
+```
+
+```python
+prompt_ids = shard(prompt_ids)
+prompt_ids.shape
+```
+
+```python out
+(8, 1, 77)
+```
+
+์ด shape์ 8๊ฐ์ ๋๋ฐ์ด์ค ๊ฐ๊ฐ์ด shape `(1, 77)`์ jnp ๋ฐฐ์ด์ ์
๋ ฅ๊ฐ์ผ๋ก ๋ฐ๋๋ค๋ ์๋ฏธ์
๋๋ค. ์ฆ 1์ ๋๋ฐ์ด์ค๋น batch(๋ฐฐ์น) ํฌ๊ธฐ์
๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ TPU์์๋ ํ ๋ฒ์ ์ฌ๋ฌ ์ด๋ฏธ์ง(์นฉ๋น)๋ฅผ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ 1๋ณด๋ค ํด ์ ์์ต๋๋ค.
+
+์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ค๋น๊ฐ ๊ฑฐ์ ์๋ฃ๋์์ต๋๋ค! ์ด์ ์์ฑ ํจ์์ ์ ๋ฌํ ๋์ ์์ฑ๊ธฐ๋ง ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ์ด๊ฒ์ ๋์๋ฅผ ๋ค๋ฃจ๋ ๋ชจ๋ ํจ์์ ๋์ ์์ฑ๊ธฐ๊ฐ ์์ด์ผ ํ๋ค๋, ๋์์ ๋ํด ๋งค์ฐ ์ง์งํ๊ณ ๋
๋จ์ ์ธ Flax์ ํ์ค ์ ์ฐจ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ๋ฌ ๋ถ์ฐ๋ ๊ธฐ๊ธฐ์์ ํ๋ จํ ๋์๋ ์ฌํ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
+
+์๋ ํฌํผ ํจ์๋ ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๋์ผํ ์๋๋ฅผ ์ฌ์ฉํ๋ ํ ์ ํํ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋์ค์ ๋
ธํธ๋ถ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ๋์ ๋ค๋ฅธ ์๋๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ธ์.
+
+```python
+def create_key(seed=0):
+ return jax.random.PRNGKey(seed)
+```
+
+rng๋ฅผ ์ป์ ๋ค์ 8๋ฒ '๋ถํ 'ํ์ฌ ๊ฐ ๋๋ฐ์ด์ค๊ฐ ๋ค๋ฅธ ์ ๋๋ ์ดํฐ๋ฅผ ์์ ํ๋๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๋๋ฐ์ด์ค๋ง๋ค ๋ค๋ฅธ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋๋ฉฐ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
+
+```python
+rng = create_key(0)
+rng = jax.random.split(rng, jax.device_count())
+```
+
+JAX ์ฝ๋๋ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์คํ๋๋ ํจ์จ์ ์ธ ํํ์ผ๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ์ ํธ์ถ์์ ๋ชจ๋ ์
๋ ฅ์ด ๋์ผํ ๋ชจ์์ ๊ฐ๋๋ก ํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด JAX๊ฐ ์ฝ๋๋ฅผ ๋ค์ ์ปดํ์ผํด์ผ ํ๋ฏ๋ก ์ต์ ํ๋ ์๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
+
+`jit = True`๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด Flax ํ์ดํ๋ผ์ธ์ด ์ฝ๋๋ฅผ ์ปดํ์ผํ ์ ์์ต๋๋ค. ๋ํ ๋ชจ๋ธ์ด ์ฌ์ฉ ๊ฐ๋ฅํ 8๊ฐ์ ๋๋ฐ์ด์ค์์ ๋ณ๋ ฌ๋ก ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
+
+๋ค์ ์
์ ์ฒ์ ์คํํ๋ฉด ์ปดํ์ผํ๋ ๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ์ดํ ํธ์ถ(์
๋ ฅ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์๋)์ ํจ์ฌ ๋นจ๋ผ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ํ
์คํธํ์ ๋ TPU v2-8์์ ์ปดํ์ผํ๋ ๋ฐ 1๋ถ ์ด์ ๊ฑธ๋ฆฌ์ง๋ง ์ดํ ์ถ๋ก ์คํ์๋ ์ฝ 7์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
+
+```
+%%time
+images = pipeline(prompt_ids, p_params, rng, jit=True)[0]
+```
+
+```python out
+CPU times: user 56.2 s, sys: 42.5 s, total: 1min 38s
+Wall time: 1min 29s
+```
+
+๋ฐํ๋ ๋ฐฐ์ด์ shape์ `(8, 1, 512, 512, 3)`์
๋๋ค. ์ด๋ฅผ ์ฌ๊ตฌ์ฑํ์ฌ ๋ ๋ฒ์งธ ์ฐจ์์ ์ ๊ฑฐํ๊ณ 512 ร 512 ร 3์ ์ด๋ฏธ์ง 8๊ฐ๋ฅผ ์ป์ ๋ค์ PIL๋ก ๋ณํํฉ๋๋ค.
+
+```python
+images = images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:])
+images = pipeline.numpy_to_pil(images)
+```
+
+### ์๊ฐํ
+
+์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๋์ ํ์ํ๋ ๋์ฐ๋ฏธ ํจ์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
+
+```python
+def image_grid(imgs, rows, cols):
+ w, h = imgs[0].size
+ grid = Image.new("RGB", size=(cols * w, rows * h))
+ for i, img in enumerate(imgs):
+ grid.paste(img, box=(i % cols * w, i // cols * h))
+ return grid
+```
+
+```python
+image_grid(images, 2, 4)
+```
+
+
+
+
+## ๋ค๋ฅธ ํ๋กฌํํธ ์ฌ์ฉ
+
+๋ชจ๋ ๋๋ฐ์ด์ค์์ ๋์ผํ ํ๋กฌํํธ๋ฅผ ๋ณต์ ํ ํ์๋ ์์ต๋๋ค. ํ๋กฌํํธ 2๊ฐ๋ฅผ ๊ฐ๊ฐ 4๋ฒ์ฉ ์์ฑํ๊ฑฐ๋ ํ ๋ฒ์ 8๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๋กฌํํธ๋ฅผ ์์ฑํ๋ ๋ฑ ์ํ๋ ๊ฒ์ ๋ฌด์์ด๋ ํ ์ ์์ต๋๋ค. ํ๋ฒ ํด๋ณด์ธ์!
+
+๋จผ์ ์
๋ ฅ ์ค๋น ์ฝ๋๋ฅผ ํธ๋ฆฌํ ํจ์๋ก ๋ฆฌํฉํฐ๋งํ๊ฒ ์ต๋๋ค:
+
+```python
+prompts = [
+ "Labrador in the style of Hokusai",
+ "Painting of a squirrel skating in New York",
+ "HAL-9000 in the style of Van Gogh",
+ "Times Square under water, with fish and a dolphin swimming around",
+ "Ancient Roman fresco showing a man working on his laptop",
+ "Close-up photograph of young black woman against urban background, high quality, bokeh",
+ "Armchair in the shape of an avocado",
+ "Clown astronaut in space, with Earth in the background",
+]
+```
+
+```python
+prompt_ids = pipeline.prepare_inputs(prompts)
+prompt_ids = shard(prompt_ids)
+
+images = pipeline(prompt_ids, p_params, rng, jit=True).images
+images = images.reshape((images.shape[0] * images.shape[1],) + images.shape[-3:])
+images = pipeline.numpy_to_pil(images)
+
+image_grid(images, 2, 4)
+```
+
+
+
+
+## ๋ณ๋ ฌํ(parallelization)๋ ์ด๋ป๊ฒ ์๋ํ๋๊ฐ?
+
+์์ `diffusers` Flax ํ์ดํ๋ผ์ธ์ด ๋ชจ๋ธ์ ์๋์ผ๋ก ์ปดํ์ผํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ณ๋ ฌ๋ก ์คํํ๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์ด์ ๊ทธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๊ณ ์๋ ๋ฐฉ์์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
+
+JAX ๋ณ๋ ฌํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ jax.pmap ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ํ๋ก๊ทธ๋จ, ๋ค์ค ๋ฐ์ดํฐ(SPMD) ๋ณ๋ ฌํ๋ฅผ ๋ฌ์ฑํ๋ ๊ฒ์
๋๋ค. ์ฆ, ๋์ผํ ์ฝ๋์ ๋ณต์ฌ๋ณธ์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์
๋ ฅ์ ๋ํด ์ฌ๋ฌ ๊ฐ ์คํํ๋ ๊ฒ์
๋๋ค. ๋ ์ ๊ตํ ์ ๊ทผ ๋ฐฉ์๋ ๊ฐ๋ฅํ๋ฏ๋ก ๊ด์ฌ์ด ์์ผ์๋ค๋ฉด [JAX ๋ฌธ์](https://jax.readthedocs.io/en/latest/index.html)์ [`pjit` ํ์ด์ง](https://jax.readthedocs.io/en/latest/jax-101/08-pjit.html?highlight=pjit)์์ ์ด ์ฃผ์ ๋ฅผ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค!
+
+`jax.pmap`์ ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค:
+
+- `jax.jit()`๋ฅผ ํธ์ถํ ๊ฒ์ฒ๋ผ ์ฝ๋๋ฅผ ์ปดํ์ผ(๋๋ `jit`)ํฉ๋๋ค. ์ด ์์
์ `pmap`์ ํธ์ถํ ๋๊ฐ ์๋๋ผ pmapped ํจ์๊ฐ ์ฒ์ ํธ์ถ๋ ๋ ์ํ๋ฉ๋๋ค.
+- ์ปดํ์ผ๋ ์ฝ๋๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ณ๋ ฌ๋ก ์คํ๋๋๋ก ํฉ๋๋ค.
+
+์๋ ๋ฐฉ์์ ๋ณด์ฌ๋๋ฆฌ๊ธฐ ์ํด ์ด๋ฏธ์ง ์์ฑ์ ์คํํ๋ ๋น๊ณต๊ฐ ๋ฉ์๋์ธ ํ์ดํ๋ผ์ธ์ `_generate` ๋ฉ์๋๋ฅผ `pmap`ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ํฅํ `Diffusers` ๋ฆด๋ฆฌ์ค์์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ์ ์๋ค๋ ์ ์ ์ ์ํ์ธ์.
+
+```python
+p_generate = pmap(pipeline._generate)
+```
+
+`pmap`์ ์ฌ์ฉํ ํ ์ค๋น๋ ํจ์ `p_generate`๋ ๊ฐ๋
์ ์ผ๋ก ๋ค์์ ์ํํฉ๋๋ค:
+* ๊ฐ ์ฅ์น์์ ๊ธฐ๋ณธ ํจ์ `pipeline._generate`์ ๋ณต์ฌ๋ณธ์ ํธ์ถํฉ๋๋ค.
+* ๊ฐ ์ฅ์น์ ์
๋ ฅ ์ธ์์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ณด๋
๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ค๋ฉ์ด ์ฌ์ฉ๋๋ ์ด์ ์
๋๋ค. ์ด ๊ฒฝ์ฐ `prompt_ids`์ shape์ `(8, 1, 77, 768)`์
๋๋ค. ์ด ๋ฐฐ์ด์ 8๊ฐ๋ก ๋ถํ ๋๊ณ `_generate`์ ๊ฐ ๋ณต์ฌ๋ณธ์ `(1, 77, 768)`์ shape์ ๊ฐ์ง ์
๋ ฅ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
+
+๋ณ๋ ฌ๋ก ํธ์ถ๋๋ค๋ ์ฌ์ค์ ์์ ํ ๋ฌด์ํ๊ณ `_generate`๋ฅผ ์ฝ๋ฉํ ์ ์์ต๋๋ค. batch(๋ฐฐ์น) ํฌ๊ธฐ(์ด ์์ ์์๋ `1`)์ ์ฝ๋์ ์ ํฉํ ์ฐจ์๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๋ฉฐ, ๋ณ๋ ฌ๋ก ์๋ํ๊ธฐ ์ํด ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
+
+ํ์ดํ๋ผ์ธ ํธ์ถ์ ์ฌ์ฉํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ค์ ์
์ ์ฒ์ ์คํํ ๋๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง ๊ทธ ์ดํ์๋ ํจ์ฌ ๋นจ๋ผ์ง๋๋ค.
+
+```
+%%time
+images = p_generate(prompt_ids, p_params, rng)
+images = images.block_until_ready()
+images.shape
+```
+
+```python out
+CPU times: user 1min 15s, sys: 18.2 s, total: 1min 34s
+Wall time: 1min 15s
+```
+
+```python
+images.shape
+```
+
+```python out
+(8, 1, 512, 512, 3)
+```
+
+JAX๋ ๋น๋๊ธฐ ๋์คํจ์น๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ ์ด๊ถ์ Python ๋ฃจํ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ถ๋ก ์๊ฐ์ ์ ํํ๊ฒ ์ธก์ ํ๊ธฐ ์ํด `block_until_ready()`๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ง ๊ตฌ์ฒดํ๋์ง ์์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ฐจ๋จ์ด ์ํ๋๋ฏ๋ก ์ฝ๋์์ ์ด ํจ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
\ No newline at end of file
diff --git a/docs/source/ko/using-diffusers/textual_inversion_inference.md b/docs/source/ko/using-diffusers/textual_inversion_inference.md
new file mode 100644
index 000000000000..1b52fee923b3
--- /dev/null
+++ b/docs/source/ko/using-diffusers/textual_inversion_inference.md
@@ -0,0 +1,80 @@
+# Textual inversion
+
+[[open-in-colab]]
+
+[`StableDiffusionPipeline`]์ textual-inversion์ ์ง์ํ๋๋ฐ, ์ด๋ ๋ช ๊ฐ์ ์ํ ์ด๋ฏธ์ง๋ง์ผ๋ก stable diffusion๊ณผ ๊ฐ์ ๋ชจ๋ธ์ด ์๋ก์ด ์ปจ์
์ ํ์ตํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฒ์
๋๋ค. ์ด๋ฅผ ํตํด ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ๋ ์ ์ ์ดํ๊ณ ํน์ ์ปจ์
์ ๋ง๊ฒ ๋ชจ๋ธ์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ์์ ๋ง๋ค์ด์ง ์ปจ์
๋ค์ ์ปฌ๋ ์
์ [Stable Diffusion Conceptualizer](https://huggingface.co/spaces/sd-concepts-library/stable-diffusion-conceptualizer)๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ์ฌ์ฉํด๋ณผ ์ ์์ต๋๋ค.
+
+์ด ๊ฐ์ด๋์์๋ Stable Diffusion Conceptualizer์์ ์ฌ์ ํ์ตํ ์ปจ์
์ ์ฌ์ฉํ์ฌ textual-inversion์ผ๋ก ์ถ๋ก ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฝ๋๋ค. textual-inversion์ผ๋ก ๋ชจ๋ธ์ ์๋ก์ด ์ปจ์
์ ํ์ต์ํค๋ ๋ฐ ๊ด์ฌ์ด ์์ผ์๋ค๋ฉด, [Textual Inversion](./training/text_inversion) ํ๋ จ ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
+
+Hugging Face ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ธ์:
+
+```py
+from huggingface_hub import notebook_login
+
+notebook_login()
+```
+
+ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์์ฑ๋ ์ด๋ฏธ์ง๋ฅผ ์๊ฐํํ๊ธฐ ์ํ ๋์ฐ๋ฏธ ํจ์ `image_grid`๋ฅผ ๋ง๋ญ๋๋ค:
+
+```py
+import os
+import torch
+
+import PIL
+from PIL import Image
+
+from diffusers import StableDiffusionPipeline
+from transformers import CLIPFeatureExtractor, CLIPTextModel, CLIPTokenizer
+
+
+def image_grid(imgs, rows, cols):
+ assert len(imgs) == rows * cols
+
+ w, h = imgs[0].size
+ grid = Image.new("RGB", size=(cols * w, rows * h))
+ grid_w, grid_h = grid.size
+
+ for i, img in enumerate(imgs):
+ grid.paste(img, box=(i % cols * w, i // cols * h))
+ return grid
+```
+
+Stable Diffusion๊ณผ [Stable Diffusion Conceptualizer](https://huggingface.co/spaces/sd-concepts-library/stable-diffusion-conceptualizer)์์ ์ฌ์ ํ์ต๋ ์ปจ์
์ ์ ํํฉ๋๋ค:
+
+```py
+pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"
+repo_id_embeds = "sd-concepts-library/cat-toy"
+```
+
+์ด์ ํ์ดํ๋ผ์ธ์ ๋ก๋ํ๊ณ ์ฌ์ ํ์ต๋ ์ปจ์
์ ํ์ดํ๋ผ์ธ์ ์ ๋ฌํ ์ ์์ต๋๋ค:
+
+```py
+pipeline = StableDiffusionPipeline.from_pretrained(pretrained_model_name_or_path, torch_dtype=torch.float16).to("cuda")
+
+pipeline.load_textual_inversion(repo_id_embeds)
+```
+
+ํน๋ณํ placeholder token '``'๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ํ์ต๋ ์ปจ์
์ผ๋ก ํ๋กฌํํธ๋ฅผ ๋ง๋ค๊ณ , ์์ฑํ ์ํ์ ์์ ์ด๋ฏธ์ง ํ์ ์๋ฅผ ์ ํํฉ๋๋ค:
+
+```py
+prompt = "a grafitti in a favela wall with a on it"
+
+num_samples = 2
+num_rows = 2
+```
+
+๊ทธ๋ฐ ๋ค์ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ , ์์ฑ๋ ์ด๋ฏธ์ง๋ค์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒ์์ ๋ง๋ค์๋ ๋์ฐ๋ฏธ ํจ์ `image_grid`๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ ๊ฒฐ๊ณผ๋ค์ ์๊ฐํํฉ๋๋ค. ์ด ๋ `num_inference_steps`์ `guidance_scale`๊ณผ ๊ฐ์ ๋งค๊ฐ ๋ณ์๋ค์ ์กฐ์ ํ์ฌ, ์ด๊ฒ๋ค์ด ์ด๋ฏธ์ง ํ์ง์ ์ด๋ ํ ์ํฅ์ ๋ฏธ์น๋์ง๋ฅผ ์์ ๋กญ๊ฒ ํ์ธํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
+
+```py
+all_images = []
+for _ in range(num_rows):
+ images = pipe(prompt, num_images_per_prompt=num_samples, num_inference_steps=50, guidance_scale=7.5).images
+ all_images.extend(images)
+
+grid = image_grid(all_images, num_samples, num_rows)
+grid
+```
+
+
+

+
diff --git a/docs/source/ko/using-diffusers/unconditional_image_generation.md b/docs/source/ko/using-diffusers/unconditional_image_generation.md
index 67fc2913fbf0..65d99bd6d61f 100644
--- a/docs/source/ko/using-diffusers/unconditional_image_generation.md
+++ b/docs/source/ko/using-diffusers/unconditional_image_generation.md
@@ -12,7 +12,7 @@ specific language governing permissions and limitations under the License.
# Unconditional ์ด๋ฏธ์ง ์์ฑ
-[[Colab์์ ์ด๊ธฐ]]
+[[open-in-colab]]
Unconditional ์ด๋ฏธ์ง ์์ฑ์ ๋น๊ต์ ๊ฐ๋จํ ์์
์
๋๋ค. ๋ชจ๋ธ์ด ํ
์คํธ๋ ์ด๋ฏธ์ง์ ๊ฐ์ ์ถ๊ฐ ์กฐ๊ฑด ์์ด ์ด๋ฏธ ํ์ต๋ ํ์ต ๋ฐ์ดํฐ์ ์ ์ฌํ ์ด๋ฏธ์ง๋ง ์์ฑํฉ๋๋ค.
diff --git a/docs/source/ko/using-diffusers/using_safetensors.md b/docs/source/ko/using-diffusers/using_safetensors.md
index 6972103bde10..4e1c6758e13f 100644
--- a/docs/source/ko/using-diffusers/using_safetensors.md
+++ b/docs/source/ko/using-diffusers/using_safetensors.md
@@ -1,14 +1,67 @@
-# ์ธ์ดํ์ผ์๋ ๋ฌด์์ธ๊ฐ์?
+# ์ธ์ดํํ
์ ๋ก๋
-[์ธ์ดํํ
์](https://github.com/huggingface/safetensors)๋ ํผํด์ ์ฌ์ฉํ๋ ํ์ดํ ์น๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด์ '.bin'๊ณผ๋ ๋ค๋ฅธ ํ์์
๋๋ค.
+[safetensors](https://github.com/huggingface/safetensors)๋ ํ
์๋ฅผ ์ ์ฅํ๊ณ ๋ก๋ํ๊ธฐ ์ํ ์์ ํ๊ณ ๋น ๋ฅธ ํ์ผ ํ์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก PyTorch ๋ชจ๋ธ ๊ฐ์ค์น๋ Python์ [`pickle`](https://docs.python.org/3/library/pickle.html) ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ `.bin` ํ์ผ์ ์ ์ฅ๋๊ฑฐ๋ `ํผํด`๋ฉ๋๋ค. ๊ทธ๋ฌ๋ `ํผํด`์ ์์ ํ์ง ์์ผ๋ฉฐ ํผํด๋ ํ์ผ์๋ ์คํ๋ ์ ์๋ ์
์ฑ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ธ์ดํํ
์๋ `ํผํด`์ ์์ ํ ๋์์ผ๋ก ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ๊ณต์ ํ๋ ๋ฐ ์ด์์ ์
๋๋ค.
-ํผํด์ ์
์์ ์ธ ํ์ผ์ด ์์์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ์
๋ช
์ด ๋์ต๋๋ค.
-ํ๋ธ ์์ฒด์์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ง๋ง ๋ง๋ณํต์น์ฝ์ ์๋๋๋ค.
+์ด ๊ฐ์ด๋์์๋ `.safetensor` ํ์ผ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ค๋ฅธ ํ์์ผ๋ก ์ ์ฅ๋ ์์ ์ ํ์ฐ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ `.safetensor`๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์ํ๊ธฐ ์ ์ ์ธ์ดํํ
์๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํ์ธ์:
-์ธ์ดํํ
์์ ๊ฐ์ฅ ์ค์ํ ๋ชฉํ๋ ์ปดํจํฐ๋ฅผ ํ์ทจํ ์ ์๋ค๋ ์๋ฏธ์์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ๋ก๋ฉ์ *์์ ํ๊ฒ* ๋ง๋๋ ๊ฒ์
๋๋ค.
+```bash
+!pip install safetensors
+```
-# ์ ์ธ์ดํ์ผ์๋ฅผ ์ฌ์ฉํ๋์?
+['runwayml/stable-diffusion-v1-5`] (https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main) ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณด๋ฉด `text_encoder`, `unet` ๋ฐ `vae` ํ์ ํด๋์ ๊ฐ์ค์น๊ฐ `.safetensors` ํ์์ผ๋ก ์ ์ฅ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๐ค ๋ํจ์ ๋ ๋ชจ๋ธ ์ ์ฅ์์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ํด๋น ํ์ ํด๋์์ ์ด๋ฌํ '.safetensors` ํ์ผ์ ์๋์ผ๋ก ๋ก๋ํฉ๋๋ค.
-**์ ์๋ ค์ง์ง ์์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ํ์ผ์ ์ถ์ฒ๊ฐ ํ์คํ์ง ์์ ๊ฒฝ์ฐ "์์ ์ฑ"์ด ํ๋์ ์ด์ ๊ฐ ๋ ์ ์์ต๋๋ค.
+๋ณด๋ค ๋ช
์์ ์ธ ์ ์ด๋ฅผ ์ํด ์ ํ์ ์ผ๋ก `์ฌ์ฉ_์ธ์ดํํ
์=True`๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค(`์ธ์ดํํ
์`๊ฐ ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ์ค์นํ๋ผ๋ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์๋จ):
-๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ด์ ๋ **๋ก๋ฉ ์๋**์
๋๋ค. ์ธ์ดํ์ผ์๋ ์ผ๋ฐ ํผํด ํ์ผ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ชจ๋ธ์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ก๋ํ ์ ์์ต๋๋ค. ๋ชจ๋ธ์ ์ ํํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ์๋นํ๋ ๊ฒฝ์ฐ, ์ด๋ ์์ฒญ๋ ์๊ฐ ์ ์ฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
\ No newline at end of file
+```py
+from diffusers import DiffusionPipeline
+
+pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)
+```
+
+๊ทธ๋ฌ๋ ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์์ ์์์ฒ๋ผ ๋ฐ๋์ ๋ณ๋์ ํ์ ํด๋์ ์ ์ฅ๋๋ ๊ฒ์ ์๋๋๋ค. ๋ชจ๋ ๊ฐ์ค์น๊ฐ ํ๋์ '.safetensors` ํ์ผ์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ์ค์น๊ฐ Stable Diffusion ๊ฐ์ค์น์ธ ๊ฒฝ์ฐ [`~diffusers.loaders.FromCkptMixin.from_ckpt`] ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ง์ ๋ก๋ํ ์ ์์ต๋๋ค:
+
+```py
+from diffusers import StableDiffusionPipeline
+
+pipeline = StableDiffusionPipeline.from_ckpt(
+ "https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors"
+)
+```
+
+## ์ธ์ดํํ
์๋ก ๋ณํ
+
+ํ๋ธ์ ๋ชจ๋ ๊ฐ์ค์น๋ฅผ '.safetensors` ํ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ฉฐ, '.bin`์ผ๋ก ์ ์ฅ๋ ๊ฐ์ค์น๊ฐ ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ [Convert Space](https://huggingface.co/spaces/diffusers/convert)์ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น๋ฅผ '.safetensors'๋ก ๋ณํํ์ธ์. Convert Space๋ ํผํด๋ ๊ฐ์ค์น๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ๋ณํํ ํ ํ ๋ฆฌํ์คํธ๋ฅผ ์ด์ด ํ๋ธ์ ์๋ก ๋ณํ๋ `.safetensors` ํ์ผ์ ์
๋ก๋ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํผํด๋ ํ์ผ์ ์
์ฑ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, ์์ ํ์ง ์์ ํ์ผ๊ณผ ์์ฌ์ค๋ฌ์ด ํผํด ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ์งํ๋ [๋ณด์ ์ค์บ๋](https://huggingface.co/docs/hub/security-pickle#hubs-security-scanner)๊ฐ ์๋ ํ๋ธ๋ก ์
๋ก๋๋ฉ๋๋ค. - ๊ฐ๋ณ ์ปดํจํฐ๊ฐ ์๋.
+
+๊ฐ์ ` ๋งค๊ฐ๋ณ์์ ํ ๋ฆฌํ์คํธ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ง์ ํ์ฌ ์๋ก์ด '.safetensors` ๊ฐ์ค์น๊ฐ ์ ์ฉ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค(ํ๋ธ์ [Check PR](https://huggingface.co/spaces/diffusers/check_pr) ๊ณต๊ฐ์์ ํ
์คํธํ ์๋ ์์)(์: `refs/pr/22`):
+
+```py
+from diffusers import DiffusionPipeline
+
+pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", revision="refs/pr/22")
+```
+
+## ์ธ์ดํ์ผ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
+
+์ธ์ดํํฐ ์ผ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค:
+
+- ์ธ์ดํํ
์๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์์ ์
๋๋ค.์คํ ์์ค ๋ฐ ๋ชจ๋ธ ๋ฐฐํฌ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ค์ด๋ก๋ํ ๋ชจ๋ธ ๊ฐ์ค์น์ ์
์ฑ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ง ์๋ค๋ ๊ฒ์ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ด ์ค์ํด์ก์ต๋๋ค.์ธ์ดํ์ผ์์ ํ์ฌ ํค๋ ํฌ๊ธฐ๋ ๋งค์ฐ ํฐ JSON ํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
+- ๋ชจ๋ธ ์ ํ ๊ฐ์ ๋ก๋ฉ ์๋๋ ํ
์์ ์ ๋ก ์นดํผ๋ฅผ ์ํํ๋ ์ธ์ดํํ
์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ ๋ค๋ฅธ ์ด์ ์
๋๋ค. ๊ฐ์ค์น๋ฅผ CPU(๊ธฐ๋ณธ๊ฐ)๋ก ๋ก๋ํ๋ ๊ฒฝ์ฐ 'ํผํด'์ ๋นํด ํนํ ๋น ๋ฅด๋ฉฐ, ๊ฐ์ค์น๋ฅผ GPU๋ก ์ง์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ ๋น ๋ฅด์ง๋ ์๋๋ผ๋ ๋น์ทํ๊ฒ ๋น ๋ฆ
๋๋ค. ๋ชจ๋ธ์ด ์ด๋ฏธ ๋ก๋๋ ๊ฒฝ์ฐ์๋ง ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋๋ ์ ์์ผ๋ฉฐ, ๊ฐ์ค์น๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ๋ชจ๋ธ์ ์ฒ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ ๊ฒ์
๋๋ค.
+
+ ์ ์ฒด ํ์ดํ๋ผ์ธ์ ๋ก๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์
๋๋ค:
+
+ ```py
+ from diffusers import StableDiffusionPipeline
+
+ pipeline = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1")
+ "Loaded in safetensors 0:00:02.033658"
+ "Loaded in PyTorch 0:00:02.663379"
+ ```
+
+ ํ์ง๋ง ์ค์ ๋ก 500MB์ ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ผ๋ง ๋์ง ์์ต๋๋ค:
+
+ ```bash
+ safetensors: 3.4873ms
+ PyTorch: 172.7537ms
+ ```
+
+์ง์ฐ ๋ก๋ฉ์ ์ธ์ดํํ
์์์๋ ์ง์๋๋ฉฐ, ์ด๋ ๋ถ์ฐ ์ค์ ์์ ์ผ๋ถ ํ
์๋ง ๋ก๋ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์ด ํ์์ ์ฌ์ฉํ๋ฉด [BLOOM](https://huggingface.co/bigscience/bloom) ๋ชจ๋ธ์ ์ผ๋ฐ PyTorch ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ์ฌ 10๋ถ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ 8๊ฐ์ GPU์์ 45์ด ๋ง์ ๋ก๋ํ ์ ์์ต๋๋ค.
diff --git a/docs/source/ko/using-diffusers/weighted_prompts.md b/docs/source/ko/using-diffusers/weighted_prompts.md
new file mode 100644
index 000000000000..ce08f4949555
--- /dev/null
+++ b/docs/source/ko/using-diffusers/weighted_prompts.md
@@ -0,0 +1,115 @@
+
+
+# ํ๋กฌํํธ์ ๊ฐ์ค์น ๋ถ์ฌํ๊ธฐ
+
+[[open-in-colab]]
+
+ํ
์คํธ ๊ฐ์ด๋ ๊ธฐ๋ฐ์ diffusion ๋ชจ๋ธ์ ์ฃผ์ด์ง ํ
์คํธ ํ๋กฌํํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
+ํ
์คํธ ํ๋กฌํํธ์๋ ๋ชจ๋ธ์ด ์์ฑํด์ผ ํ๋ ์ฌ๋ฌ ๊ฐ๋
์ด ํฌํจ๋ ์ ์์ผ๋ฉฐ ํ๋กฌํํธ์ ํน์ ๋ถ๋ถ์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ด ๋ฐ๋์งํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
+
+Diffusion ๋ชจ๋ธ์ ๋ฌธ๋งฅํ๋ ํ
์คํธ ์๋ฒ ๋ฉ์ผ๋ก diffusion ๋ชจ๋ธ์ cross attention ๋ ์ด์ด๋ฅผ ์กฐ์ ํจ์ผ๋ก์จ ์๋ํฉ๋๋ค.
+([๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํ Stable Diffusion Guide](https://huggingface.co/docs/optimum-neuron/main/en/package_reference/modeling#stable-diffusion)๋ฅผ ์ฐธ๊ณ ํ์ธ์).
+๋ฐ๋ผ์ ํ๋กฌํํธ์ ํน์ ๋ถ๋ถ์ ๊ฐ์กฐํ๋(๋๋ ๊ฐ์กฐํ์ง ์๋) ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ๋กฌํํธ์ ๊ด๋ จ ๋ถ๋ถ์ ํด๋นํ๋ ํ
์คํธ ์๋ฒ ๋ฉ ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๊ฒ์
๋๋ค.
+์ด๊ฒ์ "ํ๋กฌํํธ ๊ฐ์ค์น ๋ถ์ฌ" ๋ผ๊ณ ํ๋ฉฐ, ์ปค๋ฎค๋ํฐ์์ ๊ฐ์ฅ ์๊ตฌํ๋ ๊ธฐ๋ฅ์
๋๋ค.([์ด๊ณณ](https://github.com/huggingface/diffusers/issues/2431)์ issue๋ฅผ ๋ณด์ธ์ ).
+
+## Diffusers์์ ํ๋กฌํํธ ๊ฐ์ค์น ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ
+
+์ฐ๋ฆฌ๋ `diffusers`์ ์ญํ ์ด ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ์์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ toolbex๋ผ๊ณ ์๊ฐํฉ๋๋ค.
+[InvokeAI](https://github.com/invoke-ai/InvokeAI) ๋ [diffuzers](https://github.com/abhishekkrthakur/diffuzers) ๊ฐ์ ๊ฐ๋ ฅํ UI๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
+ํ๋กฌํํธ๋ฅผ ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ ์ง์ํ๊ธฐ ์ํด, `diffusers` ๋
+[StableDiffusionPipeline](https://huggingface.co/docs/diffusers/v0.18.2/en/api/pipelines/stable_diffusion/text2img#diffusers.StableDiffusionPipeline)์ ๊ฐ์
+๋ง์ ํ์ดํ๋ผ์ธ์ [prompt_embeds](https://huggingface.co/docs/diffusers/v0.14.0/en/api/pipelines/stable_diffusion/text2img#diffusers.StableDiffusionPipeline.__call__.prompt_embeds)
+์ธ์๋ฅผ ๋
ธ์ถ์์ผ, "prompt-weighted"/์ถ์ฒ๋ ํ
์คํธ ์๋ฒ ๋ฉ์ ํ์ดํ๋ผ์ธ์ ๋ฐ๋ก ์ ๋ฌํ ์ ์๊ฒ ํฉ๋๋ค.
+
+[Compel ๋ผ์ด๋ธ๋ฌ๋ฆฌ](https://github.com/damian0815/compel)๋ ํ๋กฌํํธ์ ์ผ๋ถ๋ฅผ ๊ฐ์กฐํ๊ฑฐ๋ ๊ฐ์กฐํ์ง ์์ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
+์๋ฒ ๋ฉ์ ์ง์ ์ค๋นํ๋ ๊ฒ ๋์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ์ถ์ฒํฉ๋๋ค.
+
+๊ฐ๋จํ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
+๋ค์๊ณผ ๊ฐ์ด `"๊ณต์ ๊ฐ๊ณ ๋
ธ๋ ๋ถ์์ ๊ณ ์์ด"` ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์ถ์ต๋๋ค:
+
+```py
+from diffusers import StableDiffusionPipeline, UniPCMultistepScheduler
+
+pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
+pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
+
+prompt = "a red cat playing with a ball"
+
+generator = torch.Generator(device="cpu").manual_seed(33)
+
+image = pipe(prompt, generator=generator, num_inference_steps=20).images[0]
+image
+```
+
+์์ฑ๋ ์ด๋ฏธ์ง:
+
+
+
+์ฌ์ง์์ ์ ์ ์๋ฏ์ด, "๊ณต"์ ์ด๋ฏธ์ง์ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ๊ฐ์กฐํด ๋ณผ๊น์!
+
+๋จผ์ `compel` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผํฉ๋๋ค:
+
+```
+pip install compel
+```
+
+๊ทธ๋ฐ ๋ค์์๋ `Compel` ์ค๋ธ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค:
+
+```py
+from compel import Compel
+
+compel_proc = Compel(tokenizer=pipe.tokenizer, text_encoder=pipe.text_encoder)
+```
+
+์ด์ `"++"` ๋ฅผ ์ฌ์ฉํด์ "๊ณต" ์ ๊ฐ์กฐํด ๋ด
์๋ค:
+
+```py
+prompt = "a red cat playing with a ball++"
+```
+
+๊ทธ๋ฆฌ๊ณ ์ด ํ๋กฌํํธ๋ฅผ ํ์ดํ๋ผ์ธ์ ๋ฐ๋ก ์ ๋ฌํ์ง ์๊ณ , `compel_proc` ๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํด์ผํฉ๋๋ค:
+
+```py
+prompt_embeds = compel_proc(prompt)
+```
+
+ํ์ดํ๋ผ์ธ์ `prompt_embeds` ๋ฅผ ๋ฐ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค:
+
+```py
+generator = torch.Generator(device="cpu").manual_seed(33)
+
+images = pipe(prompt_embeds=prompt_embeds, generator=generator, num_inference_steps=20).images[0]
+image
+```
+
+์ด์ "๊ณต"์ด ์๋ ๊ทธ๋ฆผ์ ์ถ๋ ฅํ ์ ์์ต๋๋ค!
+
+
+
+๋ง์ฐฌ๊ฐ์ง๋ก `--` ์ ๋ฏธ์ฌ๋ฅผ ๋จ์ด์ ์ฌ์ฉํ์ฌ ๋ฌธ์ฅ์ ์ผ๋ถ๋ฅผ ๊ฐ์กฐํ์ง ์์ ์ ์์ต๋๋ค. ํ๋ฒ ์๋ํด ๋ณด์ธ์!
+
+์ฆ๊ฒจ์ฐพ๋ ํ์ดํ๋ผ์ธ์ `prompt_embeds` ์
๋ ฅ์ด ์๋ ๊ฒฝ์ฐ issue๋ฅผ ์๋ก ๋ง๋ค์ด์ฃผ์ธ์.
+Diffusers ํ์ ์ต๋ํ ๋์ํ๋ ค๊ณ ๋
ธ๋ ฅํฉ๋๋ค.
+
+Compel 1.1.6 ๋ textual inversions์ ์ฌ์ฉํ์ฌ ๋จ์ํํ๋ ์ ํฐ๋ฆดํฐ ํด๋์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
+`DiffusersTextualInversionManager`๋ฅผ ์ธ์คํด์คํ ํ ํ ์ด๋ฅผ Compel init์ ์ ๋ฌํฉ๋๋ค:
+
+```
+textual_inversion_manager = DiffusersTextualInversionManager(pipe)
+compel = Compel(
+ tokenizer=pipe.tokenizer,
+ text_encoder=pipe.text_encoder,
+ textual_inversion_manager=textual_inversion_manager)
+```
+
+๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด [compel](https://github.com/damian0815/compel) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
diff --git a/docs/source/ko/using-diffusers/write_own_pipeline.md b/docs/source/ko/using-diffusers/write_own_pipeline.md
index 50128f24fcdf..a6469644566c 100644
--- a/docs/source/ko/using-diffusers/write_own_pipeline.md
+++ b/docs/source/ko/using-diffusers/write_own_pipeline.md
@@ -12,7 +12,7 @@ specific language governing permissions and limitations under the License.
# ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋ฐ ์ค์ผ์ค๋ฌ ์ดํดํ๊ธฐ
-[[colab์์ ์ด๊ธฐ]]
+[[open-in-colab]]
๐งจ Diffusers๋ ์ฌ์ฉ์ ์นํ์ ์ด๋ฉฐ ์ ์ฐํ ๋๊ตฌ ์์๋ก, ์ฌ์ฉ์ฌ๋ก์ ๋ง๊ฒ diffusion ์์คํ
์ ๊ตฌ์ถ ํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด ๋๊ตฌ ์์์ ํต์ฌ์ ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ์
๋๋ค. [`DiffusionPipeline`]์ ํธ์๋ฅผ ์ํด ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ฅผ ๋ฒ๋ค๋ก ์ ๊ณตํ์ง๋ง, ํ์ดํ๋ผ์ธ์ ๋ถ๋ฆฌํ๊ณ ๋ชจ๋ธ๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ฌ์ฉํด ์๋ก์ด diffusion ์์คํ
์ ๋ง๋ค ์๋ ์์ต๋๋ค.