텐서 병렬 처리는 여러 GPU에서 로컬 AI 추론을 어떻게 분할하나요?

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

텐서 병렬화는 각 트랜스포머 레이어 내부의 대규모 가중치 텐서를 여러 GPU에 나누고 부분 결과를 결합하여 로컬 AI 추론을 분할합니다.

이는 각 GPU에 별도의 요청을 할당하거나 서로 다른 레이어를 서로 다른 장치에 배정하는 것과 다릅니다. 텐서 병렬화에 참여하는 모든 GPU는 동일한 레이어에서, 생성되는 거의 모든 토큰마다 작업에 참여합니다. 이 방식은 여러 가정용 GPU에 하나의 모델을 분산해 적재할 수 있지만, GPU 간 통신을 추론의 핵심 경로에 포함시킵니다.

텐서 병렬화는 전체 모델을 복사하는 대신 하나의 레이어를 분할합니다

데이터 병렬화는 각 GPU에 모델 사본을 제공하고 요청이나 배치를 나눕니다. 반면 텐서 병렬화는 하나의 모델에 대해 개별 레이어 내부의 대규모 파라미터 텐서를 여러 장치에 나눕니다.

NVIDIA NeMo는 TP를 개별 레이어의 파라미터 텐서를 여러 GPU에 분산하는 방식으로 정의합니다. 각 GPU는 해당 행렬의 일부 샤드만 보유합니다.

이는 하나의 모델 또는 대규모 레이어 하나가 단일 가정용 GPU에 여유 있게 들어가지 않을 때 유용합니다.

열 및 행 샤드는 행렬 곱셈 작업을 분할합니다

트랜스포머 레이어에는 대규모 선형 프로젝션이 포함됩니다. 열 병렬 분할은 서로 다른 출력 열을 GPU별로 할당하고, 행 병렬 분할은 서로 다른 입력 행 또는 특성 범위를 할당합니다.

PyTorch의 텐서 병렬화 튜토리얼은 트랜스포머 레이어에 행 단위 및 열 단위 병렬화 방식을 적용합니다. 각 랭크는 로컬 가중치 샤드에서 부분 행렬 곱을 계산합니다.

모델은 여전히 하나의 논리적 레이어를 나타냅니다. 분할은 수학 연산의 실행 위치와 부분 결과를 결합하는 방식을 바꿉니다.

집단 통신은 레이어의 논리적 출력을 재구성합니다

각 GPU가 텐서의 일부만 보기 때문에, 다음 계산에 필요한 표현을 얻기 전에 일부 연산에서 all-reduce, all-gather, reduce-scatter 또는 이에 상응하는 집단 통신이 필요합니다.

Open MPI는 AllReduce를 프로세스 간 값을 결합한 뒤 그 결과를 모든 참여자에게 다시 배포하는 연산으로 정의합니다. 텐서 병렬 런타임은 all-gather 및 reduce-scatter와 함께 이러한 집단 통신을 사용하여 샤드로 나뉜 레이어 결과를 재구성하거나 재분배합니다.

가정용 워크스테이션에서는 GPU 간 연결 경로의 품질에 따라 분할이 시간을 절약할지, 아니면 단순히 용량만 확장할지가 결정될 수 있습니다.

통신이 레이어 단위로 발생하므로 고속 인터커넥트가 중요합니다

텐서 병렬화에서는 각 트랜스포머 블록과 생성되는 각 토큰마다 여러 집단 통신이 필요할 수 있습니다. PCIe만 사용하는 시스템은 대규모 분산 작업을 위해 설계된 고급 가속기 패브릭보다 피어 대역폭이 훨씬 낮습니다.

AMD RCCL은 PCIe로 연결된 GPU의 피어 투 피어 전송을 문서화하고 있습니다. 정확한 집단 통신 라이브러리는 플랫폼마다 다르지만 동일한 토폴로지 제약이 적용됩니다.

두 GPU의 총 VRAM이 더 큰 모델을 실행하기에 충분하더라도, 각 레이어가 동기화를 기다리기 때문에 토큰 처리량이 예상보다 낮아질 수 있습니다.

GPU 성능이 서로 다르면 가장 느린 샤드가 전체 속도를 결정할 수 있습니다

텐서 병렬 레이어는 필요한 부분 결과가 도착한 뒤에야 다음 단계로 진행됩니다. 한 GPU의 연산 처리량이나 메모리 대역폭이 낮거나 연결 속도가 느리면, 더 빠른 랭크가 기다리는 데 시간을 쓸 수 있습니다.

DeepSpeed의 자동 텐서 병렬 추론 기능은 추론 프로세스 그룹 전체에 모델을 샤딩하는 방식을 기반으로 설계되었습니다. 실제 효율은 참여 장치가 균형 잡힌 작업량을 처리할 수 있다는 전제를 따릅니다.

서로 다른 가정용 GPU를 함께 사용하는 구성도 모델 적재 용량 측면에서는 유용할 수 있지만, 하드웨어 성능 차이가 큰 경우 동일한 샤드 크기가 항상 최적인 것은 아닙니다.

레이어 폭이 넓고 단일 GPU 메모리가 부족할 때 텐서 병렬화를 선택하세요

가장 적합한 경우는 대규모 히든 차원과 레이어 텐서를 여러 GPU에 나눠야 하는 모델이며, 특히 장치 간 로컬 인터커넥트가 빠를 때 효과적입니다. 여러 개의 독립적인 소규모 요청을 처리하는 데 항상 가장 좋은 방식은 아닙니다.

ZimaSpace의 로컬 AI 가속기 메모리 계획 문서는 용량 기준을 제시합니다. 텐서 병렬화는 하나의 모델에 속한 레이어를 여러 장치에 분산하여 이 기준을 변경합니다.

가능하다면 GPU 한 개로 먼저 벤치마크한 다음, 동일한 모델·프롬프트·컨텍스트·배치를 사용해 두 개 이상의 GPU에서도 테스트하세요. GPU별 메모리 사용량, 초당 토큰 수, 지연 시간, 집단 통신 시간, 링크 사용률을 기록하세요.

ZimaSpace의 다중 사용자 로컬 AI 부하 문서는 서비스 측면의 비교 기준을 제공합니다. TP는 하나의 모델을 여러 장치에 걸쳐 분산하고, 요청 동시성은 분산된 모델에서 몇 개의 독립적인 컨텍스트가 경쟁하는지를 결정합니다.

기술 및 AI 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.