ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Stable Diffusion with ๐Ÿงจ Diffusers
Hugging Face BlogHugging Face Blog
AI/ML

Hugging Face Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Stable Diffusion ๋ชจ๋ธ์„ ๋ช‡ ์ค„์˜ ์ฝ”๋“œ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•ด ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ง„์ž…์žฅ๋ฒฝ ์ œ๊ฑฐ

Stable Diffusion with ๐Ÿงจ Diffusers

2022๋…„ 8์›” 22์ผ8๋ถ„beginner

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 ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

์›๋ฌธ ์ฝ๊ธฐ