BleachNick's picture
upload required packages
87d40d2

A newer version of the Gradio SDK is available: 5.9.1

Upgrade

Diffusers์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿงจ

์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์˜ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ์ฐธ์—ฌ๊ฐ€ ๊ฐ€์น˜ ์žˆ๊ณ  ๊ฐ์‚ฌํžˆ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค. ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋„์™€์ฃผ๋ฉฐ ์†Œํ†ตํ•˜๊ณ  ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋‘๋ ค์›Œํ•˜์ง€ ๋ง๊ณ  ์ฐธ์—ฌํ•ด๋ณด์„ธ์š”!

๋ˆ„๊ตฌ๋‚˜ ์šฐ๋ฆฌ์˜ ๊ณต๊ฐœ Discord ์ฑ„๋„์—์„œ ๐Ÿ‘‹ ์ธ์‚ฌํ•˜๋ฉฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์žฅ๋ คํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” diffusion ๋ชจ๋ธ์˜ ์ตœ์‹  ๋™ํ–ฅ์„ ๋…ผ์˜ํ•˜๊ณ  ์งˆ๋ฌธ์„ ํ•˜๋ฉฐ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋ž‘ํ•˜๊ณ  ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์„œ๋กœ ๋„์™€์ฃผ๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ ์–ด์šธ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ชจ์ด๋Š” ๊ณณ์ž…๋‹ˆ๋‹คโ˜•. Join us on Discord

์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๊ธฐ์—ฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐฉ์ ์ด๊ณ  ํ™˜์˜ํ•˜๋ฉฐ ์นœ๊ทผํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ํ–‰๋™ ๊ฐ•๋ น์„ ์ฝ๊ณ  ์ƒํ˜ธ ์ž‘์šฉ ์ค‘์— ์ด๋ฅผ ์กด์ค‘ํ•˜๋„๋ก ์ฃผ์˜ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ์œค๋ฆฌ ์ง€์นจ์— ์ต์ˆ™ํ•ด์ง€๊ณ  ๋™์ผํ•œ ํˆฌ๋ช…์„ฑ๊ณผ ์ฑ…์ž„์„ฑ์˜ ์›์น™์„ ์ค€์ˆ˜ํ•ด์ฃผ์‹œ๊ธฐ๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ๋ถ€ํ„ฐ์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฏ€๋กœ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฐ€์น˜ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๋ง์„ค์ด์ง€ ๋ง๊ณ  ์˜๊ฒฌ์„ ์ œ์‹œํ•ด์ฃผ์„ธ์š” - ๋ชจ๋“  ๋ฉ”์‹œ์ง€, ๋Œ“๊ธ€, ์ด์Šˆ, ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋Š” ์ฝํžˆ๊ณ  ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.

๊ฐœ์š”

์ด์Šˆ์— ์žˆ๋Š” ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” ๊ฒƒ์—์„œ๋ถ€ํ„ฐ ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ƒˆ๋กœ์šด diffusion ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ์—ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์–ด์ง€๋Š” ๋ถ€๋ถ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์˜ ๊ธฐ์—ฌ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ๋‚œ์ด๋„์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ์—ฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Diffusers ํ† ๋ก  ํฌ๋Ÿผ์ด๋‚˜ Discord์—์„œ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. GitHub Issues ํƒญ์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. GitHub Issues ํƒญ์—์„œ ์ด์Šˆ์— ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. "Good first issue" ๋ผ๋ฒจ์ด ์ง€์ •๋œ ๊ฐ„๋‹จํ•œ ์ด์Šˆ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  5. ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. Community Pipeline์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. "Good second issue" ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์–ด๋ ค์šด ์ด์Šˆ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  9. ์ƒˆ๋กœ์šด ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์ƒˆ๋กœ์šด ํŒŒ์ดํ”„๋ผ์ธ/๋ชจ๋ธ" ๋ฐ "์ƒˆ๋กœ์šด ์Šค์ผ€์ค„๋Ÿฌ" ์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด ๊ธฐ์—ฌ์— ๋Œ€ํ•ด์„œ๋Š” ๋””์ž์ธ ์ฒ ํ•™์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

์•ž์„œ ๋งํ•œ ๋Œ€๋กœ, ๋ชจ๋“  ๊ธฐ์—ฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์–ด์ง€๋Š” ๋ถ€๋ถ„์—์„œ ๊ฐ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

4๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ๋ชจ๋“  ๊ธฐ์—ฌ์—๋Š” PR์„ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. PR์„ ์—ด๊ธฐ์—์„œ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Diffusers ํ† ๋ก  ํฌ๋Ÿผ์ด๋‚˜ Diffusers Discord์—์„œ ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ํ•˜๊ธฐ

Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์งˆ๋ฌธ์ด๋‚˜ ์˜๊ฒฌ์€ ํ† ๋ก  ํฌ๋Ÿผ์ด๋‚˜ Discord์—์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ๊ณผ ์˜๊ฒฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ์ด์— ๊ตญํ•œ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค):

  • ์ง€์‹์„ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ›ˆ๋ จ ๋˜๋Š” ์ถ”๋ก  ์‹คํ—˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ณด๊ณ 
  • ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ
  • ๋น„๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์— ๋Œ€ํ•œ ์งˆ๋ฌธ
  • ํ”„๋กœ์ ํŠธ ์ œ์•ˆ
  • ์ผ๋ฐ˜์ ์ธ ํ”ผ๋“œ๋ฐฑ
  • ๋…ผ๋ฌธ ์š”์•ฝ
  • Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋„์›€ ์š”์ฒญ
  • ์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ
  • Diffusion ๋ชจ๋ธ์— ๋Œ€ํ•œ ์œค๋ฆฌ์  ์งˆ๋ฌธ
  • ...

