Buckets:
| # 커뮤니티 파이프라인 및 구성 요소 | |
| 커뮤니티 파이프라인은 원본 논문 구현과 다른 [DiffusionPipeline](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline) 클래스입니다. 추가 기능을 제공하거나 원본 파이프라인 구현을 확장합니다. | |
| > [!TIP] | |
| > 추론 및 학습 예제가 포함된 [diffusers/examples/community](https://github.com/huggingface/diffusers/tree/main/examples/community)의 커뮤니티 파이프라인을 확인해 보세요. | |
| Community pipelines은 Hub 또는 Diffusers의 GitHub 저장소에 저장됩니다. Hub pipelines은 완전히 사용자 정의할 수 있으며(scheduler, models, pipeline 코드 등) GitHub pipelines은 사용자 정의 pipeline 코드만 제한적으로 사용할 수 있습니다. 아래 표에서 두 가지 pipeline 유형을 비교해 보세요. | |
| | | GitHub | Hub | | |
| |---|---|---| | |
| | 사용 | `custom_pipeline="<filename_without_.py>"` | Hub 저장소 ID 또는 `_class_name`이 사용자 정의 코드를 가리킬 때 `trust_remote_code=True` | | |
| | 리뷰 프로세스 | GitHub에서 Pull Request를 열고 Diffusers 팀의 리뷰 과정을 거친 후 병합됩니다. 이 옵션은 더 느립니다. | 리뷰 없이 Hub 저장소에 직접 업로드합니다. 이 옵션이 가장 빠릅니다. | | |
| | 가시성 | 공식 Diffusers 저장소 및 문서에 포함되어 있습니다. | Hub 프로필에 포함되며, 사용량과 홍보에 따라 노출도가 결정됩니다. | | |
| ## 커뮤니티 파이프라인 로드 | |
| `custom_pipeline`를 [from_pretrained()](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained)에 전달하여 두 유형의 커뮤니티 파이프라인 중 하나를 로드합니다. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| `custom_revision` 인수를 [from_pretrained()](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained)에 추가하여 특정 버전(예: `v0.30.0` 또는 `main`)의 커뮤니티 파이프라인을 로드할 수 있습니다. 기본적으로 커뮤니티 파이프라인은 Diffusers의 최신 안정 버전에서 로드됩니다. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix", | |
| custom_revision="main", | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > Hugging Face Hub가 [파일](https://huggingface.co/docs/hub/security-malware)을 스캔하는 동안에도 Hub 파이프라인 코드를 확인하여 안전성을 보장해야 합니다. | |
| 커뮤니티 파이프라인을 로드하는 방법은 몇 가지가 있습니다. | |
| - `custom_pipeline`에 경로를 전달하여 로컬 커뮤니티 파이프라인을 로드합니다. 해당 디렉터리에는 파이프라인 클래스를 포함하는 `pipeline.py` 파일이 있어야 합니다. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-3-medium-diffusers", | |
| custom_pipeline="path/to/pipeline_directory", | |
| trust_remote_code=True, | |
| dtype=torch.float16, | |
| device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| ``` | |
| - `custom_pipeline` 인수는 [from_pipe()](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe)에서도 지원되며, 이는 추가 메모리 없이 [파이프라인을 재사용](./loading#reusing-models-in-multiple-pipelines)하는 데 유용합니다. 메모리 사용량은 로드된 가장 큰 파이프라인으로만 제한됩니다. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline_sd = DiffusionPipeline.from_pretrained( | |
| "emilianJR/CyberRealistic_V3", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu" | |
| ) | |
| pipeline_lpw = DiffusionPipeline.from_pipe( | |
| pipeline_sd, custom_pipeline="lpw_stable_diffusion" | |
| ) | |
| ``` | |
| [from_pipe()](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe) 메서드는 커뮤니티 파이프라인을 로드할 때 특히 유용합니다. 많은 커뮤니티 파이프라인에는 사전 학습된 가중치가 없기 때문입니다. 커뮤니티 파이프라인은 일반적으로 기존 파이프라인 위에 기능을 추가합니다. | |
| ## 커뮤니티 구성 요소 | |
| Community components를 사용하면 Diffusers에서 지원하지 않는 커스텀 transformers, UNets, VAEs, schedulers를 사용하여 파이프라인을 구축할 수 있습니다. 이러한 컴포넌트는 자체 Python 모듈이 필요합니다. | |
| 이 섹션에서는 [showlab/show-1-base](https://huggingface.co/showlab/show-1-base)를 예로 들어 사용자가 커뮤니티 구성 요소를 활용하여 커뮤니티 파이프라인을 구축하는 방법을 보여줍니다. | |
| 1. 필요한 구성 요소인 스케줄러와 이미지 프로세서를 로드합니다. 텍스트 인코더는 일반적으로 [Transformers](https://huggingface.co/docs/transformers/index)에서 가져옵니다. | |
| ```python | |
| from transformers import T5Tokenizer, T5EncoderModel, CLIPImageProcessor | |
| from diffusers import DPMSolverMultistepScheduler | |
| pipeline_id = "showlab/show-1-base" | |
| tokenizer = T5Tokenizer.from_pretrained(pipeline_id, subfolder="tokenizer") | |
| text_encoder = T5EncoderModel.from_pretrained(pipeline_id, subfolder="text_encoder") | |
| scheduler = DPMSolverMultistepScheduler.from_pretrained(pipeline_id, subfolder="scheduler") | |
| feature_extractor = CLIPImageProcessor.from_pretrained(pipeline_id, subfolder="feature_extractor") | |
| ``` | |
| > [!WARNING] | |
| > 2단계와 3단계에서, 이 예제가 작동하려면 사용자 정의 [UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) 및 [pipeline](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) 구현이 해당 파일에 표시된 형식과 일치해야 합니다. | |
| 2. [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py)에 이미 구현된 [custom UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py)를 로드합니다. [UNet3DConditionModel](/docs/diffusers/v0.43.0/ko/api/models/unet3d-cond#diffusers.UNet3DConditionModel)이 이미 Diffusers에 존재하기 때문에 [UNet3DConditionModel](/docs/diffusers/v0.43.0/ko/api/models/unet3d-cond#diffusers.UNet3DConditionModel) 클래스 이름은 커스텀 구현인 `ShowOneUNet3DConditionModel`으로 변경되었습니다. `ShowOneUNet3DConditionModel` 클래스에 필요한 모든 구성 요소는 `showone_unet_3d_condition.py`에 배치해야 합니다. | |
| ```python | |
| from showone_unet_3d_condition import ShowOneUNet3DConditionModel | |
| unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet") | |
| ``` | |
| 3. 커스텀 파이프라인 코드([pipeline_t2v_base_pixel.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/pipeline_t2v_base_pixel.py)에 이미 구현되어 있음)를 로드합니다. 이 스크립트에는 텍스트에서 비디오를 생성하기 위한 커스텀 `TextToVideoIFPipeline` 클래스가 포함되어 있습니다. 커스텀 UNet과 마찬가지로, `TextToVideoIFPipeline`에 필요한 모든 코드는 `pipeline_t2v_base_pixel.py`에 배치해야 합니다. | |
| `TextToVideoIFPipeline`을 `ShowOneUNet3DConditionModel`로 초기화합니다. | |
| ```python | |
| import torch | |
| from pipeline_t2v_base_pixel import TextToVideoIFPipeline | |
| pipeline = TextToVideoIFPipeline( | |
| unet=unet, | |
| text_encoder=text_encoder, | |
| tokenizer=tokenizer, | |
| scheduler=scheduler, | |
| feature_extractor=feature_extractor, | |
| ) | |
| pipeline = pipeline.to("cuda") # or "mps", "xpu", "cpu" | |
| ``` | |
| 4. Hub에 파이프라인을 업로드하여 커뮤니티와 공유하세요. | |
| ```python | |
| pipeline.push_to_hub("custom-t2v-pipeline") | |
| ``` | |
| pipeline가 성공적으로 push된 후, 다음 변경 사항을 적용합니다. | |
| - [model_index.json](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2)의 `_class_name` 속성을 `["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]`(으)로 변경하세요. | |
| - `showone_unet_3d_condition.py`를 [unet](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) 하위 폴더에 업로드하세요. | |
| - `pipeline_t2v_base_pixel.py`를 [pipeline 저장소](https://huggingface.co/sayakpaul/show-1-base-with-code/tree/main)에 업로드합니다. | |
| 추론을 실행하려면, 백그라운드에서 모든 "마법"을 처리하기 위해 파이프라인을 초기화할 때 `trust_remote_code` 인수를 추가하세요. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16 | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > `trust_remote_code=True`를 사용할 때 추가적인 안전 조치로, [from_pretrained()](/docs/diffusers/v0.43.0/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained)의 `revision` 인자에 커밋 해시를 전달하여 코드가 새로운 악성 코드로 업데이트되지 않았는지 확인하세요(모델 소유자를 완전히 신뢰하는 경우를 제외하고). | |
| ## 다음 단계 | |
| - 모두가 지연 없이 쉽게 작업을 공유할 수 있도록 커뮤니티 파이프라인을 추가하는 이유에 대한 더 자세한 맥락은 Issue [#841](https://github.com/huggingface/diffusers/issues/841)을 참고하세요. | |
| - 커뮤니티 파이프라인의 추가 예시로 `trust_remote_code` 기능을 함께 사용하는 [stabilityai/japanese-stable-diffusion-xl](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) 저장소를 확인해 보세요. | |
Xet Storage Details
- Size:
- 10.2 kB
- Xet hash:
- 2c8ac21091f70d7f9f09c21a94bfa8e2e1d885914220f293b5f5bf45d850a786
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.