* Make root PHILOSOPHY.md a symlink to the docs philosophy page The root PHILOSOPHY.md had drifted into a stale duplicate of docs/source/en/conceptual/philosophy.md (which was rewritten in #13808 to cover the single-file model policy and Modular Diffusers). Replace it with a symlink to the docs file, mirroring CONTRIBUTING.md -> contribution.md, so there's a single source of truth. A symlink renders as a path stub (not content) on GitHub, so repoint the links that pointed at blob/main/PHILOSOPHY.md to the rendered docs site: the PR template and the English contribution guide. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Point contributor-guide links at the rendered docs site CONTRIBUTING.md is a symlink, so blob/main/CONTRIBUTING.md renders as a path stub on GitHub rather than the guide. Repoint the PR template and README links to the rendered docs page, matching the philosophy/AI-agents links. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Repoint remaining symlink-stub doc links to the rendered docs site The stale-bot comment and the ko/zh contribution guides still linked to blob/main/{CONTRIBUTING,PHILOSOPHY}.md, which render as path stubs because those root files are symlinks. Point them at the rendered docs pages (localized /ko/ and /zh/ for the translations). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
48 KiB
Diffusers์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ ๐งจ how-to-contribute-to-diffusers-
์คํ ์์ค ์ปค๋ฎค๋ํฐ์์์ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ๋๊ตฌ๋ ์ฐธ์ฌํ ์ ์์ผ๋ฉฐ, ์ฝ๋๋ฟ๋ง ์๋๋ผ ์ง๋ฌธ์ ๋ต๋ณํ๊ฑฐ๋ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๋ฑ ๋ชจ๋ ์ ํ์ ์ฐธ์ฌ๊ฐ ๊ฐ์น ์๊ณ ๊ฐ์ฌํ ์ฌ๊ฒจ์ง๋๋ค. ์ง๋ฌธ์ ๋ต๋ณํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์์ฃผ๋ฉฐ ์ํตํ๊ณ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ ๋ชจ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ํฐ ๋์์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๋๋ ค์ํ์ง ๋ง๊ณ ์ฐธ์ฌํด๋ณด์ธ์!
๋๊ตฌ๋ ์ฐ๋ฆฌ์ ๊ณต๊ฐ Discord ์ฑ๋์์ ๐ ์ธ์ฌํ๋ฉฐ ์์ํ ์ ์๋๋ก ์ฅ๋ คํฉ๋๋ค. ์ฐ๋ฆฌ๋ diffusion ๋ชจ๋ธ์ ์ต์ ๋ํฅ์ ๋
ผ์ํ๊ณ ์ง๋ฌธ์ ํ๋ฉฐ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์๋ํ๊ณ ๊ธฐ์ฌ์ ๋ํด ์๋ก ๋์์ฃผ๊ฑฐ๋ ๊ทธ๋ฅ ์ด์ธ๋ฆฌ๊ธฐ ์ํด ๋ชจ์ด๋ ๊ณณ์
๋๋คโ.
์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๊ธฐ์ฌํ๋ ค๋ ๊ฒฝ์ฐ, ์ฐ๋ฆฌ๋ ๊ฐ๋ฐฉ์ ์ด๊ณ ํ์ํ๋ฉฐ ์น๊ทผํ ์ปค๋ฎค๋ํฐ์ ์ผ๋ถ๊ฐ ๋๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ํ๋ ๊ฐ๋ น์ ์ฝ๊ณ ์ํธ ์์ฉ ์ค์ ์ด๋ฅผ ์กด์คํ๋๋ก ์ฃผ์ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ํ ํ๋ก์ ํธ๋ฅผ ์๋ดํ๋ ์ค๋ฆฌ ์ง์นจ์ ์ต์ํด์ง๊ณ ๋์ผํ ํฌ๋ช ์ฑ๊ณผ ์ฑ ์์ฑ์ ์์น์ ์ค์ํด์ฃผ์๊ธฐ๋ฅผ ๋ถํ๋๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ๋ก๋ถํฐ์ ํผ๋๋ฐฑ์ ๋งค์ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ฏ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ๊ฐ์น ์๋ ํผ๋๋ฐฑ์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ๋ง์ค์ด์ง ๋ง๊ณ ์๊ฒฌ์ ์ ์ํด์ฃผ์ธ์ - ๋ชจ๋ ๋ฉ์์ง, ๋๊ธ, ์ด์, Pull Request(PR)๋ ์ฝํ๊ณ ๊ณ ๋ ค๋ฉ๋๋ค.
๊ฐ์ overview
์ด์์ ์๋ ์ง๋ฌธ์ ๋ต๋ณํ๋ ๊ฒ์์๋ถํฐ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ก์ด diffusion ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๊ฒ๊น์ง ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค.
์ด์ด์ง๋ ๋ถ๋ถ์์ ์ฐ๋ฆฌ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๊ธฐ์ฌ์ ๋ํ ๊ฐ์๋ฅผ ๋์ด๋์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค. ๋ชจ๋ ๊ธฐ์ฌ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- Diffusers ํ ๋ก ํฌ๋ผ์ด๋ Discord์์ ์ง๋ฌธ์ ๋๋ตํ๊ฑฐ๋ ์ง๋ฌธ์ ํ ์ ์์ต๋๋ค.
- GitHub Issues ํญ์์ ์๋ก์ด ์ด์๋ฅผ ์ด ์ ์์ต๋๋ค.
- GitHub Issues ํญ์์ ์ด์์ ๋๋ตํ ์ ์์ต๋๋ค.
- "Good first issue" ๋ผ๋ฒจ์ด ์ง์ ๋ ๊ฐ๋จํ ์ด์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ฌธ์์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- Community Pipeline์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ์์ ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- "Good second issue" ๋ผ๋ฒจ์ด ์ง์ ๋ ์ด๋ ค์ด ์ด์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์๋ก์ด ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. "์๋ก์ด ํ์ดํ๋ผ์ธ/๋ชจ๋ธ" ๋ฐ "์๋ก์ด ์ค์ผ์ค๋ฌ" ์ด์๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ๊ธฐ์ฌ์ ๋ํด์๋ ๋์์ธ ์ฒ ํ์ ํ์ธํด์ฃผ์ธ์.
์์ ๋งํ ๋๋ก, ๋ชจ๋ ๊ธฐ์ฌ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด์ด์ง๋ ๋ถ๋ถ์์ ๊ฐ ๊ธฐ์ฌ์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
4๋ถํฐ 9๊น์ง์ ๋ชจ๋ ๊ธฐ์ฌ์๋ Pull Request์ ์ด์ด์ผ ํฉ๋๋ค. Pull Request ์ด๊ธฐ์์ ์์ธํ ์ค๋ช ๋์ด ์์ต๋๋ค.
1. Diffusers ํ ๋ก ํฌ๋ผ์ด๋ Diffusers Discord์์ ์ง๋ฌธํ๊ณ ๋ต๋ณํ๊ธฐ 1-asking-and-answering-questions-on-the-diffusers-discussion-forum-or-on-the-diffusers-discord
Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ๋ชจ๋ ์ง๋ฌธ์ด๋ ์๊ฒฌ์ ํ ๋ก ํฌ๋ผ์ด๋ Discord์์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ง๋ฌธ๊ณผ ์๊ฒฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค(ํ์ง๋ง ์ด์ ๊ตญํ๋์ง๋ ์์ต๋๋ค):
- ์ง์์ ๊ณต์ ํ๊ธฐ ์ํด์ ํ๋ จ ๋๋ ์ถ๋ก ์คํ์ ๋ํ ๊ฒฐ๊ณผ ๋ณด๊ณ
- ๊ฐ์ธ ํ๋ก์ ํธ ์๊ฐ
- ๋น๊ณต์ ํ๋ จ ์์ ์ ๋ํ ์ง๋ฌธ
- ํ๋ก์ ํธ ์ ์
- ์ผ๋ฐ์ ์ธ ํผ๋๋ฐฑ
- ๋ ผ๋ฌธ ์์ฝ
- Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ์ธ ํ๋ก์ ํธ์ ๋ํ ๋์ ์์ฒญ
- ์ผ๋ฐ์ ์ธ ์ง๋ฌธ
- Diffusion ๋ชจ๋ธ์ ๋ํ ์ค๋ฆฌ์ ์ง๋ฌธ
- ...
ํฌ๋ผ์ด๋ Discord์์ ์ง๋ฌธ์ ํ๋ฉด ์ปค๋ฎค๋ํฐ๊ฐ ์ง์์ ๊ณต๊ฐ์ ์ผ๋ก ๊ณต์ ํ๋๋ก ์ฅ๋ ค๋๋ฉฐ, ํฅํ ๋์ผํ ์ง๋ฌธ์ ๊ฐ์ง ์ด๋ณด์์๊ฒ๋ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ถ๊ธํ ์ง๋ฌธ์ ์ธ์ ๋ ์ง ํ์๊ธฐ ๋ฐ๋๋๋ค. ๋ํ, ์ด๋ฌํ ์ง๋ฌธ์ ๋ต๋ณํ๋ ๊ฒ์ ์ปค๋ฎค๋ํฐ์๊ฒ ๋งค์ฐ ํฐ ๋์์ด ๋ฉ๋๋ค. ์๋ํ๋ฉด ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋๊ฐ ํ์ตํ ์ ์๋ ๊ณต๊ฐ์ ์ธ ์ง์์ ๋ฌธ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฃผ์ํ์ญ์์ค. ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ํฌ์ํ๋ ๋ ธ๋ ฅ์ด ๋ง์์๋ก ๊ณต๊ฐ์ ์ผ๋ก ๋ฌธ์ํ๋ ์ง์์ ํ์ง์ด ๋์์ง๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์ ์ ์๋๊ณ ์ ๋ต๋ณ๋ ์ง๋ฌธ์ ๋ชจ๋์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณ ํ์ง ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ๋ฐ๋ฉด์ ์๋ชป๋ ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ๊ณต๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ ์ธ ํ์ง์ ๋ฎ์ถ ์ ์์ต๋๋ค. ๊ฐ๋จํ ๋งํด์, ๊ณ ํ์ง์ ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ๊ด๋ จ์ฑ์ด ์์ผ๋ฉฐ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ ์ ํ์ํ๋์ด ์์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฑ๋์ ๋ํ ์ฐธ๊ณ ์ฌํญ: ํฌ๋ผ์ ๊ตฌ๊ธ๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์์ ๋ ์ ์์ธํ๋ฉ๋๋ค. ๊ฒ์๋ฌผ์ ์ธ๊ธฐ์ ๋ฐ๋ผ ์์๊ฐ ๋งค๊ฒจ์ง๋ฉฐ, ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ๊ฒ์ํ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๋ํ, ํฌ๋ผ์ ๊ฒ์๋ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ์ฝ๊ฒ ๋งํฌํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด Discord๋ ์ฑํ ํ์์ผ๋ก ๋์ด ์์ด ๋น ๋ฅธ ๋ํ๋ฅผ ์ ๋ํฉ๋๋ค. ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋น ๋ฅด๊ฒ ๋ฐ์ ์๋ ์๊ฒ ์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด ์ง๋ฌธ์ด ๋ ์ด์ ๋ณด์ด์ง ์์ต๋๋ค. ๋ํ, Discord์์ ์ด์ ์ ๊ฒ์๋ ์ ๋ณด๋ฅผ ์ฐพ๋ ๊ฒ์ ํจ์ฌ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ํฌ๋ผ์ ์ฌ์ฉํ์ฌ ๊ณ ํ์ง์ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ํ์ฌ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์ค๋ ์ง์๋๋ ์ง์์ ๋ง๋ค๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. Discord์์์ ํ ๋ก ์ด ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๋ต๋ณ๊ณผ ๊ฒฐ๋ก ์ ์ด๋์ด๋ด๋ ๊ฒฝ์ฐ, ํด๋น ์ ๋ณด๋ฅผ ํฌ๋ผ์ ๊ฒ์ํ์ฌ ํฅํ ๋ ์๋ค์๊ฒ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ๊ถ์ฅํฉ๋๋ค.
2. GitHub ์ด์ ํญ์์ ์๋ก์ด ์ด์ ์ด๊ธฐ 2-opening-new-issues-on-the-github-issues-tab
๐งจ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์๋ค์ด ๋ง์ฃผ์น๋ ๋ฌธ์ ๋ฅผ ์๋ ค์ฃผ๋ ๋๋ถ์ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์๋ฅผ ๋ณด๊ณ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ธฐ์ตํด์ฃผ์ธ์, GitHub ์ด์๋ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ๊ธฐ์ ์ ์ธ ์ง๋ฌธ, ๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์์ฒญ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ธ์ ๋ํ ํผ๋๋ฐฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
๊ฐ๋จํ ๋งํด์, Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋์ ๊ด๋ จ๋์ง ์์ ๋ชจ๋ ๊ฒ(๋ฌธ์ ํฌํจ)์ GitHub๊ฐ ์๋ ํฌ๋ผ์ด๋ Discord์์ ์ง๋ฌธํด์ผ ํฉ๋๋ค.
์๋ก์ด ์ด์๋ฅผ ์ด ๋ ๋ค์ ๊ฐ์ด๋๋ผ์ธ์ ๊ณ ๋ คํด์ฃผ์ธ์:
- ์ด๋ฏธ ๊ฐ์ ์ด์๊ฐ ์๋์ง ๊ฒ์ํ๋์ง ํ์ธํด์ฃผ์ธ์(GitHub์ ์ด์ ํญ์์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ธ์).
- ๋ค๋ฅธ(๊ด๋ จ๋) ์ด์์ ์๋ก์ด ์ด์๋ฅผ ๋ณด๊ณ ํ์ง ๋ง์์ฃผ์ธ์. ๋ค๋ฅธ ์ด์์ ๊ด๋ จ์ด ๋๋ค๋ฉด, ์๋ก์ด ์ด์๋ฅผ ์ด๊ณ ๊ด๋ จ ์ด์์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ์ธ์.
- ์ด์๋ฅผ ์์ด๋ก ์์ฑํด์ฃผ์ธ์. ์์ด์ ์ต์ํ์ง ์๋ค๋ฉด, DeepL๊ณผ ๊ฐ์ ๋ฐ์ด๋ ๋ฌด๋ฃ ์จ๋ผ์ธ ๋ฒ์ญ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๊ตญ์ด์์ ์์ด๋ก ๋ฒ์ญํด์ฃผ์ธ์.
- ์ด์๊ฐ ์ต์ Diffusers ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ฉด ํด๊ฒฐ๋ ์ ์๋์ง ํ์ธํด์ฃผ์ธ์. ์ด์๋ฅผ ๊ฒ์ํ๊ธฐ ์ ์
python -c "import diffusers; print(diffusers.__version__)"๋ช ๋ น์ ์คํํ์ฌ ํ์ฌ ์ฌ์ฉ ์ค์ธ Diffusers ๋ฒ์ ์ด ์ต์ ๋ฒ์ ๊ณผ ์ผ์นํ๊ฑฐ๋ ๋ ๋์์ง ํ์ธํด์ฃผ์ธ์. - ์๋ก์ด ์ด์๋ฅผ ์ด ๋ ํฌ์ํ๋ ๋ ธ๋ ฅ์ด ๋ง์์๋ก ๋ต๋ณ์ ํ์ง์ด ๋์์ง๊ณ Diffusers ์ด์ ์ ์ฒด์ ํ์ง๋ ํฅ์๋ฉ๋๋ค.
2.1 ์ฌํ ๊ฐ๋ฅํ ์ต์ํ์ ๋ฒ๊ทธ ๋ฆฌํฌํธ 21-reproducible-minimal-bug-reports
๋ฒ๊ทธ ๋ฆฌํฌํธ๋ ํญ์ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ํฌํจํ๊ณ ๊ฐ๋ฅํ ํ ์ต์ํ์ด์ด์ผ ํ๋ฉฐ ๊ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์์ธํ ๋งํ๋ฉด:
- ๋ฒ๊ทธ๋ฅผ ๊ฐ๋ฅํ ํ ์ขํ์ผ ํฉ๋๋ค. ์ ์ฒด ์ฝ๋ ํ์ผ์ ๊ทธ๋ฅ ๋์ง์ง ๋ง์ธ์.
- ์ฝ๋์ ์์์ ์ง์ ํด์ผ ํฉ๋๋ค.
- Diffusers๊ฐ ์์กดํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌํจํ์ง ๋ง์ญ์์ค.
- ํญ์ ์ฌ์ฉ์ ํ๊ฒฝ์ ๋ํ ๋ชจ๋ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ธ์. ์ด๋ฅผ ์ํด ์์์
diffusers-cli env๋ฅผ ์คํํ๊ณ ํ์๋ ์ ๋ณด๋ฅผ ์ด์์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค. - ์ด์๋ฅผ ์ค๋ช ํด์ผ ํฉ๋๋ค. ๋ ์๊ฐ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง, ์ ๋ฌธ์ ๊ฐ ๋๋์ง ๋ชจ๋ฅธ๋ค๋ฉด ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ํญ์ ๋ ์๊ฐ ๊ฐ๋ฅํ ํ ์ ์ ๋ ธ๋ ฅ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ด์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ฑฐ๋ ์ ์๋์ง ์์ ๋ณ์ ๋๋ฌธ์ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ ๋ ์๊ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ด ๊ฐ๋ฅํ ํ ์ต์ํ๋๊ณ ๊ฐ๋จํ Python ์ ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
- ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ๋ชจ๋ธ๊ณผ/๋๋ ๋ฐ์ดํฐ์ ์ด ํ์ํ ๊ฒฝ์ฐ ๋ ์๊ฐ ํด๋น ๋ชจ๋ธ์ด๋ ๋ฐ์ดํฐ์ ์ ์ ๊ทผํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ๋ชจ๋ธ์ด๋ ๋ฐ์ดํฐ์ ์ Hub์ ์ ๋ก๋ํ์ฌ ์ฝ๊ฒ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ๋ฌธ์ ์ฌํ์ ๊ฐ๋ฅํ ํ ์ฝ๊ฒํ๊ธฐ ์ํด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ์ ์ ๊ฐ๋ฅํ ํ ์๊ฒ ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ์ธ์.
์์ธํ ๋ด์ฉ์ ์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ ์น์ ์ ์ฐธ์กฐํ์ธ์.
๋ฒ๊ทธ ๋ฆฌํฌํธ๋ฅผ ์ด๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ธ์.
2.2. ๊ธฐ๋ฅ ์์ฒญ 22-feature-requests
์ธ๊ณ์ ์ธ ๊ธฐ๋ฅ ์์ฒญ์ ๋ค์ ์ฌํญ์ ๋ค๋ฃน๋๋ค:
- ๋จผ์ ๋๊ธฐ๋ถ์ฌ:
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ /๋ถ๋ง์ด ์๋์? ๊ทธ๋ ๋ค๋ฉด ์ ๊ทธ๋ฐ์ง ์ค๋ช ํด์ฃผ์ธ์. ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์กฐ๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
- ํ๋ก์ ํธ์ ํ์ํ ๊ธฐ๋ฅ์ธ๊ฐ์? ์ฐ๋ฆฌ๋ ๊ทธ์ ๋ํด ๋ฃ๊ณ ์ถ์ต๋๋ค!
- ์ปค๋ฎค๋ํฐ์ ๋์์ด ๋ ์ ์๋ ๊ฒ์ ์์ ํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์๋๊ฐ์? ๋ฉ์ง๋ค์! ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ์๋ ค์ฃผ์ธ์.
- ๊ธฐ๋ฅ์ ์์ธํ ์ค๋ช ํ๋ ๋ฌธ๋จ์ ์์ฑํด์ฃผ์ธ์;
- ํฅํ ์ฌ์ฉ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์กฐ๊ฐ์ ์ ๊ณตํด์ฃผ์ธ์;
- ๋ ผ๋ฌธ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ธ ๊ฒฝ์ฐ ๋งํฌ๋ฅผ ์ฒจ๋ถํด์ฃผ์ธ์;
- ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐ๋๋ ์ถ๊ฐ ์ ๋ณด(๊ทธ๋ฆผ, ์คํฌ๋ฆฐ์ท ๋ฑ)๋ฅผ ์ฒจ๋ถํด์ฃผ์ธ์.
๊ธฐ๋ฅ ์์ฒญ์ ์ฌ๊ธฐ์์ ์ด ์ ์์ต๋๋ค.
2.3 ํผ๋๋ฐฑ 23-feedback
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ธ๊ณผ ๊ทธ๊ฒ์ด ์ ์ข์์ง ๋๋ ๋์์ง์ ๋ํ ์ด์ ์ ๋ํ ํผ๋๋ฐฑ์ ํต์ฌ ๋ฉ์ธํ ์ด๋๊ฐ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์์ฒญ๋ ๋์์ด ๋ฉ๋๋ค. ํ์ฌ ๋์์ธ ์ฒ ํ์ ์ดํดํ๋ ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์. ํน์ ๋์์ธ ์ ํ์ด ํ์ฌ ๋์์ธ ์ฒ ํ๊ณผ ๋ง์ง ์๋๋ค๊ณ ์๊ฐ๋๋ฉด, ๊ทธ ์ด์ ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์. ๋ฐ๋๋ก ํน์ ๋์์ธ ์ ํ์ด ๋์์ธ ์ฒ ํ์ ๋๋ฌด ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ํํ๋ค๊ณ ์๊ฐ๋๋ฉด, ๊ทธ ์ด์ ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์. ํน์ ๋์์ธ ์ ํ์ด ๋งค์ฐ ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด, ํฅํ ๋์์ธ ๊ฒฐ์ ์ ํฐ ๋์์ด ๋๋ฏ๋ก ์ด์ ๋ํ ์๊ฒฌ์ ๋จ๊ฒจ ์ฃผ์ธ์.
ํผ๋๋ฐฑ์ ๊ดํ ์ด์๋ ์ฌ๊ธฐ์์ ์ด ์ ์์ต๋๋ค.
2.4 ๊ธฐ์ ์ ์ธ ์ง๋ฌธ 24-technical-questions
๊ธฐ์ ์ ์ธ ์ง๋ฌธ์ ์ฃผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ์ฝ๋๊ฐ ์ ํน์ ๋ฐฉ์์ผ๋ก ์์ฑ๋์๋์ง ๋๋ ์ฝ๋์ ํน์ ๋ถ๋ถ์ด ๋ฌด์์ ํ๋์ง์ ๋ํ ์ง๋ฌธ์ ๋๋ค. ์ง๋ฌธํ์ ์ฝ๋ ๋ถ๋ถ์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ๊ณ ํด๋น ์ฝ๋ ๋ถ๋ถ์ด ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ด์ ์ ๋ํ ์์ธํ ์ค๋ช ์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๊ธฐ์ ์ ์ธ ์ง๋ฌธ์ ๊ดํ ์ด์๋ฅผ ์ฌ๊ธฐ์์ ์ด ์ ์์ต๋๋ค.
2.5 ์๋ก์ด ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋๋ ํ์ดํ๋ผ์ธ ์ถ๊ฐ ์ ์ 25-proposal-to-add-a-new-model-scheduler-or-pipeline
๋ง์ฝ diffusion ๋ชจ๋ธ ์ปค๋ฎค๋ํฐ์์ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ๊ณ ์ถ์ ์๋ก์ด ๋ชจ๋ธ, ํ์ดํ๋ผ์ธ ๋๋ ์ค์ผ์ค๋ฌ๊ฐ ์๋ค๋ฉด, ๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ฃผ์ธ์:
- Diffusion ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ์ ๋ํ ๊ฐ๋จํ ์ค๋ช ๊ณผ ๋ ผ๋ฌธ ๋๋ ๊ณต๊ฐ๋ ๋ฒ์ ์ ๋งํฌ
- ํด๋น ๋ชจ๋ธ์ ์คํ ์์ค ๊ตฌํ์ ๋ํ ๋งํฌ
- ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ฐ์ค์น์ ๋งํฌ
์ง์ ๋ชจ๋ธ์ ๊ธฐ์ฌํ๊ณ ์ถ๋ค๋ฉด, ๊ฐ์ฅ ์ ์๋ดํด๋๋ฆด ์ ์์ต๋๋ค. ๋ํ, ๊ฐ๋ฅํ๋ค๋ฉด ๊ตฌ์ฑ ์์(๋ชจ๋ธ, ์ค์ผ์ค๋ฌ, ํ์ดํ๋ผ์ธ ๋ฑ)์ ์์ ์๋ฅผ GitHub ํธ๋ค๋ก ํ๊ทธํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
๋ชจ๋ธ/ํ์ดํ๋ผ์ธ/์ค์ผ์ค๋ฌ์ ๋ํ ์์ฒญ์ ์ฌ๊ธฐ์์ ์ด ์ ์์ต๋๋ค.
3. GitHub ์ด์ ํญ์์ ๋ฌธ์ ์ ๋ํ ๋ต๋ณํ๊ธฐ 3-answering-issues-on-the-github-issues-tab
GitHub์์ ์ด์์ ๋ํ ๋ต๋ณ์ ํ๊ธฐ ์ํด์๋ Diffusers์ ๋ํ ๊ธฐ์ ์ ์ธ ์ง์์ด ํ์ํ ์ ์์ง๋ง, ์ ํํ ๋ต๋ณ์ด ์๋๋๋ผ๋ ๋ชจ๋๊ฐ ์๋ํด๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด์์ ๋ํ ๊ณ ํ์ง ๋ต๋ณ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ:
- ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ณ ์ต์ํ์ผ๋ก ์ ์งํฉ๋๋ค.
- ์ฃผ์ ์ ์ง์คํฉ๋๋ค. ์ด์์ ๋ํ ๋ต๋ณ์ ํด๋น ์ด์์ ๊ด๋ จ๋ ๋ด์ฉ์๋ง ์ง์คํด์ผ ํฉ๋๋ค.
- ์์ ์ ์ฃผ์ฅ์ ์ฆ๋ช ํ๊ฑฐ๋ ์ฅ๋ คํ๋ ์ฝ๋, ๋ ผ๋ฌธ ๋๋ ๊ธฐํ ์ถ์ฒ๋ ๋งํฌ๋ฅผ ์ ๊ณตํ์ธ์.
- ์ฝ๋๋ก ๋ต๋ณํฉ๋๋ค. ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ์ด ์ด์์ ๋ํ ๋ต๋ณ์ด๊ฑฐ๋ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค๋ฉด, ์์ ํ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ์ ๊ณตํด์ฃผ์ธ์.
๋ํ, ๋ง์ ์ด์๋ค์ ๋จ์ํ ์ฃผ์ ์ ๋ฌด๊ดํ๊ฑฐ๋ ๋ค๋ฅธ ์ด์์ ์ค๋ณต์ด๊ฑฐ๋ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ์ด์๋ค์ ๋ํ ๋ต๋ณ์ ์ ๊ณตํ๊ณ , ์ด์ ์์ฑ์์๊ฒ ๋ ์ ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ์ค๋ณต๋ ์ด์์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ํฌ๋ผ ์ด๋ Discord๋ก ๋ฆฌ๋๋ ์ ํ๋ ๊ฒ์ ๋ฉ์ธํ ์ด๋์๊ฒ ํฐ ๋์์ด ๋ฉ๋๋ค.
์ด์๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฒ๊ทธ ๋ณด๊ณ ์์ด๊ณ ์์ค ์ฝ๋์์ ์์ ์ด ํ์ํ๋ค๊ณ ํ์ธํ ๊ฒฝ์ฐ, ๋ค์ ์น์ ์ ์ดํด๋ณด์ธ์.
๋ค์ ๋ชจ๋ ๊ธฐ์ฌ์ ๋ํด์๋ PR์ ์ด์ฌ์ผ ํฉ๋๋ค. Pull Request ์ด๊ธฐ ์น์ ์์ ์์ธํ ์ค๋ช ๋์ด ์์ต๋๋ค.
4. "Good first issue" ๊ณ ์น๊ธฐ 4-fixing-a-good-first-issue
Good first issues๋ Good first issue ๋ผ๋ฒจ๋ก ํ์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ์ด์๋ ์ด๋ฏธ ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ ์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์ค๋ช ํ๊ณ ์์ด์ ์์ ํ๊ธฐ ์ฝ์ต๋๋ค. ๋ง์ฝ ์ด์๊ฐ ์์ง ๋ซํ์ง ์์๊ณ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ณ ์ถ๋ค๋ฉด, "์ด ์ด์๋ฅผ ํด๊ฒฐํด๋ณด๊ณ ์ถ์ต๋๋ค."๋ผ๋ ๋ฉ์์ง๋ฅผ ๋จ๊ธฐ๋ฉด ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค:
- a.) ์ด์ ์ค๋ช ์ ์ด๋ฏธ ์์ ์ฌํญ์ ์ ์ํ๋ ๊ฒฝ์ฐ, ํด๊ฒฐ์ฑ ์ด ์ดํด๋๊ณ ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ธ๋ค๋ฉด, PR ๋๋ ๋๋ํํธ PR์ ์ด์ด์ ์์ ํ ์ ์์ต๋๋ค.
- b.) ์ด์ ์ค๋ช ์ ์์ ์ฌํญ์ด ์ ์๋์ด ์์ง ์์ ๊ฒฝ์ฐ, ์ ์ํ ์์ ์ฌํญ์ด ๊ฐ๋ฅํ ์ง ๋ฌผ์ด๋ณผ ์ ์๊ณ , Diffusers ํ์ ๋๊ตฐ๊ฐ๊ฐ ๊ณง ๋ต๋ณํด์ค ๊ฒ์ ๋๋ค. ๋ง์ฝ ์ด๋ป๊ฒ ์์ ํ ์ง ์ข์ ์์ด๋์ด๊ฐ ์๋ค๋ฉด, ์ง์ PR์ ์ด์ด๋ ๋ฉ๋๋ค.
- c.) ์ด๋ฏธ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ฆฐ PR์ด ์์ง๋ง, ์ด์๊ฐ ์์ง ๋ซํ์ง ์์์ต๋๋ค. PR์ด ๋ ์ด์ ์งํ๋์ง ์์๋ค๋ฉด, ์๋ก์ด PR์ ์ด๊ณ ์ด์ PR์ ๋งํฌ๋ฅผ ๊ฑธ๋ฉด ๋ฉ๋๋ค. PR์ ์ข ์ข ์๋ ๊ธฐ์ฌ์๊ฐ ๊ฐ์๊ธฐ ์๊ฐ์ ๋ด์ง ๋ชปํด ๋ ์ด์ ์งํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ ๋ ์ด์ ์งํ๋์ง ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ์คํ ์์ค์์ ์์ฃผ ๋ฐ์ํ๋ ์ผ์ด๋ฉฐ ๋งค์ฐ ์ ์์ ์ธ ์ํฉ์ ๋๋ค. ์ด ๊ฒฝ์ฐ, ์ปค๋ฎค๋ํฐ๋ ์๋ก ์๋ํ๊ณ ๊ธฐ์กด PR์ ์ง์์ ํ์ฉํด์ฃผ๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์ ๋๋ค. ์ด๋ฏธ PR์ด ์๊ณ ํ์ฑํ๋์ด ์๋ค๋ฉด, ์ ์์ ํด์ฃผ๊ฑฐ๋ PR์ ๊ฒํ ํ๊ฑฐ๋ PR์ ๊ธฐ์ฌํ ์ ์๋์ง ๋ฌผ์ด๋ณด๋ ๋ฑ ์์ฑ์๋ฅผ ๋์์ค ์ ์์ต๋๋ค.
5. ๋ฌธ์์ ๊ธฐ์ฌํ๊ธฐ 5-contribute-to-the-documentation
์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํญ์ ์ข์ ๋ฌธ์๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค! ๊ณต์ ๋ฌธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์ฒซ ๋ฒ์งธ ์ ์ ์ค ํ๋์ด๋ฉฐ, ๋ฐ๋ผ์ ๋ฌธ์์ ๊ธฐ์ฌํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ์น ์๋ ๊ธฐ์ฌ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํฉ๋๋ค:
- ๋ง์ถค๋ฒ์ด๋ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์์ ํฉ๋๋ค.
- ๊ณต์ ๋ฌธ์๊ฐ ์ด์ํ๊ฒ ํ์๋๊ฑฐ๋ ๋งํฌ๊ฐ ๊นจ์ง ๊ฒฝ์ฐ, ์ฌ๋ฐ๋ฅด๊ฒ ์์ ํ๋ ๋ฐ ์๊ฐ์ ๋ด์ฃผ์๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์ ๋๋ค.
- ๋ฌธ์์ ์ ๋ ฅ ๋๋ ์ถ๋ ฅ ํ ์์ ๋ชจ์์ด๋ ์ฐจ์์ ์์ ํฉ๋๋ค.
- ์ดํดํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๋ชป๋ ๋ฌธ์๋ฅผ ๋ช ํํ๊ฒ ํฉ๋๋ค.
- ์ค๋๋ ์ฝ๋ ์์ ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ฌธ์๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํฉ๋๋ค.
๊ณต์ Diffusers ๋ฌธ์ ํ์ด์ง์ ํ์๋ ๋ชจ๋ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์์ ์ผ๋ถ์ด๋ฉฐ, ํด๋น ๋ฌธ์ ์์ค์์ ์์ ํ ์ ์์ต๋๋ค.
๋ฌธ์์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก์ปฌ์์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ด ํ์ด์ง๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์.
6. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๊ธฐ 6-contribute-a-community-pipeline
Tip
์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ ๊ฐ์ด๋๋ฅผ ์ฝ์ด๋ณด์ธ์. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ด ์ ํ์ํ์ง ๊ถ๊ธํ๋ค๋ฉด GitHub ์ด์ #841๋ฅผ ํ์ธํด๋ณด์ธ์ (๊ธฐ๋ณธ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ diffusion ๋ชจ๋ธ์ด ์ถ๋ก ์ ์ฌ์ฉ๋ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ ์งํ ์ ์์ง๋ง ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ฐฉํดํ๊ณ ์ถ์ง ์์ต๋๋ค).
์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์ฐฝ์์ฑ๊ณผ ์์
์ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. [DiffusionPipeline]์ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ํ์ฌ custom_pipeline ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํจ์ผ๋ก์จ ๋๊ตฌ๋ ๋ก๋ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด ์น์
์์๋ UNet์ด ๋จ์ผ ์๋ฐฉํฅ ํจ์ค๋ง ์ํํ๊ณ ์ค์ผ์ค๋ฌ๋ฅผ ํ ๋ฒ ํธ์ถํ๋ ๊ฐ๋จํ ํ์ดํ๋ผ์ธ (๋จ๊ณ๋ณ ํ์ดํ๋ผ์ธ)์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค.
-
์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ํ one_step_unet.py ํ์ผ์ ์์ฑํ์ธ์. ์ด ํ์ผ์ ์ฌ์ฉ์์ ์ํด ์ค์น๋๋ ํจํค์ง๋ฅผ ํฌํจํ ์ ์์ง๋ง, [
DiffusionPipeline]์์ ๋ชจ๋ธ ๊ฐ์ค์น์ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ๋ก๋ํ๊ธฐ ์ํด ํ๋์ ํ์ดํ๋ผ์ธ ํด๋์ค๋ง ์์ด์ผ ํฉ๋๋ค.__init__ํจ์์ UNet๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํ์ธ์.๋ํ [
~DiffusionPipeline.save_pretrained]๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ๊ณผ ๊ทธ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ฅํ ์ ์๋๋กregister_modulesํจ์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
from diffusers import DiffusionPipeline
import torch
class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
def __init__(self, unet, scheduler):
super().__init__()
self.register_modules(unet=unet, scheduler=scheduler)
- forward ํจ์ค์์ (
__call__๋ก ์ ์ํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค), ์ํ๋ ์ด๋ค ๊ธฐ๋ฅ์ด๋ ์ถ๊ฐํ ์ ์์ต๋๋ค. "one-step" ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ, ๋ฌด์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณtimestep=1๋ก ์ค์ ํ์ฌ UNet๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ํ ๋ฒ ํธ์ถํฉ๋๋ค.
from diffusers import DiffusionPipeline
import torch
class UnetSchedulerOneForwardPipeline(DiffusionPipeline):
def __init__(self, unet, scheduler):
super().__init__()
self.register_modules(unet=unet, scheduler=scheduler)
def __call__(self):
image = torch.randn(
(1, self.unet.config.in_channels, self.unet.config.sample_size, self.unet.config.sample_size),
)
timestep = 1
model_output = self.unet(image, timestep).sample
scheduler_output = self.scheduler.step(model_output, timestep, image).prev_sample
return scheduler_output
์ด์ UNet๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ์ ๋ฌํ์ฌ ํ์ดํ๋ผ์ธ์ ์คํํ๊ฑฐ๋, ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
from diffusers import DDPMScheduler, UNet2DModel
scheduler = DDPMScheduler()
unet = UNet2DModel()
pipeline = UnetSchedulerOneForwardPipeline(unet=unet, scheduler=scheduler)
output = pipeline()
# load pretrained weights
pipeline = UnetSchedulerOneForwardPipeline.from_pretrained("google/ddpm-cifar10-32", use_safetensors=True)
output = pipeline()
ํ์ดํ๋ผ์ธ์ GitHub ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ ๋๋ Hub ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ผ๋ก ๊ณต์ ํ ์ ์์ต๋๋ค.
GitHub ํ์ดํ๋ผ์ธ์ ๊ณต์ ํ๋ ค๋ฉด Diffusers ์ ์ฅ์์์ Pull Request๋ฅผ ์ด๊ณ one_step_unet.py ํ์ผ์ examples/community ํ์ ํด๋์ ์ถ๊ฐํ์ธ์.
Hub ํ์ดํ๋ผ์ธ์ ๊ณต์ ํ๋ ค๋ฉด, ํ๋ธ์ ๋ชจ๋ธ ์ ์ฅ์๋ฅผ ์์ฑํ๊ณ one_step_unet.py ํ์ผ์ ์ ๋ก๋ํ์ธ์.
7. ํ๋ จ ์์ ์ ๊ธฐ์ฌํ๊ธฐ 7-contribute-to-training-examples
Diffusers ์์ ๋ examples ํด๋์ ์๋ ํ๋ จ ์คํฌ๋ฆฝํธ์ ๋ชจ์์ ๋๋ค.
๋ ๊ฐ์ง ์ ํ์ ํ๋ จ ์์ ๋ฅผ ์ง์ํฉ๋๋ค:
- ๊ณต์ ํ๋ จ ์์
- ์ฐ๊ตฌ์ฉ ํ๋ จ ์์
์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ examples/research_projects์ ์์นํ๋ฉฐ, ๊ณต์ ํ๋ จ ์์ ๋ research_projects ๋ฐ community ํด๋๋ฅผ ์ ์ธํ examples์ ๋ชจ๋ ํด๋๋ฅผ ํฌํจํฉ๋๋ค.
๊ณต์ ํ๋ จ ์์ ๋ Diffusers์ ํต์ฌ ๋ฉ์ธํ
์ด๋๊ฐ ์ ์ง ๊ด๋ฆฌํ๋ฉฐ, ์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ ์ปค๋ฎค๋ํฐ๊ฐ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
์ด๋ ๊ณต์ ํ์ดํ๋ผ์ธ vs ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ํ 6. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ ๊ธฐ์ฌํ๊ธฐ์์ ์ ์ํ ์ด์ ์ ๋์ผํฉ๋๋ค: ํต์ฌ ๋ฉ์ธํ
์ด๋๊ฐ diffusion ๋ชจ๋ธ์ ๋ชจ๋ ๊ฐ๋ฅํ ํ๋ จ ๋ฐฉ๋ฒ์ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค.
Diffusers ํต์ฌ ๋ฉ์ธํ
์ด๋์ ์ปค๋ฎค๋ํฐ๊ฐ ํน์ ํ๋ จ ํจ๋ฌ๋ค์์ ๋๋ฌด ์คํ์ ์ด๊ฑฐ๋ ์ถฉ๋ถํ ๋์ค์ ์ด์ง ์๋ค๊ณ ํ๋จํ๋ค๋ฉด, ํด๋น ํ๋ จ ์ฝ๋๋ research_projects ํด๋์ ๋ฃ๊ณ ์์ฑ์์ ์ํด ๊ด๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
๊ณต์ ํ๋ จ ๋ฐ ์ฐ๊ตฌ ์์ ๋ ํ๋ ์ด์์ ํ๋ จ ์คํฌ๋ฆฝํธ, requirements.txt ํ์ผ ๋ฐ README.md ํ์ผ์ ํฌํจํ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ๋ จ ์์ ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค:
git clone https://github.com/huggingface/diffusers
๊ทธ๋ฆฌ๊ณ ํ๋ จ์ ํ์ํ ๋ชจ๋ ์ถ๊ฐ์ ์ธ ์์กด์ฑ๋ ์ค์นํด์ผ ํฉ๋๋ค:
pip install -r /examples/<your-example-folder>/requirements.txt
๋ฐ๋ผ์ ์์ ๋ฅผ ์ถ๊ฐํ ๋, requirements.txt ํ์ผ์ ํ๋ จ ์์ ์ ํ์ํ ๋ชจ๋ pip ์ข
์์ฑ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ค์น๋ ๋ชจ๋ ์ข
์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์์ ์ ํ๋ จ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, DreamBooth requirements.txt ํ์ผ์ ์ฐธ์กฐํ์ธ์.
Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ จ ์์ ๋ ๋ค์ ์ฒ ํ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค:
- ์์ ๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ฝ๋๋ ํ๋์ Python ํ์ผ์ ์์ด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์๋ ๋ช
๋ น ์ค์์
python <your-example>.py --args์ ๊ฐ์ด ์์ ๋ฅผ ์คํํ ์ ์์ด์ผ ํฉ๋๋ค. - ์์ ๋ ๊ฐ๋จํ๊ฒ ์ ์ง๋์ด์ผ ํ๋ฉฐ, Diffusers๋ฅผ ์ฌ์ฉํ ํ๋ จ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์๋ก ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค. ์์ ์คํฌ๋ฆฝํธ์ ๋ชฉ์ ์ ์ต์ฒจ๋จ diffusion ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ๋๋ฌด ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์ถ๊ฐํ์ง ์๊ณ ์ด๋ฏธ ์๋ ค์ง ํ๋ จ ๋ฐฉ๋ฒ์ ์ฌํํ๋ ๊ฒ์ ๋๋ค. ์ด ์ ์ ๋ถ์ฐ๋ฌผ๋ก์, ์์ ๋ ์ข์ ๊ต์ก ์๋ฃ๋ก์จ์ ์ญํ ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํฉ๋๋ค.
์์ ์ ๊ธฐ์ฌํ๊ธฐ ์ํด์๋, ์ด๋ฏธ ์กด์ฌํ๋ ์์ ์ธ dreambooth์ ๊ฐ์ ์์ ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ด๋ป๊ฒ ๋ณด์ฌ์ผ ํ๋์ง์ ๋ํ ์์ด๋์ด๋ฅผ ์ป๋ ๊ฒ์ด ๋งค์ฐ ๊ถ์ฅ๋ฉ๋๋ค.
Diffusers์ ๊ธด๋ฐํ๊ฒ ํตํฉ๋์ด ์๊ธฐ ๋๋ฌธ์, ๊ธฐ์ฌ์๋ค์ด Accelerate ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
์์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ, ๋ฐ๋์ ์์ ๋ฅผ ์ ํํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ํฌ๊ด์ ์ธ README.md๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด README์๋ ๋ค์์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค:
- ์ฌ๊ธฐ์ ํ์๋ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๋ช ๋ น์ด.
- ์ฌ๊ธฐ์ ํ์๋ ํ๋ จ ๊ฒฐ๊ณผ (๋ก๊ทธ, ๋ชจ๋ธ ๋ฑ)์ ๋ํ ๋งํฌ๋ก ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ ์ ์๋ ๋ด์ฉ์ ๋ณด์ฌ์ค๋๋ค.
- ๋น๊ณต์/์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ๋ฐ๋์ git ํธ๋ค์ ํฌํจํ์ฌ ์ด ํ๋ จ ์์ ๋ฅผ ์ ์ง ๊ด๋ฆฌํ ๊ฒ์์ ๋ช ์ํ๋ ๋ฌธ์ฅ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ํ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๋ง์ฝ ๊ณต์ ํ๋ จ ์์ ์ ๊ธฐ์ฌํ๋ ๊ฒฝ์ฐ, examples/test_examples.py์ ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ํ์ธํด์ฃผ์ธ์. ๋น๊ณต์ ํ๋ จ ์์ ์๋ ์ด ์์ ์ด ํ์ํ์ง ์์ต๋๋ค.
8. "Good second issue" ๊ณ ์น๊ธฐ 8-fixing-a-good-second-issue
"Good second issue"๋ Good second issue ๋ผ๋ฒจ๋ก ํ์๋ฉ๋๋ค. Good second issue๋ Good first issues๋ณด๋ค ํด๊ฒฐํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค. ์ด์ ์ค๋ช ์ ์ผ๋ฐ์ ์ผ๋ก ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ๊ด์ฌ ์๋ ๊ธฐ์ฌ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฝค ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค. Good second issue๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PR์ ์ด๊ณ PR์ ์ด์์ ๋งํฌํ์ธ์. ์ด๋ฏธ ํด๋น ์ด์์ ๋ํ PR์ด ์ด๋ ค์์ง๋ง ๋ณํฉ๋์ง ์์ ๊ฒฝ์ฐ, ์ ๋ณํฉ๋์ง ์์๋์ง ์ดํดํ๊ธฐ ์ํด ์ดํด๋ณด๊ณ ๊ฐ์ ๋ PR์ ์ด์ด๋ณด์ธ์. Good second issue๋ ์ผ๋ฐ์ ์ผ๋ก Good first issue ์ด์๋ณด๋ค ๋ณํฉํ๊ธฐ๊ฐ ๋ ์ด๋ ค์ฐ๋ฏ๋ก, ํต์ฌ ๋ฉ์ธํ ์ด๋์๊ฒ ๋์์ ์์ฒญํ๋ ๊ฒ์ด ์ข์ต๋๋ค. PR์ด ๊ฑฐ์ ์๋ฃ๋ ๊ฒฝ์ฐ, ํต์ฌ ๋ฉ์ธํ ์ด๋๋ PR์ ์ฐธ์ฌํ์ฌ ์ปค๋ฐํ๊ณ ๋ณํฉ์ ์งํํ ์ ์์ต๋๋ค.
9. ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ์ถ๊ฐํ๊ธฐ 9-adding-pipelines-models-schedulers
ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ๋ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์ด๋ค์ ์ต์ฒจ๋จ diffusion ๊ธฐ์ ์ ์ฝ๊ฒ ์ ๊ทผํ๋๋ก ํ๋ฉฐ, ๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ ฅํ ์์ฑํ AI ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค.
์๋ก์ด ๋ชจ๋ธ, ํ์ดํ๋ผ์ธ ๋๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๋ก์ด ๊ฐ๋ ฅํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ฑํํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ฒด ์์ฑํ AI ์ํ๊ณ์ ๋งค์ฐ ์ค์ํ ๊ฐ์น๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
Diffusers์๋ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์์ ๋ํ ์ฌ๋ฌ ๊ฐ๋ฐ ์์ฒญ์ด ์์ต๋๋ค. ํน์ ๊ตฌ์ฑ ์์๋ฅผ ์์ง ์ ํํ ์ด๋ค ๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ์์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ, ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ธ์:
์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์, ์ฒ ํ ๊ฐ์ด๋๋ฅผ ์ฝ์ด๋ณด๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์ ์ค ์ด๋ ๊ฒ์ ์ถ๊ฐํ๋ , ๋์์ธ ์ฒ ํ๊ณผ ๊ด๋ จ๋ API ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฐ๋ฆฌ์ ๋์์ธ ์ฒ ํ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ๋ณํฉํ ์ ์์ต๋๋ค. ๋์์ธ ์ ํ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋์ํ์ง ์๋ ๊ฒฝ์ฐ, ํผ๋๋ฐฑ ์ด์๋ฅผ ์ด์ด ํด๋น ๋์์ธ ํจํด/์ ํ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง, ๋์์ธ ์ฒ ํ์ ์ ๋ฐ์ดํธํด์ผ ํ๋์ง์ ๋ํด ๋ ผ์ํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์ ์ผ๊ด์ฑ์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค.
PR์ ์๋ณธ ์ฝ๋๋ฒ ์ด์ค/๋ ผ๋ฌธ ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ๋ฅํ๋ฉด PR์์ ์๋ ์์ฑ์์๊ฒ ์ง์ ์๋ฆผ์ ๋ณด๋ด์ด ์งํ ์ํฉ์ ๋ฐ๋ผ๊ฐ ์ ์๋๋ก ํด์ฃผ์ธ์.
PR์์ ๋งํ ๊ฒฝ์ฐ๋ ๋์์ด ํ์ํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ๋ ๋์์ ์์ฒญํ๋ ๋ฉ์์ง๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ ์ฃผ์ ํ์ง ๋ง์ธ์.
Copied from mechanism copied-from-mechanism
# Copied from mechanism ์ ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ ์ฝ๋๋ฅผ ์ถ๊ฐํ ๋ ์ดํดํด์ผ ํ ๋
ํนํ๊ณ ์ค์ํ ๊ธฐ๋ฅ์
๋๋ค. ์ด๊ฒ์ Diffusers ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์์ ๋ณผ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด์์
๋๋ค. # Copied from mechanism ์ผ๋ก ํ์๋ ์ฝ๋๋ ๋ณต์ฌํ ์ฝ๋์ ์ ํํ ๋์ผํ๋๋ก ๊ฐ์ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด make fix-copies๋ฅผ ์คํํ ๋๋ง๋ค ์ฌ๋ฌ ํ์ผ์ ๊ฑธ์ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ์
๋ฐ์ดํธํ๊ณ ์ ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ์ฝ๋ ์์ ์์ [~diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]์ ์๋ ์ฝ๋์ด๋ฉฐ, AltDiffusionPipelineOutput์ # Copied from mechanism์ ์ฌ์ฉํ์ฌ ๋ณต์ฌํฉ๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ํด๋์ค ์ ๋์ฌ๋ฅผ Stable์์ Alt๋ก ๋ณ๊ฒฝํ ๊ฒ์
๋๋ค.
# Copied from diffusers.pipelines.stable_diffusion.pipeline_output.StableDiffusionPipelineOutput with Stable->Alt
class AltDiffusionPipelineOutput(BaseOutput):
"""
Output class for Alt Diffusion pipelines.
Args:
images (`List[PIL.Image.Image]` or `np.ndarray`)
List of denoised PIL images of length `batch_size` or NumPy array of shape `(batch_size, height, width,
num_channels)`.
nsfw_content_detected (`List[bool]`)
List indicating whether the corresponding generated image contains "not-safe-for-work" (nsfw) content or
`None` if safety checking could not be performed.
"""
๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด Don't Repeat Yourself* ๋ธ๋ก๊ทธ ํฌ์คํธ์ ์ด ์น์
์ ์ฝ์ด๋ณด์ธ์.
์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ how-to-write-a-good-issue
์ด์๋ฅผ ์ ์์ฑํ ์๋ก ๋น ๋ฅด๊ฒ ํด๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
- ์ด์์ ์ ์ ํ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋์ง ํ์ธํ์ธ์. ์ ์ด์๋ฅผ ์ด ๋ ์ฌ๋ฐ๋ฅธ ํ ํ๋ฆฟ์ ์ ํํด์ผ ํฉ๋๋ค. ๋ฒ๊ทธ ๋ณด๊ณ ์, ๊ธฐ๋ฅ ์์ฒญ, API ๋์์ธ์ ๋ํ ํผ๋๋ฐฑ, ์๋ก์ด ๋ชจ๋ธ/ํ์ดํ๋ผ์ธ/์ค์ผ์ค๋ฌ ์ถ๊ฐ, ํฌ๋ผ, ๋๋ ๋น ์ด์ ์ค์์ ์ ํํ์ธ์. ์ด์๋ฅผ ์ด ๋ ์ฌ๋ฐ๋ฅธ ํ ํ๋ฆฟ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋ช ํ์ฑ: ์ด์์ ์ ํฉํ ์ ๋ชฉ์ ์ง์ ํ์ธ์. ์ด์ ์ค๋ช ์ ๊ฐ๋ฅํ ๊ฐ๋จํ๊ฒ ์์ฑํ์ธ์. ์ด์๋ฅผ ์ดํดํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ๋ช ํํ๊ฒ ์์ฑํ์ธ์. ํ๋์ ์ด์์ ๋ํด ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํฌํจํ์ง ์๋๋ก ์ฃผ์ํ์ธ์. ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ๊ฐ๊ฐ์ ์ด์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ด์ด์ฃผ์ธ์. ๋ฒ๊ทธ์ธ ๊ฒฝ์ฐ, ์ด๋ค ๋ฒ๊ทธ์ธ์ง ๊ฐ๋ฅํ ํ ์ ํํ๊ฒ ์ค๋ช ํด์ผ ํฉ๋๋ค. "diffusers์์ ์ค๋ฅ"์ ๊ฐ์ด ๊ฐ๋จํ ์์ฑํ์ง ๋ง์ธ์.
- ์ฌํ ๊ฐ๋ฅ์ฑ: ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ด ์์ผ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ์ ์ง ๊ด๋ฆฌ์๋ ๊ทธ ๋ฒ๊ทธ๋ฅผ ์ฌํํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด์์ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ํฌํจํด์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ Python ์ธํฐํ๋ฆฌํฐ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋ ํํ์ฌ์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ด ์๋ํด์ผ ํฉ๋๋ค. ์ฆ, ๋๋ฝ๋ import๋ ์ด๋ฏธ์ง์ ๋ํ ๋งํฌ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด์์๋ ์ค๋ฅ ๋ฉ์์ง์ ์ ํํ ๋์ผํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌํํ๊ธฐ ์ํด ์์ ํ์ง ์๊ณ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋ ์ฝ๋ ์กฐ๊ฐ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ด์์ ์ฌ์ฉ์์ ๋ก์ปฌ ๋ชจ๋ธ ๊ฐ์ค์น๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ ์๊ฐ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ ๊ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ, ๋๋ฏธ ๋ชจ๋ธ์ด๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํด๋ณด์ธ์.
- ๊ฐ๊ฒฐ์ฑ: ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ์ฌ ๋ ์๊ฐ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์๋๋ก ๋์์ฃผ์ธ์. ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ์ฝ๋๋ ์ ๋ณด๋ ๋ชจ๋ ์ ๊ฑฐํด์ฃผ์ธ์. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ฝ๋ ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์ธ์. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ํ์๋ ์์ ํ๋ฆ ์ ์ฒด๋ฅผ ๋ฌธ์ ์ ๋์ง๋ ๊ฒ์ด ์๋๋ผ, ์๋ฌ๊ฐ ๋ฐ์ํ๋ ํ๋ จ ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ๋ฌธ์ ์ธ์ง ๋จผ์ ์ดํดํ๊ณ ๋ช ์ค๋ก ์ฌํํด๋ณด์ธ์. ์ ์ฒด ๋ฐ์ดํฐ์ ๋์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
- ๋งํฌ ์ถ๊ฐํ๊ธฐ. ํน์ ํ ์ด๋ฆ, ๋ฉ์๋, ๋๋ ๋ชจ๋ธ์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ๋ ์๊ฐ ๋ ์ ์ดํดํ ์ ์๋๋ก ๋งํฌ๋ฅผ ์ ๊ณตํด์ฃผ์ธ์. ํน์ PR์ด๋ ์ด์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ํด๋น ์ด์์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ์ธ์. ๋ ์๊ฐ ๋ฌด์์ ๋งํ๋์ง ์๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ง ๋ง์ธ์. ์ด์์ ๋งํฌ๋ฅผ ์ถ๊ฐํ ์๋ก ์ข์ต๋๋ค.
- ํฌ๋งทํ . ์ฝ๋๋ฅผ ํ์ด์ฌ ์ฝ๋ ๊ตฌ๋ฌธ์ผ๋ก, ์๋ฌ ๋ฉ์์ง๋ฅผ ์ผ๋ฐ ์ฝ๋ ๊ตฌ๋ฌธ์ผ๋ก ํ์ํํ์ฌ ์ด์๋ฅผ ๊น๋ํ๊ฒ ์์ฑํ์ธ์. ์์ธํ ๋ด์ฉ์ GitHub ๊ณต์ ํฌ๋งทํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ฌ๋ฌ๋ถ์ ์ด์๋ฅผ ๋จ์ํ ํด๊ฒฐํด์ผ ํ ํฐ์ผ์ผ๋ก ์๊ฐํ์ง ๋ง๊ณ , ์ ์์ฑ๋ ๋ฐฑ๊ณผ์ฌ์ ํญ๋ชฉ์ผ๋ก ์๊ฐํด๋ณด์ธ์. ์ถ๊ฐ๋ ๋ชจ๋ ์ด์๋ ๊ณต๊ฐ์ ์ผ๋ก ์ด์ฉ ๊ฐ๋ฅํ ์ง์์ ๋ํ ๊ธฐ์ฌ์ ๋๋ค. ์ ์์ฑ๋ ์ด์๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋ฉ์ธํ ์ด๋๊ฐ ์ฌ๋ฌ๋ถ์ ์ด์๋ฅผ ๋ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๊ฒ ํ ๋ฟ๋ง ์๋๋ผ, ์ ์ฒด ์ปค๋ฎค๋ํฐ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ์ธก๋ฉด์ ๋ ์ ์ดํดํ ์ ์๋๋ก ๋์์ ์ฃผ๊ฒ ๋ฉ๋๋ค.
์ข์ PR ์์ฑ ๋ฐฉ๋ฒ how-to-write-a-good-pr
- ์นด๋ฉ๋ ์จ์ด ๋์ธ์. ๊ธฐ์กด์ ๋์์ธ ํจํด๊ณผ ๊ตฌ๋ฌธ์ ์ดํดํ๊ณ , ์ฌ๋ฌ๋ถ์ด ์ถ๊ฐํ๋ ์ฝ๋๊ฐ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ์์ฐ์ค๋ฝ๊ฒ ์ด์ฐ๋ฌ์ง๋๋ก ํด์ผ ํฉ๋๋ค. ๊ธฐ์กด ๋์์ธ ํจํด์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํฌ๊ฒ ๋ค๋ฅธ Pull Request๋ค์ ๋ณํฉ๋์ง ์์ต๋๋ค.
- ๋ ์ด์ ์ฒ๋ผ ์ง์คํ์ธ์. Pull Request๋ ํ๋์ ๋ฌธ์ , ์ค์ง ํ๋์ ๋ฌธ์ ๋ง ํด๊ฒฐํด์ผ ํฉ๋๋ค. "์ด์ ์ถ๊ฐํ๋ ๊น์ ๋ค๋ฅธ ๋ฌธ์ ๋ ๊ณ ์น์"๋ ํจ์ ์ ๋น ์ง์ง ์๋๋ก ์ฃผ์ํ์ธ์. ์ฌ๋ฌ ๊ฐ์ ๊ด๋ จ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํ ๋ฒ์ ํด๊ฒฐํ๋ Pull Request๋ค์ ๊ฒํ ํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค.
- ๋์์ด ๋๋ ๊ฒฝ์ฐ, ์ถ๊ฐํ ๋ด์ฉ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์์ ์ฝ๋ ์กฐ๊ฐ์ ์ถ๊ฐํด๋ณด์ธ์.
- Pull Request์ ์ ๋ชฉ์ ๊ธฐ์ฌ ๋ด์ฉ์ ์์ฝํด์ผ ํฉ๋๋ค.
- Pull Request๊ฐ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ, Pull Request์ ์ค๋ช ์ ์ด์ ๋ฒํธ๋ฅผ ์ธ๊ธํ์ฌ ์ฐ๊ฒฐ๋๋๋ก ํด์ฃผ์ธ์ (์ด์๋ฅผ ์ฐธ์กฐํ๋ ์ฌ๋๋ค์ด ์์ ์ค์์ ์ ์ ์๋๋ก).
- ์งํ ์ค์ธ ์์
์ ๋ํ๋ด๋ ค๋ฉด ์ ๋ชฉ์
[WIP]๋ฅผ ์ ๋์ฌ๋ก ๋ถ์ฌ์ฃผ์ธ์. ์ด๋ ์ค๋ณต ์์ ์ ํผํ๊ณ , ๋ณํฉ ์ค๋น๊ฐ ๋ PR๊ณผ ๊ตฌ๋ถํ ์ ์๋๋ก ๋์์ด ๋ฉ๋๋ค. - ์ข์ ์ด์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ๋ ๋๋ก ํ ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ํ์์ ์ง์ ํด๋ณด์ธ์.
- ๊ธฐ์กด ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํ์ธ์
- ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ง ํ ์คํธ๋ฅผ ์ถ๊ฐํ์ธ์. ํ์ง ํ ์คํธ๊ฐ ์์ผ๋ฉด ๋ณํฉํ ์ ์์ต๋๋ค.
- ์๋ก์ด
@slowํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํต๊ณผํ๋์ง ํ์ธํ์ธ์.RUN_SLOW=1 python -m pytest tests/test_my_new_model.py. CircleCI๋ ๋๋ฆฐ ํ ์คํธ๋ฅผ ์คํํ์ง ์์ง๋ง, GitHub Actions๋ ๋งค์ผ ์คํํฉ๋๋ค!
- ๋ชจ๋ ๊ณต๊ฐ ๋ฉ์๋๋ ๋งํฌ๋ค์ด๊ณผ ์ ์๋ํ๋ ์ ๋ณด์ฑ docstring์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์์๋ก
pipeline_latent_diffusion.py๋ฅผ ์ฐธ์กฐํ์ธ์. - ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ฆฌํฌ์งํ ๋ฆฌ์ ํฐ ๋ถ๋ด์ ์ฃผ๋ ํ์ผ์ด ์ถ๊ฐ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ๊ธฐํ ํ
์คํธ๊ฐ ์๋ ํ์ผ์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ํ์ผ์ ๋ฐฐ์นํ๊ธฐ ์ํด hf.co ํธ์คํ
dataset์ธhf-internal-testing๋๋ huggingface/documentation-images๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ฐ์ ์ ๋๋ค. ์ธ๋ถ ๊ธฐ์ฌ์ธ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง๋ฅผ PR์ ์ถ๊ฐํ๊ณ Hugging Face ๊ตฌ์ฑ์์๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ด ๋ฐ์ดํฐ์ ์ผ๋ก ์ด๋ํ๋๋ก ์์ฒญํ์ธ์.
PR์ ์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ how-to-open-a-pr
์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์, ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ ๊ฐ์ ์์ ์ ํ๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ธฐ์กด์ PR์ด๋ ์ด์๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์คํ์ง ์์ ๊ฒฝ์ฐ, ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ํด ์ด์๋ฅผ ์ด์ด๋ณด๋ ๊ฒ์ด ํญ์ ์ข์ ์์ด๋์ด์ ๋๋ค.
๐งจ Diffusers์ ๊ธฐ์ฌํ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ธ git ์ฌ์ฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. git์ ๊ฐ์ฅ ์ฌ์ด ๋๊ตฌ๋ ์๋์ง๋ง, ๊ฐ์ฅ ํ๋ฅญํ ๋งค๋ด์ผ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์
ธ์์ git --help์ ์
๋ ฅํ๊ณ ์ฆ๊ธฐ์ธ์. ์ฑ
์ ์ ํธํ๋ ๊ฒฝ์ฐ, Pro Git์ ๋งค์ฐ ์ข์ ์ฐธ๊ณ ์๋ฃ์
๋๋ค.
๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ๊ธฐ์ฌ๋ฅผ ์์ํ์ธ์ (์ง์๋๋ Python ๋ฒ์ ):
-
์ ์ฅ์ ํ์ด์ง์์ 'Fork' ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ฅ์๋ฅผ ํฌํฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ์ฌ๋ณธ์ด GitHub ์ฌ์ฉ์ ๊ณ์ ์ ์์ฑ๋ฉ๋๋ค.
-
ํฌํฌํ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ๋์คํฌ์ ํด๋ก ํ๊ณ , ๊ธฐ๋ณธ ์ ์ฅ์๋ฅผ ์๊ฒฉ์ผ๋ก ์ถ๊ฐํ์ธ์:
$ git clone git@github.com:<your GitHub handle>/diffusers.git
$ cd diffusers
$ git remote add upstream https://github.com/huggingface/diffusers.git
- ๊ฐ๋ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๊ดํ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ์ธ์:
$ git checkout -b a-descriptive-name-for-my-changes
main ๋ธ๋์น ์์์ ์ ๋ ์์
ํ์ง ๋ง์ธ์.
- ๊ฐ์ ํ๊ฒฝ์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ์ธ์:
$ pip install -e ".[dev]"
๋ง์ฝ ์ ์ฅ์๋ฅผ ์ด๋ฏธ ํด๋ก ํ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด git pull์ ์คํํด์ผ ํ ์๋ ์์ต๋๋ค.
- ๊ธฐ๋ฅ์ ๋ธ๋์น์์ ๊ฐ๋ฐํ์ธ์.
๊ธฐ๋ฅ์ ์์ ํ๋ ๋์ ํ ์คํธ ์ค์ํธ๊ฐ ํต๊ณผ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ํ ์คํธ๋ฅผ ์คํํด์ผ ํฉ๋๋ค:
$ pytest tests/<TEST_TO_RUN>.py
ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ์ํด ํ์ํ ์์กด์ฑ๋ค์ ์ค์นํ์๋์ง ํ์ธํ์ธ์. ๋ค์์ ์ปค๋งจ๋๋ฅผ ํตํด์ ํ์ธํ ์ ์์ต๋๋ค:
$ pip install -e ".[test]"
๋ค์ ๋ช ๋ น์ด๋ก ์ ์ฒด ํ ์คํธ ๋ฌถ์ ์คํํ ์๋ ์์ง๋ง, Diffusers๊ฐ ๋ง์ด ์ฑ์ฅํ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋นํ ์๊ฐ ๋ด์ ์์ฑํ๊ธฐ ์ํด์๋ ๊ฐ๋ ฅํ ์ปดํจํฐ๊ฐ ํ์ํฉ๋๋ค. ๋ค์์ ํด๋น ๋ช ๋ น์ด์ ๋๋ค:
$ make test
๐งจ Diffusers๋ ์์ค ์ฝ๋๋ฅผ ์ผ๊ด๋๊ฒ ํฌ๋งทํ
ํ๊ธฐ ์ํด black๊ณผ isort๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ํ์๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ ์คํ์ผ ์์ ๋ฐ ์ฝ๋ ๊ฒ์ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค:
$ make style
๐งจ Diffusers ruff์ ๋ช๊ฐ์ ์ปค์คํ
์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋ฉ ์ค์๋ฅผ ํ์ธํฉ๋๋ค. ํ์ง ์ ์ด๋ CI์์ ์๋ํ์ง๋ง, ๋์ผํ ๊ฒ์ฌ๋ฅผ ๋ค์์ ํตํด์๋ ํ ์ ์์ต๋๋ค:
$ make quality
๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๋ง์กฑํ๋ค๋ฉด git add๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ํ์ผ์ ์ถ๊ฐํ๊ณ git commit์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๋ก์ปฌ์์ผ๋ก ์ ์ฅํ๋ค:
$ git add modified_file.py
$ git commit -m "A descriptive message about your changes."
์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์๋ณธ ์ ์ฅ์์ ๋๊ธฐํํ๋ ๊ฒ์ ์ข์ ์์ด๋์ด์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ ์ ์์ต๋๋ค:
$ git pull upstream main
๋ณ๊ฒฝ ์ฌํญ์ ๊ณ์ ์ ํธ์ํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์:
$ git push -u origin a-descriptive-name-for-my-changes
-
๋ง์กฑํ์ จ๋ค๋ฉด, GitHub์์ ํฌํฌํ ์นํ์ด์ง๋ก ์ด๋ํ์ฌ 'Pull request'๋ฅผ ํด๋ฆญํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ํ๋ก์ ํธ ๋ฉ์ธํ ์ด๋์๊ฒ ๊ฒํ ๋ฅผ ์์ฒญํฉ๋๋ค.
-
๋ฉ์ธํ ์ด๋๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์์ฒญํ๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค. ํต์ฌ ๊ธฐ์ฌ์๋ค์๊ฒ๋ ์ผ์ด๋๋ ์ผ์ ๋๋ค! ๋ฐ๋ผ์ ๋ณ๊ฒฝ ์ฌํญ์ Pull request์์ ๋ณผ ์ ์๋๋ก ๋ก์ปฌ ๋ธ๋์น์์ ์์ ํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํฌ์ ํธ์ํ๋ฉด ์๋์ผ๋ก Pull request์ ๋ํ๋ฉ๋๋ค.
ํ ์คํธ tests
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์๊ณผ ์ฌ๋ฌ ์์ ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ํ ์คํธ ๋ฌถ์์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ ์คํธ๋ tests ํด๋์์ ์ฐพ์ ์ ์์ต๋๋ค.
pytest์ pytest-xdist๋ฅผ ์ ํธํ๋ ์ด์ ๋ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํด pytest๋ก ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
$ python -m pytest -n auto --dist=loadfile -s -v ./tests/
์ฌ์ค, make test๋ ์ด๋ ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค!
์์ ์ค์ธ ๊ธฐ๋ฅ๋ง ํ ์คํธํ๊ธฐ ์ํด ๋ ์์ ํ ์คํธ ์ธํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฆฐ ํ
์คํธ๋ ๊ฑด๋๋๋๋ค. RUN_SLOW ํ๊ฒฝ ๋ณ์๋ฅผ yes๋ก ์ค์ ํ์ฌ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ๋ง์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ถฉ๋ถํ ๋์คํฌ ๊ณต๊ฐ๊ณผ ์ข์ ์ธํฐ๋ท ์ฐ๊ฒฐ ๋๋ ๋ง์ ์ธ๋ด์ฌ์ด ํ์ํฉ๋๋ค!
$ RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./tests/
unittest๋ ์์ ํ ์ง์๋ฉ๋๋ค. ๋ค์์ unittest๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์
๋๋ค:
$ python -m unittest discover -s tests -t . -v
$ python -m unittest discover -s examples -t examples -v
upstream(HuggingFace) main๊ณผ forked main ๋๊ธฐํํ๊ธฐ syncing-forked-main-with-upstream-huggingface-main
upstream ์ ์ฅ์์ ๋ถํ์ํ ์ฐธ์กฐ ๋ ธํธ๋ฅผ ์ถ๊ฐํ๊ณ ๊ด๋ จ ๊ฐ๋ฐ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒ์ ํผํ๊ธฐ ์ํด, forked ์ ์ฅ์์ main ๋ธ๋์น๋ฅผ ๋๊ธฐํํ ๋ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์:
- ๊ฐ๋ฅํ ๊ฒฝ์ฐ, forked ์ ์ฅ์์์ ๋ธ๋์น์ PR์ ์ฌ์ฉํ์ฌ upstream๊ณผ ๋๊ธฐํํ๋ ๊ฒ์ ํผํ์ธ์. ๋์ forked main์ผ๋ก ์ง์ ๋ณํฉํ์ธ์.
- PR์ด ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ, ๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ธ์:
$ git checkout -b your-branch-for-syncing
$ git pull --squash --no-commit upstream main
$ git commit -m '<your message without GitHub references>'
$ git push --set-upstream origin your-branch-for-syncing
์คํ์ผ ๊ฐ์ด๋ style-guide
Documentation string์ ๋ํด์๋, ๐งจ Diffusers๋ Google ์คํ์ผ์ ๋ฐ๋ฆ ๋๋ค.