ํฌ๋Ÿผ์ด๋‚˜ Discord์—์„œ ์งˆ๋ฌธ์„ ํ•˜๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ง€์‹์„ ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜๋„๋ก ์žฅ๋ ค๋˜๋ฉฐ, ๋ฏธ๋ž˜์— ๋™์ผํ•œ ์งˆ๋ฌธ์„ ๊ฐ€์ง„ ์ดˆ๋ณด์ž์—๊ฒŒ๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ถ๊ธˆํ•œ ์งˆ๋ฌธ์€ ์–ธ์ œ๋“ ์ง€ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๋งค์šฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋‘๊ฐ€ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ์ ์ธ ์ง€์‹์„ ๋ฌธ์„œํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์— ํˆฌ์žํ•˜๋Š” ๋…ธ๋ ฅ์ด ๋งŽ์„์ˆ˜๋ก ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฌธ์„œํ™”๋œ ์ง€์‹์˜ ํ’ˆ์งˆ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ž˜ ์ •์˜๋˜๊ณ  ์ž˜ ๋‹ต๋ณ€๋œ ์งˆ๋ฌธ์€ ๋ชจ๋‘์—๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณ ํ’ˆ์งˆ ์ง€์‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ž˜๋ชป๋œ ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์€ ๊ณต๊ฐœ ์ง€์‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „๋ฐ˜์ ์ธ ํ’ˆ์งˆ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๊ณ ํ’ˆ์งˆ์˜ ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์€ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ๊ด€๋ จ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ž˜ ํ˜•์‹ํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ• ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฑ„๋„์— ๋Œ€ํ•œ ์ฐธ๊ณ ์‚ฌํ•ญ: ํฌ๋Ÿผ์€ ๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๋” ์ž˜ ์ƒ‰์ธํ™”๋ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋ฌผ์€ ์ธ๊ธฐ์— ๋”ฐ๋ผ ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง€๋ฉฐ, ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์— ๊ฒŒ์‹œํ•œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํฌ๋Ÿผ์— ๊ฒŒ์‹œ๋œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์€ ์‰ฝ๊ฒŒ ๋งํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Discord๋Š” ์ฑ„ํŒ… ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์–ด ๋น ๋ฅธ ๋Œ€ํ™”๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋น ๋ฅด๊ฒŒ ๋ฐ›์„ ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์งˆ๋ฌธ์ด ๋” ์ด์ƒ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Discord์—์„œ ์ด์ „์— ๊ฒŒ์‹œ๋œ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•œ ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ์ง€์‹์„ ๋งŒ๋“ค๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Discord์—์„œ์˜ ํ† ๋ก ์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๋‹ต๋ณ€๊ณผ ๊ฒฐ๋ก ์„ ์ด๋Œ์–ด๋‚ด๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ •๋ณด๋ฅผ ํฌ๋Ÿผ์— ๊ฒŒ์‹œํ•˜์—ฌ ๋ฏธ๋ž˜ ๋…์ž๋“ค์—๊ฒŒ ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

2. GitHub ์ด์Šˆ ํƒญ์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ ์—ด๊ธฐ

๐Ÿงจ Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋•๋ถ„์— ๊ฒฌ๊ณ ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์Šˆ๋ฅผ ๋ณด๊ณ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”, GitHub ์ด์Šˆ๋Š” Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ, ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ๊ธฐ๋Šฅ ์š”์ฒญ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””์ž์ธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ์™€ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ฒƒ(๋ฌธ์„œ ํฌํ•จ)์€ GitHub๊ฐ€ ์•„๋‹Œ ํฌ๋Ÿผ์ด๋‚˜ Discord์—์„œ ์งˆ๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ณ ๋ คํ•ด์ฃผ์„ธ์š”:

  • ์ด๋ฏธ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”(GitHub์˜ ์ด์Šˆ ํƒญ์—์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์„ธ์š”).
  • ๋‹ค๋ฅธ(๊ด€๋ จ๋œ) ์ด์Šˆ์— ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”. ๋‹ค๋ฅธ ์ด์Šˆ์™€ ๊ด€๋ จ์ด ๋†’๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด๊ณ  ๊ด€๋ จ ์ด์Šˆ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ์„ธ์š”.
  • ์ด์Šˆ๋ฅผ ์˜์–ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์˜์–ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด, DeepL๊ณผ ๊ฐ™์€ ๋›ฐ์–ด๋‚œ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ๋ฒˆ์—ญ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๊ตญ์–ด์—์„œ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•ด์ฃผ์„ธ์š”.
  • ์ด์Šˆ๊ฐ€ ์ตœ์‹  Diffusers ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ์ด์Šˆ๋ฅผ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— python -c "import diffusers; print(diffusers.__version__)" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Diffusers ๋ฒ„์ „์ด ์ตœ์‹  ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ๋” ๋†’์€์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”.
  • ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ํˆฌ์žํ•˜๋Š” ๋…ธ๋ ฅ์ด ๋งŽ์„์ˆ˜๋ก ๋‹ต๋ณ€์˜ ํ’ˆ์งˆ์ด ๋†’์•„์ง€๊ณ  Diffusers ์ด์Šˆ ์ „์ฒด์˜ ํ’ˆ์งˆ๋„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

2.1 ์žฌํ˜„๊ฐ€๋Šฅํ•˜๊ณ  ์ตœ์†Œํ•œ์ธ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ

