# 분산 추론

Distributed inference는 워크로드를 여러 GPU에 분산하여 처리합니다. 더 큰 모델을 메모리에 적재하고, 동시에 더 많은 프롬프트를 처리하는 데 유용합니다.

Diffusers는 네 가지 전략을 지원합니다. 각 전략에는 전용 가이드가 있으며, 이 페이지는 전략 선택을 돕습니다.

## 전략 선택

각 전략은 서로 다른 문제를 해결하므로, 자원을 제한하는 요인에 따라 하나를 선택하세요.

| 전략 | 분할 | 감소 | 프롬프트 1개당 지연 시간 | 가 가장 좋은 경우 |
|---|---|---|---|---|
| [데이터 병렬성](../optimization/data_parallelism) | 레플리카 간 프롬프트 | 각 GPU가 전체 복사본을 보유하므로, 아무것도 하지 않습니다 | 변경 없음 | 모델이 이미 적합하고 프롬프트가 많은 경우 |
| [device_map](../optimization/device_map) | 기기 간 구성 요소 | 가중치 메모리 | 약간 더 나쁨 | 모델이 적합하지 않고 인터커넥트가 느립니다 |
| [컨텍스트 병렬성](../optimization/context_parallelism) | 입력 시퀀스 | 활성화 메모리 | lower | 시퀀스가 길 경우, 예를 들어 고해상도 이미지나 비디오 |
| [텐서 병렬성](../optimization/tensor_parallelism) | 가중치 행렬 | 가중치 메모리 | lower | 하나의 구성 요소의 가중치가 적합하지 않고 인터커넥트가 빠른 경우 |

실용적인 가이드라인:

- 모델이 이미 적합하고 프롬프트가 많다면 데이터 병렬성을 사용하세요. 모델에 영향을 주지 않으면서 GPU 수에 따라 처리량을 확장하고, 단일 프롬프트 지연 시간은 그대로 유지됩니다. [Accelerate](../optimization/data_parallelism#accelerate) 또는 [PyTorch Distributed](../optimization/data_parallelism#pytorch-distributed)로 설정하세요.
- 단일 컴포넌트의 가중치가 메모리에 맞지 않는 경우, 메모리와 지연 시간 모두를 줄여주기 때문에 먼저 텐서 병렬을 시도해 보세요. 텐서 병렬은 모든 블록 경계에서 통신을 수행하므로 NVLink와 같은 빠른 인터커넥트가 필요합니다. PCIe에서는 레이어별 트래픽이 절약되는 계산량보다 커질 수 있으며, 이 경우 `device_map`이 더 나은 선택이 됩니다. `device_map`은 개별 컴포넌트는 문제가 없으나 전체적으로 크기가 너무 큰 경우에도 처리합니다.
- 활성화(activations)가 아니라 가중치가 문제라면 컨텍스트 병렬(context parallelism)을 사용하세요. 이는 프레임이 많은 대형 이미지나 비디오와 같은 긴 시퀀스에 도움이 됩니다. [Context parallelism](../optimization/context_parallelism) 가이드의 벤치마크에서 백엔드를 선택하세요.
- 가중치와 시퀀스가 모두 너무 크면 Diffusers는 동일한 모델에 텐서 병렬성과 컨텍스트 병렬성을 동시에 적용할 수 없습니다. `ParallelConfig`는 두 구성을 모두 전달하면 오류를 발생시키고, `enable_parallelism`는 이미 병렬화된 모델에 두 번째로 호출할 수 없습니다.

[xDiT](../optimization/xdit)와 [ParaAttention](../optimization/para_attn) 커뮤니티 통합은 자체적인 컨텍스트 병렬성 구현을 제공합니다.

