Buckets:

download
raw
66.1 kB
import"../chunks/DsnmJJEf.js";import{i as be,h as Je,C as Me,H as l,a as s,b as Te,E as ye,s as Ie}from"../chunks/CxueWNWA.js";import{p as Ue,o as je,s as e,f as pe,a as i,b as Ze,d as o,c as a,r as t,n as Ge}from"../chunks/CrV5djYC.js";import{H as ce}from"../chunks/CozusF9x.js";const _e='{"title":"Diffusers์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿงจ","local":"how-to-contribute-to-diffusers-","sections":[{"title":"๊ฐœ์š”","local":"overview","sections":[{"title":"1. Diffusers ํ† ๋ก  ํฌ๋Ÿผ์ด๋‚˜ Diffusers Discord์—์„œ ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ํ•˜๊ธฐ","local":"1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord","sections":[],"depth":3},{"title":"2. GitHub ์ด์Šˆ ํƒญ์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ ์—ด๊ธฐ","local":"2-opening-new-issues-on-the-github-issues-tab","sections":[{"title":"2.1 ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ","local":"21-reproducible-minimal-bug-reports","sections":[],"depth":4},{"title":"2.2. ๊ธฐ๋Šฅ ์š”์ฒญ","local":"22-feature-requests","sections":[],"depth":4},{"title":"2.3 ํ”ผ๋“œ๋ฐฑ","local":"23-feedback","sections":[],"depth":4},{"title":"2.4 ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ","local":"24-technical-questions","sections":[],"depth":4},{"title":"2.5 ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€ ์ œ์•ˆ","local":"25-proposal-to-add-a-new-model-scheduler-or-pipeline","sections":[],"depth":4}],"depth":3},{"title":"3. GitHub ์ด์Šˆ ํƒญ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต๋ณ€ํ•˜๊ธฐ","local":"3-answering-issues-on-the-github-issues-tab","sections":[],"depth":3},{"title":"4. โ€œGood first issueโ€ ๊ณ ์น˜๊ธฐ","local":"4-fixing-a-good-first-issue","sections":[],"depth":3},{"title":"5. ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๊ธฐ","local":"5-contribute-to-the-documentation","sections":[],"depth":3},{"title":"6. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๊ธฐ","local":"6-contribute-a-community-pipeline","sections":[],"depth":3},{"title":"7. ํ›ˆ๋ จ ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๊ธฐ","local":"7-contribute-to-training-examples","sections":[],"depth":3},{"title":"8. โ€œGood second issueโ€ ๊ณ ์น˜๊ธฐ","local":"8-fixing-a-good-second-issue","sections":[],"depth":3},{"title":"9. ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ์ถ”๊ฐ€ํ•˜๊ธฐ","local":"9-adding-pipelines-models-schedulers","sections":[{"title":"Copied from mechanism","local":"copied-from-mechanism","sections":[],"depth":4}],"depth":3}],"depth":2},{"title":"์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ•","local":"how-to-write-a-good-issue","sections":[],"depth":2},{"title":"์ข‹์€ PR ์ž‘์„ฑ ๋ฐฉ๋ฒ•","local":"how-to-write-a-good-pr","sections":[],"depth":2},{"title":"PR์„ ์—ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•","local":"how-to-open-a-pr","sections":[{"title":"ํ…Œ์ŠคํŠธ","local":"tests","sections":[],"depth":3},{"title":"upstream(HuggingFace) main๊ณผ forked main ๋™๊ธฐํ™”ํ•˜๊ธฐ","local":"syncing-forked-main-with-upstream-huggingface-main","sections":[],"depth":3},{"title":"์Šคํƒ€์ผ ๊ฐ€์ด๋“œ","local":"style-guide","sections":[],"depth":3}],"depth":2}],"depth":1}';var Re=a('<meta name="hf:doc:metadata"/>'),ve=a('<p>GitHub ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณต์œ ํ•˜๋ ค๋ฉด Diffusers <a href="https://github.com/huggingface/diffusers" rel="nofollow">์ €์žฅ์†Œ</a>์—์„œ Pull Request๋ฅผ ์—ด๊ณ  one_step_unet.py ํŒŒ์ผ์„ <a href="https://github.com/huggingface/diffusers/tree/main/examples/community" rel="nofollow">examples/community</a> ํ•˜์œ„ ํด๋”์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.</p>'),Ve=a("<p>Hub ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณต์œ ํ•˜๋ ค๋ฉด, ํ—ˆ๋ธŒ์— ๋ชจ๋ธ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  one_step_unet.py ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”.</p>"),We=a("<!> <!>",1),Be=a(`<p></p> <!> <!> <p>์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์˜ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ์ฐธ์—ฌ๊ฐ€ ๊ฐ€์น˜ ์žˆ๊ณ  ๊ฐ์‚ฌํžˆ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค. ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋„์™€์ฃผ๋ฉฐ ์†Œํ†ตํ•˜๊ณ  ๋ฌธ์„œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋‘ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋‘๋ ค์›Œํ•˜์ง€ ๋ง๊ณ  ์ฐธ์—ฌํ•ด๋ณด์„ธ์š”!</p> <p>๋ˆ„๊ตฌ๋‚˜ ์šฐ๋ฆฌ์˜ ๊ณต๊ฐœ Discord ์ฑ„๋„์—์„œ ๐Ÿ‘‹ ์ธ์‚ฌํ•˜๋ฉฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์žฅ๋ คํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” diffusion ๋ชจ๋ธ์˜ ์ตœ์‹  ๋™ํ–ฅ์„ ๋…ผ์˜ํ•˜๊ณ  ์งˆ๋ฌธ์„ ํ•˜๋ฉฐ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋ž‘ํ•˜๊ณ  ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์„œ๋กœ ๋„์™€์ฃผ๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ ์–ด์šธ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ชจ์ด๋Š” ๊ณณ์ž…๋‹ˆ๋‹คโ˜•. <a href="https://Discord.gg/G7tWnz98XR"><img alt="Join us on Discord" src="https://img.shields.io/discord/823813159592001537?color=5865F2&amp;logo=discord&amp;logoColor=white"/></a></p> <p>์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๊ธฐ์—ฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐฉ์ ์ด๊ณ  ํ™˜์˜ํ•˜๋ฉฐ ์นœ๊ทผํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ <a href="https://github.com/huggingface/diffusers/blob/main/CODE_OF_CONDUCT.md" rel="nofollow">ํ–‰๋™ ๊ฐ•๋ น</a>์„ ์ฝ๊ณ  ์ƒํ˜ธ ์ž‘์šฉ ์ค‘์— ์ด๋ฅผ ์กด์ค‘ํ•˜๋„๋ก ์ฃผ์˜ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” <a href="https://huggingface.co/docs/diffusers/conceptual/ethical_guidelines" rel="nofollow">์œค๋ฆฌ ์ง€์นจ</a>์— ์ต์ˆ™ํ•ด์ง€๊ณ  ๋™์ผํ•œ ํˆฌ๋ช…์„ฑ๊ณผ ์ฑ…์ž„์„ฑ์˜ ์›์น™์„ ์ค€์ˆ˜ํ•ด์ฃผ์‹œ๊ธฐ๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.</p> <p>์šฐ๋ฆฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋กœ๋ถ€ํ„ฐ์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฏ€๋กœ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฐ€์น˜ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๋ง์„ค์ด์ง€ ๋ง๊ณ  ์˜๊ฒฌ์„ ์ œ์‹œํ•ด์ฃผ์„ธ์š” - ๋ชจ๋“  ๋ฉ”์‹œ์ง€, ๋Œ“๊ธ€, ์ด์Šˆ, Pull Request(PR)๋Š” ์ฝํžˆ๊ณ  ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.</p> <!> <p>์ด์Šˆ์— ์žˆ๋Š” ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” ๊ฒƒ์—์„œ๋ถ€ํ„ฐ ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ƒˆ๋กœ์šด diffusion ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ธฐ์—ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p>์ด์–ด์ง€๋Š” ๋ถ€๋ถ„์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์˜ ๊ธฐ์—ฌ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ๋‚œ์ด๋„์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ธฐ์—ฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <ol><li><a href="https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers" rel="nofollow">Diffusers ํ† ๋ก  ํฌ๋Ÿผ</a>์ด๋‚˜ <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>์—์„œ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li><a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">GitHub Issues ํƒญ</a>์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li><a href="https://github.com/huggingface/diffusers/issues" rel="nofollow">GitHub Issues ํƒญ</a>์—์„œ ์ด์Šˆ์— ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li>โ€œGood first issueโ€ ๋ผ๋ฒจ์ด ์ง€์ •๋œ ๊ฐ„๋‹จํ•œ ์ด์Šˆ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">์—ฌ๊ธฐ</a>๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.</li> <li><a href="https://github.com/huggingface/diffusers/tree/main/docs/source" rel="nofollow">๋ฌธ์„œ</a>์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li><a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3Acommunity-examples" rel="nofollow">Community Pipeline</a>์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li><a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">์˜ˆ์ œ</a>์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li>โ€œGood second issueโ€ ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์–ด๋ ค์šด ์ด์Šˆ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22" rel="nofollow">์—ฌ๊ธฐ</a>๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.</li> <li>์ƒˆ๋กœ์šด ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22" rel="nofollow">โ€œ์ƒˆ๋กœ์šด ํŒŒ์ดํ”„๋ผ์ธ/๋ชจ๋ธโ€</a> ๋ฐ <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22" rel="nofollow">โ€œ์ƒˆ๋กœ์šด ์Šค์ผ€์ค„๋Ÿฌโ€</a> ์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด ๊ธฐ์—ฌ์— ๋Œ€ํ•ด์„œ๋Š” <a href="https://huggingface.co/docs/diffusers/main/ko/conceptual/philosophy" rel="nofollow">๋””์ž์ธ ์ฒ ํ•™</a>์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”.</li></ol> <p>์•ž์„œ ๋งํ•œ ๋Œ€๋กœ, <strong>๋ชจ๋“  ๊ธฐ์—ฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค</strong>. ์ด์–ด์ง€๋Š” ๋ถ€๋ถ„์—์„œ ๊ฐ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.</p> <p>4๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ๋ชจ๋“  ๊ธฐ์—ฌ์—๋Š” Pull Request์„ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. <a href="#how-to-open-a-pr">Pull Request ์—ด๊ธฐ</a>์—์„œ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์งˆ๋ฌธ์ด๋‚˜ ์˜๊ฒฌ์€ <a href="https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63" rel="nofollow">ํ† ๋ก  ํฌ๋Ÿผ</a>์ด๋‚˜ <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>์—์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ๊ณผ ์˜๊ฒฌ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(ํ•˜์ง€๋งŒ ์ด์— ๊ตญํ•œ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค):</p> <ul><li>์ง€์‹์„ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ›ˆ๋ จ ๋˜๋Š” ์ถ”๋ก  ์‹คํ—˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ณด๊ณ </li> <li>๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ</li> <li>๋น„๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์— ๋Œ€ํ•œ ์งˆ๋ฌธ</li> <li>ํ”„๋กœ์ ํŠธ ์ œ์•ˆ</li> <li>์ผ๋ฐ˜์ ์ธ ํ”ผ๋“œ๋ฐฑ</li> <li>๋…ผ๋ฌธ ์š”์•ฝ</li> <li>Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋„์›€ ์š”์ฒญ</li> <li>์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ</li> <li>Diffusion ๋ชจ๋ธ์— ๋Œ€ํ•œ ์œค๋ฆฌ์  ์งˆ๋ฌธ</li> <li>โ€ฆ</li></ul> <p>ํฌ๋Ÿผ์ด๋‚˜ Discord์—์„œ ์งˆ๋ฌธ์„ ํ•˜๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ง€์‹์„ ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต์œ ํ•˜๋„๋ก ์žฅ๋ ค๋˜๋ฉฐ, ํ–ฅํ›„ ๋™์ผํ•œ ์งˆ๋ฌธ์„ ๊ฐ€์ง„ ์ดˆ๋ณด์ž์—๊ฒŒ๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ถ๊ธˆํ•œ ์งˆ๋ฌธ์€ ์–ธ์ œ๋“ ์ง€ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋˜ํ•œ, ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๊ฒŒ ๋งค์šฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋‘๊ฐ€ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ์ ์ธ ์ง€์‹์„ ๋ฌธ์„œํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.</p> <p><strong>์ฃผ์˜</strong>ํ•˜์‹ญ์‹œ์˜ค. ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์— ํˆฌ์žํ•˜๋Š” ๋…ธ๋ ฅ์ด ๋งŽ์„์ˆ˜๋ก ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฌธ์„œํ™”๋œ ์ง€์‹์˜ ํ’ˆ์งˆ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ž˜ ์ •์˜๋˜๊ณ  ์ž˜ ๋‹ต๋ณ€๋œ ์งˆ๋ฌธ์€ ๋ชจ๋‘์—๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณ ํ’ˆ์งˆ ์ง€์‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ž˜๋ชป๋œ ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์€ ๊ณต๊ฐœ ์ง€์‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „๋ฐ˜์ ์ธ ํ’ˆ์งˆ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๊ณ ํ’ˆ์งˆ์˜ ์งˆ๋ฌธ์ด๋‚˜ ๋‹ต๋ณ€์€ <em>๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ๊ด€๋ จ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ž˜ ํ˜•์‹ํ™”๋˜์–ด ์žˆ์–ด์•ผ</em> ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ <a href="#how-to-write-a-good-issue">์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ•</a> ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.</p> <p><strong>์ฑ„๋„์— ๋Œ€ํ•œ ์ฐธ๊ณ ์‚ฌํ•ญ</strong>: <a href="https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63" rel="nofollow"><em>ํฌ๋Ÿผ</em></a>์€ ๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๋” ์ž˜ ์ƒ‰์ธํ™”๋ฉ๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋ฌผ์€ ์ธ๊ธฐ์— ๋”ฐ๋ผ ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง€๋ฉฐ, ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์— ๊ฒŒ์‹œํ•œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ํฌ๋Ÿผ์— ๊ฒŒ์‹œ๋œ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์€ ์‰ฝ๊ฒŒ ๋งํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด <em>Discord</em>๋Š” ์ฑ„ํŒ… ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์–ด ๋น ๋ฅธ ๋Œ€ํ™”๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋น ๋ฅด๊ฒŒ ๋ฐ›์„ ์ˆ˜๋Š” ์žˆ๊ฒ ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์งˆ๋ฌธ์ด ๋” ์ด์ƒ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Discord์—์„œ ์ด์ „์— ๊ฒŒ์‹œ๋œ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ์˜ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์œ„ํ•œ ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ์ง€์‹์„ ๋งŒ๋“ค๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Discord์—์„œ์˜ ํ† ๋ก ์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๋‹ต๋ณ€๊ณผ ๊ฒฐ๋ก ์„ ์ด๋Œ์–ด๋‚ด๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ •๋ณด๋ฅผ ํฌ๋Ÿผ์— ๊ฒŒ์‹œํ•˜์—ฌ ํ–ฅํ›„ ๋…์ž๋“ค์—๊ฒŒ ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.</p> <!> <p>๐Ÿงจ Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋•๋ถ„์— ๊ฒฌ๊ณ ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์Šˆ๋ฅผ ๋ณด๊ณ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.</p> <p>๊ธฐ์–ตํ•ด์ฃผ์„ธ์š”, GitHub ์ด์Šˆ๋Š” Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ, ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ๊ธฐ๋Šฅ ์š”์ฒญ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””์ž์ธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.</p> <p>๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ <strong>์ฝ”๋“œ์™€ ๊ด€๋ จ๋˜์ง€ ์•Š์€</strong> ๋ชจ๋“  ๊ฒƒ(๋ฌธ์„œ ํฌํ•จ)์€ GitHub๊ฐ€ ์•„๋‹Œ <a href="https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63" rel="nofollow">ํฌ๋Ÿผ</a>์ด๋‚˜ <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>์—์„œ ์งˆ๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</p> <p><strong>์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ๋‹ค์Œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ๊ณ ๋ คํ•ด์ฃผ์„ธ์š”</strong>:</p> <ul><li>์ด๋ฏธ ๊ฐ™์€ ์ด์Šˆ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”(GitHub์˜ ์ด์Šˆ ํƒญ์—์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์„ธ์š”).</li> <li>๋‹ค๋ฅธ(๊ด€๋ จ๋œ) ์ด์Šˆ์— ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ๋ณด๊ณ ํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”. ๋‹ค๋ฅธ ์ด์Šˆ์™€ ๊ด€๋ จ์ด ๋†’๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด๊ณ  ๊ด€๋ จ ์ด์Šˆ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ์„ธ์š”.</li> <li>์ด์Šˆ๋ฅผ ์˜์–ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์˜์–ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด, <a href="https://www.deepl.com/translator" rel="nofollow">DeepL</a>๊ณผ ๊ฐ™์€ ๋›ฐ์–ด๋‚œ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ๋ฒˆ์—ญ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๊ตญ์–ด์—์„œ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•ด์ฃผ์„ธ์š”.</li> <li>์ด์Šˆ๊ฐ€ ์ตœ์‹  Diffusers ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ์ด์Šˆ๋ฅผ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— <code>python -c "import diffusers; print(diffusers.__version__)"</code> ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Diffusers ๋ฒ„์ „์ด ์ตœ์‹  ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ๋” ๋†’์€์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”.</li> <li>์ƒˆ๋กœ์šด ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ํˆฌ์žํ•˜๋Š” ๋…ธ๋ ฅ์ด ๋งŽ์„์ˆ˜๋ก ๋‹ต๋ณ€์˜ ํ’ˆ์งˆ์ด ๋†’์•„์ง€๊ณ  Diffusers ์ด์Šˆ ์ „์ฒด์˜ ํ’ˆ์งˆ๋„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.</li></ul> <!> <p>๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋Š” ํ•ญ์ƒ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํฌํ•จํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ•œ์ด์–ด์•ผ ํ•˜๋ฉฐ ๊ฐ„๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ž์„ธํžˆ ๋งํ•˜๋ฉด:</p> <ul><li>๋ฒ„๊ทธ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ขํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค. <strong>์ „์ฒด ์ฝ”๋“œ ํŒŒ์ผ์„ ๊ทธ๋ƒฅ ๋˜์ง€์ง€ ๋งˆ์„ธ์š”</strong>.</li> <li>์ฝ”๋“œ์˜ ์„œ์‹์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>Diffusers๊ฐ€ ์˜์กดํ•˜๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํฌํ•จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.</li> <li><strong>ํ•ญ์ƒ</strong> ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”. ์ด๋ฅผ ์œ„ํ•ด ์‰˜์—์„œ <code>diffusers-cli env</code>๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ‘œ์‹œ๋œ ์ •๋ณด๋ฅผ ์ด์Šˆ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li>์ด์Šˆ๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋…์ž๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค๋ฉด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.</li> <li><strong>ํ•ญ์ƒ</strong> ๋…์ž๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ ์€ ๋…ธ๋ ฅ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋…์ž๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ์†Œํ™”๋˜๊ณ  ๊ฐ„๋‹จํ•œ Python ์…ธ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ๊ณผ/๋˜๋Š” ๋ฐ์ดํ„ฐ์…‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋…์ž๊ฐ€ ํ•ด๋‹น ๋ชจ๋ธ์ด๋‚˜ ๋ฐ์ดํ„ฐ์…‹์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด๋‚˜ ๋ฐ์ดํ„ฐ์…‹์„ <a href="https://huggingface.co" rel="nofollow">Hub</a>์— ์—…๋กœ๋“œํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์žฌํ˜„์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์„ธ์š”.</li></ul> <p>์ž์„ธํ•œ ๋‚ด์šฉ์€ <a href="#how-to-write-a-good-issue">์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ•</a> ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.</p> <p>๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ์—ด๋ ค๋ฉด <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=bug&amp;projects=&amp;template=bug-report.yml" rel="nofollow">์—ฌ๊ธฐ</a>๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.</p> <!> <p>์„ธ๊ณ„์ ์ธ ๊ธฐ๋Šฅ ์š”์ฒญ์€ ๋‹ค์Œ ์‚ฌํ•ญ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค:</p> <ol><li>๋จผ์ € ๋™๊ธฐ๋ถ€์—ฌ:</li></ol> <ul><li>๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ/๋ถˆ๋งŒ์ด ์žˆ๋‚˜์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ทธ๋Ÿฐ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.</li> <li>ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ธ๊ฐ€์š”? ์šฐ๋ฆฌ๋Š” ๊ทธ์— ๋Œ€ํ•ด ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!</li> <li>์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ž‘์—…ํ–ˆ๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”๊ฐ€์š”? ๋ฉ‹์ง€๋„ค์š”! ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.</li></ul> <ol start="2"><li>๊ธฐ๋Šฅ์„ <em>์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๋Š”</em> ๋ฌธ๋‹จ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”;</li> <li>ํ–ฅํ›„ ์‚ฌ์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” <strong>์ฝ”๋“œ ์กฐ๊ฐ</strong>์„ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”;</li> <li>๋…ผ๋ฌธ๊ณผ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ธ ๊ฒฝ์šฐ ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”;</li> <li>๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ์ถ”๊ฐ€ ์ •๋ณด(๊ทธ๋ฆผ, ์Šคํฌ๋ฆฐ์ƒท ๋“ฑ)๋ฅผ ์ฒจ๋ถ€ํ•ด์ฃผ์„ธ์š”.</li></ol> <p>๊ธฐ๋Šฅ ์š”์ฒญ์€ <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feature_request.md&amp;title=" rel="nofollow">์—ฌ๊ธฐ</a>์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋””์ž์ธ๊ณผ ๊ทธ๊ฒƒ์ด ์™œ ์ข‹์€์ง€ ๋˜๋Š” ๋‚˜์œ์ง€์— ๋Œ€ํ•œ ์ด์œ ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์—„์ฒญ๋‚œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋””์ž์ธ ์ฒ ํ•™์„ ์ดํ•ดํ•˜๋ ค๋ฉด <a href="https://huggingface.co/docs/diffusers/conceptual/philosophy" rel="nofollow">์—ฌ๊ธฐ</a>๋ฅผ ์ฐธ์กฐํ•ด ์ฃผ์„ธ์š”. ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ํ˜„์žฌ ๋””์ž์ธ ์ฒ ํ•™๊ณผ ๋งž์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ๊ทธ ์ด์œ ์™€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. ๋ฐ˜๋Œ€๋กœ ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ๋””์ž์ธ ์ฒ ํ•™์„ ๋„ˆ๋ฌด ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œํ•œํ•œ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ๊ทธ ์ด์œ ์™€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”. ํŠน์ • ๋””์ž์ธ ์„ ํƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด, ํ–ฅํ›„ ๋””์ž์ธ ๊ฒฐ์ •์— ํฐ ๋„์›€์ด ๋˜๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ ์ฃผ์„ธ์š”.</p> <p>ํ”ผ๋“œ๋ฐฑ์— ๊ด€ํ•œ ์ด์Šˆ๋Š” <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">์—ฌ๊ธฐ</a>์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์€ ์ฃผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ์ฝ”๋“œ๊ฐ€ ์™œ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์งˆ๋ฌธํ•˜์‹  ์ฝ”๋“œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ํ•ด๋‹น ์ฝ”๋“œ ๋ถ€๋ถ„์ด ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.</p> <p>๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์— ๊ด€ํ•œ ์ด์Šˆ๋ฅผ <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=bug&amp;template=bug-report.yml" rel="nofollow">์—ฌ๊ธฐ</a>์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>๋งŒ์•ฝ diffusion ๋ชจ๋ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”:</p> <ul><li>Diffusion ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊ณผ ๋…ผ๋ฌธ ๋˜๋Š” ๊ณต๊ฐœ๋œ ๋ฒ„์ „์˜ ๋งํฌ</li> <li>ํ•ด๋‹น ๋ชจ๋ธ์˜ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋งํฌ</li> <li>๋ชจ๋ธ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๊ฐ€์ค‘์น˜์˜ ๋งํฌ</li></ul> <p>์ง์ ‘ ๋ชจ๋ธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ฐ€์žฅ ์ž˜ ์•ˆ๋‚ดํ•ด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ตฌ์„ฑ ์š”์†Œ(๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ, ํŒŒ์ดํ”„๋ผ์ธ ๋“ฑ)์˜ ์›์ €์ž๋ฅผ GitHub ํ•ธ๋“ค๋กœ ํƒœ๊ทธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.</p> <p>๋ชจ๋ธ/ํŒŒ์ดํ”„๋ผ์ธ/์Šค์ผ€์ค„๋Ÿฌ์— ๋Œ€ํ•œ ์š”์ฒญ์„ <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=New+model%2Fpipeline%2Fscheduler&amp;template=new-model-addition.yml" rel="nofollow">์—ฌ๊ธฐ</a>์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>GitHub์—์„œ ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Diffusers์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ์ง€์‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ •ํ™•ํ•œ ๋‹ต๋ณ€์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋ชจ๋‘๊ฐ€ ์‹œ๋„ํ•ด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ๊ณ ํ’ˆ์งˆ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ํŒ:</p> <ul><li>๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์ฃผ์ œ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ ํ•ด๋‹น ์ด์Šˆ์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์—๋งŒ ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์ž์‹ ์˜ ์ฃผ์žฅ์„ ์ฆ๋ช…ํ•˜๊ฑฐ๋‚˜ ์žฅ๋ คํ•˜๋Š” ์ฝ”๋“œ, ๋…ผ๋ฌธ ๋˜๋Š” ๊ธฐํƒ€ ์ถœ์ฒ˜๋Š” ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.</li> <li>์ฝ”๋“œ๋กœ ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์ด์Šˆ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด๊ฑฐ๋‚˜ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค€๋‹ค๋ฉด, ์™„์ „ํžˆ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”.</li></ul> <p>๋˜ํ•œ, ๋งŽ์€ ์ด์Šˆ๋“ค์€ ๋‹จ์ˆœํžˆ ์ฃผ์ œ์™€ ๋ฌด๊ด€ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด์Šˆ์˜ ์ค‘๋ณต์ด๊ฑฐ๋‚˜ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์Šˆ๋“ค์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•˜๊ณ , ์ด์Šˆ ์ž‘์„ฑ์ž์—๊ฒŒ ๋” ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ์ค‘๋ณต๋œ ์ด์Šˆ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, <a href="https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63" rel="nofollow">ํฌ๋Ÿผ</a> ์ด๋‚˜ <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.</p> <p>์ด์Šˆ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์ด๊ณ  ์†Œ์Šค ์ฝ”๋“œ์—์„œ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ™•์ธํ•œ ๊ฒฝ์šฐ, ๋‹ค์Œ ์„น์…˜์„ ์‚ดํŽด๋ณด์„ธ์š”.</p> <p>๋‹ค์Œ ๋ชจ๋“  ๊ธฐ์—ฌ์— ๋Œ€ํ•ด์„œ๋Š” PR์„ ์—ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. <a href="#how-to-open-a-pr">Pull Request ์—ด๊ธฐ</a> ์„น์…˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p><em>Good first issues</em>๋Š” <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">Good first issue</a> ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์ด์Šˆ๋Š” ์ด๋ฏธ ์ž ์žฌ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ด์Šˆ๊ฐ€ ์•„์ง ๋‹ซํžˆ์ง€ ์•Š์•˜๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, โ€œ์ด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.โ€๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:</p> <ul><li>a.) ์ด์Šˆ ์„ค๋ช…์— ์ด๋ฏธ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๊ฒฐ์ฑ…์ด ์ดํ•ด๋˜๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ธ๋‹ค๋ฉด, PR ๋˜๋Š” ๋“œ๋ž˜ํ”„ํŠธ PR์„ ์—ด์–ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li> <li>b.) ์ด์Šˆ ์„ค๋ช…์— ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ œ์•ˆ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ œ์•ˆํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ๊ฐ€๋Šฅํ• ์ง€ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ๊ณ , Diffusers ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณง ๋‹ต๋ณ€ํ•ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ• ์ง€ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ง์ ‘ PR์„ ์—ด์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.</li> <li>c.) ์ด๋ฏธ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ด๋ฆฐ PR์ด ์žˆ์ง€๋งŒ, ์ด์Šˆ๊ฐ€ ์•„์ง ๋‹ซํžˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. PR์ด ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ƒˆ๋กœ์šด PR์„ ์—ด๊ณ  ์ด์ „ PR์— ๋งํฌ๋ฅผ ๊ฑธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. PR์€ ์ข…์ข… ์›๋ž˜ ๊ธฐ์—ฌ์ž๊ฐ€ ๊ฐ‘์ž๊ธฐ ์‹œ๊ฐ„์„ ๋‚ด์ง€ ๋ชปํ•ด ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์— ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์˜คํ”ˆ ์†Œ์Šค์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด๋ฉฐ ๋งค์šฐ ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ƒˆ๋กœ ์‹œ๋„ํ•˜๊ณ  ๊ธฐ์กด PR์˜ ์ง€์‹์„ ํ™œ์šฉํ•ด์ฃผ๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ PR์ด ์žˆ๊ณ  ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ œ์•ˆ์„ ํ•ด์ฃผ๊ฑฐ๋‚˜ PR์„ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜ PR์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋“ฑ ์ž‘์„ฑ์ž๋ฅผ ๋„์™€์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li></ul> <!> <p>์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•ญ์ƒ ์ข‹์€ ๋ฌธ์„œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๊ณต์‹ ๋ฌธ์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ฒซ ๋ฒˆ์งธ ์ ‘์  ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ€์น˜ ์žˆ๋Š” ๊ธฐ์—ฌ์ž…๋‹ˆ๋‹ค.</p> <p>๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค:</p> <ul><li>๋งž์ถค๋ฒ•์ด๋‚˜ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.</li> <li>๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ๋งํฌ๊ฐ€ ๊นจ์ง„ ๊ฒฝ์šฐ, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ด์ฃผ์‹œ๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.</li> <li>๋ฌธ์„œ์˜ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ํ…์„œ์˜ ๋ชจ์–‘์ด๋‚˜ ์ฐจ์›์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฌธ์„œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์˜ค๋ž˜๋œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.</li> <li>๋ฌธ์„œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค.</li></ul> <p><a href="https://huggingface.co/docs/diffusers/index" rel="nofollow">๊ณต์‹ Diffusers ๋ฌธ์„œ ํŽ˜์ด์ง€</a>์— ํ‘œ์‹œ๋œ ๋ชจ๋“  ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ์˜ ์ผ๋ถ€์ด๋ฉฐ, ํ•ด๋‹น <a href="https://github.com/huggingface/diffusers/tree/main/docs/source" rel="nofollow">๋ฌธ์„œ ์†Œ์Šค</a>์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p>๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ <a href="https://github.com/huggingface/diffusers/tree/main/docs" rel="nofollow">์ด ํŽ˜์ด์ง€</a>๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.</p> <!> <blockquote class="tip"><p>์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด <a href="../using-diffusers/custom_pipeline_overview#community-pipelines">์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ</a> ๊ฐ€์ด๋“œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ์™œ ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด GitHub ์ด์Šˆ <a href="https://github.com/huggingface/diffusers/issues/841" rel="nofollow">#841</a>๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š” (๊ธฐ๋ณธ์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” diffusion ๋ชจ๋ธ์ด ์ถ”๋ก ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).</p></blockquote> <p>์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์€ ์ฐฝ์˜์„ฑ๊ณผ ์ž‘์—…์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ณต์œ ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. <code>DiffusionPipeline</code>์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œํ•˜์—ฌ <code>custom_pipeline</code> ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ˆ„๊ตฌ๋‚˜ ๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” UNet์ด ๋‹จ์ผ ์ˆœ๋ฐฉํ–ฅ ํŒจ์Šค๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ดํ”„๋ผ์ธ (๋‹จ๊ณ„๋ณ„ ํŒŒ์ดํ”„๋ผ์ธ)์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.</p> <ol><li><p>์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ•œ one_step_unet.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์ด ํŒŒ์ผ์€ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์„ค์น˜๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, <code>DiffusionPipeline</code>์—์„œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ์Šค์ผ€์ค„๋Ÿฌ ๊ตฌ์„ฑ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ ํด๋ž˜์Šค๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. <code>__init__</code> ํ•จ์ˆ˜์— UNet๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.</p> <p>๋˜ํ•œ <code>save_pretrained()</code>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ทธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก <code>register_modules</code> ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</p></li></ol> <!> <ol><li>forward ํŒจ์Šค์—์„œ (<code>__call__</code>๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค), ์›ํ•˜๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์ด๋“  ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€œone-stepโ€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฒฝ์šฐ, ๋ฌด์ž‘์œ„ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  <code>timestep=1</code>๋กœ ์„ค์ •ํ•˜์—ฌ UNet๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.</li></ol> <!> <p>์ด์ œ UNet๊ณผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์‚ฌ์ „ ํ•™์Šต๋œ ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>ํŒŒ์ดํ”„๋ผ์ธ์„ GitHub ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” Hub ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <!> <p>Diffusers ์˜ˆ์ œ๋Š” <a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a> ํด๋”์— ์žˆ๋Š” ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.</p> <p>๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:</p> <ul><li>๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ</li> <li>์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ</li></ul> <p>์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” <a href="https://github.com/huggingface/diffusers/tree/main/examples/research_projects" rel="nofollow">examples/research_projects</a>์— ์œ„์น˜ํ•˜๋ฉฐ, ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” <code>research_projects</code> ๋ฐ <code>community</code> ํด๋”๋ฅผ ์ œ์™ธํ•œ <a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a>์˜ ๋ชจ๋“  ํด๋”๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” Diffusers์˜ ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ๊ณต์‹ ํŒŒ์ดํ”„๋ผ์ธ vs ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ <a href="#6-contribute-a-community-pipeline">6. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ธฐ์—ฌํ•˜๊ธฐ</a>์—์„œ ์ œ์‹œํ•œ ์ด์œ ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค: ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ diffusion ๋ชจ๋ธ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
Diffusers ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ํŠน์ • ํ›ˆ๋ จ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋„ˆ๋ฌด ์‹คํ—˜์ ์ด๊ฑฐ๋‚˜ ์ถฉ๋ถ„ํžˆ ๋Œ€์ค‘์ ์ด์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํ›ˆ๋ จ ์ฝ”๋“œ๋Š” <code>research_projects</code> ํด๋”์— ๋„ฃ๊ณ  ์ž‘์„ฑ์ž์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</p> <p>๊ณต์‹ ํ›ˆ๋ จ ๋ฐ ์—ฐ๊ตฌ ์˜ˆ์ œ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ, requirements.txt ํŒŒ์ผ ๋ฐ README.md ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:</p> <!> <p>๊ทธ๋ฆฌ๊ณ  ํ›ˆ๋ จ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ถ”๊ฐ€์ ์ธ ์˜์กด์„ฑ๋„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:</p> <!> <p>๋”ฐ๋ผ์„œ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, <code>requirements.txt</code> ํŒŒ์ผ์€ ํ›ˆ๋ จ ์˜ˆ์ œ์— ํ•„์š”ํ•œ ๋ชจ๋“  pip ์ข…์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„ค์น˜๋œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์ œ์˜ ํ›ˆ๋ จ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/requirements.txt" rel="nofollow">DreamBooth <code>requirements.txt</code> ํŒŒ์ผ</a>์„ ์ฐธ์กฐํ•˜์„ธ์š”.</p> <p>Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ›ˆ๋ จ ์˜ˆ์ œ๋Š” ๋‹ค์Œ ์ฒ ํ•™์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค:</p> <ul><li>์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ Python ํŒŒ์ผ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์‚ฌ์šฉ์ž๋Š” ๋ช…๋ น ์ค„์—์„œ <code>python &lt;your-example&gt;.py --args</code>์™€ ๊ฐ™์ด ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>์˜ˆ์ œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฉฐ, Diffusers๋ฅผ ์‚ฌ์šฉํ•œ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” <strong>์˜ˆ์‹œ</strong>๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชฉ์ ์€ ์ตœ์ฒจ๋‹จ diffusion ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ ์•Œ๋ ค์ง„ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์„ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ์˜ ๋ถ€์‚ฐ๋ฌผ๋กœ์„œ, ์˜ˆ์ œ๋Š” ์ข‹์€ ๊ต์œก ์ž๋ฃŒ๋กœ์จ์˜ ์—ญํ• ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.</li></ul> <p>์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์˜ˆ์ œ์ธ <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py" rel="nofollow">dreambooth</a>์™€ ๊ฐ™์€ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
Diffusers์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์—ฌ์ž๋“ค์ด <a href="https://github.com/huggingface/accelerate" rel="nofollow">Accelerate ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ</a>๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ์˜ˆ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ํฌ๊ด„์ ์ธ <code>README.md</code>๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด README์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:</p> <ul><li><a href="https://github.com/huggingface/diffusers/tree/main/examples/dreambooth#running-locally-with-pytorch" rel="nofollow">์—ฌ๊ธฐ</a>์— ํ‘œ์‹œ๋œ ์˜ˆ์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์ œ ๋ช…๋ น์–ด.</li> <li><a href="https://api.wandb.ai/report/patrickvonplaten/xm6cd5q5" rel="nofollow">์—ฌ๊ธฐ</a>์— ํ‘œ์‹œ๋œ ํ›ˆ๋ จ ๊ฒฐ๊ณผ (๋กœ๊ทธ, ๋ชจ๋ธ ๋“ฑ)์— ๋Œ€ํ•œ ๋งํฌ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.</li> <li>๋น„๊ณต์‹/์—ฐ๊ตฌ์šฉ ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, <strong>๋ฐ˜๋“œ์‹œ</strong> git ํ•ธ๋“ค์„ ํฌํ•จํ•˜์—ฌ ์ด ํ›ˆ๋ จ ์˜ˆ์ œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ๊ฒƒ์ž„์„ ๋ช…์‹œํ•˜๋Š” ๋ฌธ์žฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. <a href="https://github.com/huggingface/diffusers/tree/main/examples/research_projects/intel_opts#diffusers-examples-with-intel-optimizations" rel="nofollow">์—ฌ๊ธฐ</a>์— ํ‘œ์‹œ๋œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.</li></ul> <p>๋งŒ์•ฝ ๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒฝ์šฐ, <a href="https://github.com/huggingface/diffusers/blob/main/examples/test_examples.py" rel="nofollow">examples/test_examples.py</a>์— ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๋น„๊ณต์‹ ํ›ˆ๋ จ ์˜ˆ์ œ์—๋Š” ์ด ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</p> <!> <p>โ€œGood second issueโ€๋Š” <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22" rel="nofollow">Good second issue</a> ๋ผ๋ฒจ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Good second issue๋Š” <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="nofollow">Good first issues</a>๋ณด๋‹ค ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.
์ด์Šˆ ์„ค๋ช…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋œ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ๊ด€์‹ฌ ์žˆ๋Š” ๊ธฐ์—ฌ์ž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ฝค ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
Good second issue๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์—ด๊ณ  PR์„ ์ด์Šˆ์— ๋งํฌํ•˜์„ธ์š”. ์ด๋ฏธ ํ•ด๋‹น ์ด์Šˆ์— ๋Œ€ํ•œ PR์ด ์—ด๋ ค์žˆ์ง€๋งŒ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์™œ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ดํŽด๋ณด๊ณ  ๊ฐœ์„ ๋œ PR์„ ์—ด์–ด๋ณด์„ธ์š”.
Good second issue๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Good first issue ์ด์Šˆ๋ณด๋‹ค ๋ณ‘ํ•ฉํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์šฐ๋ฏ€๋กœ, ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. PR์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ, ํ•ต์‹ฌ ๋ฉ”์ธํ…Œ์ด๋„ˆ๋Š” PR์— ์ฐธ์—ฌํ•˜์—ฌ ์ปค๋ฐ‹ํ•˜๊ณ  ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <!> <p>ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ๋Š” Diffusers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
์ด๋“ค์€ ์ตœ์ฒจ๋‹จ diffusion ๊ธฐ์ˆ ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๋ฉฐ, ๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ฐ•๋ ฅํ•œ ์ƒ์„ฑํ˜• AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.</p> <p>์ƒˆ๋กœ์šด ๋ชจ๋ธ, ํŒŒ์ดํ”„๋ผ์ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์— ์ƒˆ๋กœ์šด ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ „์ฒด ์ƒ์„ฑํ˜• AI ์ƒํƒœ๊ณ„์— ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p>Diffusers์—๋Š” ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์•„์ง ์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”:</p> <ul><li><a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22" rel="nofollow">๋ชจ๋ธ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ</a></li> <li><a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22" rel="nofollow">์Šค์ผ€์ค„๋Ÿฌ</a></li></ul> <p>์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์—, <a href="philosophy">์ฒ ํ•™ ๊ฐ€์ด๋“œ</a>๋ฅผ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ์–ด๋А ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋“ , ๋””์ž์ธ ์ฒ ํ•™๊ณผ ๊ด€๋ จ๋œ API ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ์˜ ๋””์ž์ธ ์ฒ ํ•™๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋””์ž์ธ ์„ ํƒ์— ๊ทผ๋ณธ์ ์œผ๋กœ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&amp;labels=&amp;template=feedback.md&amp;title=" rel="nofollow">ํ”ผ๋“œ๋ฐฑ ์ด์Šˆ</a>๋ฅผ ์—ด์–ด ํ•ด๋‹น ๋””์ž์ธ ํŒจํ„ด/์„ ํƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€, ๋””์ž์ธ ์ฒ ํ•™์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด์˜ ์ผ๊ด€์„ฑ์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.</p> <p>PR์— ์›๋ณธ ์ฝ”๋“œ๋ฒ ์ด์Šค/๋…ผ๋ฌธ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋ฉด PR์—์„œ ์›๋ž˜ ์ž‘์„ฑ์ž์—๊ฒŒ ์ง์ ‘ ์•Œ๋ฆผ์„ ๋ณด๋‚ด์–ด ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์„ธ์š”.</p> <p>PR์—์„œ ๋ง‰ํžŒ ๊ฒฝ์šฐ๋‚˜ ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๋ฆฌ๋ทฐ๋‚˜ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•˜์ง€ ๋งˆ์„ธ์š”.</p> <!> <p><code># Copied from mechanism</code> ์€ ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ ๋˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ดํ•ดํ•ด์•ผ ํ•  ๋…ํŠนํ•˜๊ณ  ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Diffusers ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ดํ•ดํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. <code># Copied from mechanism</code> ์œผ๋กœ ํ‘œ์‹œ๋œ ์ฝ”๋“œ๋Š” ๋ณต์‚ฌํ•œ ์ฝ”๋“œ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•˜๋„๋ก ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด <code>make fix-copies</code>๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๊ฑธ์ณ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ „ํŒŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p>์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ์—์„œ <code>StableDiffusionPipelineOutput</code>์€ ์›๋ž˜ ์ฝ”๋“œ์ด๋ฉฐ, <code>AltDiffusionPipelineOutput</code>์€ <code># Copied from mechanism</code>์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ํด๋ž˜์Šค ์ ‘๋‘์‚ฌ๋ฅผ <code>Stable</code>์—์„œ <code>Alt</code>๋กœ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.</p> <!> <p>๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด <a href="https://huggingface.co/blog/transformers-design-philosophy#4-machine-learning-models-are-static" rel="nofollow">~Donโ€™t~ Repeat Yourself*</a> ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์˜ ์ด ์„น์…˜์„ ์ฝ์–ด๋ณด์„ธ์š”.</p> <!> <p><strong>์ด์Šˆ๋ฅผ ์ž˜ ์ž‘์„ฑํ• ์ˆ˜๋ก ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.</strong></p> <ol><li>์ด์Šˆ์— ์ ์ ˆํ•œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. <a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">์ƒˆ ์ด์Šˆ๋ฅผ ์—ด ๋•Œ</a> ์˜ฌ๋ฐ”๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. <em>๋ฒ„๊ทธ ๋ณด๊ณ ์„œ</em>, <em>๊ธฐ๋Šฅ ์š”์ฒญ</em>, <em>API ๋””์ž์ธ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ</em>, <em>์ƒˆ๋กœ์šด ๋ชจ๋ธ/ํŒŒ์ดํ”„๋ผ์ธ/์Šค์ผ€์ค„๋Ÿฌ ์ถ”๊ฐ€</em>, <em>ํฌ๋Ÿผ</em>, ๋˜๋Š” ๋นˆ ์ด์Šˆ ์ค‘์—์„œ ์„ ํƒํ•˜์„ธ์š”. ์ด์Šˆ๋ฅผ ์—ด ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.</li> <li><strong>๋ช…ํ™•์„ฑ</strong>: ์ด์Šˆ์— ์ ํ•ฉํ•œ ์ œ๋ชฉ์„ ์ง€์ •ํ•˜์„ธ์š”. ์ด์Šˆ ์„ค๋ช…์„ ๊ฐ€๋Šฅํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”. ์ด์Šˆ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”. ํ•˜๋‚˜์˜ ์ด์Šˆ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ๊ฐ๊ฐ์˜ ์ด์Šˆ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—ด์–ด์ฃผ์„ธ์š”. ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ, ์–ด๋–ค ๋ฒ„๊ทธ์ธ์ง€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€œdiffusers์—์„œ ์˜ค๋ฅ˜โ€์™€ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์„ธ์š”.</li> <li><strong>์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ</strong>: ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์ด ์—†์œผ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ๊ทธ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์€ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๋ฝ๋œ import๋‚˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ์— ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋‚˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋…์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋‚˜ ๋ชจ๋ธ์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋”๋ฏธ ๋ชจ๋ธ์ด๋‚˜ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.</li> <li><strong>๊ฐ„๊ฒฐ์„ฑ</strong>: ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜์—ฌ ๋…์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”. ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ฝ”๋“œ๋‚˜ ์ •๋ณด๋Š” ๋ชจ๋‘ ์ œ๊ฑฐํ•ด์ฃผ์„ธ์š”. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ, ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ํ›„์—๋Š” ์ž‘์—… ํ๋ฆ„ ์ „์ฒด๋ฅผ ๋ฌธ์ œ์— ๋˜์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ›ˆ๋ จ ์ฝ”๋“œ์˜ ์–ด๋А ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ง€ ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ๋ช‡ ์ค„๋กœ ์žฌํ˜„ํ•ด๋ณด์„ธ์š”. ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹ ๋Œ€์‹  ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.</li> <li>๋งํฌ ์ถ”๊ฐ€ํ•˜๊ธฐ. ํŠน์ •ํ•œ ์ด๋ฆ„, ๋ฉ”์„œ๋“œ, ๋˜๋Š” ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, ๋…์ž๊ฐ€ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งํฌ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”. ํŠน์ • PR์ด๋‚˜ ์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์ด์Šˆ์— ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ์„ธ์š”. ๋…์ž๊ฐ€ ๋ฌด์—‡์„ ๋งํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด์Šˆ์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.</li> <li>ํฌ๋งทํŒ…. ์ฝ”๋“œ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ ๊ตฌ๋ฌธ์œผ๋กœ, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ๋ฐ˜ ์ฝ”๋“œ ๊ตฌ๋ฌธ์œผ๋กœ ํ˜•์‹ํ™”ํ•˜์—ฌ ์ด์Šˆ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”. ์ž์„ธํ•œ ๋‚ด์šฉ์€ <a href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax" rel="nofollow">GitHub ๊ณต์‹ ํฌ๋งทํŒ… ๋ฌธ์„œ</a>๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.</li> <li>์—ฌ๋Ÿฌ๋ถ„์˜ ์ด์Šˆ๋ฅผ ๋‹จ์ˆœํžˆ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํ‹ฐ์ผ“์œผ๋กœ ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ์ž˜ ์ž‘์„ฑ๋œ ๋ฐฑ๊ณผ์‚ฌ์ „ ํ•ญ๋ชฉ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ถ”๊ฐ€๋œ ๋ชจ๋“  ์ด์Šˆ๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์‹์— ๋Œ€ํ•œ ๊ธฐ์—ฌ์ž…๋‹ˆ๋‹ค. ์ž˜ ์ž‘์„ฑ๋œ ์ด์Šˆ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ด์Šˆ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ „์ฒด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ์ธก๋ฉด์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.</li></ol> <!> <ol><li>์นด๋ฉœ๋ ˆ์˜จ์ด ๋˜์„ธ์š”. ๊ธฐ์กด์˜ ๋””์ž์ธ ํŒจํ„ด๊ณผ ๊ตฌ๋ฌธ์„ ์ดํ•ดํ•˜๊ณ , ์—ฌ๋Ÿฌ๋ถ„์ด ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์–ด์šฐ๋Ÿฌ์ง€๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋””์ž์ธ ํŒจํ„ด์ด๋‚˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ํฌ๊ฒŒ ๋‹ค๋ฅธ Pull Request๋“ค์€ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</li> <li>๋ ˆ์ด์ €์ฒ˜๋Ÿผ ์ง‘์ค‘ํ•˜์„ธ์š”. Pull Request๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ œ, ์˜ค์ง ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€œ์ด์™• ์ถ”๊ฐ€ํ•˜๋Š” ๊น€์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋„ ๊ณ ์น˜์žโ€๋Š” ํ•จ์ •์— ๋น ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ด€๋ จ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•˜๋Š” Pull Request๋“ค์€ ๊ฒ€ํ† ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.</li> <li>๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ, ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์˜ˆ์ œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ถ”๊ฐ€ํ•ด๋ณด์„ธ์š”.</li> <li>Pull Request์˜ ์ œ๋ชฉ์€ ๊ธฐ์—ฌ ๋‚ด์šฉ์„ ์š”์•ฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.</li> <li>Pull Request๊ฐ€ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ, Pull Request์˜ ์„ค๋ช…์— ์ด์Šˆ ๋ฒˆํ˜ธ๋ฅผ ์–ธ๊ธ‰ํ•˜์—ฌ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š” (์ด์Šˆ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ž‘์—… ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก).</li> <li>์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ์ œ๋ชฉ์— <code>[WIP]</code>๋ฅผ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์—ฌ์ฃผ์„ธ์š”. ์ด๋Š” ์ค‘๋ณต ์ž‘์—…์„ ํ”ผํ•˜๊ณ , ๋ณ‘ํ•ฉ ์ค€๋น„๊ฐ€ ๋œ PR๊ณผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.</li> <li><a href="#how-to-write-a-good-issue">์ข‹์€ ์ด์Šˆ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•</a>์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ…์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ํ˜•์‹์„ ์ง€์ •ํ•ด๋ณด์„ธ์š”.</li> <li>๊ธฐ์กด ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”</li> <li>๋†’์€ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๊ฐ€์ง„ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ํ’ˆ์งˆ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.</li></ol> <ul><li>์ƒˆ๋กœ์šด <code>@slow</code> ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. <code>RUN_SLOW=1 python -m pytest tests/test_my_new_model.py</code>.
CircleCI๋Š” ๋А๋ฆฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์ง€๋งŒ, GitHub Actions๋Š” ๋งค์ผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค!</li></ul> <ol start="10"><li>๋ชจ๋“  ๊ณต๊ฐœ ๋ฉ”์„œ๋“œ๋Š” ๋งˆํฌ๋‹ค์šด๊ณผ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ •๋ณด์„ฑ docstring์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋กœ <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py" rel="nofollow"><code>pipeline_latent_diffusion.py</code></a>๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.</li> <li>๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํฐ ๋ถ€๋‹ด์„ ์ฃผ๋Š” ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋ฐ ๊ธฐํƒ€ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด hf.co ํ˜ธ์ŠคํŒ… <code>dataset</code>์ธ <a href="https://huggingface.co/hf-internal-testing" rel="nofollow"><code>hf-internal-testing</code></a> ๋˜๋Š” <a href="https://huggingface.co/datasets/huggingface/documentation-images" rel="nofollow">huggingface/documentation-images</a>๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค.
์™ธ๋ถ€ ๊ธฐ์—ฌ์ธ ๊ฒฝ์šฐ, ์ด๋ฏธ์ง€๋ฅผ PR์— ์ถ”๊ฐ€ํ•˜๊ณ  Hugging Face ๊ตฌ์„ฑ์›์—๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์ด ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์š”์ฒญํ•˜์„ธ์š”.</li></ol> <!> <p>์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ™์€ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ PR์ด๋‚˜ ์ด์Šˆ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ด์Šˆ๋ฅผ ์—ด์–ด๋ณด๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.</p> <p>๐Ÿงจ Diffusers์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ <code>git</code> ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. <code>git</code>์€ ๊ฐ€์žฅ ์‰ฌ์šด ๋„๊ตฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๊ฐ€์žฅ ํ›Œ๋ฅญํ•œ ๋งค๋‰ด์–ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์…ธ์—์„œ <code>git --help</code>์„ ์ž…๋ ฅํ•˜๊ณ  ์ฆ๊ธฐ์„ธ์š”. ์ฑ…์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ, <a href="https://git-scm.com/book/en/v2" rel="nofollow">Pro Git</a>์€ ๋งค์šฐ ์ข‹์€ ์ฐธ๊ณ  ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.</p> <p>๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š” (<a href="https://github.com/huggingface/diffusers/blob/main/setup.py#L244" rel="nofollow">์ง€์›๋˜๋Š” Python ๋ฒ„์ „</a>):</p> <ol><li><p>์ €์žฅ์†Œ ํŽ˜์ด์ง€์—์„œ โ€˜Forkโ€™ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ <a href="https://github.com/huggingface/diffusers" rel="nofollow">์ €์žฅ์†Œ</a>๋ฅผ ํฌํฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์‚ฌ๋ณธ์ด GitHub ์‚ฌ์šฉ์ž ๊ณ„์ •์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.</p></li> <li><p>ํฌํฌํ•œ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ ๋””์Šคํฌ์— ํด๋ก ํ•˜๊ณ , ๊ธฐ๋ณธ ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์„ธ์š”:</p> <!></li> <li><p>๊ฐœ๋ฐœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ด€ํ•  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”:</p> <!></li></ol> <p><code>main</code> ๋ธŒ๋žœ์น˜ ์œ„์—์„œ <strong>์ ˆ๋Œ€</strong> ์ž‘์—…ํ•˜์ง€ ๋งˆ์„ธ์š”.</p> <ol start="4"><li><p>๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์„ธ์š”:</p> <!></li></ol> <p>๋งŒ์•ฝ ์ €์žฅ์†Œ๋ฅผ ์ด๋ฏธ ํด๋ก ํ•œ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด <code>git pull</code>์„ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <ol start="5"><li>๊ธฐ๋Šฅ์„ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœํ•˜์„ธ์š”.</li></ol> <p>๊ธฐ๋Šฅ์„ ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ํ†ต๊ณผ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:</p> <!> <p>ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์„ ์„ค์น˜ํ•˜์˜€๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋‹ค์Œ์˜ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:</p> <!> <p>๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฌถ์Œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, Diffusers๊ฐ€ ๋งŽ์ด ์„ฑ์žฅํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋ฅผ ์ ๋‹นํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ•๋ ฅํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ•ด๋‹น ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค:</p> <!> <p>๐Ÿงจ Diffusers๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ํฌ๋งทํŒ…ํ•˜๊ธฐ ์œ„ํ•ด <code>black</code>๊ณผ <code>isort</code>๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•œ ํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž๋™ ์Šคํƒ€์ผ ์ˆ˜์ • ๋ฐ ์ฝ”๋“œ ๊ฒ€์ฆ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:</p> <!> <p>๐Ÿงจ Diffusers <code>ruff</code>์™€ ๋ช‡๊ฐœ์˜ ์ปค์Šคํ…€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฝ”๋”ฉ ์‹ค์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ’ˆ์งˆ ์ œ์–ด๋Š” CI์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋™์ผํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์Œ์„ ํ†ตํ•ด์„œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:</p> <!> <p>๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋งŒ์กฑํ•œ๋‹ค๋ฉด <code>git add</code>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  <code>git commit</code>์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋กœ์ปฌ์ƒ์œผ๋กœ ์ €์žฅํ•œ๋‹ค:</p> <!> <p>์ฝ”๋“œ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:</p> <!> <p>๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ„์ •์— ํ‘ธ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”:</p> <!> <ol start="6"><li><p>๋งŒ์กฑํ•˜์…จ๋‹ค๋ฉด, GitHub์—์„œ ํฌํฌํ•œ ์›นํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ โ€˜Pull requestโ€™๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ”„๋กœ์ ํŠธ ๋ฉ”์ธํ…Œ์ด๋„ˆ์—๊ฒŒ ๊ฒ€ํ† ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.</p></li> <li><p>๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๋“ค์—๊ฒŒ๋„ ์ผ์–ด๋‚˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค! ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Pull request์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…ํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํฌ์— ํ‘ธ์‹œํ•˜๋ฉด ์ž๋™์œผ๋กœ Pull request์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.</p></li></ol> <!> <p>๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋™์ž‘๊ณผ ์—ฌ๋Ÿฌ ์˜ˆ์ œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ๋ฌถ์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…Œ์ŠคํŠธ๋Š” <a href="https://github.com/huggingface/diffusers/tree/main/tests" rel="nofollow">tests ํด๋”</a>์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p><code>pytest</code>์™€ <code>pytest-xdist</code>๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ๋Š” ๋” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•ด <code>pytest</code>๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:</p> <!> <p>์‚ฌ์‹ค, <code>make test</code>๋Š” ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!</p> <p>์ž‘์—… ์ค‘์ธ ๊ธฐ๋Šฅ๋งŒ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ž‘์€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p> <p>๊ธฐ๋ณธ์ ์œผ๋กœ ๋А๋ฆฐ ํ…Œ์ŠคํŠธ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. <code>RUN_SLOW</code> ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ <code>yes</code>๋กœ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ์˜ ๋ชจ๋ธ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„๊ณผ ์ข‹์€ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๋˜๋Š” ๋งŽ์€ ์ธ๋‚ด์‹ฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!</p> <!> <p><code>unittest</code>๋Š” ์™„์ „ํžˆ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ <code>unittest</code>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค:</p> <!> <!> <p>upstream ์ €์žฅ์†Œ์— ๋ถˆํ•„์š”ํ•œ ์ฐธ์กฐ ๋…ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ด€๋ จ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด,
forked ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”:</p> <ol><li>๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, forked ์ €์žฅ์†Œ์—์„œ ๋ธŒ๋žœ์น˜์™€ PR์„ ์‚ฌ์šฉํ•˜์—ฌ upstream๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜์„ธ์š”. ๋Œ€์‹  forked main์œผ๋กœ ์ง์ ‘ ๋ณ‘ํ•ฉํ•˜์„ธ์š”.</li> <li>PR์ด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋ธŒ๋žœ์น˜๋ฅผ ์ฒดํฌ์•„์›ƒํ•œ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:</li></ol> <!> <!> <p>Documentation string์— ๋Œ€ํ•ด์„œ๋Š”, ๐Ÿงจ Diffusers๋Š” <a href="https://google.github.io/styleguide/pyguide.html" rel="nofollow">Google ์Šคํƒ€์ผ</a>์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.</p> <!> <p></p>`,1);function He(re,de){Ue(de,!1),je(()=>{new URLSearchParams(window.location.search).get("fw")}),be();var f=Be();Je("110sasa",n=>{var d=Re();Ie(d,"content",_e),i(n,d)});var g=e(pe(f),2);Me(g,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var m=e(g,2);l(m,{title:"Diffusers์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๐Ÿงจ",local:"how-to-contribute-to-diffusers-",headingTag:"h1"});var w=e(m,10);l(w,{title:"๊ฐœ์š”",local:"overview",headingTag:"h2"});var b=e(w,12);l(b,{title:"1. Diffusers ํ† ๋ก  ํฌ๋Ÿผ์ด๋‚˜ Diffusers Discord์—์„œ ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ํ•˜๊ธฐ",local:"1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord",headingTag:"h3"});var J=e(b,12);l(J,{title:"2. GitHub ์ด์Šˆ ํƒญ์—์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ ์—ด๊ธฐ",local:"2-opening-new-issues-on-the-github-issues-tab",headingTag:"h3"});var M=e(J,12);l(M,{title:"2.1 ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œํ•œ์˜ ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ",local:"21-reproducible-minimal-bug-reports",headingTag:"h4"});var T=e(M,10);l(T,{title:"2.2. ๊ธฐ๋Šฅ ์š”์ฒญ",local:"22-feature-requests",headingTag:"h4"});var y=e(T,12);l(y,{title:"2.3 ํ”ผ๋“œ๋ฐฑ",local:"23-feedback",headingTag:"h4"});var I=e(y,6);l(I,{title:"2.4 ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ",local:"24-technical-questions",headingTag:"h4"});var U=e(I,6);l(U,{title:"2.5 ์ƒˆ๋กœ์šด ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ๋˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€ ์ œ์•ˆ",local:"25-proposal-to-add-a-new-model-scheduler-or-pipeline",headingTag:"h4"});var j=e(U,10);l(j,{title:"3. GitHub ์ด์Šˆ ํƒญ์—์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต๋ณ€ํ•˜๊ธฐ",local:"3-answering-issues-on-the-github-issues-tab",headingTag:"h3"});var Z=e(j,12);l(Z,{title:"4. โ€œGood first issueโ€ ๊ณ ์น˜๊ธฐ",local:"4-fixing-a-good-first-issue",headingTag:"h3"});var G=e(Z,6);l(G,{title:"5. ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๊ธฐ",local:"5-contribute-to-the-documentation",headingTag:"h3"});var _=e(G,12);l(_,{title:"6. ์ปค๋ฎค๋‹ˆํ‹ฐ ํŒŒ์ดํ”„๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๊ธฐ",local:"6-contribute-a-community-pipeline",headingTag:"h3"});var R=e(_,8);s(R,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBaW1wb3J0JTIwdG9yY2glMEElMEFjbGFzcyUyMFVuZXRTY2hlZHVsZXJPbmVGb3J3YXJkUGlwZWxpbmUoRGlmZnVzaW9uUGlwZWxpbmUpJTNBJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMHVuZXQlMkMlMjBzY2hlZHVsZXIpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3VwZXIoKS5fX2luaXRfXygpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5yZWdpc3Rlcl9tb2R1bGVzKHVuZXQlM0R1bmV0JTJDJTIwc2NoZWR1bGVyJTNEc2NoZWR1bGVyKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">class</span> <span class="hljs-title class_">UnetSchedulerOneForwardPipeline</span>(<span class="hljs-title class_ inherited__">DiffusionPipeline</span>):
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, unet, scheduler</span>):
<span class="hljs-built_in">super</span>().__init__()
<span class="hljs-variable language_">self</span>.register_modules(unet=unet, scheduler=scheduler)`,lang:"py",wrap:!1});var v=e(R,4);s(v,{code:"JTIwJTIwZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTIwJTIwaW1wb3J0JTIwdG9yY2glMEElMEElMjAlMjBjbGFzcyUyMFVuZXRTY2hlZHVsZXJPbmVGb3J3YXJkUGlwZWxpbmUoRGlmZnVzaW9uUGlwZWxpbmUpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwZGVmJTIwX19pbml0X18oc2VsZiUyQyUyMHVuZXQlMkMlMjBzY2hlZHVsZXIpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3VwZXIoKS5fX2luaXRfXygpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5yZWdpc3Rlcl9tb2R1bGVzKHVuZXQlM0R1bmV0JTJDJTIwc2NoZWR1bGVyJTNEc2NoZWR1bGVyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMGRlZiUyMF9fY2FsbF9fKHNlbGYpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2UlMjAlM0QlMjB0b3JjaC5yYW5kbiglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAoMSUyQyUyMHNlbGYudW5ldC5jb25maWcuaW5fY2hhbm5lbHMlMkMlMjBzZWxmLnVuZXQuY29uZmlnLnNhbXBsZV9zaXplJTJDJTIwc2VsZi51bmV0LmNvbmZpZy5zYW1wbGVfc2l6ZSklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGltZXN0ZXAlMjAlM0QlMjAxJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbW9kZWxfb3V0cHV0JTIwJTNEJTIwc2VsZi51bmV0KGltYWdlJTJDJTIwdGltZXN0ZXApLnNhbXBsZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNjaGVkdWxlcl9vdXRwdXQlMjAlM0QlMjBzZWxmLnNjaGVkdWxlci5zdGVwKG1vZGVsX291dHB1dCUyQyUyMHRpbWVzdGVwJTJDJTIwaW1hZ2UpLnByZXZfc2FtcGxlJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwc2NoZWR1bGVyX291dHB1dA==",highlighted:` <span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">class</span> <span class="hljs-title class_">UnetSchedulerOneForwardPipeline</span>(<span class="hljs-title class_ inherited__">DiffusionPipeline</span>):
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, unet, scheduler</span>):
<span class="hljs-built_in">super</span>().__init__()
<span class="hljs-variable language_">self</span>.register_modules(unet=unet, scheduler=scheduler)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__call__</span>(<span class="hljs-params">self</span>):
image = torch.randn(
(<span class="hljs-number">1</span>, <span class="hljs-variable language_">self</span>.unet.config.in_channels, <span class="hljs-variable language_">self</span>.unet.config.sample_size, <span class="hljs-variable language_">self</span>.unet.config.sample_size),
)
timestep = <span class="hljs-number">1</span>
model_output = <span class="hljs-variable language_">self</span>.unet(image, timestep).sample
scheduler_output = <span class="hljs-variable language_">self</span>.scheduler.step(model_output, timestep, image).prev_sample
<span class="hljs-keyword">return</span> scheduler_output`,lang:"py",wrap:!1});var V=e(v,4);s(V,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEREUE1TY2hlZHVsZXIlMkMlMjBVTmV0MkRNb2RlbCUwQSUwQXNjaGVkdWxlciUyMCUzRCUyMEREUE1TY2hlZHVsZXIoKSUwQXVuZXQlMjAlM0QlMjBVTmV0MkRNb2RlbCgpJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBVbmV0U2NoZWR1bGVyT25lRm9yd2FyZFBpcGVsaW5lKHVuZXQlM0R1bmV0JTJDJTIwc2NoZWR1bGVyJTNEc2NoZWR1bGVyKSUwQW91dHB1dCUyMCUzRCUyMHBpcGVsaW5lKCklMEElMjMlMjBsb2FkJTIwcHJldHJhaW5lZCUyMHdlaWdodHMlMEFwaXBlbGluZSUyMCUzRCUyMFVuZXRTY2hlZHVsZXJPbmVGb3J3YXJkUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUyMmdvb2dsZSUyRmRkcG0tY2lmYXIxMC0zMiUyMiUyQyUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUpJTBBb3V0cHV0JTIwJTNEJTIwcGlwZWxpbmUoKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DDPMScheduler, UNet2DModel
scheduler = DDPMScheduler()
unet = UNet2DModel()
pipeline = UnetSchedulerOneForwardPipeline(unet=unet, scheduler=scheduler)
output = pipeline()
<span class="hljs-comment"># load pretrained weights</span>
pipeline = UnetSchedulerOneForwardPipeline.from_pretrained(<span class="hljs-string">&quot;google/ddpm-cifar10-32&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>)
output = pipeline()`,lang:"py",wrap:!1});var W=e(V,4);Te(W,{id:"pipeline type",options:["GitHub pipeline","Hub pipeline"],children:(n,d)=>{var ae=We(),ne=pe(ae);ce(ne,{id:"pipeline type",option:"GitHub pipeline",children:(u,we)=>{var h=ve();i(u,h)},$$slots:{default:!0}});var me=e(ne,2);ce(me,{id:"pipeline type",option:"Hub pipeline",children:(u,we)=>{var h=Ve();i(u,h)},$$slots:{default:!0}}),i(n,ae)},$$slots:{default:!0}});var B=e(W,2);l(B,{title:"7. ํ›ˆ๋ จ ์˜ˆ์ œ์— ๊ธฐ์—ฌํ•˜๊ธฐ",local:"7-contribute-to-training-examples",headingTag:"h3"});var X=e(B,12);s(X,{code:"Z2l0JTIwY2xvbmUlMjBodHRwcyUzQSUyRiUyRmdpdGh1Yi5jb20lMkZodWdnaW5nZmFjZSUyRmRpZmZ1c2Vycw==",highlighted:'git <span class="hljs-built_in">clone</span> https://github.com/huggingface/diffusers',lang:"bash",wrap:!1});var A=e(X,4);s(A,{code:"cGlwJTIwaW5zdGFsbCUyMC1yJTIwJTJGZXhhbXBsZXMlMkYlM0N5b3VyLWV4YW1wbGUtZm9sZGVyJTNFJTJGcmVxdWlyZW1lbnRzLnR4dA==",highlighted:"pip install -r /examples/&lt;your-example-folder&gt;/requirements.txt",lang:"bash",wrap:!1});var C=e(A,14);l(C,{title:"8. โ€œGood second issueโ€ ๊ณ ์น˜๊ธฐ",local:"8-fixing-a-good-second-issue",headingTag:"h3"});var N=e(C,4);l(N,{title:"9. ํŒŒ์ดํ”„๋ผ์ธ, ๋ชจ๋ธ, ์Šค์ผ€์ค„๋Ÿฌ ์ถ”๊ฐ€ํ•˜๊ธฐ",local:"9-adding-pipelines-models-schedulers",headingTag:"h3"});var H=e(N,16);l(H,{title:"Copied from mechanism",local:"copied-from-mechanism",headingTag:"h4"});var k=e(H,6);s(k,{code:"JTIzJTIwQ29waWVkJTIwZnJvbSUyMGRpZmZ1c2Vycy5waXBlbGluZXMuc3RhYmxlX2RpZmZ1c2lvbi5waXBlbGluZV9vdXRwdXQuU3RhYmxlRGlmZnVzaW9uUGlwZWxpbmVPdXRwdXQlMjB3aXRoJTIwU3RhYmxlLSUzRUFsdCUwQWNsYXNzJTIwQWx0RGlmZnVzaW9uUGlwZWxpbmVPdXRwdXQoQmFzZU91dHB1dCklM0ElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjBPdXRwdXQlMjBjbGFzcyUyMGZvciUyMEFsdCUyMERpZmZ1c2lvbiUyMHBpcGVsaW5lcy4lMEElMEElMjAlMjAlMjAlMjBBcmdzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2VzJTIwKCU2MExpc3QlNUJQSUwuSW1hZ2UuSW1hZ2UlNUQlNjAlMjBvciUyMCU2MG5wLm5kYXJyYXklNjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTGlzdCUyMG9mJTIwZGVub2lzZWQlMjBQSUwlMjBpbWFnZXMlMjBvZiUyMGxlbmd0aCUyMCU2MGJhdGNoX3NpemUlNjAlMjBvciUyME51bVB5JTIwYXJyYXklMjBvZiUyMHNoYXBlJTIwJTYwKGJhdGNoX3NpemUlMkMlMjBoZWlnaHQlMkMlMjB3aWR0aCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9jaGFubmVscyklNjAuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnNmd19jb250ZW50X2RldGVjdGVkJTIwKCU2MExpc3QlNUJib29sJTVEJTYwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMExpc3QlMjBpbmRpY2F0aW5nJTIwd2hldGhlciUyMHRoZSUyMGNvcnJlc3BvbmRpbmclMjBnZW5lcmF0ZWQlMjBpbWFnZSUyMGNvbnRhaW5zJTIwJTIybm90LXNhZmUtZm9yLXdvcmslMjIlMjAobnNmdyklMjBjb250ZW50JTIwb3IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNjBOb25lJTYwJTIwaWYlMjBzYWZldHklMjBjaGVja2luZyUyMGNvdWxkJTIwbm90JTIwYmUlMjBwZXJmb3JtZWQuJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIy",highlighted:'<span class="hljs-comment"># Copied from diffusers.pipelines.stable_diffusion.pipeline_output.StableDiffusionPipelineOutput with Stable-&gt;Alt</span>\n<span class="hljs-keyword">class</span> <span class="hljs-title class_">AltDiffusionPipelineOutput</span>(<span class="hljs-title class_ inherited__">BaseOutput</span>):\n <span class="hljs-string">&quot;&quot;&quot;\n Output class for Alt Diffusion pipelines.\n\n Args:\n images (`List[PIL.Image.Image]` or `np.ndarray`)\n List of denoised PIL images of length `batch_size` or NumPy array of shape `(batch_size, height, width,\n num_channels)`.\n nsfw_content_detected (`List[bool]`)\n List indicating whether the corresponding generated image contains &quot;not-safe-for-work&quot; (nsfw) content or\n `None` if safety checking could not be performed.\n &quot;&quot;&quot;</span>',lang:"py",wrap:!1});var P=e(k,4);l(P,{title:"์ข‹์€ ์ด์Šˆ ์ž‘์„ฑ ๋ฐฉ๋ฒ•",local:"how-to-write-a-good-issue",headingTag:"h2"});var D=e(P,6);l(D,{title:"์ข‹์€ PR ์ž‘์„ฑ ๋ฐฉ๋ฒ•",local:"how-to-write-a-good-pr",headingTag:"h2"});var x=e(D,8);l(x,{title:"PR์„ ์—ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•",local:"how-to-open-a-pr",headingTag:"h2"});var p=e(x,8),c=e(o(p),2),ue=e(o(c),2);s(ue,{code:"JTI0JTIwZ2l0JTIwY2xvbmUlMjBnaXQlNDBnaXRodWIuY29tJTNBJTNDeW91ciUyMEdpdEh1YiUyMGhhbmRsZSUzRSUyRmRpZmZ1c2Vycy5naXQlMEElMjQlMjBjZCUyMGRpZmZ1c2VycyUwQSUyNCUyMGdpdCUyMHJlbW90ZSUyMGFkZCUyMHVwc3RyZWFtJTIwaHR0cHMlM0ElMkYlMkZnaXRodWIuY29tJTJGaHVnZ2luZ2ZhY2UlMkZkaWZmdXNlcnMuZ2l0",highlighted:`$ git <span class="hljs-built_in">clone</span> git@github.com:&lt;your GitHub handle&gt;/diffusers.git
$ <span class="hljs-built_in">cd</span> diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git`,lang:"bash",wrap:!1}),t(c);var Y=e(c,2),he=e(o(Y),2);s(he,{code:"JTI0JTIwZ2l0JTIwY2hlY2tvdXQlMjAtYiUyMGEtZGVzY3JpcHRpdmUtbmFtZS1mb3ItbXktY2hhbmdlcw==",highlighted:"$ git checkout -b a-descriptive-name-for-my-changes",lang:"bash",wrap:!1}),t(Y),t(p);var r=e(p,4),Q=o(r),fe=e(o(Q),2);s(fe,{code:"JTI0JTIwcGlwJTIwaW5zdGFsbCUyMC1lJTIwJTIyLiU1QmRldiU1RCUyMg==",highlighted:'$ pip install -e <span class="hljs-string">&quot;.[dev]&quot;</span>',lang:"bash",wrap:!1}),t(Q),t(r);var S=e(r,8);s(S,{code:"JTI0JTIwcHl0ZXN0JTIwdGVzdHMlMkYlM0NURVNUX1RPX1JVTiUzRS5weQ==",highlighted:"$ pytest tests/&lt;TEST_TO_RUN&gt;.py",lang:"bash",wrap:!1});var z=e(S,4);s(z,{code:"JTI0JTIwcGlwJTIwaW5zdGFsbCUyMC1lJTIwJTIyLiU1QnRlc3QlNUQlMjI=",highlighted:'$ pip install -e <span class="hljs-string">&quot;.[test]&quot;</span>',lang:"bash",wrap:!1});var E=e(z,4);s(E,{code:"JTI0JTIwbWFrZSUyMHRlc3Q=",highlighted:'$ make <span class="hljs-built_in">test</span>',lang:"bash",wrap:!1});var F=e(E,4);s(F,{code:"JTI0JTIwbWFrZSUyMHN0eWxl",highlighted:"$ make style",lang:"bash",wrap:!1});var q=e(F,4);s(q,{code:"JTI0JTIwbWFrZSUyMHF1YWxpdHk=",highlighted:"$ make quality",lang:"bash",wrap:!1});var L=e(q,4);s(L,{code:"JTI0JTIwZ2l0JTIwYWRkJTIwbW9kaWZpZWRfZmlsZS5weSUwQSUyNCUyMGdpdCUyMGNvbW1pdCUyMC1tJTIwJTIyQSUyMGRlc2NyaXB0aXZlJTIwbWVzc2FnZSUyMGFib3V0JTIweW91ciUyMGNoYW5nZXMuJTIy",highlighted:`$ git add modified_file.py
$ git commit -m <span class="hljs-string">&quot;A descriptive message about your changes.&quot;</span>`,lang:"bash",wrap:!1});var $=e(L,4);s($,{code:"JTI0JTIwZ2l0JTIwcHVsbCUyMHVwc3RyZWFtJTIwbWFpbg==",highlighted:"$ git pull upstream main",lang:"bash",wrap:!1});var O=e($,4);s(O,{code:"JTI0JTIwZ2l0JTIwcHVzaCUyMC11JTIwb3JpZ2luJTIwYS1kZXNjcmlwdGl2ZS1uYW1lLWZvci1teS1jaGFuZ2Vz",highlighted:"$ git push -u origin a-descriptive-name-for-my-changes",lang:"bash",wrap:!1});var K=e(O,4);l(K,{title:"ํ…Œ์ŠคํŠธ",local:"tests",headingTag:"h3"});var ee=e(K,6);s(ee,{code:"JTI0JTIwcHl0aG9uJTIwLW0lMjBweXRlc3QlMjAtbiUyMGF1dG8lMjAtLWRpc3QlM0Rsb2FkZmlsZSUyMC1zJTIwLXYlMjAuJTJGdGVzdHMlMkY=",highlighted:"$ python -m pytest -n auto --dist=loadfile -s -v ./tests/",lang:"bash",wrap:!1});var le=e(ee,8);s(le,{code:"JTI0JTIwUlVOX1NMT1clM0R5ZXMlMjBweXRob24lMjAtbSUyMHB5dGVzdCUyMC1uJTIwYXV0byUyMC0tZGlzdCUzRGxvYWRmaWxlJTIwLXMlMjAtdiUyMC4lMkZ0ZXN0cyUyRg==",highlighted:'$ RUN_SLOW=<span class="hljs-built_in">yes</span> python -m pytest -n auto --dist=loadfile -s -v ./tests/',lang:"bash",wrap:!1});var se=e(le,4);s(se,{code:"JTI0JTIwcHl0aG9uJTIwLW0lMjB1bml0dGVzdCUyMGRpc2NvdmVyJTIwLXMlMjB0ZXN0cyUyMC10JTIwLiUyMC12JTBBJTI0JTIwcHl0aG9uJTIwLW0lMjB1bml0dGVzdCUyMGRpc2NvdmVyJTIwLXMlMjBleGFtcGxlcyUyMC10JTIwZXhhbXBsZXMlMjAtdg==",highlighted:`$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v`,lang:"bash",wrap:!1});var ie=e(se,2);l(ie,{title:"upstream(HuggingFace) main๊ณผ forked main ๋™๊ธฐํ™”ํ•˜๊ธฐ",local:"syncing-forked-main-with-upstream-huggingface-main",headingTag:"h3"});var oe=e(ie,6);s(oe,{code:"JTI0JTIwZ2l0JTIwY2hlY2tvdXQlMjAtYiUyMHlvdXItYnJhbmNoLWZvci1zeW5jaW5nJTBBJTI0JTIwZ2l0JTIwcHVsbCUyMC0tc3F1YXNoJTIwLS1uby1jb21taXQlMjB1cHN0cmVhbSUyMG1haW4lMEElMjQlMjBnaXQlMjBjb21taXQlMjAtbSUyMCclM0N5b3VyJTIwbWVzc2FnZSUyMHdpdGhvdXQlMjBHaXRIdWIlMjByZWZlcmVuY2VzJTNFJyUwQSUyNCUyMGdpdCUyMHB1c2glMjAtLXNldC11cHN0cmVhbSUyMG9yaWdpbiUyMHlvdXItYnJhbmNoLWZvci1zeW5jaW5n",highlighted:`$ git checkout -b your-branch-for-syncing
$ git pull --squash --no-commit upstream main
$ git commit -m <span class="hljs-string">&#x27;&lt;your message without GitHub references&gt;&#x27;</span>
$ git push --set-upstream origin your-branch-for-syncing`,lang:"bash",wrap:!1});var te=e(oe,2);l(te,{title:"์Šคํƒ€์ผ ๊ฐ€์ด๋“œ",local:"style-guide",headingTag:"h3"});var ge=e(te,4);ye(ge,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/ko/conceptual/contribution.md"}),Ge(2),i(re,f),Ze()}export{He as component};

Xet Storage Details

Size:
66.1 kB
ยท
Xet hash:
275b631443f0e9d98241fcc4160b30b9ad8d6fffcac81462d8ad0e6986cda61d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.