์ƒˆ๋กœ์šด ์ด์Šˆ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋Š” ํ•ญ์ƒ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํฌํ•จํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์ด์–ด์•ผ ํ•˜๋ฉฐ ๊ฐ„๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ๋งํ•˜๋ฉด:

  • ๋ฒ„๊ทธ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ขํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ฝ”๋“œ ํŒŒ์ผ์„ ๊ทธ๋ƒฅ ๋˜์ง€์ง€ ๋งˆ์„ธ์š”.
  • ์ฝ”๋“œ์˜ ์„œ์‹์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Diffusers๊ฐ€ ์˜์กดํ•˜๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํฌํ•จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • ๋ฐ˜๋“œ์‹œ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์‰˜์—์„œ diffusers-cli env๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ‘œ์‹œ๋œ ์ •๋ณด๋ฅผ ์ด์Šˆ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์Šˆ๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋…์ž๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์™œ ๋ฌธ์ œ์ธ์ง€ ๋ชจ๋ฅด๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ•ญ์ƒ ๋…์ž๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ ์€ ๋…ธ๋ ฅ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋…์ž๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ™”๋˜๊ณ  ๊ฐ„๋‹จํ•œ Python ์…ธ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ๊ณผ/๋˜๋Š” ๋ฐ์ดํ„ฐ์…‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋…์ž๊ฐ€ ํ•ด๋‹น ๋ชจ๋ธ์ด๋‚˜ ๋ฐ์ดํ„ฐ์…‹์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด๋‚˜ ๋ฐ์ดํ„ฐ์…‹์„ Hub์— ์—…๋กœ๋“œํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์žฌํ˜„์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ• ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์—ด๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.

2.2. ๊ธฐ๋Šฅ ์š”์ฒญ

์„ธ๊ณ„์ ์ธ ๊ธฐ๋Šฅ ์š”์ฒญ์€ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค:

  1. ๋จผ์ € ๋™๊ธฐ๋ถ€์—ฌ:
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ/๋ถˆ๋งŒ์ด ์žˆ๋Š”๊ฐ€์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ทธ๋Ÿฐ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ธ๊ฐ€์š”? ์šฐ๋ฆฌ๋Š” ๊ทธ์— ๋Œ€ํ•ด ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!
  • ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ž‘์—…ํ–ˆ๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”๊ฐ€์š”? ๋ฉ‹์ง€๋„ค์š”! ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.
  1. ๊ธฐ๋Šฅ์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ๋‹จ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”;
  2. ๋ฏธ๋ž˜ ์‚ฌ์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”;
  3. ์ด๊ฒƒ์ด ๋…ผ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ๊ฒฝ์šฐ ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”;
  4. ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ •๋ณด(๊ทธ๋ฆผ, ์Šคํฌ๋ฆฐ์ƒท ๋“ฑ)๋ฅผ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”.

๊ธฐ๋Šฅ ์š”์ฒญ์€ ์—ฌ๊ธฐ์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.3 ํ”ผ๋“œ๋ฐฑ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””์ž์ธ๊ณผ ๊ทธ๊ฒƒ์ด ์™œ ์ข‹์€์ง€ ๋˜๋Š” ๋‚˜์œ์ง€์— ๋Œ€ํ•œ ์ด์œ ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์—„์ฒญ๋‚œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋””์ž์ธ ์ฒ ํ•™์„ ์ดํ•ดํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”. ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ํ˜„์žฌ ๋””์ž์ธ ์ฒ ํ•™๊ณผ ๋งž์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ๊ทธ ์ด์œ ์™€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. ๋ฐ˜๋Œ€๋กœ ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ๋””์ž์ธ ์ฒ ํ•™์„ ๋„ˆ๋ฌด ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œํ•œํ•œ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ๊ทธ ์ด์œ ์™€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ๋ฏธ๋ž˜์˜ ๋””์ž์ธ ๊ฒฐ์ •์— ํฐ ๋„์›€์ด ๋˜๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ ์ฃผ์„ธ์š”.

ํ”ผ๋“œ๋ฐฑ์— ๊ด€ํ•œ ์ด์Šˆ๋Š” ์—ฌ๊ธฐ์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.4 ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ

๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์€ ์ฃผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ์ฝ”๋“œ๊ฐ€ ์™œ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์งˆ๋ฌธํ•˜์‹  ์ฝ”๋“œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ํ•ด๋‹น ์ฝ”๋“œ ๋ถ€๋ถ„์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์— ๊ด€ํ•œ ์ด์Šˆ๋ฅผ ์—ฌ๊ธฐ์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.5 ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€ ์ œ์•ˆ

๋งŒ์•ฝ diffusion ๋ชจ๋ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”:

  • Diffusion ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊ณผ ๋…ผ๋ฌธ ๋˜๋Š” ๊ณต๊ฐœ๋œ ๋ฒ„์ „์˜ ๋งํฌ
  • ํ•ด๋‹น ๋ชจ๋ธ์˜ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋งํฌ
  • ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ฐ€์ค‘์น˜์˜ ๋งํฌ

๋ชจ๋ธ์— ์ง์ ‘ ๊ธฐ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, ์ตœ์„ ์˜ ์•ˆ๋‚ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”. ๋˜ํ•œ, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ตฌ์„ฑ ์š”์†Œ(๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ, ํŒŒ์ดํ”„๋ผ์ธ ๋“ฑ)์˜ ์›๋ž˜ ์ €์ž๋ฅผ GitHub ํ•ธ๋“ค๋กœ ํƒœ๊ทธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.

๋ชจ๋ธ/ํŒŒ์ดํ”„๋ผ์ธ/์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์—ฌ๊ธฐ์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. GitHub ์ด์Šˆ ํƒญ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต๋ณ€ํ•˜๊ธฐ

