|
<!--Copyright 2024 The HuggingFace Team. All rights reserved. |
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
|
the License. You may obtain a copy of the License at |
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
|
specific language governing permissions and limitations under the License. |
|
--> |
|
|
|
# Diffusers์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ ๐งจ |
|
|
|
์คํ ์์ค ์ปค๋ฎค๋ํฐ์์์ ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค! ๋๊ตฌ๋ ์ฐธ์ฌํ ์ ์์ผ๋ฉฐ, ์ฝ๋๋ฟ๋ง ์๋๋ผ ์ง๋ฌธ์ ๋ต๋ณํ๊ฑฐ๋ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๋ฑ ๋ชจ๋ ์ ํ์ ์ฐธ์ฌ๊ฐ ๊ฐ์น ์๊ณ ๊ฐ์ฌํ ์ฌ๊ฒจ์ง๋๋ค. ์ง๋ฌธ์ ๋ต๋ณํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์์ฃผ๋ฉฐ ์ํตํ๊ณ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ ๋ชจ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ํฐ ๋์์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๋๋ ค์ํ์ง ๋ง๊ณ ์ฐธ์ฌํด๋ณด์ธ์! |
|
|
|
๋๊ตฌ๋ ์ฐ๋ฆฌ์ ๊ณต๊ฐ Discord ์ฑ๋์์ ๐ ์ธ์ฌํ๋ฉฐ ์์ํ ์ ์๋๋ก ์ฅ๋ คํฉ๋๋ค. ์ฐ๋ฆฌ๋ diffusion ๋ชจ๋ธ์ ์ต์ ๋ํฅ์ ๋
ผ์ํ๊ณ ์ง๋ฌธ์ ํ๋ฉฐ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์๋ํ๊ณ ๊ธฐ์ฌ์ ๋ํด ์๋ก ๋์์ฃผ๊ฑฐ๋ ๊ทธ๋ฅ ์ด์ธ๋ฆฌ๊ธฐ ์ํด ๋ชจ์ด๋ ๊ณณ์
๋๋คโ. <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> |
|
|
|
์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๊ธฐ์ฌํ๋ ค๋ ๊ฒฝ์ฐ, ์ฐ๋ฆฌ๋ ๊ฐ๋ฐฉ์ ์ด๊ณ ํ์ํ๋ฉฐ ์น๊ทผํ ์ปค๋ฎค๋ํฐ์ ์ผ๋ถ๊ฐ ๋๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ์ [ํ๋ ๊ฐ๋ น](https://github.com/huggingface/diffusers/blob/main/CODE_OF_CONDUCT.md)์ ์ฝ๊ณ ์ํธ ์์ฉ ์ค์ ์ด๋ฅผ ์กด์คํ๋๋ก ์ฃผ์ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ํ ํ๋ก์ ํธ๋ฅผ ์๋ดํ๋ [์ค๋ฆฌ ์ง์นจ](https://huggingface.co/docs/diffusers/conceptual/ethical_guidelines)์ ์ต์ํด์ง๊ณ ๋์ผํ ํฌ๋ช
์ฑ๊ณผ ์ฑ
์์ฑ์ ์์น์ ์ค์ํด์ฃผ์๊ธฐ๋ฅผ ๋ถํ๋๋ฆฝ๋๋ค. |
|
|
|
์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ๋ก๋ถํฐ์ ํผ๋๋ฐฑ์ ๋งค์ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ฏ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ๊ฐ์น ์๋ ํผ๋๋ฐฑ์ด ์๋ค๊ณ ์๊ฐ๋๋ฉด ๋ง์ค์ด์ง ๋ง๊ณ ์๊ฒฌ์ ์ ์ํด์ฃผ์ธ์ - ๋ชจ๋ ๋ฉ์์ง, ๋๊ธ, ์ด์, ํ ๋ฆฌํ์คํธ(PR)๋ ์ฝํ๊ณ ๊ณ ๋ ค๋ฉ๋๋ค. |
|
|
|
## ๊ฐ์ |
|
|
|
์ด์์ ์๋ ์ง๋ฌธ์ ๋ต๋ณํ๋ ๊ฒ์์๋ถํฐ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ก์ด diffusion ๋ชจ๋ธ์ ์ถ๊ฐํ๋ ๊ฒ๊น์ง ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค. |
|
|
|
์ด์ด์ง๋ ๋ถ๋ถ์์ ์ฐ๋ฆฌ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ๊ธฐ์ฌ์ ๋ํ ๊ฐ์๋ฅผ ๋์ด๋์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค. ๋ชจ๋ ๊ธฐ์ฌ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ๊ฐ์น๊ฐ ์์ต๋๋ค. |
|
|
|
1. [Diffusers ํ ๋ก ํฌ๋ผ](https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers)์ด๋ [Discord](https://discord.gg/G7tWnz98XR)์์ ์ง๋ฌธ์ ๋๋ตํ๊ฑฐ๋ ์ง๋ฌธ์ ํ ์ ์์ต๋๋ค. |
|
2. [GitHub Issues ํญ](https://github.com/huggingface/diffusers/issues/new/choose)์์ ์๋ก์ด ์ด์๋ฅผ ์ด ์ ์์ต๋๋ค. |
|
3. [GitHub Issues ํญ](https://github.com/huggingface/diffusers/issues)์์ ์ด์์ ๋๋ตํ ์ ์์ต๋๋ค. |
|
4. "Good first issue" ๋ผ๋ฒจ์ด ์ง์ ๋ ๊ฐ๋จํ ์ด์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)๋ฅผ ์ฐธ์กฐํ์ธ์. |
|
5. [๋ฌธ์](https://github.com/huggingface/diffusers/tree/main/docs/source)์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. |
|
6. [Community Pipeline](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3Acommunity-examples)์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. |
|
7. [์์ ](https://github.com/huggingface/diffusers/tree/main/examples)์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. |
|
8. "Good second issue" ๋ผ๋ฒจ์ด ์ง์ ๋ ์ด๋ ค์ด ์ด์๋ฅผ ์์ ํ ์ ์์ต๋๋ค. [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22)๋ฅผ ์ฐธ์กฐํ์ธ์. |
|
9. ์๋ก์ด ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ["์๋ก์ด ํ์ดํ๋ผ์ธ/๋ชจ๋ธ"](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22) ๋ฐ ["์๋ก์ด ์ค์ผ์ค๋ฌ"](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22) ์ด์๋ฅผ ์ฐธ์กฐํ์ธ์. ์ด ๊ธฐ์ฌ์ ๋ํด์๋ [๋์์ธ ์ฒ ํ](https://github.com/huggingface/diffusers/blob/main/PHILOSOPHY.md)์ ํ์ธํด์ฃผ์ธ์. |
|
|
|
์์ ๋งํ ๋๋ก, **๋ชจ๋ ๊ธฐ์ฌ๋ ์ปค๋ฎค๋ํฐ์๊ฒ ๊ฐ์น๊ฐ ์์ต๋๋ค**. ์ด์ด์ง๋ ๋ถ๋ถ์์ ๊ฐ ๊ธฐ์ฌ์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. |
|
|
|
4๋ถํฐ 9๊น์ง์ ๋ชจ๋ ๊ธฐ์ฌ์๋ PR์ ์ด์ด์ผ ํฉ๋๋ค. [PR์ ์ด๊ธฐ](#how-to-open-a-pr)์์ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค. |
|
|
|
### 1. Diffusers ํ ๋ก ํฌ๋ผ์ด๋ Diffusers Discord์์ ์ง๋ฌธํ๊ณ ๋ต๋ณํ๊ธฐ |
|
|
|
Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ๋ชจ๋ ์ง๋ฌธ์ด๋ ์๊ฒฌ์ [ํ ๋ก ํฌ๋ผ](https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63)์ด๋ [Discord](https://discord.gg/G7tWnz98XR)์์ ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ง๋ฌธ๊ณผ ์๊ฒฌ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค(ํ์ง๋ง ์ด์ ๊ตญํ๋์ง๋ ์์ต๋๋ค): |
|
- ์ง์์ ๊ณต์ ํ๊ธฐ ์ํด์ ํ๋ จ ๋๋ ์ถ๋ก ์คํ์ ๋ํ ๊ฒฐ๊ณผ ๋ณด๊ณ |
|
- ๊ฐ์ธ ํ๋ก์ ํธ ์๊ฐ |
|
- ๋น๊ณต์ ํ๋ จ ์์ ์ ๋ํ ์ง๋ฌธ |
|
- ํ๋ก์ ํธ ์ ์ |
|
- ์ผ๋ฐ์ ์ธ ํผ๋๋ฐฑ |
|
- ๋
ผ๋ฌธ ์์ฝ |
|
- Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ์ธ ํ๋ก์ ํธ์ ๋ํ ๋์ ์์ฒญ |
|
- ์ผ๋ฐ์ ์ธ ์ง๋ฌธ |
|
- Diffusion ๋ชจ๋ธ์ ๋ํ ์ค๋ฆฌ์ ์ง๋ฌธ |
|
- ... |
|
|
|
ํฌ๋ผ์ด๋ Discord์์ ์ง๋ฌธ์ ํ๋ฉด ์ปค๋ฎค๋ํฐ๊ฐ ์ง์์ ๊ณต๊ฐ์ ์ผ๋ก ๊ณต์ ํ๋๋ก ์ฅ๋ ค๋๋ฉฐ, ๋ฏธ๋์ ๋์ผํ ์ง๋ฌธ์ ๊ฐ์ง ์ด๋ณด์์๊ฒ๋ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ถ๊ธํ ์ง๋ฌธ์ ์ธ์ ๋ ์ง ํ์๊ธฐ ๋ฐ๋๋๋ค. |
|
๋ํ, ์ด๋ฌํ ์ง๋ฌธ์ ๋ต๋ณํ๋ ๊ฒ์ ์ปค๋ฎค๋ํฐ์๊ฒ ๋งค์ฐ ํฐ ๋์์ด ๋ฉ๋๋ค. ์๋ํ๋ฉด ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋๊ฐ ํ์ตํ ์ ์๋ ๊ณต๊ฐ์ ์ธ ์ง์์ ๋ฌธ์ํํ๊ธฐ ๋๋ฌธ์
๋๋ค. |
|
|
|
**์ฃผ์**ํ์ญ์์ค. ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ํฌ์ํ๋ ๋
ธ๋ ฅ์ด ๋ง์์๋ก ๊ณต๊ฐ์ ์ผ๋ก ๋ฌธ์ํ๋ ์ง์์ ํ์ง์ด ๋์์ง๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์ ์ ์๋๊ณ ์ ๋ต๋ณ๋ ์ง๋ฌธ์ ๋ชจ๋์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณ ํ์ง ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ๋ฐ๋ฉด์ ์๋ชป๋ ์ง๋ฌธ์ด๋ ๋ต๋ณ์ ๊ณต๊ฐ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ ์ธ ํ์ง์ ๋ฎ์ถ ์ ์์ต๋๋ค. |
|
๊ฐ๋จํ ๋งํด์, ๊ณ ํ์ง์ ์ง๋ฌธ์ด๋ ๋ต๋ณ์ *๋ช
ํํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ๊ด๋ จ์ฑ์ด ์์ผ๋ฉฐ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ ์ ํ์ํ๋์ด ์์ด์ผ* ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ](#how-to-write-a-good-issue) ์น์
์ ์ฐธ์กฐํ์ญ์์ค. |
|
|
|
**์ฑ๋์ ๋ํ ์ฐธ๊ณ ์ฌํญ**: |
|
[*ํฌ๋ผ*](https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63)์ ๊ตฌ๊ธ๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์์ ๋ ์ ์์ธํ๋ฉ๋๋ค. ๊ฒ์๋ฌผ์ ์ธ๊ธฐ์ ๋ฐ๋ผ ์์๊ฐ ๋งค๊ฒจ์ง๋ฉฐ, ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ ๊ฒ์ํ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. |
|
๋ํ, ํฌ๋ผ์ ๊ฒ์๋ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ์ฝ๊ฒ ๋งํฌํ ์ ์์ต๋๋ค. |
|
๋ฐ๋ฉด *Discord*๋ ์ฑํ
ํ์์ผ๋ก ๋์ด ์์ด ๋น ๋ฅธ ๋ํ๋ฅผ ์ ๋ํฉ๋๋ค. |
|
์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋น ๋ฅด๊ฒ ๋ฐ์ ์๋ ์๊ฒ ์ง๋ง, ์๊ฐ์ด ์ง๋๋ฉด ์ง๋ฌธ์ด ๋ ์ด์ ๋ณด์ด์ง ์์ต๋๋ค. ๋ํ, Discord์์ ์ด์ ์ ๊ฒ์๋ ์ ๋ณด๋ฅผ ์ฐพ๋ ๊ฒ์ ํจ์ฌ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ํฌ๋ผ์ ์ฌ์ฉํ์ฌ ๊ณ ํ์ง์ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ํ์ฌ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์ค๋ ์ง์๋๋ ์ง์์ ๋ง๋ค๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. Discord์์์ ํ ๋ก ์ด ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๋ต๋ณ๊ณผ ๊ฒฐ๋ก ์ ์ด๋์ด๋ด๋ ๊ฒฝ์ฐ, ํด๋น ์ ๋ณด๋ฅผ ํฌ๋ผ์ ๊ฒ์ํ์ฌ ๋ฏธ๋ ๋
์๋ค์๊ฒ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ๊ถ์ฅํฉ๋๋ค. |
|
|
|
### 2. GitHub ์ด์ ํญ์์ ์๋ก์ด ์ด์ ์ด๊ธฐ |
|
|
|
๐งจ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์๋ค์ด ๋ง์ฃผ์น๋ ๋ฌธ์ ๋ฅผ ์๋ ค์ฃผ๋ ๋๋ถ์ ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์๋ฅผ ๋ณด๊ณ ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. |
|
|
|
๊ธฐ์ตํด์ฃผ์ธ์, GitHub ์ด์๋ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ๊ธฐ์ ์ ์ธ ์ง๋ฌธ, ๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์์ฒญ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ธ์ ๋ํ ํผ๋๋ฐฑ์ ์ฌ์ฉ๋ฉ๋๋ค. |
|
|
|
๊ฐ๋จํ ๋งํด์, Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ **์ฝ๋์ ๊ด๋ จ๋์ง ์์** ๋ชจ๋ ๊ฒ(๋ฌธ์ ํฌํจ)์ GitHub๊ฐ ์๋ [ํฌ๋ผ](https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63)์ด๋ [Discord](https://discord.gg/G7tWnz98XR)์์ ์ง๋ฌธํด์ผ ํฉ๋๋ค. |
|
|
|
**์๋ก์ด ์ด์๋ฅผ ์ด ๋ ๋ค์ ๊ฐ์ด๋๋ผ์ธ์ ๊ณ ๋ คํด์ฃผ์ธ์**: |
|
- ์ด๋ฏธ ๊ฐ์ ์ด์๊ฐ ์๋์ง ๊ฒ์ํ๋์ง ํ์ธํด์ฃผ์ธ์(GitHub์ ์ด์ ํญ์์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ธ์). |
|
- ๋ค๋ฅธ(๊ด๋ จ๋) ์ด์์ ์๋ก์ด ์ด์๋ฅผ ๋ณด๊ณ ํ์ง ๋ง์์ฃผ์ธ์. ๋ค๋ฅธ ์ด์์ ๊ด๋ จ์ด ๋๋ค๋ฉด, ์๋ก์ด ์ด์๋ฅผ ์ด๊ณ ๊ด๋ จ ์ด์์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ์ธ์. |
|
- ์ด์๋ฅผ ์์ด๋ก ์์ฑํด์ฃผ์ธ์. ์์ด์ ์ต์ํ์ง ์๋ค๋ฉด, [DeepL](https://www.deepl.com/translator)๊ณผ ๊ฐ์ ๋ฐ์ด๋ ๋ฌด๋ฃ ์จ๋ผ์ธ ๋ฒ์ญ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๊ตญ์ด์์ ์์ด๋ก ๋ฒ์ญํด์ฃผ์ธ์. |
|
- ์ด์๊ฐ ์ต์ Diffusers ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ฉด ํด๊ฒฐ๋ ์ ์๋์ง ํ์ธํด์ฃผ์ธ์. ์ด์๋ฅผ ๊ฒ์ํ๊ธฐ ์ ์ `python -c "import diffusers; print(diffusers.__version__)"` ๋ช
๋ น์ ์คํํ์ฌ ํ์ฌ ์ฌ์ฉ ์ค์ธ Diffusers ๋ฒ์ ์ด ์ต์ ๋ฒ์ ๊ณผ ์ผ์นํ๊ฑฐ๋ ๋ ๋์์ง ํ์ธํด์ฃผ์ธ์. |
|
- ์๋ก์ด ์ด์๋ฅผ ์ด ๋ ํฌ์ํ๋ ๋
ธ๋ ฅ์ด ๋ง์์๋ก ๋ต๋ณ์ ํ์ง์ด ๋์์ง๊ณ Diffusers ์ด์ ์ ์ฒด์ ํ์ง๋ ํฅ์๋ฉ๋๋ค. |
|
|
|
#### 2.1 ์ฌํ๊ฐ๋ฅํ๊ณ ์ต์ํ์ธ ๋ฒ๊ทธ ๋ฆฌํฌํธ |
|
|
|
์๋ก์ด ์ด์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํฌํจํฉ๋๋ค. |
|
|
|
๋ฒ๊ทธ ๋ณด๊ณ ์๋ ํญ์ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ํฌํจํ๊ณ ๊ฐ๋ฅํ ํ ์ต์ํ์ด์ด์ผ ํ๋ฉฐ ๊ฐ๊ฒฐํด์ผ ํฉ๋๋ค. |
|
์์ธํ ๋งํ๋ฉด: |
|
- ๋ฒ๊ทธ๋ฅผ ๊ฐ๋ฅํ ํ ์ขํ์ผ ํฉ๋๋ค. **์ ์ฒด ์ฝ๋ ํ์ผ์ ๊ทธ๋ฅ ๋์ง์ง ๋ง์ธ์**. |
|
- ์ฝ๋์ ์์์ ์ง์ ํด์ผ ํฉ๋๋ค. |
|
- Diffusers๊ฐ ์์กดํ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌํจํ์ง ๋ง์ญ์์ค. |
|
- **๋ฐ๋์** ํ๊ฒฝ์ ๋ํ ๋ชจ๋ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์์์ `diffusers-cli env`๋ฅผ ์คํํ๊ณ ํ์๋ ์ ๋ณด๋ฅผ ์ด์์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค. |
|
- ์ด์๋ฅผ ์ค๋ช
ํด์ผ ํฉ๋๋ค. ๋
์๊ฐ ๋ฌธ์ ๊ฐ ๋ฌด์์ด๋ฉฐ ์ ๋ฌธ์ ์ธ์ง ๋ชจ๋ฅด๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค. |
|
- **ํญ์** ๋
์๊ฐ ๊ฐ๋ฅํ ํ ์ ์ ๋
ธ๋ ฅ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ฑฐ๋ ์ ์๋์ง ์์ ๋ณ์ ๋๋ฌธ์ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ ๋
์๊ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ด ๊ฐ๋ฅํ ํ ์ต์ํ๋๊ณ ๊ฐ๋จํ Python ์
ธ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. |
|
- ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ๋ชจ๋ธ๊ณผ/๋๋ ๋ฐ์ดํฐ์
์ด ํ์ํ ๊ฒฝ์ฐ ๋
์๊ฐ ํด๋น ๋ชจ๋ธ์ด๋ ๋ฐ์ดํฐ์
์ ์ ๊ทผํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ๋ชจ๋ธ์ด๋ ๋ฐ์ดํฐ์
์ [Hub](https://huggingface.co)์ ์
๋ก๋ํ์ฌ ์ฝ๊ฒ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ๋ฌธ์ ์ฌํ์ ๊ฐ๋ฅํ ํ ์ฝ๊ฒํ๊ธฐ ์ํด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ์
์ ๊ฐ๋ฅํ ํ ์๊ฒ ์ ์งํ๋ ค๊ณ ๋
ธ๋ ฅํ์ธ์. |
|
|
|
์์ธํ ๋ด์ฉ์ [์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ](#how-to-write-a-good-issue) ์น์
์ ์ฐธ์กฐํ์ธ์. |
|
|
|
๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ์ด๋ ค๋ฉด [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml)๋ฅผ ํด๋ฆญํ์ธ์. |
|
|
|
|
|
#### 2.2. ๊ธฐ๋ฅ ์์ฒญ |
|
|
|
์ธ๊ณ์ ์ธ ๊ธฐ๋ฅ ์์ฒญ์ ๋ค์ ์ฌํญ์ ๋ค๋ฃน๋๋ค: |
|
|
|
1. ๋จผ์ ๋๊ธฐ๋ถ์ฌ: |
|
* ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ /๋ถ๋ง์ด ์๋๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์ ๊ทธ๋ฐ์ง ์ค๋ช
ํด์ฃผ์ธ์. ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์กฐ๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. |
|
* ํ๋ก์ ํธ์ ํ์ํ ๊ธฐ๋ฅ์ธ๊ฐ์? ์ฐ๋ฆฌ๋ ๊ทธ์ ๋ํด ๋ฃ๊ณ ์ถ์ต๋๋ค! |
|
* ์ปค๋ฎค๋ํฐ์ ๋์์ด ๋ ์ ์๋ ๊ฒ์ ์์
ํ๊ณ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์๋๊ฐ์? ๋ฉ์ง๋ค์! ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ์๋ ค์ฃผ์ธ์. |
|
2. ๊ธฐ๋ฅ์ *์์ธํ ์ค๋ช
ํ๋* ๋ฌธ๋จ์ ์์ฑํด์ฃผ์ธ์; |
|
3. ๋ฏธ๋ ์ฌ์ฉ์ ๋ณด์ฌ์ฃผ๋ **์ฝ๋ ์กฐ๊ฐ**์ ์ ๊ณตํด์ฃผ์ธ์; |
|
4. ์ด๊ฒ์ด ๋
ผ๋ฌธ๊ณผ ๊ด๋ จ๋ ๊ฒฝ์ฐ ๋งํฌ๋ฅผ ์ฒจ๋ถํด์ฃผ์ธ์; |
|
5. ๋์์ด ๋ ์ ์๋ ์ถ๊ฐ ์ ๋ณด(๊ทธ๋ฆผ, ์คํฌ๋ฆฐ์ท ๋ฑ)๋ฅผ ์ฒจ๋ถํด์ฃผ์ธ์. |
|
|
|
๊ธฐ๋ฅ ์์ฒญ์ [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feature_request.md&title=)์์ ์ด ์ ์์ต๋๋ค. |
|
|
|
#### 2.3 ํผ๋๋ฐฑ |
|
|
|
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์์ธ๊ณผ ๊ทธ๊ฒ์ด ์ ์ข์์ง ๋๋ ๋์์ง์ ๋ํ ์ด์ ์ ๋ํ ํผ๋๋ฐฑ์ ํต์ฌ ๋ฉ์ธํ
์ด๋๊ฐ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์์ฒญ๋ ๋์์ด ๋ฉ๋๋ค. ํ์ฌ ๋์์ธ ์ฒ ํ์ ์ดํดํ๋ ค๋ฉด [์ฌ๊ธฐ](https://huggingface.co/docs/diffusers/conceptual/philosophy)๋ฅผ ์ฐธ์กฐํด ์ฃผ์ธ์. ํน์ ๋์์ธ ์ ํ์ด ํ์ฌ ๋์์ธ ์ฒ ํ๊ณผ ๋ง์ง ์๋๋ค๊ณ ์๊ฐ๋๋ฉด, ๊ทธ ์ด์ ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง ์ค๋ช
ํด ์ฃผ์ธ์. ๋ฐ๋๋ก ํน์ ๋์์ธ ์ ํ์ด ๋์์ธ ์ฒ ํ์ ๋๋ฌด ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ํํ๋ค๊ณ ์๊ฐ๋๋ฉด, ๊ทธ ์ด์ ์ ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง ์ค๋ช
ํด ์ฃผ์ธ์. ํน์ ๋์์ธ ์ ํ์ด ๋งค์ฐ ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด, ๋ฏธ๋์ ๋์์ธ ๊ฒฐ์ ์ ํฐ ๋์์ด ๋๋ฏ๋ก ์ด์ ๋ํ ์๊ฒฌ์ ๋จ๊ฒจ ์ฃผ์ธ์. |
|
|
|
ํผ๋๋ฐฑ์ ๊ดํ ์ด์๋ [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title=)์์ ์ด ์ ์์ต๋๋ค. |
|
|
|
#### 2.4 ๊ธฐ์ ์ ์ธ ์ง๋ฌธ |
|
|
|
๊ธฐ์ ์ ์ธ ์ง๋ฌธ์ ์ฃผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ์ฝ๋๊ฐ ์ ํน์ ๋ฐฉ์์ผ๋ก ์์ฑ๋์๋์ง ๋๋ ์ฝ๋์ ํน์ ๋ถ๋ถ์ด ๋ฌด์์ ํ๋์ง์ ๋ํ ์ง๋ฌธ์
๋๋ค. ์ง๋ฌธํ์ ์ฝ๋ ๋ถ๋ถ์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ๊ณ ํด๋น ์ฝ๋ ๋ถ๋ถ์ด ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ด์ ์ ๋ํ ์์ธํ ์ค๋ช
์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. |
|
|
|
๊ธฐ์ ์ ์ธ ์ง๋ฌธ์ ๊ดํ ์ด์๋ฅผ [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=bug&template=bug-report.yml)์์ ์ด ์ ์์ต๋๋ค. |
|
|
|
#### 2.5 ์๋ก์ด ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ๋๋ ํ์ดํ๋ผ์ธ ์ถ๊ฐ ์ ์ |
|
|
|
๋ง์ฝ diffusion ๋ชจ๋ธ ์ปค๋ฎค๋ํฐ์์ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ๊ณ ์ถ์ ์๋ก์ด ๋ชจ๋ธ, ํ์ดํ๋ผ์ธ ๋๋ ์ค์ผ์ค๋ฌ๊ฐ ์๋ค๋ฉด, ๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ฃผ์ธ์: |
|
|
|
* Diffusion ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ์ ๋ํ ๊ฐ๋จํ ์ค๋ช
๊ณผ ๋
ผ๋ฌธ ๋๋ ๊ณต๊ฐ๋ ๋ฒ์ ์ ๋งํฌ |
|
* ํด๋น ๋ชจ๋ธ์ ์คํ ์์ค ๊ตฌํ์ ๋ํ ๋งํฌ |
|
* ๋ชจ๋ธ ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ฐ์ค์น์ ๋งํฌ |
|
|
|
๋ชจ๋ธ์ ์ง์ ๊ธฐ์ฌํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ต์ ์ ์๋ด๋ฅผ ์ํด ์ฐ๋ฆฌ์๊ฒ ์๋ ค์ฃผ์ธ์. ๋ํ, ๊ฐ๋ฅํ๋ค๋ฉด ๊ตฌ์ฑ ์์(๋ชจ๋ธ, ์ค์ผ์ค๋ฌ, ํ์ดํ๋ผ์ธ ๋ฑ)์ ์๋ ์ ์๋ฅผ GitHub ํธ๋ค๋ก ํ๊ทธํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. |
|
|
|
๋ชจ๋ธ/ํ์ดํ๋ผ์ธ/์ค์ผ์ค๋ฌ์ ๋ํ ์์ฒญ์ [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=New+model%2Fpipeline%2Fscheduler&template=new-model-addition.yml)์์ ์ด ์ ์์ต๋๋ค. |
|
|
|
### 3. GitHub ์ด์ ํญ์์ ๋ฌธ์ ์ ๋ํ ๋ต๋ณํ๊ธฐ |
|
|
|
GitHub์์ ์ด์์ ๋ํ ๋ต๋ณ์ ํ๊ธฐ ์ํด์๋ Diffusers์ ๋ํ ๊ธฐ์ ์ ์ธ ์ง์์ด ํ์ํ ์ ์์ง๋ง, ์ ํํ ๋ต๋ณ์ด ์๋๋๋ผ๋ ๋ชจ๋๊ฐ ์๋ํด๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด์์ ๋ํ ๊ณ ํ์ง ๋ต๋ณ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ: |
|
- ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ณ ์ต์ํ์ผ๋ก ์ ์งํฉ๋๋ค. |
|
- ์ฃผ์ ์ ์ง์คํฉ๋๋ค. ์ด์์ ๋ํ ๋ต๋ณ์ ํด๋น ์ด์์ ๊ด๋ จ๋ ๋ด์ฉ์๋ง ์ง์คํด์ผ ํฉ๋๋ค. |
|
- ์ฝ๋, ๋
ผ๋ฌธ ๋๋ ๋ค๋ฅธ ์์ค๋ฅผ ์ ๊ณตํ์ฌ ๋ต๋ณ์ ์ฆ๋ช
ํ๊ฑฐ๋ ์ง์งํฉ๋๋ค. |
|
- ์ฝ๋๋ก ๋ต๋ณํฉ๋๋ค. ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ์ด ์ด์์ ๋ํ ๋ต๋ณ์ด๊ฑฐ๋ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค๋ฉด, ์์ ํ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ์ ๊ณตํด์ฃผ์ธ์. |
|
|
|
๋ํ, ๋ง์ ์ด์๋ค์ ๋จ์ํ ์ฃผ์ ์ ๋ฌด๊ดํ๊ฑฐ๋ ๋ค๋ฅธ ์ด์์ ์ค๋ณต์ด๊ฑฐ๋ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ฌํ ์ด์๋ค์ ๋ํ ๋ต๋ณ์ ์ ๊ณตํ๊ณ , ์ด์ ์์ฑ์์๊ฒ ๋ ์ ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ์ค๋ณต๋ ์ด์์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ๊ฑฐ๋, [ํฌ๋ผ](https://discuss.huggingface.co/c/discussion-related-to-httpsgithubcomhuggingfacediffusers/63) ์ด๋ [Discord](https://discord.gg/G7tWnz98XR)๋ก ๋ฆฌ๋๋ ์
ํ๋ ๊ฒ์ ๋ฉ์ธํ
์ด๋์๊ฒ ํฐ ๋์์ด ๋ฉ๋๋ค. |
|
|
|
์ด์๊ฐ ์ฌ๋ฐ๋ฅธ ๋ฒ๊ทธ ๋ณด๊ณ ์์ด๊ณ ์์ค ์ฝ๋์์ ์์ ์ด ํ์ํ๋ค๊ณ ํ์ธํ ๊ฒฝ์ฐ, ๋ค์ ์น์
์ ์ดํด๋ณด์ธ์. |
|
|
|
๋ค์ ๋ชจ๋ ๊ธฐ์ฌ์ ๋ํด์๋ PR์ ์ด์ฌ์ผ ํฉ๋๋ค. [PR ์ด๊ธฐ](#how-to-open-a-pr) ์น์
์์ ์์ธํ ์ค๋ช
๋์ด ์์ต๋๋ค. |
|
|
|
### 4. "Good first issue" ๊ณ ์น๊ธฐ |
|
|
|
*Good first issues*๋ [Good first issue](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) ๋ผ๋ฒจ๋ก ํ์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ์ด์๋ ์ด๋ฏธ ์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ
์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง ์ค๋ช
ํ๊ณ ์์ด์ ์์ ํ๊ธฐ ์ฝ์ต๋๋ค. |
|
๋ง์ฝ ์ด์๊ฐ ์์ง ๋ซํ์ง ์์๊ณ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ณ ์ถ๋ค๋ฉด, "์ด ์ด์๋ฅผ ํด๊ฒฐํด๋ณด๊ณ ์ถ์ต๋๋ค."๋ผ๋ ๋ฉ์์ง๋ฅผ ๋จ๊ธฐ๋ฉด ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค: |
|
- a.) ์ด์ ์ค๋ช
์ด ์ด๋ฏธ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ํด๊ฒฐ์ฑ
์ด ์ดํด๋๊ณ ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ธ๋ค๋ฉด, PR ๋๋ ๋๋ํํธ PR์ ์ด์ด์ ์์ ํ ์ ์์ต๋๋ค. |
|
- b.) ์ด์ ์ค๋ช
์ด ํด๊ฒฐ์ฑ
์ ์ ์ํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ด๋ค ํด๊ฒฐ์ฑ
์ด ๊ฐ๋ฅํ ์ง ๋ฌผ์ด๋ณผ ์ ์๊ณ , Diffusers ํ์ ๋๊ตฐ๊ฐ๊ฐ ๊ณง ๋ต๋ณํด์ค ๊ฒ์
๋๋ค. ๋ง์ฝ ์ด๋ป๊ฒ ์์ ํ ์ง ์ข์ ์์ด๋์ด๊ฐ ์๋ค๋ฉด, ์ง์ PR์ ์ด์ด๋ ๋ฉ๋๋ค. |
|
- c.) ์ด๋ฏธ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ฆฐ PR์ด ์์ง๋ง, ์ด์๊ฐ ์์ง ๋ซํ์ง ์์์ต๋๋ค. PR์ด ๋ ์ด์ ์งํ๋์ง ์์๋ค๋ฉด, ์๋ก์ด PR์ ์ด๊ณ ์ด์ PR์ ๋งํฌ๋ฅผ ๊ฑธ๋ฉด ๋ฉ๋๋ค. PR์ ์ข
์ข
์๋ ๊ธฐ์ฌ์๊ฐ ๊ฐ์๊ธฐ ์๊ฐ์ ๋ด์ง ๋ชปํด ๋ ์ด์ ์งํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ ๋ ์ด์ ์งํ๋์ง ์๊ฒ ๋ฉ๋๋ค. ์ด๋ ์คํ ์์ค์์ ์์ฃผ ๋ฐ์ํ๋ ์ผ์ด๋ฉฐ ๋งค์ฐ ์ ์์ ์ธ ์ํฉ์
๋๋ค. ์ด ๊ฒฝ์ฐ, ์ปค๋ฎค๋ํฐ๋ ์๋ก ์๋ํ๊ณ ๊ธฐ์กด PR์ ์ง์์ ํ์ฉํด์ฃผ๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์
๋๋ค. ์ด๋ฏธ PR์ด ์๊ณ ํ์ฑํ๋์ด ์๋ค๋ฉด, ์ ์์ ํด์ฃผ๊ฑฐ๋ PR์ ๊ฒํ ํ๊ฑฐ๋ PR์ ๊ธฐ์ฌํ ์ ์๋์ง ๋ฌผ์ด๋ณด๋ ๋ฑ ์์ฑ์๋ฅผ ๋์์ค ์ ์์ต๋๋ค. |
|
|
|
|
|
### 5. ๋ฌธ์์ ๊ธฐ์ฌํ๊ธฐ |
|
|
|
์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํญ์ ์ข์ ๋ฌธ์๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค! ๊ณต์ ๋ฌธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์๋ค์๊ฒ ์ฒซ ๋ฒ์งธ ์ ์ ์ค ํ๋์ด๋ฉฐ, ๋ฐ๋ผ์ ๋ฌธ์์ ๊ธฐ์ฌํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ์น ์๋ ๊ธฐ์ฌ์
๋๋ค. |
|
|
|
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํฉ๋๋ค: |
|
|
|
- ๋ง์ถค๋ฒ์ด๋ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์์ ํฉ๋๋ค. |
|
- ๊ณต์ ๋ฌธ์๊ฐ ์ด์ํ๊ฒ ํ์๋๊ฑฐ๋ ๋งํฌ๊ฐ ๊นจ์ง ๊ฒฝ์ฐ, ์ฌ๋ฐ๋ฅด๊ฒ ์์ ํ๋ ๋ฐ ์๊ฐ์ ๋ด์ฃผ์๋ฉด ๋งค์ฐ ๊ธฐ์ ๊ฒ์
๋๋ค. |
|
- ๋ฌธ์์ ์
๋ ฅ ๋๋ ์ถ๋ ฅ ํ
์์ ๋ชจ์์ด๋ ์ฐจ์์ ์์ ํฉ๋๋ค. |
|
- ์ดํดํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๋ชป๋ ๋ฌธ์๋ฅผ ๋ช
ํํ๊ฒ ํฉ๋๋ค. |
|
- ์ค๋๋ ์ฝ๋ ์์ ๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค. |
|
- ๋ฌธ์๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํฉ๋๋ค. |
|
|
|
[๊ณต์ Diffusers ๋ฌธ์ ํ์ด์ง](https://huggingface.co/docs/diffusers/index)์ ํ์๋ ๋ชจ๋ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์์ ์ผ๋ถ์ด๋ฉฐ, ํด๋น [๋ฌธ์ ์์ค](https://github.com/huggingface/diffusers/tree/main/docs/source)์์ ์์ ํ ์ ์์ต๋๋ค. |
|
|
|
๋ฌธ์์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ก์ปฌ์์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ [์ด ํ์ด์ง](https://github.com/huggingface/diffusers/tree/main/docs)๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์. |
|
|
|
|
|
### 6. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๊ธฐ |
|
|
|
> [!TIP] |
|
> ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด [์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ](../using-diffusers/custom_pipeline_overview#community-pipelines) ๊ฐ์ด๋๋ฅผ ์ฝ์ด๋ณด์ธ์. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ด ์ ํ์ํ์ง ๊ถ๊ธํ๋ค๋ฉด GitHub ์ด์ [#841](https://github.com/huggingface/diffusers/issues/841)๋ฅผ ํ์ธํด๋ณด์ธ์ (๊ธฐ๋ณธ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ diffusion ๋ชจ๋ธ์ด ์ถ๋ก ์ ์ฌ์ฉ๋ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ ์งํ ์ ์์ง๋ง ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ฐฉํดํ๊ณ ์ถ์ง ์์ต๋๋ค). |
|
|
|
์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๊ธฐ์ฌํ๋ ๊ฒ์ ์ฐฝ์์ฑ๊ณผ ์์
์ ์ปค๋ฎค๋ํฐ์ ๊ณต์ ํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. [`DiffusionPipeline`]์ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ํ์ฌ `custom_pipeline` ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํจ์ผ๋ก์จ ๋๊ตฌ๋ ๋ก๋ํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํ ์ ์์ต๋๋ค. ์ด ์น์
์์๋ UNet์ด ๋จ์ผ ์๋ฐฉํฅ ํจ์ค๋ง ์ํํ๊ณ ์ค์ผ์ค๋ฌ๋ฅผ ํ ๋ฒ ํธ์ถํ๋ ๊ฐ๋จํ ํ์ดํ๋ผ์ธ (๋จ๊ณ๋ณ ํ์ดํ๋ผ์ธ)์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ดํฉ๋๋ค. |
|
|
|
1. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ์ํ one_step_unet.py ํ์ผ์ ์์ฑํ์ธ์. ์ด ํ์ผ์ ์ฌ์ฉ์์ ์ํด ์ค์น๋๋ ํจํค์ง๋ฅผ ํฌํจํ ์ ์์ง๋ง, [`DiffusionPipeline`]์์ ๋ชจ๋ธ ๊ฐ์ค์น์ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ์ ๋ก๋ํ๊ธฐ ์ํด ํ๋์ ํ์ดํ๋ผ์ธ ํด๋์ค๋ง ์์ด์ผ ํฉ๋๋ค. `__init__` ํจ์์ UNet๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํ์ธ์. |
|
|
|
๋ํ [`~DiffusionPipeline.save_pretrained`]๋ฅผ ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ๊ณผ ๊ทธ ๊ตฌ์ฑ ์์๋ฅผ ์ ์ฅํ ์ ์๋๋ก `register_modules` ํจ์๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. |
|
|
|
```py |
|
from diffusers import DiffusionPipeline |
|
import torch |
|
|
|
class UnetSchedulerOneForwardPipeline(DiffusionPipeline): |
|
def __init__(self, unet, scheduler): |
|
super().__init__() |
|
|
|
self.register_modules(unet=unet, scheduler=scheduler) |
|
``` |
|
|
|
1. forward ํจ์ค์์ (`__call__`๋ก ์ ์ํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค), ์ํ๋ ์ด๋ค ๊ธฐ๋ฅ์ด๋ ์ถ๊ฐํ ์ ์์ต๋๋ค. "one-step" ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ, ๋ฌด์์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ `timestep=1`๋ก ์ค์ ํ์ฌ UNet๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ํ ๋ฒ ํธ์ถํฉ๋๋ค. |
|
|
|
```py |
|
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๊ณผ ์ค์ผ์ค๋ฌ๋ฅผ ์ ๋ฌํ์ฌ ํ์ดํ๋ผ์ธ์ ์คํํ๊ฑฐ๋, ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๊ฒฝ์ฐ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค. |
|
|
|
```py |
|
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 ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ผ๋ก ๊ณต์ ํ ์ ์์ต๋๋ค. |
|
|
|
<hfoptions id="pipeline type"> |
|
<hfoption id="GitHub pipeline"> |
|
|
|
GitHub ํ์ดํ๋ผ์ธ์ ๊ณต์ ํ๋ ค๋ฉด Diffusers [์ ์ฅ์](https://github.com/huggingface/diffusers)์์ PR์ ์ด๊ณ one_step_unet.py ํ์ผ์ [examples/community](https://github.com/huggingface/diffusers/tree/main/examples/community) ํ์ ํด๋์ ์ถ๊ฐํ์ธ์. |
|
|
|
</hfoption> |
|
<hfoption id="Hub pipeline"> |
|
|
|
Hub ํ์ดํ๋ผ์ธ์ ๊ณต์ ํ๋ ค๋ฉด, ํ๋ธ์ ๋ชจ๋ธ ์ ์ฅ์๋ฅผ ์์ฑํ๊ณ one_step_unet.py ํ์ผ์ ์
๋ก๋ํ์ธ์. |
|
|
|
</hfoption> |
|
</hfoptions> |
|
|
|
### 7. ํ๋ จ ์์ ์ ๊ธฐ์ฌํ๊ธฐ |
|
|
|
Diffusers ์์ ๋ [examples](https://github.com/huggingface/diffusers/tree/main/examples) ํด๋์ ์๋ ํ๋ จ ์คํฌ๋ฆฝํธ์ ๋ชจ์์
๋๋ค. |
|
|
|
๋ ๊ฐ์ง ์ ํ์ ํ๋ จ ์์ ๋ฅผ ์ง์ํฉ๋๋ค: |
|
|
|
- ๊ณต์ ํ๋ จ ์์ |
|
- ์ฐ๊ตฌ์ฉ ํ๋ จ ์์ |
|
|
|
์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ [examples/research_projects](https://github.com/huggingface/diffusers/tree/main/examples/research_projects)์ ์์นํ๋ฉฐ, ๊ณต์ ํ๋ จ ์์ ๋ `research_projects` ๋ฐ `community` ํด๋๋ฅผ ์ ์ธํ [examples](https://github.com/huggingface/diffusers/tree/main/examples)์ ๋ชจ๋ ํด๋๋ฅผ ํฌํจํฉ๋๋ค. |
|
๊ณต์ ํ๋ จ ์์ ๋ Diffusers์ ํต์ฌ ๋ฉ์ธํ
์ด๋๊ฐ ์ ์ง ๊ด๋ฆฌํ๋ฉฐ, ์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ ์ปค๋ฎค๋ํฐ๊ฐ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. |
|
์ด๋ ๊ณต์ ํ์ดํ๋ผ์ธ vs ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ์ ๋ํ [6. ์ปค๋ฎค๋ํฐ ํ์ดํ๋ผ์ธ ๊ธฐ์ฌํ๊ธฐ](#6-contribute-a-community-pipeline)์์ ์ ์ํ ์ด์ ์ ๋์ผํฉ๋๋ค: ํต์ฌ ๋ฉ์ธํ
์ด๋๊ฐ diffusion ๋ชจ๋ธ์ ๋ชจ๋ ๊ฐ๋ฅํ ํ๋ จ ๋ฐฉ๋ฒ์ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํฉ๋๋ค. |
|
Diffusers ํต์ฌ ๋ฉ์ธํ
์๋์ ์ปค๋ฎค๋ํฐ๊ฐ ํน์ ํ๋ จ ํจ๋ฌ๋ค์์ ๋๋ฌด ์คํ์ ์ด๊ฑฐ๋ ์ถฉ๋ถํ ์ธ๊ธฐ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒฝ์ฐ, ํด๋น ํ๋ จ ์ฝ๋๋ `research_projects` ํด๋์ ๋ฃ๊ณ ์์ฑ์๊ฐ ์ ์ง ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. |
|
|
|
๊ณต์ ํ๋ จ ๋ฐ ์ฐ๊ตฌ ์์ ๋ ํ๋ ์ด์์ ํ๋ จ ์คํฌ๋ฆฝํธ, requirements.txt ํ์ผ ๋ฐ README.md ํ์ผ์ ํฌํจํ๋ ๋๋ ํ ๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ๋ จ ์์ ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค: |
|
|
|
```bash |
|
git clone https://github.com/huggingface/diffusers |
|
``` |
|
|
|
๊ทธ๋ฆฌ๊ณ ํ๋ จ์ ํ์ํ ๋ชจ๋ ์ถ๊ฐ์ ์ธ ์์กด์ฑ๋ ์ค์นํด์ผ ํฉ๋๋ค: |
|
|
|
```bash |
|
pip install -r /examples/<your-example-folder>/requirements.txt |
|
``` |
|
|
|
๋ฐ๋ผ์ ์์ ๋ฅผ ์ถ๊ฐํ ๋, `requirements.txt` ํ์ผ์ ํ๋ จ ์์ ์ ํ์ํ ๋ชจ๋ pip ์ข
์์ฑ์ ์ ์ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ์ค์น๋ ๋ชจ๋ ์ข
์์ฑ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์์ ์ ํ๋ จ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, [DreamBooth `requirements.txt` ํ์ผ](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/requirements.txt)์ ์ฐธ์กฐํ์ธ์. |
|
|
|
Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ จ ์์ ๋ ๋ค์ ์ฒ ํ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค: |
|
- ์์ ๋ฅผ ์คํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ฝ๋๋ ํ๋์ Python ํ์ผ์ ์์ด์ผ ํฉ๋๋ค. |
|
- ์ฌ์ฉ์๋ ๋ช
๋ น ์ค์์ `python <your-example>.py --args`์ ๊ฐ์ด ์์ ๋ฅผ ์คํํ ์ ์์ด์ผ ํฉ๋๋ค. |
|
- ์์ ๋ ๊ฐ๋จํ๊ฒ ์ ์ง๋์ด์ผ ํ๋ฉฐ, Diffusers๋ฅผ ์ฌ์ฉํ ํ๋ จ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ **์์**๋ก ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค. ์์ ์คํฌ๋ฆฝํธ์ ๋ชฉ์ ์ ์ต์ฒจ๋จ diffusion ๋ชจ๋ธ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ๋๋ฌด ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์ถ๊ฐํ์ง ์๊ณ ์ด๋ฏธ ์๋ ค์ง ํ๋ จ ๋ฐฉ๋ฒ์ ์ฌํํ๋ ๊ฒ์
๋๋ค. ์ด ์ ์ ๋ถ์ฐ๋ฌผ๋ก์, ์์ ๋ ์ข์ ๊ต์ก ์๋ฃ๋ก์จ์ ์ญํ ์ ํ๊ธฐ ์ํด ๋
ธ๋ ฅํฉ๋๋ค. |
|
|
|
์์ ์ ๊ธฐ์ฌํ๊ธฐ ์ํด์๋, ์ด๋ฏธ ์กด์ฌํ๋ ์์ ์ธ [dreambooth](https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth.py)์ ๊ฐ์ ์์ ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ด๋ป๊ฒ ๋ณด์ฌ์ผ ํ๋์ง์ ๋ํ ์์ด๋์ด๋ฅผ ์ป๋ ๊ฒ์ด ๋งค์ฐ ๊ถ์ฅ๋ฉ๋๋ค. |
|
Diffusers์ ๊ธด๋ฐํ๊ฒ ํตํฉ๋์ด ์๊ธฐ ๋๋ฌธ์, ๊ธฐ์ฌ์๋ค์ด [Accelerate ๋ผ์ด๋ธ๋ฌ๋ฆฌ](https://github.com/huggingface/accelerate)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. |
|
์์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ, ๋ฐ๋์ ์์ ๋ฅผ ์ ํํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ํฌ๊ด์ ์ธ `README.md`๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด README์๋ ๋ค์์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค: |
|
- [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/tree/main/examples/dreambooth#running-locally-with-pytorch)์ ํ์๋ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ๋ช
๋ น์ด. |
|
- [์ฌ๊ธฐ](https://api.wandb.ai/report/patrickvonplaten/xm6cd5q5)์ ํ์๋ ํ๋ จ ๊ฒฐ๊ณผ (๋ก๊ทธ, ๋ชจ๋ธ ๋ฑ)์ ๋ํ ๋งํฌ๋ก ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ ์ ์๋ ๋ด์ฉ์ ๋ณด์ฌ์ค๋๋ค. |
|
- ๋น๊ณต์/์ฐ๊ตฌ์ฉ ํ๋ จ ์์ ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, **๋ฐ๋์** git ํธ๋ค์ ํฌํจํ์ฌ ์ด ํ๋ จ ์์ ๋ฅผ ์ ์ง ๊ด๋ฆฌํ ๊ฒ์์ ๋ช
์ํ๋ ๋ฌธ์ฅ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. [์ฌ๊ธฐ](https://github.com/huggingface/diffusers/tree/main/examples/research_projects/intel_opts#diffusers-examples-with-intel-optimizations)์ ํ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. |
|
|
|
๋ง์ฝ ๊ณต์ ํ๋ จ ์์ ์ ๊ธฐ์ฌํ๋ ๊ฒฝ์ฐ, [examples/test_examples.py](https://github.com/huggingface/diffusers/blob/main/examples/test_examples.py)์ ํ
์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ํ์ธํด์ฃผ์ธ์. ๋น๊ณต์ ํ๋ จ ์์ ์๋ ์ด ์์
์ด ํ์ํ์ง ์์ต๋๋ค. |
|
|
|
### 8. "Good second issue" ๊ณ ์น๊ธฐ |
|
|
|
"Good second issue"๋ [Good second issue](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22Good+second+issue%22) ๋ผ๋ฒจ๋ก ํ์๋ฉ๋๋ค. Good second issue๋ [Good first issues](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)๋ณด๋ค ํด๊ฒฐํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค. |
|
์ด์ ์ค๋ช
์ ์ผ๋ฐ์ ์ผ๋ก ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ๊ด์ฌ ์๋ ๊ธฐ์ฌ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ฝค ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค. |
|
Good second issue๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ํด๋น ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PR์ ์ด๊ณ PR์ ์ด์์ ๋งํฌํ์ธ์. ์ด๋ฏธ ํด๋น ์ด์์ ๋ํ PR์ด ์ด๋ ค์์ง๋ง ๋ณํฉ๋์ง ์์ ๊ฒฝ์ฐ, ์ ๋ณํฉ๋์ง ์์๋์ง ์ดํดํ๊ธฐ ์ํด ์ดํด๋ณด๊ณ ๊ฐ์ ๋ PR์ ์ด์ด๋ณด์ธ์. |
|
Good second issue๋ ์ผ๋ฐ์ ์ผ๋ก Good first issue ์ด์๋ณด๋ค ๋ณํฉํ๊ธฐ๊ฐ ๋ ์ด๋ ค์ฐ๋ฏ๋ก, ํต์ฌ ๋ฉ์ธํ
์ด๋์๊ฒ ๋์์ ์์ฒญํ๋ ๊ฒ์ด ์ข์ต๋๋ค. PR์ด ๊ฑฐ์ ์๋ฃ๋ ๊ฒฝ์ฐ, ํต์ฌ ๋ฉ์ธํ
์ด๋๋ PR์ ์ฐธ์ฌํ์ฌ ์ปค๋ฐํ๊ณ ๋ณํฉ์ ์งํํ ์ ์์ต๋๋ค. |
|
|
|
### 9. ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ ์ถ๊ฐํ๊ธฐ |
|
|
|
ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ, ์ค์ผ์ค๋ฌ๋ Diffusers ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์
๋๋ค. |
|
์ด๋ค์ ์ต์ฒจ๋จ diffusion ๊ธฐ์ ์ ์ฝ๊ฒ ์ ๊ทผํ๋๋ก ํ๋ฉฐ, ๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐ๋ ฅํ ์์ฑํ AI ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋๋ก ํฉ๋๋ค. |
|
|
|
์๋ก์ด ๋ชจ๋ธ, ํ์ดํ๋ผ์ธ ๋๋ ์ค์ผ์ค๋ฌ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์๋ก์ด ๊ฐ๋ ฅํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ฑํํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ฒด ์์ฑํ AI ์ํ๊ณ์ ๋งค์ฐ ์ค์ํ ๊ฐ์น๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. |
|
|
|
Diffusers์๋ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์์ ๋ํ ์ฌ๋ฌ ๊ฐ๋ฐ ์์ฒญ์ด ์์ต๋๋ค. ํน์ ๊ตฌ์ฑ ์์๋ฅผ ์์ง ์ ํํ ์ด๋ค ๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ์์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ, ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ธ์: |
|
- [๋ชจ๋ธ ๋๋ ํ์ดํ๋ผ์ธ](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+pipeline%2Fmodel%22) |
|
- [์ค์ผ์ค๋ฌ](https://github.com/huggingface/diffusers/issues?q=is%3Aopen+is%3Aissue+label%3A%22New+scheduler%22) |
|
|
|
|
|
์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์, [์ฒ ํ ๊ฐ์ด๋](philosophy)๋ฅผ ์ฝ์ด๋ณด๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์ ์ค ์ด๋ ๊ฒ์ ์ถ๊ฐํ๋ , ๋์์ธ ์ฒ ํ๊ณผ ๊ด๋ จ๋ API ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฐ๋ฆฌ์ ๋์์ธ ์ฒ ํ๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ ๋ณํฉํ ์ ์์ต๋๋ค. ๋์์ธ ์ ํ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋์ํ์ง ์๋ ๊ฒฝ์ฐ, [ํผ๋๋ฐฑ ์ด์](https://github.com/huggingface/diffusers/issues/new?assignees=&labels=&template=feedback.md&title=)๋ฅผ ์ด์ด ํด๋น ๋์์ธ ํจํด/์ ํ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์์ ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง, ๋์์ธ ์ฒ ํ์ ์
๋ฐ์ดํธํด์ผ ํ๋์ง์ ๋ํด ๋
ผ์ํ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์ ์ผ๊ด์ฑ์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. |
|
|
|
PR์ ์๋ณธ ์ฝ๋๋ฒ ์ด์ค/๋
ผ๋ฌธ ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ๋ฅํ๋ฉด PR์์ ์๋ ์์ฑ์์๊ฒ ์ง์ ์๋ฆผ์ ๋ณด๋ด์ด ์งํ ์ํฉ์ ๋ฐ๋ผ๊ฐ ์ ์๋๋ก ํด์ฃผ์ธ์. |
|
|
|
PR์์ ๋งํ ๊ฒฝ์ฐ๋ ๋์์ด ํ์ํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ๋ฆฌ๋ทฐ๋ ๋์์ ์์ฒญํ๋ ๋ฉ์์ง๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ ์ฃผ์ ํ์ง ๋ง์ธ์. |
|
|
|
#### Copied from mechanism |
|
|
|
`# Copied from mechanism` ์ ํ์ดํ๋ผ์ธ, ๋ชจ๋ธ ๋๋ ์ค์ผ์ค๋ฌ ์ฝ๋๋ฅผ ์ถ๊ฐํ ๋ ์ดํดํด์ผ ํ ๋
ํนํ๊ณ ์ค์ํ ๊ธฐ๋ฅ์
๋๋ค. Diffusers ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์์ ์ด๋ฅผ ์์ฃผ ๋ณผ ์ ์๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ์ ์งํ๊ธฐ ์ํจ์
๋๋ค. `# Copied from mechanism` ์ผ๋ก ํ์๋ ์ฝ๋๋ ๋ณต์ฌํ ์ฝ๋์ ์ ํํ ๋์ผํ๋๋ก ๊ฐ์ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด `make fix-copies`๋ฅผ ์คํํ ๋ ๋ง์ ํ์ผ์ ๊ฑธ์ณ ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ์
๋ฐ์ดํธํ๊ณ ์ ํํ ์ ์์ต๋๋ค. |
|
|
|
์๋ฅผ ๋ค์ด, ์๋ ์ฝ๋ ์์ ์์ [`~diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput`]์ ์๋ ์ฝ๋์ด๋ฉฐ, `AltDiffusionPipelineOutput`์ `# Copied from mechanism`์ ์ฌ์ฉํ์ฌ ๋ณต์ฌํฉ๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ํด๋์ค ์ ๋์ฌ๋ฅผ `Stable`์์ `Alt`๋ก ๋ณ๊ฒฝํ ๊ฒ์
๋๋ค. |
|
|
|
```py |
|
# 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*](https://huggingface.co/blog/transformers-design-philosophy#4-machine-learning-models-are-static) ๋ธ๋ก๊ทธ ํฌ์คํธ์ ์ด ์น์
์ ์ฝ์ด๋ณด์ธ์. |
|
|
|
## ์ข์ ์ด์ ์์ฑ ๋ฐฉ๋ฒ |
|
|
|
**์ด์๋ฅผ ์ ์์ฑํ ์๋ก ๋น ๋ฅด๊ฒ ํด๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.** |
|
|
|
1. ์ด์์ ์ ์ ํ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋์ง ํ์ธํ์ธ์. [์ ์ด์๋ฅผ ์ด ๋](https://github.com/huggingface/diffusers/issues/new/choose) ์ฌ๋ฐ๋ฅธ ํ
ํ๋ฆฟ์ ์ ํํด์ผ ํฉ๋๋ค. *๋ฒ๊ทธ ๋ณด๊ณ ์*, *๊ธฐ๋ฅ ์์ฒญ*, *API ๋์์ธ์ ๋ํ ํผ๋๋ฐฑ*, *์๋ก์ด ๋ชจ๋ธ/ํ์ดํ๋ผ์ธ/์ค์ผ์ค๋ฌ ์ถ๊ฐ*, *ํฌ๋ผ*, ๋๋ ๋น ์ด์ ์ค์์ ์ ํํ์ธ์. ์ด์๋ฅผ ์ด ๋ ์ฌ๋ฐ๋ฅธ ํ
ํ๋ฆฟ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. |
|
2. **๋ช
ํ์ฑ**: ์ด์์ ์ ํฉํ ์ ๋ชฉ์ ์ง์ ํ์ธ์. ์ด์ ์ค๋ช
์ ๊ฐ๋ฅํ ๊ฐ๋จํ๊ฒ ์์ฑํ์ธ์. ์ด์๋ฅผ ์ดํดํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ๋ช
ํํ๊ฒ ์์ฑํ์ธ์. ํ๋์ ์ด์์ ๋ํด ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ํฌํจํ์ง ์๋๋ก ์ฃผ์ํ์ธ์. ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ๊ฐ๊ฐ์ ์ด์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ด์ด์ฃผ์ธ์. ๋ฒ๊ทธ์ธ ๊ฒฝ์ฐ, ์ด๋ค ๋ฒ๊ทธ์ธ์ง ๊ฐ๋ฅํ ํ ์ ํํ๊ฒ ์ค๋ช
ํด์ผ ํฉ๋๋ค. "diffusers์์ ์ค๋ฅ"์ ๊ฐ์ด ๊ฐ๋จํ ์์ฑํ์ง ๋ง์ธ์. |
|
3. **์ฌํ ๊ฐ๋ฅ์ฑ**: ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ด ์์ผ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ์ ์ง ๊ด๋ฆฌ์๋ ๊ทธ ๋ฒ๊ทธ๋ฅผ ์ฌํํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด์์ ์ฌํ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ์ ํฌํจํด์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ Python ์ธํฐํ๋ฆฌํฐ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋ ํํ์ฌ์ผ ํฉ๋๋ค. ์ฝ๋ ์กฐ๊ฐ์ด ์๋ํด์ผ ํฉ๋๋ค. ์ฆ, ๋๋ฝ๋ import๋ ์ด๋ฏธ์ง์ ๋ํ ๋งํฌ๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด์์๋ ์ค๋ฅ ๋ฉ์์ง์ ์ ํํ ๋์ผํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌํํ๊ธฐ ์ํด ์์ ํ์ง ์๊ณ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์๋ ์ฝ๋ ์กฐ๊ฐ์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ด์์ ์ฌ์ฉ์์ ๋ก์ปฌ ๋ชจ๋ธ ๊ฐ์ค์น๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋
์๊ฐ ์ก์ธ์คํ ์ ์๋ ๊ฒฝ์ฐ ์ด์๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ ๊ณต์ ํ ์ ์๋ ๊ฒฝ์ฐ, ๋๋ฏธ ๋ชจ๋ธ์ด๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํด๋ณด์ธ์. |
|
4. **๊ฐ๊ฒฐ์ฑ**: ๊ฐ๋ฅํ ํ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ์ฌ ๋
์๊ฐ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์๋๋ก ๋์์ฃผ์ธ์. ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ์ฝ๋๋ ์ ๋ณด๋ ๋ชจ๋ ์ ๊ฑฐํด์ฃผ์ธ์. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ๋ฌธ์ ๋ฅผ ์ค๋ช
ํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ฝ๋ ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์ธ์. ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ํ์๋ ์์
ํ๋ฆ ์ ์ฒด๋ฅผ ๋ฌธ์ ์ ๋์ง๋ ๊ฒ์ด ์๋๋ผ, ์๋ฌ๊ฐ ๋ฐ์ํ๋ ํ๋ จ ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ๋ฌธ์ ์ธ์ง ๋จผ์ ์ดํดํ๊ณ ๋ช ์ค๋ก ์ฌํํด๋ณด์ธ์. ์ ์ฒด ๋ฐ์ดํฐ์
๋์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด๋ณด์ธ์. |
|
5. ๋งํฌ ์ถ๊ฐํ๊ธฐ. ํน์ ํ ์ด๋ฆ, ๋ฉ์๋, ๋๋ ๋ชจ๋ธ์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ๋
์๊ฐ ๋ ์ ์ดํดํ ์ ์๋๋ก ๋งํฌ๋ฅผ ์ ๊ณตํด์ฃผ์ธ์. ํน์ PR์ด๋ ์ด์๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ํด๋น ์ด์์ ๋งํฌ๋ฅผ ๊ฑธ์ด์ฃผ์ธ์. ๋
์๊ฐ ๋ฌด์์ ๋งํ๋์ง ์๊ณ ์๋ค๊ณ ๊ฐ์ ํ์ง ๋ง์ธ์. ์ด์์ ๋งํฌ๋ฅผ ์ถ๊ฐํ ์๋ก ์ข์ต๋๋ค. |
|
6. ํฌ๋งทํ
. ํ์ด์ฌ ์ฝ๋ ๊ตฌ๋ฌธ์ผ๋ก ์ฝ๋๋ฅผ ํฌ๋งทํ
ํ๊ณ , ์ผ๋ฐ ์ฝ๋ ๊ตฌ๋ฌธ์ผ๋ก ์๋ฌ ๋ฉ์์ง๋ฅผ ํฌ๋งทํ
ํด์ฃผ์ธ์. ์์ธํ ๋ด์ฉ์ [๊ณต์ GitHub ํฌ๋งทํ
๋ฌธ์](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)๋ฅผ ์ฐธ์กฐํ์ธ์. |
|
7. ์ด์๋ฅผ ํด๊ฒฐํด์ผ ํ๋ ํฐ์ผ์ด ์๋๋ผ, ์ ์์ฑ๋ ๋ฐฑ๊ณผ์ฌ์ ํญ๋ชฉ์ผ๋ก ์๊ฐํด๋ณด์ธ์. ์ถ๊ฐ๋ ์ด์๋ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ง์์ ๊ธฐ์ฌํ๋ ๊ฒ์
๋๋ค. ์ ์์ฑ๋ ์ด์๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ๋ฉ์ธํ
์ด๋๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์ ์ฒด ์ปค๋ฎค๋ํฐ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ์ธก๋ฉด์ ๋ ์ ์ดํดํ ์ ์๋๋ก ๋์์ ์ฃผ๋ ๊ฒ์
๋๋ค. |
|
|
|
## ์ข์ PR ์์ฑ ๋ฐฉ๋ฒ |
|
|
|
1. ์นด๋ฉ๋ ์จ์ด ๋์ธ์. ๊ธฐ์กด์ ๋์์ธ ํจํด๊ณผ ๊ตฌ๋ฌธ์ ์ดํดํ๊ณ , ์ฝ๋ ์ถ๊ฐ๊ฐ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ๋งค๋๋ฝ๊ฒ ํ๋ฅด๋๋ก ํด์ผ ํฉ๋๋ค. ๊ธฐ์กด ๋์์ธ ํจํด์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํฌ๊ฒ ๋ค๋ฅธ PR์ ๋ณํฉ๋์ง ์์ต๋๋ค. |
|
2. ์ด์ ์ ๋ง์ถ์ธ์. ํ๋์ ๋ฌธ์ ๋ง ํด๊ฒฐํ๋ PR์ ์์ฑํด์ผ ํฉ๋๋ค. "์ถ๊ฐํ๋ฉด์ ๋ค๋ฅธ ๋ฌธ์ ๋ ํด๊ฒฐํ๊ธฐ"์ ๋น ์ง์ง ์๋๋ก ์ฃผ์ํ์ธ์. ์ฌ๋ฌ ๊ฐ์ ๊ด๋ จ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ PR์ ์์ฑํ๋ ๊ฒ์ ๋ฆฌ๋ทฐํ๊ธฐ๊ฐ ํจ์ฌ ์ด๋ ต์ต๋๋ค. |
|
3. ๋์์ด ๋๋ ๊ฒฝ์ฐ, ์ถ๊ฐํ ๋ด์ฉ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์์ ์ฝ๋ ์กฐ๊ฐ์ ์ถ๊ฐํด๋ณด์ธ์. |
|
4. PR์ ์ ๋ชฉ์ ๊ธฐ์ฌ ๋ด์ฉ์ ์์ฝํด์ผ ํฉ๋๋ค. |
|
5. PR์ด ์ด์๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ, PR ์ค๋ช
์ ์ด์ ๋ฒํธ๋ฅผ ์ธ๊ธํ์ฌ ์ฐ๊ฒฐ๋๋๋ก ํด์ฃผ์ธ์ (์ด์๋ฅผ ์ฐธ์กฐํ๋ ์ฌ๋๋ค์ด ์์
์ค์์ ์ ์ ์๋๋ก). |
|
6. ์งํ ์ค์ธ ์์
์ ๋ํ๋ด๋ ค๋ฉด ์ ๋ชฉ์ `[WIP]`๋ฅผ ์ ๋์ฌ๋ก ๋ถ์ฌ์ฃผ์ธ์. ์ด๋ ์ค๋ณต ์์
์ ํผํ๊ณ , ๋ณํฉ ์ค๋น๊ฐ ๋ PR๊ณผ ๊ตฌ๋ถํ ์ ์๋๋ก ๋์์ด ๋ฉ๋๋ค. |
|
7. [์ข์ ์ด์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ](#how-to-write-a-good-issue)์ ์ค๋ช
๋ ๋๋ก ํ
์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ํ์์ ์ง์ ํด๋ณด์ธ์. |
|
8. ๊ธฐ์กด ํ
์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํ์ธ์ |
|
9. ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ง ํ
์คํธ๋ฅผ ์ถ๊ฐํ์ธ์. ํ์ง ํ
์คํธ๊ฐ ์์ผ๋ฉด ๋ณํฉํ ์ ์์ต๋๋ค. |
|
- ์๋ก์ด `@slow` ํ
์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ, ๋ค์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํต๊ณผํ๋์ง ํ์ธํ์ธ์. |
|
`RUN_SLOW=1 python -m pytest tests/test_my_new_model.py`. |
|
CircleCI๋ ๋๋ฆฐ ํ
์คํธ๋ฅผ ์คํํ์ง ์์ง๋ง, GitHub Actions๋ ๋งค์ผ ์คํํฉ๋๋ค! |
|
10. ๋ชจ๋ ๊ณต๊ฐ ๋ฉ์๋๋ ๋งํฌ๋ค์ด๊ณผ ์ ์๋ํ๋ ์ ๋ณด์ฑ docstring์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์์๋ก [`pipeline_latent_diffusion.py`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py)๋ฅผ ์ฐธ์กฐํ์ธ์. |
|
11. ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ ํฌ์งํ ๋ฆฌ์ ํฐ ๋ถ๋ด์ ์ฃผ๋ ํ์ผ์ด ์ถ๊ฐ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด๋ฏธ์ง, ๋น๋์ค ๋ฐ ๊ธฐํ ํ
์คํธ๊ฐ ์๋ ํ์ผ์ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ํ์ผ์ ๋ฐฐ์นํ๊ธฐ ์ํด hf.co ํธ์คํ
`dataset`์ธ [`hf-internal-testing`](https://huggingface.co/hf-internal-testing) ๋๋ [huggingface/documentation-images](https://huggingface.co/datasets/huggingface/documentation-images)๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ฐ์ ์
๋๋ค. |
|
์ธ๋ถ ๊ธฐ์ฌ์ธ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง๋ฅผ PR์ ์ถ๊ฐํ๊ณ Hugging Face ๊ตฌ์ฑ์์๊ฒ ์ด๋ฏธ์ง๋ฅผ ์ด ๋ฐ์ดํฐ์
์ผ๋ก ์ด๋ํ๋๋ก ์์ฒญํ์ธ์. |
|
|
|
## PR์ ์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ |
|
|
|
์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์, ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ ๊ฐ์ ์์
์ ํ๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๊ธฐ์กด์ PR์ด๋ ์ด์๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์คํ์ง ์์ ๊ฒฝ์ฐ, ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ํด ์ด์๋ฅผ ์ด์ด๋ณด๋ ๊ฒ์ด ํญ์ ์ข์ ์์ด๋์ด์
๋๋ค. |
|
|
|
๐งจ Diffusers์ ๊ธฐ์ฌํ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ์ ์ธ `git` ์ฌ์ฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. `git`์ ๊ฐ์ฅ ์ฌ์ด ๋๊ตฌ๋ ์๋์ง๋ง, ๊ฐ์ฅ ํ๋ฅญํ ๋งค๋ด์ผ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์
ธ์์ `git --help`์ ์
๋ ฅํ๊ณ ์ฆ๊ธฐ์ธ์. ์ฑ
์ ์ ํธํ๋ ๊ฒฝ์ฐ, [Pro Git](https://git-scm.com/book/en/v2)์ ๋งค์ฐ ์ข์ ์ฐธ๊ณ ์๋ฃ์
๋๋ค. |
|
|
|
๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ๊ธฐ์ฌ๋ฅผ ์์ํ์ธ์ ([์ง์๋๋ Python ๋ฒ์ ](https://github.com/huggingface/diffusers/blob/main/setup.py#L244)): |
|
|
|
1. ์ ์ฅ์ ํ์ด์ง์์ 'Fork' ๋ฒํผ์ ํด๋ฆญํ์ฌ [์ ์ฅ์](https://github.com/huggingface/diffusers)๋ฅผ ํฌํฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋์ ์ฌ๋ณธ์ด GitHub ์ฌ์ฉ์ ๊ณ์ ์ ์์ฑ๋ฉ๋๋ค. |
|
|
|
2. ํฌํฌํ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ๋์คํฌ์ ํด๋ก ํ๊ณ , ๊ธฐ๋ณธ ์ ์ฅ์๋ฅผ ์๊ฒฉ์ผ๋ก ์ถ๊ฐํ์ธ์: |
|
|
|
```bash |
|
$ git clone git@github.com:<your GitHub handle>/diffusers.git |
|
$ cd diffusers |
|
$ git remote add upstream https://github.com/huggingface/diffusers.git |
|
``` |
|
|
|
3. ๊ฐ๋ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๊ดํ ์๋ก์ด ๋ธ๋์น๋ฅผ ์์ฑํ์ธ์: |
|
|
|
```bash |
|
$ git checkout -b a-descriptive-name-for-my-changes |
|
``` |
|
|
|
`main` ๋ธ๋์น ์์์ **์ ๋** ์์
ํ์ง ๋ง์ธ์. |
|
|
|
1. ๊ฐ์ ํ๊ฒฝ์์ ๋ค์ ๋ช
๋ น์ ์คํํ์ฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํ์ธ์: |
|
|
|
```bash |
|
$ pip install -e ".[dev]" |
|
``` |
|
|
|
๋ง์ฝ ์ ์ฅ์๋ฅผ ์ด๋ฏธ ํด๋ก ํ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ต์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด `git pull`์ ์คํํด์ผ ํ ์๋ ์์ต๋๋ค. |
|
|
|
5. ๊ธฐ๋ฅ์ ๋ธ๋์น์์ ๊ฐ๋ฐํ์ธ์. |
|
|
|
๊ธฐ๋ฅ์ ์์
ํ๋ ๋์ ํ
์คํธ ์ค์ํธ๊ฐ ํต๊ณผ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ํฅ์ ๋ฐ๋ ํ
์คํธ๋ฅผ ์คํํด์ผ ํฉ๋๋ค: |
|
|
|
```bash |
|
$ pytest tests/<TEST_TO_RUN>.py |
|
``` |
|
|
|
ํ
์คํธ๋ฅผ ์คํํ๊ธฐ ์ ์ ํ
์คํธ๋ฅผ ์ํด ํ์ํ ์์กด์ฑ๋ค์ ์ค์นํ์๋์ง ํ์ธํ์ธ์. ๋ค์์ ์ปค๋งจ๋๋ฅผ ํตํด์ ํ์ธํ ์ ์์ต๋๋ค: |
|
|
|
```bash |
|
$ pip install -e ".[test]" |
|
``` |
|
|
|
๋ค์ ๋ช
๋ น์ด๋ก ์ ์ฒด ํ
์คํธ ๋ฌถ์ ์คํํ ์๋ ์์ง๋ง, Diffusers๊ฐ ๋ง์ด ์ฑ์ฅํ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋นํ ์๊ฐ ๋ด์ ์์ฑํ๊ธฐ ์ํด์๋ ๊ฐ๋ ฅํ ์ปดํจํฐ๊ฐ ํ์ํฉ๋๋ค. ๋ค์์ ํด๋น ๋ช
๋ น์ด์
๋๋ค: |
|
|
|
```bash |
|
$ make test |
|
``` |
|
|
|
๐งจ Diffusers๋ ์์ค ์ฝ๋๋ฅผ ์ผ๊ด๋๊ฒ ํฌ๋งทํ
ํ๊ธฐ ์ํด `black`๊ณผ `isort`๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ํ์๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ ์คํ์ผ ์์ ๋ฐ ์ฝ๋ ๊ฒ์ฆ์ ์ ์ฉํ ์ ์์ต๋๋ค: |
|
|
|
|
|
```bash |
|
$ make style |
|
``` |
|
|
|
๐งจ Diffusers `ruff`์ ๋ช๊ฐ์ ์ปค์คํ
์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋ฉ ์ค์๋ฅผ ํ์ธํฉ๋๋ค. ํ์ง ์ ์ด๋ CI์์ ์๋ํ์ง๋ง, ๋์ผํ ๊ฒ์ฌ๋ฅผ ๋ค์์ ํตํด์๋ ํ ์ ์์ต๋๋ค: |
|
|
|
```bash |
|
$ make quality |
|
``` |
|
|
|
๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๋ง์กฑํ๋ค๋ฉด `git add`๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ํ์ผ์ ์ถ๊ฐํ๊ณ `git commit`์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ๋ก์ปฌ์์ผ๋ก ์ ์ฅํ๋ค: |
|
|
|
```bash |
|
$ git add modified_file.py |
|
$ git commit -m "A descriptive message about your changes." |
|
``` |
|
|
|
์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์๋ณธ ์ ์ฅ์์ ๋๊ธฐํํ๋ ๊ฒ์ ์ข์ ์์ด๋์ด์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ ์ ์์ต๋๋ค: |
|
|
|
```bash |
|
$ git pull upstream main |
|
``` |
|
|
|
๋ณ๊ฒฝ ์ฌํญ์ ๊ณ์ ์ ํธ์ํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์: |
|
|
|
```bash |
|
$ git push -u origin a-descriptive-name-for-my-changes |
|
``` |
|
|
|
6. ๋ง์กฑํ์
จ๋ค๋ฉด, GitHub์์ ํฌํฌํ ์นํ์ด์ง๋ก ์ด๋ํ์ฌ 'Pull request'๋ฅผ ํด๋ฆญํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ํ๋ก์ ํธ ๋ฉ์ธํ
์ด๋์๊ฒ ๊ฒํ ๋ฅผ ์์ฒญํฉ๋๋ค. |
|
|
|
7. ๋ฉ์ธํ
์ด๋๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์์ฒญํ๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค. ํต์ฌ ๊ธฐ์ฌ์๋ค์๊ฒ๋ ์ผ์ด๋๋ ์ผ์
๋๋ค! ๋ฐ๋ผ์ ๋ณ๊ฒฝ ์ฌํญ์ Pull request์์ ๋ณผ ์ ์๋๋ก ๋ก์ปฌ ๋ธ๋์น์์ ์์
ํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํฌ์ ํธ์ํ๋ฉด ์๋์ผ๋ก Pull request์ ๋ํ๋ฉ๋๋ค. |
|
|
|
### ํ
์คํธ |
|
|
|
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์๊ณผ ์ฌ๋ฌ ์์ ๋ฅผ ํ
์คํธํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ํ
์คํธ ๋ฌถ์์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ
์คํธ๋ [tests ํด๋](https://github.com/huggingface/diffusers/tree/main/tests)์์ ์ฐพ์ ์ ์์ต๋๋ค. |
|
|
|
`pytest`์ `pytest-xdist`๋ฅผ ์ ํธํ๋ ์ด์ ๋ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํด `pytest`๋ก ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: |
|
|
|
```bash |
|
$ python -m pytest -n auto --dist=loadfile -s -v ./tests/ |
|
``` |
|
|
|
์ฌ์ค, `make test`๋ ์ด๋ ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค! |
|
|
|
์์
์ค์ธ ๊ธฐ๋ฅ๋ง ํ
์คํธํ๊ธฐ ์ํด ๋ ์์ ํ
์คํธ ์ธํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. |
|
|
|
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฆฐ ํ
์คํธ๋ ๊ฑด๋๋๋๋ค. `RUN_SLOW` ํ๊ฒฝ ๋ณ์๋ฅผ `yes`๋ก ์ค์ ํ์ฌ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ๋ง์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ถฉ๋ถํ ๋์คํฌ ๊ณต๊ฐ๊ณผ ์ข์ ์ธํฐ๋ท ์ฐ๊ฒฐ ๋๋ ๋ง์ ์ธ๋ด์ฌ์ด ํ์ํฉ๋๋ค! |
|
|
|
```bash |
|
$ RUN_SLOW=yes python -m pytest -n auto --dist=loadfile -s -v ./tests/ |
|
``` |
|
|
|
`unittest`๋ ์์ ํ ์ง์๋ฉ๋๋ค. ๋ค์์ `unittest`๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์
๋๋ค: |
|
|
|
```bash |
|
$ python -m unittest discover -s tests -t . -v |
|
$ python -m unittest discover -s examples -t examples -v |
|
``` |
|
|
|
### upstream(main)๊ณผ forked main ๋๊ธฐํํ๊ธฐ |
|
|
|
upstream ์ ์ฅ์์ ๋ถํ์ํ ์ฐธ์กฐ ๋
ธํธ๋ฅผ ์ถ๊ฐํ๊ณ ๊ด๋ จ ๊ฐ๋ฐ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒ์ ํผํ๊ธฐ ์ํด, |
|
forked ์ ์ฅ์์ main ๋ธ๋์น๋ฅผ ๋๊ธฐํํ ๋ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์: |
|
1. ๊ฐ๋ฅํ ๊ฒฝ์ฐ, forked ์ ์ฅ์์์ ๋ธ๋์น์ PR์ ์ฌ์ฉํ์ฌ upstream๊ณผ ๋๊ธฐํํ๋ ๊ฒ์ ํผํ์ธ์. ๋์ forked main์ผ๋ก ์ง์ ๋ณํฉํ์ธ์. |
|
2. PR์ด ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ, ๋ธ๋์น๋ฅผ ์ฒดํฌ์์ํ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ธ์: |
|
```bash |
|
$ git checkout -b your-branch-for-syncing |
|
$ git pull --squash --no-commit upstream main |
|
$ git commit -m '<your message without GitHub references>' |
|
$ git push --set-upstream origin your-branch-for-syncing |
|
``` |
|
|
|
### ์คํ์ผ ๊ฐ์ด๋ |
|
|
|
Documentation string์ ๋ํด์๋, ๐งจ Diffusers๋ [Google ์คํ์ผ](https://google.github.io/styleguide/pyguide.html)์ ๋ฐ๋ฆ
๋๋ค. |
|
|