Hugging Face Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Stable Diffusion ๋ชจ๋ธ์ ๋ช ์ค์ ์ฝ๋๋ก ์คํ ๊ฐ๋ฅํ๊ฒ ์ถ์ํํด ํ ์คํธ-์ด๋ฏธ์ง ์์ฑ ํ์ดํ๋ผ์ธ์ ์ง์ ์ฅ๋ฒฝ ์ ๊ฑฐ
Stable Diffusion with ๐งจ Diffusers
AI ์์ฝ
Context
Stable Diffusion์ 512x512 ํด์๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๊ฐ๋ ฅํ ํ ์คํธ-์ด๋ฏธ์ง ํ์ฐ ๋ชจ๋ธ์ด์ง๋ง, ๋ด๋ถ ์ปดํฌ๋ํธ(ํ ํฌ๋์ด์ , UNet, VAE, ์ค์ผ์ค๋ฌ)๋ฅผ ์ง์ ๊ตฌ์ฑํ๊ณ ์กฐ์จํ๋ ๊ฒ์ ๋ณต์กํ๋ค. ๋ชจ๋ธ์ ๋ผ์ด์ ์ค ๊ท์ ์ ์ค์ํ๋ฉด์๋ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ ํตํฉ ์ธํฐํ์ด์ค๊ฐ ํ์ํ๋ค.
Technical Solution
- StableDiffusionPipeline ํด๋์ค ์ ๊ณต: from_pretrained() ํจ์๋ก ์ฌ์ ๊ตฌ์ฑ๋ ๋ชจ๋ธ์ ํ ์ค๋ก ๋ก๋
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์ต์ : float32 ๋์ float16 ์ ๋ฐ๋ ๋ก๋๋ก 10GB ์ดํ GPU RAM์์ ์คํ ๊ฐ๋ฅํ๊ฒ ๊ตฌ์ฑ
- ์ถ๋ก ํ๋ผ๋ฏธํฐ ์ปค์คํฐ๋ง์ด์ ์ด์ : num_inference_steps(๊ธฐ๋ณธ๊ฐ 50)์ guidance_scale๋ก ํ์ง-์๋ ํธ๋ ์ด๋์คํ ์กฐ์ ๊ฐ๋ฅํ๊ฒ ๊ตฌํ
- NSFW ์ฝํ ์ธ ํํฐ๋ง ๋ด์ฅ: ๋ชจ๋ธ ์ถ๋ ฅ์ nsfw_content_detected ํ๋๊ทธ ํฌํจํด ์ํํ ์ด๋ฏธ์ง ๊ฐ์ง
- ๊ฒฐ์ ์ ์์ฑ ์ง์: torch.Generator์ ์๋ ๊ฐ์ผ๋ก ๋์ผํ ์ ๋ ฅ์ ๋ํ ์ผ๊ด๋ ์ถ๋ ฅ ๋ณด์ฅ
- ์ปค์คํ ํ์ดํ๋ผ์ธ ์์ฑ ์ง์: ํ ์คํธ ์๋ฒ ๋ฉ, UNet ์ถ๋ก , ์ค์ผ์ค๋ฌ ๋จ๊ณ, VAE ๋์ฝ๋ฉ์ ๊ฐ๊ฐ ์ ์ดํ ์ ์๋ ์ ์์ค API ์ ๊ณต
Key Takeaway
๋ณต์กํ ๋ค๋จ๊ณ ์์ฑ ๋ชจ๋ธ์ ์ ์ธ์ ํ์ดํ๋ผ์ธ ์ถ์ํ๋ก ๊ฐ์ธ๋ฉด ์ด๋ณด ์ฌ์ฉ์๋ ๊ฐ๋จํ๊ฒ ์ ๊ทผํ๊ณ ๊ณ ๊ธ ์ฌ์ฉ์๋ ๊ฐ๋ณ ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ ์์ธต ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค. ๋ํ ๋ผ์ด์ ์ค, ์ฝํ ์ธ ํํฐ๋ง, ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค์์ ๊ฐ์ ํ๋ฉด ๋ชจ๋ธ์ ์ฑ ์ ์๋ ์ฌ์ฉ์ ์ด์งํ ์ ์๋ค.
์ค์ฒ ํฌ์ธํธ
๋๊ท๋ชจ ์์ฑ ๋ชจ๋ธ์ ํ๋ก๋์ ์๋น์ค์ ํตํฉํ๋ ค๋ ์์ง๋์ด๋ StableDiffusionPipeline๊ณผ ๊ฐ์ด ๊ณ ์์ค ํ์ดํ๋ผ์ธ ์ธํฐํ์ด์ค(1~3์ค ์ฝ๋๋ก ์คํ)์ ์ ์์ค ์ปดํฌ๋ํธ ์ ๊ทผ(๊ฐ๋ณ UNet, VAE ์ ์ด)์ ๋์์ ์ ๊ณตํ๋ฉด, ๋น ๋ฅธ ํ๋กํ ํ์ดํ๋ถํฐ ์ฑ๋ฅ ํ๋๊น์ง ์ ๋จ๊ณ๋ฅผ ์ง์ํ ์ ์๋ค. ํนํ float16 ๋ก๋์ num_inference_steps ์กฐ์ ๋ก ๋ฉ๋ชจ๋ฆฌ-ํ์ง ํธ๋ ์ด๋์คํ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ ธ์ถํ๋ฉด ์ ํ๋ GPU ํ๊ฒฝ์์๋ ๋ฐฐํฌ ๊ฐ๋ฅํ๋ค.