GitHub์—์„œ ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Diffusers์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ์ง€์‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •ํ™•ํ•œ ๋‹ต๋ณ€์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋ชจ๋‘๊ฐ€ ์‹œ๋„ํ•ด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ๊ณ ํ’ˆ์งˆ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ:

  • ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ์ œ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ ํ•ด๋‹น ์ด์Šˆ์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์—๋งŒ ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ, ๋…ผ๋ฌธ ๋˜๋Š” ๋‹ค๋ฅธ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋‹ต๋ณ€์„ ์ฆ๋ช…ํ•˜๊ฑฐ๋‚˜ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋กœ ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด๊ฑฐ๋‚˜ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค€๋‹ค๋ฉด, ์™„์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”.

๋˜ํ•œ, ๋งŽ์€ ์ด์Šˆ๋“ค์€ ๋‹จ์ˆœํžˆ ์ฃผ์ œ์™€ ๋ฌด๊ด€ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด์Šˆ์˜ ์ค‘๋ณต์ด๊ฑฐ๋‚˜ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์Šˆ๋“ค์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜๊ณ , ์ด์Šˆ ์ž‘์„ฑ์ž์—๊ฒŒ ๋” ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ์ค‘๋ณต๋œ ์ด์Šˆ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ํฌ๋Ÿผ ์ด๋‚˜ Discord๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด์Šˆ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์ด๊ณ  ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ™•์ธํ•œ ๊ฒฝ์šฐ, ๋‹ค์Œ ์„น์…˜์„ ์‚ดํŽด๋ณด์„ธ์š”.

๋‹ค์Œ ๋ชจ๋“  ๊ธฐ์—ฌ์— ๋Œ€ํ•ด์„œ๋Š” PR์„ ์—ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. PR ์—ด๊ธฐ ์„น์…˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

4. "Good first issue" ๊ณ ์น˜๊ธฐ

Good first issues๋Š” Good first issue ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์ด์Šˆ๋Š” ์ด๋ฏธ ์ž ์žฌ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด์Šˆ๊ฐ€ ์•„์ง ๋‹ซํžˆ์ง€ ์•Š์•˜๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, "์ด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

  • a.) ์ด์Šˆ ์„ค๋ช…์ด ์ด๋ฏธ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ํ•ด๊ฒฐ์ฑ…์ด ์ดํ•ด๋˜๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ธ๋‹ค๋ฉด, PR ๋˜๋Š” ๋“œ๋ž˜ํ”„ํŠธ PR์„ ์—ด์–ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • b.) ์ด์Šˆ ์„ค๋ช…์ด ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์–ด๋–ค ํ•ด๊ฒฐ์ฑ…์ด ๊ฐ€๋Šฅํ• ์ง€ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ๊ณ , Diffusers ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณง ๋‹ต๋ณ€ํ•ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ• ์ง€ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ง์ ‘ PR์„ ์—ด์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.
  • c.) ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ด๋ฆฐ PR์ด ์žˆ์ง€๋งŒ, ์ด์Šˆ๊ฐ€ ์•„์ง ๋‹ซํžˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. PR์ด ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ƒˆ๋กœ์šด PR์„ ์—ด๊ณ  ์ด์ „ PR์— ๋งํฌ๋ฅผ ๊ฑธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. PR์€ ์ข…์ข… ์›๋ž˜ ๊ธฐ์—ฌ์ž๊ฐ€ ๊ฐ‘์ž๊ธฐ ์‹œ๊ฐ„์„ ๋‚ด์ง€ ๋ชปํ•ด ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์— ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜คํ”ˆ ์†Œ์Šค์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด๋ฉฐ ๋งค์šฐ ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ƒˆ๋กœ ์‹œ๋„ํ•˜๊ณ  ๊ธฐ์กด PR์˜ ์ง€์‹์„ ํ™œ์šฉํ•ด์ฃผ๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ PR์ด ์žˆ๊ณ  ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ œ์•ˆ์„ ํ•ด์ฃผ๊ฑฐ๋‚˜ PR์„ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜ PR์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋“ฑ ์ž‘์„ฑ์ž๋ฅผ ๋„์™€์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๊ธฐ

์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•ญ์ƒ ์ข‹์€ ๋ฌธ์„œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๊ณต์‹ ๋ฌธ์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ฒซ ๋ฒˆ์งธ ์ ‘์  ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ€์น˜ ์žˆ๋Š” ๊ธฐ์—ฌ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค:

  • ๋งž์ถค๋ฒ•์ด๋‚˜ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ๋งํฌ๊ฐ€ ๊นจ์ง„ ๊ฒฝ์šฐ, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ด์ฃผ์‹œ๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ์˜ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ํ…์„œ์˜ ๋ชจ์–‘์ด๋‚˜ ์ฐจ์›์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฌธ์„œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋ž˜๋œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ Diffusers ๋ฌธ์„œ ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋œ ๋ชจ๋“  ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ์˜ ์ผ๋ถ€์ด๋ฉฐ, ํ•ด๋‹น ๋ฌธ์„œ ์†Œ์Šค์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.

6. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๊ธฐ

์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ์™œ ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด GitHub ์ด์Šˆ #841๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š” (๊ธฐ๋ณธ์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” diffusion ๋ชจ๋ธ์ด ์ถ”๋ก ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ ์ฐฝ์˜์„ฑ๊ณผ ์ž‘์—…์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ณต์œ ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. [DiffusionPipeline]์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œํ•˜์—ฌ custom_pipeline ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ˆ„๊ตฌ๋‚˜ ๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” UNet์ด ๋‹จ์ผ ์ˆœ๋ฐฉํ–ฅ ํŒจ์Šค๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ดํ”„๋ผ์ธ (๋‹จ๊ณ„๋ณ„ ํŒŒ์ดํ”„๋ผ์ธ)์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ•œ one_step_unet.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์ด ํŒŒ์ผ์€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์„ค์น˜๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, [DiffusionPipeline]์—์„œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ์Šค์ผ€์ค„๋Ÿฌ ๊ตฌ์„ฑ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ ํด๋ž˜์Šค๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. __init__ ํ•จ์ˆ˜์— UNet๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

    ๋˜ํ•œ [~DiffusionPipeline.save_pretrained]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ทธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก register_modules ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

