Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Diffusers에 기여하는 방법 🧨","local":"how-to-contribute-to-diffusers-","sections":[{"title":"개요","local":"overview","sections":[{"title":"1. GitHub Discussions 또는 Discord에서 질문하고 답변하기","local":"1-asking-and-answering-questions-on-github-discussions-or-on-discord","sections":[],"depth":3},{"title":"2. GitHub issues 탭에서 새 이슈 열기","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 issues 탭에서 이슈에 답변하기","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. Hub에 파이프라인 또는 모델 게시","local":"6-publish-a-pipeline-or-model-on-the-hub","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. Diffusers MVP 이슈 해결하기","local":"9-taking-on-a-diffusers-mvp-issue","sections":[],"depth":3},{"title":"10. 파이프라인, 모델, 스케줄러 추가","local":"10-adding-pipelines-models-schedulers","sections":[{"title":"새로운 모델 또는 파이프라인 지원이 릴리스될 때","local":"when-new-model-or-pipeline-support-is-released","sections":[],"depth":4},{"title":"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":"포크된 main을 upstream(HuggingFace) main과 동기화","local":"syncing-forked-main-with-upstream-huggingface-main","sections":[],"depth":3},{"title":"스타일 가이드","local":"style-guide","sections":[],"depth":3}],"depth":2},{"title":"AI 에이전트를 활용한 코딩","local":"coding-with-ai-agents","sections":[{"title":"AI 지원 및 에이전틱 기여","local":"ai-assisted-and-agentic-contributions","sections":[],"depth":3}],"depth":2}],"depth":1}"/> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/entry/start.1gaXe03k.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/BObs6oQO.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DPnyVmXs.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/entry/app.BwdYRbCn.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DSGUT_OW.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/C045MWWx.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/6tuJ3nyi.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/DsnmJJEf.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/nodes/0.CornNeQR.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/IaDvMxLQ.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/nodes/304.D7A4xAiG.js" rel="modulepreload"> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/chunks/bKdwVYpU.js" rel="modulepreload"> | |
| <!--110sasa--><meta name="hf:doc:metadata" content="{"title":"How to contribute to Diffusers 🧨","local":"how-to-contribute-to-diffusers-","sections":[{"title":"Overview","local":"overview","sections":[{"title":"1. Asking and answering questions on GitHub Discussions or on Discord","local":"1-asking-and-answering-questions-on-github-discussions-or-on-discord","sections":[],"depth":3},{"title":"2. Opening new issues on the GitHub issues tab","local":"2-opening-new-issues-on-the-github-issues-tab","sections":[{"title":"2.1. Reproducible, minimal bug reports","local":"21-reproducible-minimal-bug-reports","sections":[],"depth":4},{"title":"2.2. Feature requests","local":"22-feature-requests","sections":[],"depth":4},{"title":"2.3 Feedback","local":"23-feedback","sections":[],"depth":4},{"title":"2.4 Technical questions","local":"24-technical-questions","sections":[],"depth":4},{"title":"2.5 Proposal to add a new model, scheduler, or pipeline","local":"25-proposal-to-add-a-new-model-scheduler-or-pipeline","sections":[],"depth":4}],"depth":3},{"title":"3. Answering issues on the GitHub issues tab","local":"3-answering-issues-on-the-github-issues-tab","sections":[],"depth":3},{"title":"4. Fixing a “Good first issue”","local":"4-fixing-a-good-first-issue","sections":[],"depth":3},{"title":"5. Contribute to the documentation","local":"5-contribute-to-the-documentation","sections":[],"depth":3},{"title":"6. Publish a pipeline or model on the Hub","local":"6-publish-a-pipeline-or-model-on-the-hub","sections":[],"depth":3},{"title":"7. Contribute to training examples","local":"7-contribute-to-training-examples","sections":[],"depth":3},{"title":"8. Fixing a “Good second issue”","local":"8-fixing-a-good-second-issue","sections":[],"depth":3},{"title":"9. Taking on a Diffusers MVP issue","local":"9-taking-on-a-diffusers-mvp-issue","sections":[],"depth":3},{"title":"10. Adding pipelines, models, schedulers","local":"10-adding-pipelines-models-schedulers","sections":[{"title":"When new model or pipeline support is released","local":"when-new-model-or-pipeline-support-is-released","sections":[],"depth":4},{"title":"Copied from mechanism","local":"copied-from-mechanism","sections":[],"depth":4}],"depth":3}],"depth":2},{"title":"How to write a good issue","local":"how-to-write-a-good-issue","sections":[],"depth":2},{"title":"How to write a good PR","local":"how-to-write-a-good-pr","sections":[],"depth":2},{"title":"How to open a PR","local":"how-to-open-a-pr","sections":[{"title":"Tests","local":"tests","sections":[],"depth":3},{"title":"Syncing forked main with upstream (HuggingFace) main","local":"syncing-forked-main-with-upstream-huggingface-main","sections":[],"depth":3},{"title":"Style guide","local":"style-guide","sections":[],"depth":3}],"depth":2},{"title":"Coding with AI agents","local":"coding-with-ai-agents","sections":[{"title":"AI-assisted and agentic contributions","local":"ai-assisted-and-agentic-contributions","sections":[],"depth":3}],"depth":2}],"depth":1}"/><!----> | |
| <link href="/docs/diffusers/v0.43.0/en/_app/immutable/assets/0.tn0RQdqM.css" rel="modulepreload"> <!--[--><!--[0--><!--[--><!--[0--><!--[--><p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: inline-end; margin-inline-start: 10px; display: inline-flex; position: relative; z-index: 10;"><div dir="ltr" class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----></span> <span dir="auto">Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg><!----></button></div> <!--[-1--><!--]--></div><!----> <!--[0--><h1 class="relative group"><a id="how-to-contribute-to-diffusers-" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#how-to-contribute-to-diffusers-"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->Diffusers에 기여하는 방법 🧨<!----></span></h1><!--]--><!----> <blockquote class="tip"><p>AI 에이전트를 사용하여 기여하는 경우, <a href="#ai-assisted-and-agentic-contributions">AI 지원 및 에이전틱 기여</a> 섹션을 읽어 기대 사항과 가이드라인을 확인하세요.</p></blockquote> <p>오픈소스 커뮤니티의 기여를 ❤️합니다! 누구나 환영하며, 코드 작성뿐 아니라 모든 형태의 참여가 소중히 여겨지고 감사해집니다. 질문에 답변을 하고, 다른 사람을 돕고, 소통하며, 문서를 개선하는 것 모두 커뮤니티에 매우 큰 가치를 지니므로, 참여할 의향이 있다면 망설이지 말고 함께해 주세요!</p> <p>모두가 공개 Discord 채널에서 👋로 인사를 나누며 시작하는 것을 권장합니다. 우리는 diffusion model의 최신 트렌드를 논의하고, 질문을 주고받으며, 개인 프로젝트를 공유하고, 기여에 대해 서로 돕거나, 그저 함께 시간을 보내기도 합니다 ☕. <a href="https://Discord.gg/G7tWnz98XR"><img alt="Join us on Discord" src="https://img.shields.io/discord/823813159592001537?color=5865F2&logo=discord&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> <!--[1--><h2 class="relative group"><a id="overview" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#overview"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->개요<!----></span></h2><!--]--><!----> <p>issues와 discussions에서 질문에 답변하는 것부터 core library에 새로운 diffusion 모델을 추가하는 것까지, 다양한 방식으로 기여할 수 있습니다.</p> <p>다음에서는 시간 투여량이 적은 순서대로 기여할 수 있는 다양한 방법을 개요로 소개합니다. 모든 방법이 커뮤니티에 가치 있습니다.</p> <ul><li><ol><li><a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> 또는 <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>에서 질문을 하고 답변을 하는 것.</li></ol></li> <li><ol start="2"><li><a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">GitHub Issues 탭</a>에서 새 이슈를 여는 것.</li></ol></li> <li><ol start="3"><li><a href="https://github.com/huggingface/diffusers/issues" rel="nofollow">GitHub Issues 탭</a>에서 이슈에 답변합니다.</li></ol></li> <li><ol start="4"><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></ol></li> <li><ol start="5"><li><a href="https://github.com/huggingface/diffusers/tree/main/docs/source" rel="nofollow">문서</a>에 기여하세요.</li></ol></li> <li><ol start="6"><li><a href="../modular_diffusers/overview">Modular Diffusers</a>를 사용하여 Hub에 원격 코드로 파이프라인 또는 모델을 게시합니다.</li></ol></li> <li><ol start="7"><li><a href="https://github.com/huggingface/diffusers/tree/main/examples" rel="nofollow">examples</a>에 기여하세요.</li></ol></li> <li><ol start="8"><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></ol></li> <li><ol start="9"><li><a href="https://github.com/huggingface/diffusers/issues/12635" rel="nofollow">Diffusers MVP 프로그램</a>에서 이슈를 맡아 보세요.</li></ol></li> <li><ol start="10"><li>라이브러리에 새로운 pipeline, model 또는 scheduler를 추가합니다. 이 기여는 일반적으로 모델 저자와 직접 협력하여 진행하며, 커뮤니티 기여자의 경우 대신 Hub(6)에서 시작하세요. 공개된 <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22" rel="nofollow">“New Pipeline/Model”</a> 및 <a href="https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22" rel="nofollow">“New scheduler”</a> 이슈를 확인하고, 먼저 <a href="https://huggingface.co/docs/diffusers/main/en/conceptual/philosophy" rel="nofollow">Design Philosophy</a>를 읽어보세요.</li></ol></li></ul> <p>앞서 언급했듯이, <strong>모든 기여는 커뮤니티에 가치 있습니다</strong>. | |
| 다음으로, 각 기여에 대해 조금 더 자세히 설명하겠습니다.</p> <p>기여 4번부터 10번까지 중, Hub에 있는 6번을 제외하고는 PR을 열어야 합니다. <a href="#how-to-open-a-pr">풀 리퀘스트 열기</a>에서 이를 자세히 설명합니다.</p> <!--[2--><h3 class="relative group"><a id="1-asking-and-answering-questions-on-github-discussions-or-on-discord" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#1-asking-and-answering-questions-on-github-discussions-or-on-discord"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->1. GitHub Discussions 또는 Discord에서 질문하고 답변하기<!----></span></h3><!--]--><!----> <p>Diffusers 라이브러리와 관련된 질문이나 코멘트는 <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</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>확산 모델에 관한 윤리적 문제</li> <li>…</li></ul> <p>GitHub Discussions 또는 Discord에서 제기되는 모든 질문은 커뮤니티가 지식을 공개적으로 공유하도록 적극적으로 장려하며, 현재 질문하고 있는 것과 동일한 질문을 가진 초보자에게 큰 도움이 될 수 있습니다. 궁금한 점이 있다면 주저하지 말고 질문해 주세요. | |
| 같은 정신으로, 이러한 질문에 답변하는 것은 모든 사람이 배울 수 있도록 지식을 공개적으로 문서화하는 것이므로 커뮤니티에 매우 큰 도움이 됩니다.</p> <p><strong>참고로</strong>, 질문을 하거나 답변을 작성하는 데 들이는 노력이 클수록 공개 문서화된 지식의 품질이 높아집니다. 마찬가지로, 잘 구성되고 잘 답변된 질문은 누구나 접근할 수 있는 고품질 지식 데이터베이스를 만듭니다. 반면, 부실하게 작성된 질문이나 답변은 공개 지식 데이터베이스의 전반적인 품질을 떨어뜨립니다. | |
| 요약하면, 고품질 질문이나 답변은 <em>정확하고</em>, <em>간결하며</em>, <em>관련성이 있고</em>, <em>이해하기 쉬우며</em>, <em>접근성이 좋고</em>, <em>형식이 잘 갖춰져 있으며</em> <a href="#how-to-write-a-good-issue">좋은 이슈 작성법</a> 섹션을 참고하십시오.</p> <p><strong>채널에 대한 참고 사항</strong>: <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow"><em>GitHub Discussions</em></a>는 검색 엔진에 인덱싱되며 모든 스레드에 링크를 걸 수 있으므로, 거기에 게시된 질문과 답변은 동일한 문제를 가진 다음 사용자에게도 계속 검색 가능합니다. | |
| 반면, <em>Discord</em>는 빠른一来一回 소통을 유도하는 채팅형 형식을 갖추고 있습니다. | |
| Discord에서 질문에 대한 답변을 받는 데는 아마도 더 적은 시간이 걸리겠지만, 시간이 지남에 따라 질문이 더 이상 보이지 않게 되며, 과거에 게시된 정보를 찾는 것이 훨씬 어렵습니다. 따라서 오래 남을 질문과 답변을 위해 GitHub Discussions를 권장합니다. Discord에서 흥미로운 결론으로 이어지는 대화가 이루어진 경우, 미래의 독자가 찾을 수 있도록 그 결과를 토론으로 게시하세요.</p> <!--[2--><h3 class="relative group"><a id="2-opening-new-issues-on-the-github-issues-tab" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#2-opening-new-issues-on-the-github-issues-tab"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2. GitHub issues 탭에서 새 이슈 열기<!----></span></h3><!--]--><!----> <p>🧨 Diffusers 라이브러리는 문제를 겪고 있는 사용자분들이 해당 문제를 알려주신 덕분에 강력하고 안정적입니다. 이슈를 보고해 주셔서 감사합니다.</p> <p>GitHub issues는 Diffusers 라이브러리와 직접적으로 관련된 기술적 질문, 버그 보고, 기능 요청, 또는 라이브러리 설계에 대한 피드백을 위해 예약되어 있음을 기억하세요.</p> <p>요약하자면, <strong>Diffusers 라이브러리 코드</strong>와 <strong>무관한</strong> 모든 것(문서 포함)은 이슈로 문의하기보다 <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> 또는 <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>에서 <strong>문의해야 합니다</strong>.</p> <p><strong>새로운 이슈를 열 때 다음 가이드라인을 고려해 주세요</strong>:</p> <ul><li>GitHub의 Issues 아래 검색 막대를 사용하여 해당 문제가 이미 질문되었는지 검색했는지 확인하세요.</li> <li>다른(관련) 이슈에 새로운 이슈를 보고하지 마세요. 다른 이슈와 매우 관련이 높더라도, 새로운 이슈를 열고 관련 이슈에 링크를 걸어야 합니다.</li> <li>이슈가 영어로 작성되어 있는지 확인하세요.</li> <li>Diffusers의 최신 버전으로 업데이트하면 문제가 해결될 수 있는지 확인하세요. 이슈를 게시하기 전에 <code>python -c "import diffusers; print(diffusers.__version__)"</code>의 결과가 최신 Diffusers 버전과 같거나 그보다 높은지 반드시 확인해 주세요.</li> <li>새로운 이슈를 열 때 들이는 노력이 클수록 답변의 품질이 높아지고, Diffusers 이슈 전체의 품질도 향상된다는 점을 기억하세요.</li></ul> <p>새로운 이슈에는 일반적으로 다음 항목이 포함됩니다.</p> <!--[3--><h4 class="relative group"><a id="21-reproducible-minimal-bug-reports" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#21-reproducible-minimal-bug-reports"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2.1. 재현 가능한 최소한의 버그 보고서<!----></span></h4><!--]--><!----> <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=&labels=bug&projects=&template=bug-report.yml" rel="nofollow">여기</a>에서 열 수 있습니다.</p> <!--[3--><h4 class="relative group"><a id="22-feature-requests" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#22-feature-requests"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2.2. 기능 요청<!----></span></h4><!--]--><!----> <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=&labels=&template=feature_request.md&title=" rel="nofollow">여기</a>에서 열 수 있습니다.</p> <!--[3--><h4 class="relative group"><a id="23-feedback" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#23-feedback"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2.3 피드백<!----></span></h4><!--]--><!----> <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=&labels=&template=feedback.md&title=" rel="nofollow">여기</a>에서 열 수 있습니다.</p> <!--[3--><h4 class="relative group"><a id="24-technical-questions" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#24-technical-questions"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2.4 기술 관련 질문<!----></span></h4><!--]--><!----> <p>기술적인 질문은 주로 라이브러리의 특정 코드가 왜 그렇게 작성되었는지, 또는 코드의 특정 부분이 어떤 역할을 하는지에 관한 것입니다. 해당 코드로의 링크를 포함하고, 이 코드 부분이 왜 이해하기 어려운지에 대한 세부 정보를 제공해 주세요.</p> <p>기술적 질문에 대한 이슈를 <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=bug&template=bug-report.yml" rel="nofollow">여기</a>에서 열 수 있습니다.</p> <!--[3--><h4 class="relative group"><a id="25-proposal-to-add-a-new-model-scheduler-or-pipeline" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#25-proposal-to-add-a-new-model-scheduler-or-pipeline"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->2.5 새로운 모델, 스케줄러 또는 파이프라인 추가 제안<!----></span></h4><!--]--><!----> <p>Diffusion model 커뮤니티에서 Diffusers 라이브러리에 추가되기를 원하는 새로운 모델, 파이프라인 또는 스케줄러를 출시한 경우, 다음 정보를 제공해 주세요:</p> <ul><li>확산 파이프라인, 모델 또는 스케줄러의 간략한 설명 및 논문 또는 공개 릴리스 링크.</li> <li>오픈 소스 구현 중 하나에 대한 링크를 제공합니다.</li> <li>가용한 경우 모델 가중치에 대한 링크입니다.</li></ul> <p>또한, 컴포넌트(모델, 스케줄러, 파이프라인 등)의 원저자를 찾을 수 있다면 GitHub 핸들로 태그를 달아두세요.</p> <p>모델을 직접 Diffusers에 추가하려면 <a href="#6-publish-a-pipeline-or-model-on-the-hub">Hub에 파이프라인 또는 모델 게시</a> 및 <a href="#10-adding-pipelines-models-schedulers">파이프라인, 모델, 스케줄러 추가</a>를 참고하세요.</p> <p>모델/파이프라인/스케줄러에 대한 요청을 <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=New+model%2Fpipeline%2Fscheduler&template=new-model-addition.yml" rel="nofollow">여기</a>에서 열 수 있습니다.</p> <!--[2--><h3 class="relative group"><a id="3-answering-issues-on-the-github-issues-tab" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#3-answering-issues-on-the-github-issues-tab"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->3. GitHub issues 탭에서 이슈에 답변하기<!----></span></h3><!--]--><!----> <p>GitHub의 이슈에 답변하려면 Diffusers에 대한 일부 기술 지식이 필요할 수 있지만, 답변이 100% 정확하지 않더라도 누구나 시도해 보기를 권장합니다. | |
| 이슈에 고품질 답변을 작성하기 위한 몇 가지 팁:</p> <ul><li>You are a professional translator.</li> <li>주제를 벗어나지 마세요. 이슈에 대한 답변은 해당 이슈와 관련된 내용만 다루어야 합니다.</li> <li>주장을 입증하거나 뒷받침하는 코드, 논문 또는 기타 출처에 대한 링크를 제공하세요.</li> <li>코드로 답변해 주세요. 간단한 코드 스니펫이 문제의 답변이 되거나 문제를 해결하는 방법을 보여줄 수 있다면, 완전히 재현 가능한 코드 스니펫을 제공해 주세요.</li></ul> <p>또한, 많은 이슈가 단순히 주제에서 벗어난 것이거나, 다른 이슈의 중복이거나, 관련이 없는 경우가 많습니다. 이러한 이슈에 답변하여 이슈 작성자가 더 정확한 내용을 제시하도록 장려하거나, 중복된 이슈의 링크를 제공하거나, <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a> 또는 <a href="https://discord.gg/G7tWnz98XR" rel="nofollow">Discord</a>로 유도해 주시면 유지보수자에게 큰 도움이 됩니다.</p> <p>발행된 버그 리포트가 정확하며 소스 코드 수정이 필요하다고 확인했다면, 다음 섹션을 참고하세요.</p> <p><a href="#6-publish-a-pipeline-or-model-on-the-hub">6</a>를 제외한 모든 기여에는 PR을 열어야 합니다. <a href="https://github.com/huggingface/diffusers/pull/15179/changes#how-to-open-a-pr" rel="nofollow">풀 리퀘스트 열기</a> 섹션에서 방법을 설명합니다.</p> <!--[2--><h3 class="relative group"><a id="4-fixing-a-good-first-issue" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#4-fixing-a-good-first-issue"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->4. “Good first issue” 해결하기<!----></span></h3><!--]--><!----> <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 또는 draft PR을 열 수 있습니다.</li> <li>b.) 이슈 설명에 수정 방안이 제시되어 있지 않은 경우, 이슈의 댓글로 직접 수정 방안을 제안하세요. 접근 방식을 설명하는 몇 문장만으로도 충분합니다. PR을 열기 전에 Diffusers 팀의 누군가가 이를 확인하는 것을 기다리세요.</li> <li>c.) 해당 문제를 수정하기 위한 PR이 이미 열려 있지만, 문제가 아직 닫히지 않은 경우입니다. PR이 방치된 상태라면, 새 PR을 열고 방치된 PR에 링크를 걸면 됩니다. 원래 문제를 수정하고자 했던 기여자가 갑자기 시간을 내지 못하게 되어 PR이 방치되는 경우가 많습니다. 오픈소스에서 흔히 발생하는 매우 자연스러운 현상입니다. 이 경우, 기존 PR의 지식을 활용하여 다시 시도해 주시면 커뮤니티가 매우 기뻐할 것입니다. 이미 PR이 존재하고 활동적인 상태라면, 제안을 하거나 PR을 검토하거나, PR에 기여할 수 있는지 물어보는 등 저자에게 도움을 줄 수 있습니다.</li></ul> <!--[2--><h3 class="relative group"><a id="5-contribute-to-the-documentation" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#5-contribute-to-the-documentation"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->5. 문서에 기여하기<!----></span></h3><!--]--><!----> <p>좋은 라이브러리는 <strong>항상</strong> 좋은 문서를 갖추고 있습니다! 공식 문서는 라이브러리를 처음 사용하는 사용자에게 가장 먼저 접하는 부분 중 하나이므로, 문서에 기여하는 것은 <strong>매우 가치 있는 기여</strong>입니다.</p> <p>라이브러리에 기여하는 방법은 다양합니다:</p> <ul><li>철자 또는 문법 오류 수정</li> <li>Docstring의 잘못된 포맷을 수정합니다. 공식 문서가 이상하게 표시되거나 링크가 깨진 것을 발견하셨다면, 시간을 내어 수정해 주시면 감사하겠습니다.</li> <li>docstring 입력 또는 출력 텐서의 shape 또는 차원을 수정합니다.</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> <!--[2--><h3 class="relative group"><a id="6-publish-a-pipeline-or-model-on-the-hub" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#6-publish-a-pipeline-or-model-on-the-hub"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->6. Hub에 파이프라인 또는 모델 게시<!----></span></h3><!--]--><!----> <p><a href="../modular_diffusers/overview">Modular Diffusers</a>를 사용하면 파이프라인이 Hub의 어떤 저장소에서도 원격 코드로 존재할 수 있습니다. Diffusers 릴리스를 기다릴 필요 없이 <code>from_pretrained(..., trust_remote_code=True)</code>로 누구나 로드할 수 있습니다. 새로운 파이프라인이나 모델을 가져오는 커뮤니티 기여자라면 여기서 시작하세요. 파이프라인을 게시하려면 custom blocks를, 모델을 게시하려면 custom models를 참조하세요.</p> <p>해당 <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=New+model%2Fpipeline%2Fscheduler&template=new-model-addition.yml" rel="nofollow">모델 요청</a> 아래로 알려주세요(없다면 새로 생성하세요): 구현에 대한 피드백을 제공하며, 마음에 드는 구현은 <a href="https://huggingface.co/collections/diffusers-modular/community-modular-diffusers-blocks" rel="nofollow">Community Modular Diffusers Blocks</a> 컬렉션에 소개합니다. 이후 라이브러리에서 해당 모델을 어떻게 지원할지 결정합니다: 여러분의 버전을 upstream하거나, 저자들과 협력하여 공식 버전을 만들거나, 단순히 여러분의 구현으로 사람들을 안내할 수 있습니다. 과정에서 겪은 어려움도 알려주세요: 혼란스러운 API, 누락된 문서, 버그 등. 이러한 피드백은 파이프라인만큼 우리에게 가치 있습니다.</p> <!--[2--><h3 class="relative group"><a id="7-contribute-to-training-examples" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#7-contribute-to-training-examples"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->7. 학습 예제에 기여하기<!----></span></h3><!--]--><!----> <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의 핵심 유지보수자가 관리하고, 연구용 학습 예제는 커뮤니티가 관리합니다. | |
| 이는 라이브러리가 Hub에서 공식 파이프라인과 커뮤니티 파이프라인의 소규모 집합만 유지하는 것과 같은 이유입니다. 핵심 유지보수자가 확산 모델의 모든 가능한 학습 방법을 유지보수하는 것은 현실적으로 불가능하기 때문입니다. | |
| Diffusers의 핵심 유지보수자와 커뮤니티가 특정 학습 패러다임이 너무 실험적이거나 충분히 인기 없다고 판단하는 경우, 해당 학습 코드는 <code>research_projects</code> 폴더에 배치하고 저자가 유지보수해야 합니다.</p> <p>공식 학습 및 연구 예제는 하나 이상의 학습 스크립트, <code>requirements.txt</code> 파일, <code>README.md</code> 파일을 포함하는 디렉터리로 구성됩니다. 사용자가 학습 예제를 활용하려면 저장소를 클론해야 합니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->git <span class="hljs-built_in">clone</span> https://github.com/huggingface/diffusers<!----></pre></div><!----> <p>학습에 필요한 모든 추가 의존성을 설치하는 데에도 사용되며:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!----><span class="hljs-built_in">cd</span> diffusers | |
| pip install -r examples/<your-example-folder>/requirements.txt<!----></pre></div><!----> <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 <your-example>.py --args</code>를 실행하여 예제를 실행할 수 있어야 합니다.</li> <li>예제는 단순하게 유지하여 Diffusers를 학습에 사용하는 <strong>예시</strong> 역할을 해야 합니다. 예제 스크립트의 목적은 최첨단 diffusion 모델을 만드는 것이 <strong>아닙니다</strong>. 대신, 과도한 커스텀 로직을 추가하지 않고 알려진 학습 방식을 재현하는 것입니다. 이 점에서 파생되는 결과로, 우리의 예제는 좋은 교육 자료 역할을 하도록 노력합니다.</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 library</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>비공식/연구용 학습 예제를 추가하는 경우, <a href="https://github.com/huggingface/diffusers/tree/main/examples/research_projects/intel_opts#diffusers-examples-with-intel-optimizations" rel="nofollow">여기</a>에 표시된 것처럼 이 학습 예제를 유지 관리하고 있다는 문장을 git 핸들과 함께 추가하는 것을 <strong>잊지 마세요</strong>.</li></ul> <p>공식 학습 예제에 기여하는 경우, <a href="https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/test_dreambooth.py" rel="nofollow">examples/dreambooth/test_dreambooth.py</a>와 같이 해당 폴더에 테스트를 추가하는 것도 확인해 주세요. 비공식 학습 예제의 경우 이는 필요하지 않습니다.</p> <!--[2--><h3 class="relative group"><a id="8-fixing-a-good-second-issue" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#8-fixing-a-good-second-issue"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->8. “Good second issue” 수정<!----></span></h3><!--]--><!----> <p><em>Good second issues</em>는 <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> 라벨로 표시됩니다. <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>보다 해결이 일반적으로 더 복잡하며, 설명에서 수정에 대한 안내가 적고 라이브러리에 대한 상당한 이해가 필요합니다.</p> <p>좋은 두 번째 이슈를 해결하는 데 관심이 있다면, 몇 문장으로 이슈에 대한 의견과 계획 중인 접근 방식을 코멘트로 공유한 후, PR을 열기 전에 유지보수자의 확인을 받으세요. 해당 이슈에 대해 이미 PR이 열렸지만 병합되지 않은 경우, 새로운 제안을 하기 전에 그 이유를 파악해 보세요.</p> <!--[2--><h3 class="relative group"><a id="9-taking-on-a-diffusers-mvp-issue" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#9-taking-on-a-diffusers-mvp-issue"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->9. Diffusers MVP 이슈 해결하기<!----></span></h3><!--]--><!----> <p><a href="https://github.com/huggingface/diffusers/issues/12635" rel="nofollow">Diffusers MVP 프로그램</a>에는 도움이 가장 필요한 이슈들이 나열되어 있습니다. Good second issues와 유사하지만 난이도가 더 높고 소요 시간이 더 길며, 해당 이슈를 맡아 처리한 기여자에게 보상이 주어집니다. PR을 열기 전에 먼저 코멘트로 접근 방식을 공유하고, 유지보수자의 확인을 받으시기 바랍니다. 또한 이 프로그램에는 <a href="https://github.com/huggingface/diffusers/issues/14529" rel="nofollow">아이디어 트랙</a>도 있습니다. Diffusers의 영향력을 높일 수 있는 아이디어 하나를 구현 세부 사항 없이 몇 문장으로 알려주세요.</p> <!--[2--><h3 class="relative group"><a id="10-adding-pipelines-models-schedulers" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#10-adding-pipelines-models-schedulers"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->10. 파이프라인, 모델, 스케줄러 추가<!----></span></h3><!--]--><!----> <blockquote class="tip"><p>모델의 저자이신 경우, 통합 작업을 조정하기 위해 연락해 주세요: 기능 요청을 생성하거나, 이미 열려 있는 요청에 댓글을 남겨 주세요.</p> <p>커뮤니티 기여자라면 먼저 Hub 저장소에서 시작하세요. <a href="#6-publish-a-pipeline-or-model-on-the-hub">Hub에 파이프라인 또는 모델 게시하기</a>를 참고하고, 해당 기능 요청 아래에 upstreaming에 관심이 있다고 알려주세요.</p></blockquote> <p>Pipelines, models, schedulers는 Diffusers 라이브러리의 가장 중요한 구성 요소입니다. | |
| 이들은 최첨단 diffusion 기술에 대한 손쉬운 접근을 제공하여 커뮤니티가 강력한 생성형 AI 애플리케이션을 구축할 수 있도록 합니다.</p> <p>새로운 모델, 파이프라인 또는 스케줄러를 추가하면 Diffusers에 의존하는 모든 사용자 인터페이스에서 새로운 강력한 사용 사례를 활성화할 수 있으며, 이는 전체 생성형 AI 생태계에 매우 큰 가치를 제공할 수 있습니다.</p> <!--[3--><h4 class="relative group"><a id="when-new-model-or-pipeline-support-is-released" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#when-new-model-or-pipeline-support-is-released"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->새로운 모델 또는 파이프라인 지원이 릴리스될 때<!----></span></h4><!--]--><!----> <p>새로운 모델 또는 파이프라인을 릴리스에 포함하려면 Diffusers 팀과 사전에 통합을 조율해야 합니다. Diffusers 저장소의 이슈를 통해, 또는 <code>diffusers@huggingface.co</code>로 이메일을 보내서 언제든 문의해 주세요.</p> <p>모델 또는 파이프라인의 pull request가 병합되어도 릴리스가 자동으로 수행되지 않습니다. 릴리스를 진행하기 전에 유지보수자는 통합이 완료되었는지 및 릴리스 테스트가 통과하는지 먼저 확인합니다.</p> <p>새로운 모델 또는 파이프라인 지원은 일반적으로 다음 마이너 릴리스에 포함됩니다. 통합은 <code>main</code>에 병합되고, 릴리스 브랜치는 이를 기반으로 생성됩니다. 릴리스에는 모델 또는 파이프라인 통합뿐 아니라 이전 릴리스 이후 병합된 모든 변경 사항이 포함됩니다.</p> <p>릴리스 노트는 새로운 모델 또는 파이프라인을 강조하고, 해당 릴리스에 포함된 기타 변경 사항도 요약합니다. 패치 릴리스는 기존 릴리스의 수정 사항에 사용되도록 예약되어 있습니다.</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">Philosophy guide</a>를 읽어보시는 것을 강력히 권장합니다. 이를 통해 세 가지 구성 요소의 설계 방식을 더 잘 이해할 수 있습니다. 우리의 설계 철학에서 크게 벗어나는 모델, 스케줄러 또는 파이프라인 추가는 API의 일관성을 해칠 수 있으므로 병합할 수 없음을 유의해 주세요. 특정 설계 선택에 근본적으로 동의하지 않으시는 경우, 해당 설계 패턴/선택 사항을 라이브러리 전체에서 변경해야 하는지 그리고 우리의 설계 철학을 업데이트해야 하는지 논의할 수 있도록 <a href="https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title=" rel="nofollow">Feedback issue</a>를 열어 주시기 바랍니다. 라이브러리 전반에 걸친 일관성은 우리에게 매우 중요합니다.</p> <p>PR에 원본 코드베이스/논문 링크를 추가하고, 가능하면 원저자에게도 PR에서 직접 알림을 보내 진행 상황을 추적하고 질문에 도움을 줄 수 있도록 해 주세요.</p> <p>PR에서 막히거나 불확실한 부분이 있다면, 첫 리뷰나 도움을 요청하는 메시지를 남겨 주십시오.</p> <!--[3--><h4 class="relative group"><a id="copied-from-mechanism" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#copied-from-mechanism"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->mechanism에서 복사됨<!----></span></h4><!--]--><!----> <p>파이프라인, 모델 또는 스케줄러 코드를 추가할 때 이해해야 할 독특하고 중요한 기능은 <code># Copied from</code> 메커니즘입니다. Diffusers 코드베이스 전반에서 이 메커니즘을 확인할 수 있으며, 이를 사용하는 이유는 코드베이스를 이해하고 유지보수하기 쉽게 유지하기 위해서입니다. <code># Copied from</code> 메커니즘으로 코드를 표시하면 해당 코드가 복사된 원본 코드와 동일하도록 강제됩니다. 이렇게 하면 <code>make fix-copies</code>를 실행할 때마다 여러 파일에 걸쳐 변경 사항을 쉽게 업데이트하고 전파할 수 있습니다.</p> <p>예를 들어, 아래 코드 예시에서 <a href="/docs/diffusers/v0.43.0/ko/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput">StableDiffusionPipelineOutput</a>은 원본 코드이고 <code>AltDiffusionPipelineOutput</code>은 <code># Copied from</code> 메커니즘을 사용하여 이를 복사한 것입니다. 유일한 차이는 클래스 접두사를 <code>Stable</code>에서 <code>Alt</code>로 변경한 것입니다.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-py "><!----><span class="hljs-comment"># Copied from diffusers.pipelines.stable_diffusion.pipeline_output.StableDiffusionPipelineOutput with Stable->Alt</span> | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">AltDiffusionPipelineOutput</span>(<span class="hljs-title class_ inherited__">BaseOutput</span>): | |
| <span class="hljs-string">""" | |
| 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. | |
| """</span><!----></pre></div><!----> <p>자세한 내용은 <a href="https://huggingface.co/blog/transformers-design-philosophy#4-machine-learning-models-are-static" rel="nofollow">~Don’t~ Repeat Yourself*</a> 블로그 게시물의 해당 섹션을 참고하세요.</p> <!--[1--><h2 class="relative group"><a id="how-to-write-a-good-issue" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#how-to-write-a-good-issue"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->좋은 이슈 작성 방법<!----></span></h2><!--]--><!----> <p><strong>이슈가 잘 작성될수록 빠르게 해결될 가능성이 높아집니다.</strong></p> <ol><li>이슈에 올바른 템플릿을 사용했는지 확인하세요. <em>Bug Report</em>, <em>Feature Request</em>, <em>Feedback about API Design</em>, <em>New model/pipeline/scheduler addition</em>, 또는 빈 이슈 중 하나를 선택할 수 있습니다. <a href="https://github.com/huggingface/diffusers/issues/new/choose" rel="nofollow">새로운 이슈</a>를 열 때 올바른 템플릿을 선택하세요. 사용법에 대한 질문은 이슈가 아니라 <a href="https://github.com/huggingface/diffusers/discussions" rel="nofollow">GitHub Discussions</a>에 남겨야 합니다.</li> <li><strong>정확하게 작성하세요</strong>: 이슈에 적절한 제목을 부여하세요. 이슈 설명을 최대한 간결하게 작성해 보세요. 이슈를 제출할 때 정확할수록, 해당 이슈를 이해하고 잠재적으로 해결하는 데 걸리는 시간이 줄어듭니다. 하나의 이슈에 대해 하나의 이슈만 열어야 하며, 여러 이슈에 대해 하나의 이슈를 열지 마세요. 여러 문제를 발견했다면, 각각에 대해 별도의 이슈를 여세요. 만약 해당 이슈가 버그라면, 어떤 버그인지 최대한 정확하게 명시해야 합니다. 단순히 “Error in diffusers”라고만 작성해서는 안 됩니다.</li> <li><strong>재현 가능성</strong>: 재현 가능한 코드 스니펫이 없으면 해결책도 없습니다. 버그를 발견한 경우, 유지보수자가 이를 <strong>재현할 수 있어야</strong> 합니다. 문제를 재현할 수 있도록 Python 인터프리터에 복사하여 붙여넣을 수 있는 코드 스니펫을 포함했는지 확인하세요. 코드 스니펫이 정상적으로 작동하는지, <em>즉</em> 누락된 import나 이미지 링크가 없는지 등을 확인하세요. 이슈에는 오류 메시지<strong>와</strong> 어떤 수정 없이도 복사하여 붙여넣으면 동일한 오류 메시지를 재현할 수 있는 코드 스니펫이 포함되어야 합니다. 로컬 모델 가중치나 로컬 데이터와 같이 독자가 접근할 수 없는 리소스를 사용하는 경우, 이슈를 해결할 수 없습니다. 데이터나 모델을 공유할 수 없다면 더미 모델이나 더미 데이터를 만들어 보세요.</li> <li><strong>최소주의</strong>: 가능한 한 간결하게 작성하여 독자가 문제를 최대한 빠르게 이해할 수 있도록 돕습니다. 문제와 무관한 모든 코드 및 정보를 제거합니다. 버그를 발견한 경우, 문제를 시연하기 위해 만들 수 있는 가장 간단한 코드 예시를 작성하십시오. 버그를 발견하자마자 전체 워크플로우를 그대로 이슈에 붙여넣지 마십시오. 예를 들어, 모델을 학습하는 중 특정 시점에 오류가 발생했다면, 먼저 오류의 원인이 되는 학습 코드 부분을 파악하고 몇 줄의 코드로 이를 재현해 보십시오. 전체 데이터셋 대신 더미 데이터를 사용하는 것이 좋습니다.</li> <li><strong>컨텍스트</strong>: 버그를 발견하거나 기능이 필요했던 당시 작업 내용을 알려주세요. Diffusers 기반 앱, 연구 프로젝트, 라이브러리 버그를 찾기 위해 실행한 에이전트 등입니다. 한두 문장으로 충분하며, 프로젝트 링크를 함께 제공해 주시면 좋습니다. 동시에 처리할 수 있는 이슈와 PR보다 더 많은 것이 접수되므로, 컨텍스트는 영향력에 따라 우선순위를 정하는 데 도움이 됩니다.</li> <li>링크를 추가하세요. 특정 명명, 메서드 또는 모델을 언급하는 경우, 독자가 의도를 더 잘 이해할 수 있도록 링크를 제공하세요. 특정 PR 또는 이슈를 언급하는 경우, 해당 이슈에 링크를 연결하세요. 독자가 무엇을 말하는지 알고 있다고 가정하지 마세요. 이슈에 추가하는 링크가 많을수록 좋습니다.</li> <li>포맷팅. 코드는 Python 코드 문법으로, 에러 메시지는 일반 코드 문법으로 포맷팅하여 이슈를 깔끔하게 작성하세요. 자세한 내용은 <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> <!--[1--><h2 class="relative group"><a id="how-to-write-a-good-pr" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#how-to-write-a-good-pr"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->좋은 PR 작성 방법<!----></span></h2><!--]--><!----> <ol><li>항상 이슈부터 시작하세요. 풀 리퀘스트가 해결하려는 이슈를 찾거나, 아직 없다면 직접 이슈를 열고 코드를 작성하기 전에 유지보수자가 응답할 기회를 주세요. 우리에게 가장 잘 작동하는 워크플로우는 이슈를 열고, 해결 방안에 대한 논의를 거친 후, 해당 논의를 기반으로 PR을 여는 것입니다. 이를 통해 가장 영향력 있는 이슈에 시간을 집중하고, 코드가 존재하기 전에 범주에 합의하며, 중복 작업을 피할 수 있습니다. PR 설명에 이슈 번호를 언급(예: <code>Fixes #1234</code>)하여 두 항목이 연결되도록 하세요.</li> <li>变色龙이 되어라. 기존 디자인 패턴과 문법을 이해하고, 추가하는 코드가 기존 코드베이스에 자연스럽게 녹아들도록 하라. 기존 디자인 패턴이나 사용자 인터페이스와 크게 벗어난 Pull request는 병합되지 않는다.</li> <li>집중력을 유지하세요. Pull request는 하나의 문제, 오직 하나의 문제만 해결해야 합니다. “추가하는 동안 다른 문제도 함께 수정하자”는 함정에 빠지지 않도록 주의하세요. 여러 개의 서로 무관한 문제를 한 번에 해결하는 pull request는 리뷰하기가 훨씬 어렵습니다.</li> <li>패턴을 수정하세요. 일회성 수정이 아닙니다. 하나의 문제가 여러 파일에 걸쳐 있을 수 있습니다: 동일한 버그가 코드베이스 전반에 반복적으로 발생한다면, 모든 인스턴스를 검색하여 명확하고 체계적인 범위(예: “모든 스케줄러의 가변 기본값 수정”)를 가진 단일 PR로 한 번에 모두 수정하세요. 인스턴스별로 PR을 나누지 마세요.</li> <li>Pull request의 제목은 해당 기여의 요약을 나타내야 합니다. 진행 중인 작업을 표시하려면 제목 앞에 <code>[WIP]</code> 접두사를 붙이세요. 이를 통해 중복 작업을 방지하고, 병합 준비가 된 PR과 구분할 수 있습니다.</li> <li><a href="#how-to-write-a-good-issue">좋은 이슈 작성법</a>에서 설명한 대로 텍스트를 작성하고 포맷팅해 보세요.</li> <li>PR을 열기 전에 자신의 diff를 검토하세요. 리뷰어의 관점에서 읽고 발견한 문제를 수정하세요. <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/self-review/SKILL.md" rel="nofollow"><code>self-review</code></a> 스킬을 실행하는 것을 강력히 권장합니다. 이 스킬은 <code>@claude</code> CI 리뷰어와 동일한 기준을 적용합니다. <a href="#coding-with-ai-agents">AI 에이전트를 활용한 코딩</a>에 설명된 대로 에이전트를 설정하고 <a href="#ai-assisted-and-agentic-contributions">AI 지원 및 에이전틱 기여</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는 slow 테스트를 실행하지 않지만, 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>빠르게 성장하는 저장소의 특성상, 저장소의 크기를 크게 증가시킬 수 있는 파일이 추가되지 않도록 주의하는 것이 중요합니다. 여기에는 이미지, 비디오 및 기타 텍스트가 아닌 파일이 포함됩니다. 이러한 파일을 저장하기 위해 <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>와 같은 hf.co에서 호스팅되는 <code>dataset</code>를 활용하는 것을 권장합니다. | |
| 외부 기여인 경우, PR에 이미지를 추가한 후 Hugging Face 멤버에게 해당 이미지를 이 dataset으로 이관해 달라고 요청할 수 있습니다.</li></ol> <!--[1--><h2 class="relative group"><a id="how-to-open-a-pr" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#how-to-open-a-pr"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->PR를 여는 방법<!----></span></h2><!--]--><!----> <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/83bc6c94eaeb6f7704a2a428931cf2d9ad973ae9/setup.py#L270" rel="nofollow">지원되는 Python 버전</a>):</p> <ol><li><p><a href="https://github.com/huggingface/diffusers" rel="nofollow">repository</a>를 포크하려면 저장소 페이지의 ‘Fork’ 버튼을 클릭합니다. 이렇게 하면 GitHub 사용자 계정 아래에 코드의 사본이 생성됩니다.</p></li> <li><p>fork를 로컬 디스크에 클론하고 기본 저장소를 리모트로 추가합니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git <span class="hljs-built_in">clone</span> git@github.com:<your GitHub handle>/diffusers.git | |
| $ <span class="hljs-built_in">cd</span> diffusers | |
| $ git remote add upstream https://github.com/huggingface/diffusers.git<!----></pre></div><!----></li> <li><p>개발 변경 사항을 담을 새 브랜치를 생성합니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git checkout -b a-descriptive-name-for-my-changes<!----></pre></div><!----></li></ol> <p><code>main</code> 브랜치에서 <strong>작업하지 마세요.</strong></p> <ol start="4"><li><p>가상 환경에서 다음 명령을 실행하여 개발 환경을 설정합니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ pip install -e <span class="hljs-string">".[dev]"</span><!----></pre></div><!----></li></ol> <p>리포지토리를 이미 클론했다면, 라이브러리의 최신 변경 사항을 가져오기 위해 <code>git pull</code>을 실행해야 할 수 있습니다.</p> <ol start="5"><li>브랜치에서 기능을 개발하세요.</li></ol> <p>기능을 작업하는 동안 테스트 스위트가 통과하는지 확인해야 합니다. 변경 사항에 영향을 받는 테스트는 다음과 같이 실행해야 합니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ pytest tests/<TEST_TO_RUN>.py<!----></pre></div><!----> <p>테스트를 실행하기 전에 테스트에 필요한 종속성이 설치되어 있는지 확인하세요. 다음 명령어로 설치할 수 있습니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ pip install -e <span class="hljs-string">".[test]"</span><!----></pre></div><!----> <p>다음 명령어로 전체 테스트 스위트를 실행할 수도 있지만, Diffusers가 많이 성장한 현재에는 상당한 성능의 머신이 필요하여 합리적인 시간 내에 결과를 얻기 어렵습니다. 해당 명령어는 다음과 같습니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ make <span class="hljs-built_in">test</span><!----></pre></div><!----> <p>🧨 Diffusers는 소스 코드를 일관되게 포맷팅하기 위해 <code>black</code>과 <code>isort</code>를 사용합니다. 변경 사항을 적용한 후, 자동화할 수 없는 스타일 수정 및 코드 검증을 한 번에 적용하려면 다음을 실행하세요:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ make style<!----></pre></div><!----> <p>🧨 Diffusers는 <code>ruff</code>와 몇 가지 커스텀 스크립트를 사용하여 코딩 실수를 검사합니다. 품질 관리는 CI에서 실행되지만, 다음 명령으로 동일한 검사를 실행할 수도 있습니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ make quality<!----></pre></div><!----> <p>변경 사항에 만족하면 <code>git add</code>를 사용하여 변경된 파일을 추가하고 <code>git commit</code>을 사용하여 변경 사항을 로컬에 기록하세요:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git add modified_file.py | |
| $ git commit -m <span class="hljs-string">"A descriptive message about your changes."</span><!----></pre></div><!----> <p>원본 저장소와 코드 사본을 정기적으로 동기화하는 것이 좋습니다. 이렇게 하면 변경 사항을 빠르게 반영할 수 있습니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git pull upstream main<!----></pre></div><!----> <p>다음 명령을 사용하여 변경 사항을 계정에 푸시하세요:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git push -u origin a-descriptive-name-for-my-changes<!----></pre></div><!----> <ol start="6"><li><p>만족스러우면 GitHub의 포크 웹페이지로 이동하세요. ‘Pull request’를 클릭하여 변경 사항을 프로젝트 유지보수자에게 검토를 요청하세요.</p></li> <li><p>메인터이너가 변경 사항을 요청하는 것은 괜찮습니다. 코어 컨트리뷰터에게도 흔히 일어나는 일입니다! 모든 사람이 Pull request에서 변경 사항을 볼 수 있도록, 로컬 브랜치에서 작업을 수행한 후 변경 사항을 포크에 push하세요. 그러면 pull request에 자동으로 표시됩니다.</p></li></ol> <!--[2--><h3 class="relative group"><a id="tests" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#tests"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->테스트<!----></span></h3><!--]--><!----> <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> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ python -m pytest -n auto --dist=loadfile -s -v ./tests/<!----></pre></div><!----> <p>사실 <code>make test</code>가 바로 그렇게 구현되어 있습니다!</p> <p>작업 중인 기능만 테스트하기 위해 더 작은 테스트 집합을 지정할 수 있습니다.</p> <p>기본적으로 느린 테스트는 건너뜁니다. 이를 실행하려면 <code>RUN_SLOW</code> 환경 변수를 <code>yes</code>로 설정하세요. 이 경우 수 기가바이트에 달하는 모델이 다운로드되므로, 충분한 디스크 공간과 안정적인 인터넷 연결, 또는 상당한 인내심이 필요합니다!</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ RUN_SLOW=<span class="hljs-built_in">yes</span> python -m pytest -n auto --dist=loadfile -s -v ./tests/<!----></pre></div><!----> <p><code>unittest</code>은 완전히 지원되며, 이를 사용하여 테스트를 실행하는 방법은 다음과 같습니다:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ python -m unittest discover -s tests -t . -v | |
| $ python -m unittest discover -s examples -t examples -v<!----></pre></div><!----> <!--[2--><h3 class="relative group"><a id="syncing-forked-main-with-upstream-huggingface-main" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#syncing-forked-main-with-upstream-huggingface-main"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->포크된 main을 upstream(HuggingFace) main과 동기화<!----></span></h3><!--]--><!----> <p>각 upstream PR에 참고 노트를 추가하고 해당 PR에 참여하는 개발자에게 불필요한 알림을 보내는 upstream 저장소에 ping을 보내지 않기 위해, 포크된 저장소의 main 브랜치를 동기화할 때는 다음 단계를 따르십시오:</p> <ol><li>가능하면 포크된 저장소에서 브랜치와 PR을 사용하여 업스트림과 동기화하는 것을 피하세요. 대신 포크된 main에 직접 병합하세요.</li> <li>PR이 반드시 필요한 경우, 브랜치를 체크아웃한 후 다음 단계를 사용하세요:</li></ol> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg><!----> <div class=" absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0 "><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent;"></div> 복사됨</div><!----></button><!----></div> <pre class="language-bash "><!---->$ git checkout -b your-branch-for-syncing | |
| $ git pull --squash --no-commit upstream main | |
| $ git commit -m <span class="hljs-string">'<your message without GitHub references>'</span> | |
| $ git push --set-upstream origin your-branch-for-syncing<!----></pre></div><!----> <!--[2--><h3 class="relative group"><a id="style-guide" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#style-guide"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->스타일 가이드<!----></span></h3><!--]--><!----> <p>문자열 문서의 경우, 🧨 Diffusers는 <a href="https://google.github.io/styleguide/pyguide.html" rel="nofollow">Google 스타일</a>을 따릅니다.</p> <!--[1--><h2 class="relative group"><a id="coding-with-ai-agents" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#coding-with-ai-agents"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->AI 에이전트를 활용한 코딩<!----></span></h2><!--]--><!----> <p>리포지토리는 AI 에이전트 구성을 <a href="https://github.com/huggingface/diffusers/tree/main/.ai" rel="nofollow"><code>.ai/</code></a>에 저장하며, 이는 에이전트 플러그인으로도 게시되어 온디맨드 태스크 스킬을 한 단계로 설치할 수 있습니다.</p> <ul><li><strong>기여자만 읽기 전용</strong> — <code>.ai/</code>는 핵심 유지보수자가 관리합니다. PR에서 <code>.ai/</code> 아래에 있는 파일(또는 루트 수준의 <code>AGENTS.md</code> / <code>CLAUDE.md</code> 심볼릭 링크, 설치된 <code>.agents/skills</code> / <code>.claude/skills</code>)을 수정하지 마세요. 누락되거나 잘못된 내용을 발견하면 이슈를 생성하거나 PR에서 지적해 주시면 유지보수자가 업데이트합니다.</li> <li><strong>Guidelines</strong> — <code>.ai/AGENTS.md</code> 는 루트의 <code>AGENTS.md</code> / <code>CLAUDE.md</code> 심볼릭 링크를 통해 모든 에이전트 세션에 로드됩니다. <code>.ai/references/</code> 에 있는 참고 가이드는 링크를 따를 때 필요에 따라 읽힙니다: <ul><li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow"><code>.ai/AGENTS.md</code></a> — 최상위 코딩 가이드라인</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/models.md" rel="nofollow"><code>.ai/references/models.md</code></a> — 어텐션 패턴, 모델 구현 규칙, 일반적인 컨벤션</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/pipelines.md" rel="nofollow"><code>.ai/references/pipelines.md</code></a> — 파이프라인 규칙</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/modular.md" rel="nofollow"><code>.ai/references/modular.md</code></a> — 모듈형 파이프라인 규칙 및 변환 체크리스트</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/testing.md" rel="nofollow"><code>.ai/references/testing.md</code></a> — 필수 테스트 레이어, 테스터 믹스인, 더미 컴포넌트 규칙</li> <li><a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/review-rules.md" rel="nofollow"><code>.ai/references/review-rules.md</code></a> — 리뷰어가 확인하는 사항</li></ul></li> <li><strong>Skills</strong> (아래 <a href="https://github.com/huggingface/diffusers/tree/main/.ai/skills" rel="nofollow"><code>.ai/skills/</code></a>, 특정 작업 시 필요에 따라 로드됩니다): <ul><li><code>model-integration</code> — diffusers에 새 모델 또는 파이프라인을 끝에서 끝으로 추가하는 작업(파일 구조, 통합 체크리스트, 테스트 레이아웃, 가중치 변환)</li> <li><code>self-review</code> — PR을 열기 전에 프로젝트 규칙에 따라 변경 사항을 검토합니다</li> <li><code>diffusers-cli</code> — 터미널에서 파이프라인 실행 및 스키마 검사</li> <li><code>custom-blocks</code> — Hub를 위한 <code>ModularPipelineBlocks</code> 하위 클래스 패키징</li></ul></li></ul> <p>어떤 경로를 선택하든, 시작하기 전에 에이전트에게 자체 설정을 확인하도록 요청하세요. <code>python utils/check_ai.py</code>는 가이드와 스킬이 일관성이 있는지 확인하고, <code>diffusers-cli skills list</code>는 실제로 어떤 스킬을 가지고 있는지 보여줍니다.</p> <!--[2--><h3 class="relative group"><a id="ai-assisted-and-agentic-contributions" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#ai-assisted-and-agentic-contributions"><span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg><!----></span></a> <span><!---->AI 지원 및 에이전틱 기여<!----></span></h3><!--]--><!----> <p>AI 에이전트의 Diffusers 기여를 환영합니다. Diffusers <a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow">에이전트 가이드</a>를 사용하여 에이전트를 설정하고, <code>model-integration</code> 및 <code>self-review</code>와 같은 관련 작업별 스킬을 사용하도록 권장합니다. 위에서 설명한 대로 플러그인(또는 개별 스킬)을 설치한 후, 가이드에 따라 기여 범위를 설정하고 구현, 테스트 및 검토를 수행하세요. PR의 변경 사항을 이해하고, 테스트하며, 유지보수할 책임은 여전히 귀하에게 있습니다.</p> <p>AI 지원 기여는 환영하지만, 리뷰 부담을 관리 가능한 수준으로 유지하기 위해 조정, 범위 설정 및 검증이 필요합니다. 이러한 가이드라인을 따르지 않는 PR은 상세한 리뷰 없이 닫힐 수 있습니다.</p> <ul><li><strong>PR을 열기 전에 조율하세요.</strong> 이슈를 찾거나 열고, 유사한 PR(열려 있는 것과 최근 닫힌 것)을 검토한 후, 해당 이슈에서 유지보수자의 명시적인 확인을 기다린 다음 PR을 여세요. 이를 통해 범위에 대해 논의하고, 중복 작업을 피하며, 접근 방식을 확인할 수 있는 기회를 제공합니다.</li> <li><strong>패턴을 수정하세요. 개별 사례가 아닙니다.</strong> 반복적으로 발생하는 문제를 발견했다면, 코드베이스에서 유사한 인스턴스를 검색하고 개별 인스턴스마다 여러 issue나 PR을 여는 대신 명확하고 체계적인 범위를 가진 <em>단일</em> issue를 생성하세요(예: “모든 scheduler의 mutable default 수정”).</li> <li><strong>PR을 열기 전에 셀프 리뷰를 수행하세요.</strong> <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/self-review/SKILL.md" rel="nofollow"><code>self-review</code></a> 스킬을 실행하세요. 이 스킬은 <a href="https://github.com/huggingface/diffusers/blob/main/.ai/references/review-rules.md" rel="nofollow"><code>.ai/references/review-rules.md</code></a>를 기준으로 diff를 검토합니다. <code>@claude</code> CI 리뷰어가 사용하는 것과 동일한 기준입니다. 스킬이 보고하는 내용을 확인하고 조치하세요. 이 스킬은 참고용이며 권위적인 것이 아니므로 오류가 있을 수 있습니다. 본인에게 타당하게 느껴지는 차단(blocking) 문제를 중심으로 처리하고, 가능하면 사용하지 않는 코드나 불필요한 코드를 정리하세요. 특정 제안에 동의하지 않는 경우, PR이 열린 후 리뷰어가 논의하도록 남겨두어도 무방합니다. 아래에서 설명하는 공유 노트를 통해 해당 사항이 의도적인 결정이었음을 리뷰어에게 알릴 수 있습니다.</li> <li><strong>자기 검토 노트를 공유하세요.</strong> 제출하는 diff를 반영한 최종 라운드의 자기 검토 보고서를 PR의 설명란이나 댓글로 게시하세요. 일부러 수정하지 않은 항목과 그 이유도 포함해야 합니다. 이를 통해 리뷰어가 이미 확인된 사항과 의도적으로 내린 판단을 파악할 수 있어, 보통 몇 번의 왕복 논의를 줄일 수 있습니다.</li> <li><strong>PR 커뮤니케이션은 간결하게 유지하세요.</strong> 리뷰어가 PR에서 읽는 모든 것 — 설명, 커밋 메시지, 댓글 및 답변, 코드 주석 — 은 사람이 이해하기 쉬워야 합니다. 에이전트가 초안을 작성했다면 단순히 훑어보지 마세요. 읽고, 본인이 직접 작성할 만한 합리적이고 간결한 문장이 될 때까지 에이전트에게 수정을 요청하세요. 게시하는 모든 것의 저자는 바로 여러분입니다.</li> <li><strong>Include in the PR description:</strong> <ul><li>유지보수자가 작업을 승인한 이슈 또는 토론에 대한 <strong>조정 링크</strong>.</li> <li>실행한 <strong>테스트 명령</strong>과 그 결과(“테스트 통과”만 적지 말고 관련 출력을 붙여넣으세요).</li> <li>위에서 설명한 대로, <strong>자기 검토 노트</strong>(또는 해당 노트가 포함된 PR 코멘트의 링크).</li></ul></li></ul> <p>모델의 저자이거나 모델을 공식적으로 유지 관리하는 팀의 일원이라면, 새로운 모델 통합에 에이전트를 사용하는 것을 권장합니다. 저장소의 <a href="https://github.com/huggingface/diffusers/blob/main/.ai/AGENTS.md" rel="nofollow">권장 설정</a>을 따르고 <a href="https://github.com/huggingface/diffusers/blob/main/.ai/skills/model-integration/SKILL.md" rel="nofollow"><code>model-integration</code></a> 스킬을 사용하세요. PR을 열기 전에 유지 관리자와 범위를 조율하십시오 — <a href="#10-adding-pipelines-models-schedulers">파이프라인, 모델, 스케줄러 추가</a>를 참조하세요.</p> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/diffusers/blob/main/docs/source/en/conceptual/contribution.md" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg><!----> <span><span class="underline">Update</span> on GitHub</span></a><!----> <p></p><!--]--><!----><!--]--><!--]--><!--]--> <!--[-1--><!--]--><!--]--> | |
| <script> | |
| { | |
| __sveltekit_ywq9g6 = { | |
| base: "/docs/diffusers/v0.43.0/en", | |
| assets: "/docs/diffusers/v0.43.0/en" | |
| }; | |
| const element = document.currentScript.parentElement; | |
| Promise.all([ | |
| import("/docs/diffusers/v0.43.0/en/_app/immutable/entry/start.1gaXe03k.js"), | |
| import("/docs/diffusers/v0.43.0/en/_app/immutable/entry/app.BwdYRbCn.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 304], | |
| data: [null,null], | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 129 kB
- Xet hash:
- a7c044f868d57d310884bda0ef78d428f08216d3de35f4c73abcf1ec37431717
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.