from diffusers import DiffusionPipeline
import torch

class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
    def __init__(self, unet, scheduler):
        super().__init__()

        self.register_modules(unet=unet, scheduler=scheduler)
  1. forward ํŒจ์Šค์—์„œ (__call__๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค), ์›ํ•˜๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์ด๋“  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "one-step" ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฒฝ์šฐ, ๋ฌด์ž‘์œ„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  timestep=1๋กœ ์„ค์ •ํ•˜์—ฌ UNet๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  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๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์‚ฌ์ „ ํ•™์Šต๋œ ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from diffusers import DDPMScheduler, UNet2DModel

scheduler = DDPMScheduler()
unet = UNet2DModel()

pipeline = UnetSchedulerOneForwardPipeline(unet=unet, scheduler=scheduler)
output = pipeline()
# load pretrained weights
pipeline = UnetSchedulerOneForwardPipeline.from_pretrained("google/ddpm-cifar10-32", use_safetensors=True)
output = pipeline()

ํŒŒ์ดํ”„๋ผ์ธ์„ GitHub ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” Hub ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณต์œ ํ•˜๋ ค๋ฉด Diffusers ์ €์žฅ์†Œ์—์„œ PR์„ ์—ด๊ณ  one_step_unet.py ํŒŒ์ผ์„ examples/community ํ•˜์œ„ ํด๋”์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

Hub ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณต์œ ํ•˜๋ ค๋ฉด, ํ—ˆ๋ธŒ์— ๋ชจ๋ธ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  one_step_unet.py ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”.

7. ํ›ˆ๋ จ ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๊ธฐ

Diffusers ์˜ˆ์ œ๋Š” examples ํด๋”์— ์žˆ๋Š” ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  • ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ
  • ์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ

์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” examples/research_projects์— ์œ„์น˜ํ•˜๋ฉฐ, ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” research_projects ๋ฐ community ํด๋”๋ฅผ ์ œ์™ธํ•œ examples์˜ ๋ชจ๋“  ํด๋”๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” Diffusers์˜ ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต์‹ ํŒŒ์ดํ”„๋ผ์ธ vs ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ 6. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ธฐ์—ฌํ•˜๊ธฐ์—์„œ ์ œ์‹œํ•œ ์ด์œ ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค: ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ diffusion ๋ชจ๋ธ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Diffusers ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ž‰๋„ˆ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํŠน์ • ํ›ˆ๋ จ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋„ˆ๋ฌด ์‹คํ—˜์ ์ด๊ฑฐ๋‚˜ ์ถฉ๋ถ„ํžˆ ์ธ๊ธฐ ์—†๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํ›ˆ๋ จ ์ฝ”๋“œ๋Š” research_projects ํด๋”์— ๋„ฃ๊ณ  ์ž‘์„ฑ์ž๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ ํ›ˆ๋ จ ๋ฐ ์—ฐ๊ตฌ ์˜ˆ์ œ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ, requirements.txt ํŒŒ์ผ ๋ฐ README.md ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

git clone https://github.com/huggingface/diffusers

๊ทธ๋ฆฌ๊ณ  ํ›ˆ๋ จ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ถ”๊ฐ€์ ์ธ ์˜์กด์„ฑ๋„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

pip install -r /examples/<your-example-folder>/requirements.txt

๋”ฐ๋ผ์„œ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, requirements.txt ํŒŒ์ผ์€ ํ›ˆ๋ จ ์˜ˆ์ œ์— ํ•„์š”ํ•œ ๋ชจ๋“  pip ์ข…์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์น˜๋œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์ œ์˜ ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, DreamBooth requirements.txt ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” ๋‹ค์Œ ์ฒ ํ•™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ Python ํŒŒ์ผ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ๋ช…๋ น ์ค„์—์„œ python <your-example>.py --args์™€ ๊ฐ™์ด ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์ œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฉฐ, Diffusers๋ฅผ ์‚ฌ์šฉํ•œ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชฉ์ ์€ ์ตœ์ฒจ๋‹จ diffusion ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์•Œ๋ ค์ง„ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ์˜ ๋ถ€์‚ฐ๋ฌผ๋กœ์„œ, ์˜ˆ์ œ๋Š” ์ข‹์€ ๊ต์œก ์ž๋ฃŒ๋กœ์จ์˜ ์—ญํ• ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์˜ˆ์ œ์ธ dreambooth์™€ ๊ฐ™์€ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. Diffusers์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์—ฌ์ž๋“ค์ด Accelerate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ์˜ˆ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ํฌ๊ด„์ ์ธ README.md๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด README์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์ œ ๋ช…๋ น์–ด.
  • ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ํ›ˆ๋ จ ๊ฒฐ๊ณผ (๋กœ๊ทธ, ๋ชจ๋ธ ๋“ฑ)์— ๋Œ€ํ•œ ๋งํฌ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ๋น„๊ณต์‹/์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ git ํ•ธ๋“ค์„ ํฌํ•จํ•˜์—ฌ ์ด ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•˜๋Š” ๋ฌธ์žฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒฝ์šฐ, examples/test_examples.py์— ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๋น„๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์—๋Š” ์ด ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

8. "Good second issue" ๊ณ ์น˜๊ธฐ

"Good second issue"๋Š” Good second issue ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Good second issue๋Š” Good first issues๋ณด๋‹ค ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ ์„ค๋ช…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋œ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ๊ด€์‹ฌ ์žˆ๋Š” ๊ธฐ์—ฌ์ž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ฝค ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Good second issue๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์—ด๊ณ  PR์„ ์ด์Šˆ์— ๋งํฌํ•˜์„ธ์š”. ์ด๋ฏธ ํ•ด๋‹น ์ด์Šˆ์— ๋Œ€ํ•œ PR์ด ์—ด๋ ค์žˆ์ง€๋งŒ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์™œ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ดํŽด๋ณด๊ณ  ๊ฐœ์„ ๋œ PR์„ ์—ด์–ด๋ณด์„ธ์š”. Good second issue๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Good first issue ์ด์Šˆ๋ณด๋‹ค ๋ณ‘ํ•ฉํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์šฐ๋ฏ€๋กœ, ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PR์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ, ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๋Š” PR์— ์ฐธ์—ฌํ•˜์—ฌ ์ปค๋ฐ‹ํ•˜๊ณ  ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9. ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ์ถ”๊ฐ€ํ•˜๊ธฐ

ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ๋Š” Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ตœ์ฒจ๋‹จ diffusion ๊ธฐ์ˆ ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ฐ•๋ ฅํ•œ ์ƒ์„ฑํ˜• AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ชจ๋ธ, ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ „์ฒด ์ƒ์„ฑํ˜• AI ์ƒํƒœ๊ณ„์— ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Diffusers์—๋Š” ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์•„์ง ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”:

์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์—, ์ฒ ํ•™ ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ์–ด๋Š ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋“ , ๋””์ž์ธ ์ฒ ํ•™๊ณผ ๊ด€๋ จ๋œ API ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ์˜ ๋””์ž์ธ ์ฒ ํ•™๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋””์ž์ธ ์„ ํƒ์— ๊ทผ๋ณธ์ ์œผ๋กœ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํ”ผ๋“œ๋ฐฑ ์ด์Šˆ๋ฅผ ์—ด์–ด ํ•ด๋‹น ๋””์ž์ธ ํŒจํ„ด/์„ ํƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€, ๋””์ž์ธ ์ฒ ํ•™์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์˜ ์ผ๊ด€์„ฑ์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

PR์— ์›๋ณธ ์ฝ”๋“œ๋ฒ ์ด์Šค/๋…ผ๋ฌธ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋ฉด PR์—์„œ ์›๋ž˜ ์ž‘์„ฑ์ž์—๊ฒŒ ์ง์ ‘ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์–ด ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.

PR์—์„œ ๋ง‰ํžŒ ๊ฒฝ์šฐ๋‚˜ ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๋ฆฌ๋ทฐ๋‚˜ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•˜์ง€ ๋งˆ์„ธ์š”.

Copied from mechanism

# Copied from mechanism ์€ ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ดํ•ดํ•ด์•ผ ํ•  ๋…ํŠนํ•˜๊ณ  ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Diffusers ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์—์„œ ์ด๋ฅผ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. # Copied from mechanism ์œผ๋กœ ํ‘œ์‹œ๋œ ์ฝ”๋“œ๋Š” ๋ณต์‚ฌํ•œ ์ฝ”๋“œ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•˜๋„๋ก ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด make fix-copies๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋งŽ์€ ํŒŒ์ผ์— ๊ฑธ์ณ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ „ํŒŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ [~diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]์€ ์›๋ž˜ ์ฝ”๋“œ์ด๋ฉฐ, AltDiffusionPipelineOutput์€ # Copied from mechanism์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ํด๋ž˜์Šค ์ ‘๋‘์‚ฌ๋ฅผ Stable์—์„œ Alt๋กœ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# Copied from diffusers.pipelines.stable_diffusion.pipeline_output.StableDiffusionPipelineOutput with Stable->Alt
class AltDiffusionPipelineOutput(BaseOutput):
    """
    Output class for Alt Diffusion pipelines.

    Args:
        images (`List[PIL.Image.Image]` or `np.ndarray`)
            List of denoised PIL images of length `batch_size` or NumPy array of shape `(batch_size, height, width,
            num_channels)`.
        nsfw_content_detected (`List[bool]`)
            List indicating whether the corresponding generated image contains "not-safe-for-work" (nsfw) content or
            `None` if safety checking could not be performed.
    """

๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด Don't Repeat Yourself* ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์˜ ์ด ์„น์…˜์„ ์ฝ์–ด๋ณด์„ธ์š”.

์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

์ด์Šˆ๋ฅผ ์ž˜ ์ž‘์„ฑํ• ์ˆ˜๋ก ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.

  1. ์ด์Šˆ์— ์ ์ ˆํ•œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ƒˆ ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ, ๊ธฐ๋Šฅ ์š”์ฒญ, API ๋””์ž์ธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ, ์ƒˆ๋กœ์šด ๋ชจ๋ธ/ํŒŒ์ดํ”„๋ผ์ธ/์Šค์ผ€์ค„๋Ÿฌ ์ถ”๊ฐ€, ํฌ๋Ÿผ, ๋˜๋Š” ๋นˆ ์ด์Šˆ ์ค‘์—์„œ ์„ ํƒํ•˜์„ธ์š”. ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ช…ํ™•์„ฑ: ์ด์Šˆ์— ์ ํ•ฉํ•œ ์ œ๋ชฉ์„ ์ง€์ •ํ•˜์„ธ์š”. ์ด์Šˆ ์„ค๋ช…์„ ๊ฐ€๋Šฅํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”. ์ด์Šˆ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”. ํ•˜๋‚˜์˜ ์ด์Šˆ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ ์ด์Šˆ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—ด์–ด์ฃผ์„ธ์š”. ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ, ์–ด๋–ค ๋ฒ„๊ทธ์ธ์ง€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "diffusers์—์„œ ์˜ค๋ฅ˜"์™€ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.
  3. ์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ: ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์—†์œผ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ๊ทธ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์€ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๋ฝ๋œ import๋‚˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋‚˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋…์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋‚˜ ๋ชจ๋ธ์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋”๋ฏธ ๋ชจ๋ธ์ด๋‚˜ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.
  4. ๊ฐ„๊ฒฐ์„ฑ: ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ๋…์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”. ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ฝ”๋“œ๋‚˜ ์ •๋ณด๋Š” ๋ชจ๋‘ ์ œ๊ฑฐํ•ด์ฃผ์„ธ์š”. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ›„์—๋Š” ์ž‘์—… ํ๋ฆ„ ์ „์ฒด๋ฅผ ๋ฌธ์ œ์— ๋˜์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ›ˆ๋ จ ์ฝ”๋“œ์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ง€ ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ๋ช‡ ์ค„๋กœ ์žฌํ˜„ํ•ด๋ณด์„ธ์š”. ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹ ๋Œ€์‹  ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.
  5. ๋งํฌ ์ถ”๊ฐ€ํ•˜๊ธฐ. ํŠน์ •ํ•œ ์ด๋ฆ„, ๋ฉ”์„œ๋“œ, ๋˜๋Š” ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, ๋…์ž๊ฐ€ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งํฌ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”. ํŠน์ • PR์ด๋‚˜ ์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ด์Šˆ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ์„ธ์š”. ๋…์ž๊ฐ€ ๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด์Šˆ์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.
  6. ํฌ๋งทํŒ…. ํŒŒ์ด์ฌ ์ฝ”๋“œ ๊ตฌ๋ฌธ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํฌ๋งทํŒ…ํ•˜๊ณ , ์ผ๋ฐ˜ ์ฝ”๋“œ ๊ตฌ๋ฌธ์œผ๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํฌ๋งทํŒ…ํ•ด์ฃผ์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ GitHub ํฌ๋งทํŒ… ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  7. ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ํ‹ฐ์ผ“์ด ์•„๋‹ˆ๋ผ, ์ž˜ ์ž‘์„ฑ๋œ ๋ฐฑ๊ณผ์‚ฌ์ „ ํ•ญ๋ชฉ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ถ”๊ฐ€๋œ ์ด์Šˆ๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์‹์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž˜ ์ž‘์„ฑ๋œ ์ด์Šˆ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ์ธก๋ฉด์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ PR ์ž‘์„ฑ ๋ฐฉ๋ฒ•

  1. ์นด๋ฉœ๋ ˆ์˜จ์ด ๋˜์„ธ์š”. ๊ธฐ์กด์˜ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๊ตฌ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ , ์ฝ”๋“œ ์ถ”๊ฐ€๊ฐ€ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋งค๋„๋Ÿฝ๊ฒŒ ํ๋ฅด๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋””์ž์ธ ํŒจํ„ด์ด๋‚˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ํฌ๊ฒŒ ๋‹ค๋ฅธ PR์€ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์ดˆ์ ์„ ๋งž์ถ”์„ธ์š”. ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•˜๋Š” PR์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•˜๊ธฐ"์— ๋น ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ด€๋ จ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” PR์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฆฌ๋ทฐํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  3. ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ, ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์˜ˆ์ œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ถ”๊ฐ€ํ•ด๋ณด์„ธ์š”.
  4. PR์˜ ์ œ๋ชฉ์€ ๊ธฐ์—ฌ ๋‚ด์šฉ์„ ์š”์•ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. PR์ด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ, PR ์„ค๋ช…์— ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ์–ธ๊ธ‰ํ•˜์—ฌ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š” (์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ž‘์—… ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก).
  6. ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ์ œ๋ชฉ์— [WIP]๋ฅผ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์—ฌ์ฃผ์„ธ์š”. ์ด๋Š” ์ค‘๋ณต ์ž‘์—…์„ ํ”ผํ•˜๊ณ , ๋ณ‘ํ•ฉ ์ค€๋น„๊ฐ€ ๋œ PR๊ณผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  7. ์ข‹์€ ์ด์Šˆ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ํ˜•์‹์„ ์ง€์ •ํ•ด๋ณด์„ธ์š”.
  8. ๊ธฐ์กด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”
  9. ๋†’์€ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๊ฐ€์ง„ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํ’ˆ์งˆ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด @slow ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. RUN_SLOW=1 python -m pytest tests/test_my_new_model.py. CircleCI๋Š” ๋Š๋ฆฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์ง€๋งŒ, GitHub Actions๋Š” ๋งค์ผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค!
  1. ๋ชจ๋“  ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋Š” ๋งˆํฌ๋‹ค์šด๊ณผ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ •๋ณด์„ฑ docstring์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ pipeline_latent_diffusion.py๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  2. ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํฐ ๋ถ€๋‹ด์„ ์ฃผ๋Š” ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋ฐ ๊ธฐํƒ€ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด hf.co ํ˜ธ์ŠคํŒ… dataset์ธ hf-internal-testing ๋˜๋Š” huggingface/documentation-images๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๊ธฐ์—ฌ์ธ ๊ฒฝ์šฐ, ์ด๋ฏธ์ง€๋ฅผ PR์— ์ถ”๊ฐ€ํ•˜๊ณ  Hugging Face ๊ตฌ์„ฑ์›์—๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์ด ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์š”์ฒญํ•˜์„ธ์š”.

PR์„ ์—ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ™์€ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ PR์ด๋‚˜ ์ด์Šˆ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ด์Šˆ๋ฅผ ์—ด์–ด๋ณด๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

๐Ÿงจ Diffusers์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ git ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. git์€ ๊ฐ€์žฅ ์‰ฌ์šด ๋„๊ตฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ๋งค๋‰ด์–ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์…ธ์—์„œ git --help์„ ์ž…๋ ฅํ•˜๊ณ  ์ฆ๊ธฐ์„ธ์š”. ์ฑ…์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ, Pro Git์€ ๋งค์šฐ ์ข‹์€ ์ฐธ๊ณ  ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š” (์ง€์›๋˜๋Š” Python ๋ฒ„์ „):

  1. ์ €์žฅ์†Œ ํŽ˜์ด์ง€์—์„œ 'Fork' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์‚ฌ๋ณธ์ด GitHub ์‚ฌ์šฉ์ž ๊ณ„์ •์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  2. ํฌํฌํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ ๋””์Šคํฌ์— ํด๋ก ํ•˜๊ณ , ๊ธฐ๋ณธ ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

$ git clone git@github.com:<your GitHub handle>/diffusers.git
$ cd diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git
  1. ๊ฐœ๋ฐœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ด€ํ•  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”:
$ git checkout -b a-descriptive-name-for-my-changes

main ๋ธŒ๋žœ์น˜ ์œ„์—์„œ ์ ˆ๋Œ€ ์ž‘์—…ํ•˜์ง€ ๋งˆ์„ธ์š”.

  1. ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์„ธ์š”:
$ pip install -e ".[dev]"

๋งŒ์•ฝ ์ €์žฅ์†Œ๋ฅผ ์ด๋ฏธ ํด๋ก ํ•œ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด git pull์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ธฐ๋Šฅ์„ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœํ•˜์„ธ์š”.

๊ธฐ๋Šฅ์„ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ํ†ต๊ณผ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

$ pytest tests/<TEST_TO_RUN>.py

ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์„ ์„ค์น˜ํ•˜์˜€๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋‹ค์Œ์˜ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

$ pip install -e ".[test]"

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฌถ์Œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, Diffusers๊ฐ€ ๋งŽ์ด ์„ฑ์žฅํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋ฅผ ์ ๋‹นํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ•๋ ฅํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ•ด๋‹น ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค:

$ make test

๐Ÿงจ Diffusers๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ํฌ๋งทํŒ…ํ•˜๊ธฐ ์œ„ํ•ด black๊ณผ isort๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•œ ํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž๋™ ์Šคํƒ€์ผ ์ˆ˜์ • ๋ฐ ์ฝ”๋“œ ๊ฒ€์ฆ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

$ make style

๐Ÿงจ Diffusers ruff์™€ ๋ช‡๊ฐœ์˜ ์ปค์Šคํ…€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ”๋”ฉ ์‹ค์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ’ˆ์งˆ ์ œ์–ด๋Š” CI์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋™์ผํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์Œ์„ ํ†ตํ•ด์„œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

$ make quality

๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋งŒ์กฑํ•œ๋‹ค๋ฉด git add๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  git commit์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋กœ์ปฌ์ƒ์œผ๋กœ ์ €์žฅํ•œ๋‹ค:

$ git add modified_file.py
$ git commit -m "A descriptive message about your changes."

์ฝ”๋“œ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

$ git pull upstream main

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ„์ •์— ํ‘ธ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”:

$ git push -u origin a-descriptive-name-for-my-changes
  1. ๋งŒ์กฑํ•˜์…จ๋‹ค๋ฉด, GitHub์—์„œ ํฌํฌํ•œ ์›นํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ 'Pull request'๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ”„๋กœ์ ํŠธ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ๊ฒ€ํ† ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๋“ค์—๊ฒŒ๋„ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค! ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Pull request์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํฌ์— ํ‘ธ์‹œํ•˜๋ฉด ์ž๋™์œผ๋กœ Pull request์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋™์ž‘๊ณผ ์—ฌ๋Ÿฌ ์˜ˆ์ œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ๋ฌถ์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…Œ์ŠคํŠธ๋Š” tests ํด๋”์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pytest์™€ pytest-xdist๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ๋Š” ๋” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•ด pytest๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

$ python -m pytest -n auto --dist=loadfile -s -v ./tests/

์‚ฌ์‹ค, make test๋Š” ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!

์ž‘์—… ์ค‘์ธ ๊ธฐ๋Šฅ๋งŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ž‘์€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋Š๋ฆฐ ํ…Œ์ŠคํŠธ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. RUN_SLOW ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ yes๋กœ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ์˜ ๋ชจ๋ธ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„๊ณผ ์ข‹์€ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๋˜๋Š” ๋งŽ์€ ์ธ๋‚ด์‹ฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

$ RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./tests/

unittest๋Š” ์™„์ „ํžˆ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ unittest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค:

$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v

upstream(main)๊ณผ forked main ๋™๊ธฐํ™”ํ•˜๊ธฐ

upstream ์ €์žฅ์†Œ์— ๋ถˆํ•„์š”ํ•œ ์ฐธ์กฐ ๋…ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ด€๋ จ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, forked ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:

  1. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, forked ์ €์žฅ์†Œ์—์„œ ๋ธŒ๋žœ์น˜์™€ PR์„ ์‚ฌ์šฉํ•˜์—ฌ upstream๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜์„ธ์š”. ๋Œ€์‹  forked main์œผ๋กœ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜์„ธ์š”.
  2. PR์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋ธŒ๋žœ์น˜๋ฅผ ์ฒดํฌ์•„์›ƒํ•œ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:
$ git checkout -b your-branch-for-syncing
$ git pull --squash --no-commit upstream main
$ git commit -m '<your message without GitHub references>'
$ git push --set-upstream origin your-branch-for-syncing

์Šคํƒ€์ผ ๊ฐ€์ด๋“œ

Documentation string์— ๋Œ€ํ•ด์„œ๋Š”, ๐Ÿงจ Diffusers๋Š” Google ์Šคํƒ€์ผ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.