/
Search

241130_1303_고급 AI 모델을 돌리려고 할때에 왜 여러개의 gpu가 아니라 한개의 비싼 gpu를 활용해서 올리려고 할까?

최근에 읽었던 논문에서 AI 모델 사이즈가 20기가인게 있는데, gpu 메모리가 8기가인 것을 10개를 둬서 분산해서 추론하려고 해도 현존하는 기술력으로는 불가하다고 한다.
다른 사람들이, AI 분산 추론의 맹점, 배치 페러럴은 가능하지만 추론 페러럴이 불가한 이유.
이렇게 말하는데,
큰 모델 같은 경우 메모리가 큰 gpu를 1개만 이용해서 돌리려는 이유가 뭘까?
큰 모델의 경우 메모리가 큰 GPU를 하나만 이용해서 돌리려는 이유는 다음과 같음. 이는 AI 분산 추론의 한계점과 관련됨.

1. 모델 분할의 어려움

AI 모델은 거대한 그래프 형태로 정의되며, 레이어 간의 종속성(Dependency)이 강함.
모델을 여러 GPU로 나누려면 각 레이어나 블록이 다른 GPU에 배치되어야 하고, GPU 간 통신으로 연산 결과를 교환해야 함.
GPU 간 데이터 전송은 PCIe 또는 NVLink를 통해 이루어지는데, 이 전송 시간이 연산 시간보다 오래 걸릴 수 있음.
결과적으로 분산 추론이 효율적이지 않음.

2. 추론 병렬화(Parallelism)의 제약

학습 과정에서는 **데이터 병렬화(Data Parallelism)**와 **모델 병렬화(Model Parallelism)**를 비교적 쉽게 구현 가능.
그러나 **추론 병렬화(Inference Parallelism)**는 입력 데이터 크기가 크거나 실시간 응답이 필요한 경우 효율적으로 처리하기 어려움.
배치 단위로 병렬화하는 것은 가능하나, 모델을 여러 GPU에 분산해 단일 샘플을 처리하는 것은 성능 병목을 초래.

3. GPU 간 메모리 공유의 한계

모델의 가중치(Weights)와 중간 활성화 값(Activations)이 GPU 메모리에 동시에 적재되어야 함.
여러 GPU에 가중치를 분산하면, 추론 시 각 GPU가 활성화 값을 서로 공유해야 하는데, 이 과정이 매우 느림.
따라서 큰 모델은 충분히 큰 GPU 메모리를 가진 단일 GPU에서 추론하는 것이 현실적으로 효율적.

4. 동기화와 통신 비용

모델 병렬화를 구현하면 각 GPU의 계산 결과를 동기화해야 하는데, 이로 인해 통신 오버헤드가 발생.
특히, 추론 단계는 계산이 아닌 메모리 접근과 데이터 이동이 더 중요한 경우가 많아, 동기화 비용이 커짐.

5. 최적화된 라이브러리 부족

현재 많은 프레임워크(PyTorch, TensorFlow 등)는 데이터 병렬화를 중심으로 최적화되어 있음.
모델 병렬화와 GPU 분산 추론을 효율적으로 지원하는 기술은 아직 초기 단계이며, 구현 난이도가 높음.

결론: 큰 GPU를 선호하는 이유

1.
단순성
모델을 쪼개지 않고 단일 GPU에서 실행하면 설정과 최적화가 간단.
2.
최고 성능
큰 GPU 메모리에서 모든 모델 데이터를 한 번에 적재하여 연산하면, GPU 간 통신 비용 없이 최대 성능을 발휘.
3.
유지보수 용이성
분산된 GPU 환경에서 동기화 문제를 해결하지 않아도 되므로 시스템 안정성 향상.
4.
대규모 AI 모델 지원
최근 A100, H100 등 대용량 GPU는 80~120GB VRAM을 제공하며, 이를 활용하면 대규모 모델도 단일 GPU에서 충분히 실행 가능.
큰 GPU 하나로 추론하는 것은 통신 병목과 분산 관리의 복잡성을 줄이고, 최적의 성능과 단순성을 제공하기 때문에 선호됨.

이렇게 gpt가 말하는데, 내 의견을 좀더 넣어보겠다.

AI 모델의 추론을 GPU 메모리가 작은 여러 장치에 분산하지 않고, 메모리가 큰 GPU 하나를 이용하는 이유는 현재의 기술적 한계와 효율성 문제에 기인함. 이를 분명히 이해하기 위해 아래와 같은 요점을 살펴볼 수 있음:

1. 모델 분할 및 병렬 처리의 기술적 한계

AI 모델은 일반적으로 하나의 연산 그래프로 설계되며, 각 연산이 상호 의존적임.
특정 레이어에서 출력된 데이터가 다음 레이어의 입력으로 사용되므로, 모델을 여러 GPU로 나누는 것이 쉽지 않음.
분할된 GPU 간 통신 지연(latency)이 성능 병목을 유발.
레이어 간 메모리 전송 비용이 커져 오히려 속도가 느려질 가능성.
PyTorch, TensorFlow 등 주요 프레임워크가 일부 "모델 병렬화" 기능을 제공하지만, 이는 특정한 구조에 한정됨(예: Transformer 모델의 단순 병렬화).

2. 배치 병렬화와 모델 병렬화의 차이

배치 병렬화 (Data Parallelism):
동일한 모델 복사본을 여러 GPU에 올리고, 서로 다른 데이터 배치를 동시에 처리.
데이터가 독립적이기 때문에 GPU 간 동기화 부담이 적고 효율적.
GPU 메모리에 모델 크기 전체가 들어가야 하므로, 큰 모델에는 적합하지 않음.
모델 병렬화 (Model Parallelism):
모델을 여러 GPU에 나누어 올려 각 GPU가 모델의 다른 부분을 처리.
통신 오버헤드가 크고, 분산 추론에서 성능 저하가 심함.
현재의 프레임워크로는 큰 모델을 효율적으로 분산 실행하기 어려움.

3. 추론에서 메모리 연속성이 중요한 이유

추론 중 모델은 전체 그래프를 메모리에 로드해야 하며, 실행 도중 레이어 간 중간 결과값도 GPU 메모리에 저장됨.
분산 환경에서는 중간 결과를 다른 GPU로 전송해야 하는데, 이는 속도 저하와 동기화 문제를 유발.
단일 GPU를 사용할 경우:
레이어 간 데이터를 GPU 메모리 내부에서 직접 참조 가능.
연산의 순차적 실행이 단순화되어 성능 최적화가 쉬움.

4. 분산 추론의 맹점

GPU 간 데이터 전송은 PCIe, NVLink 등의 인터페이스를 통해 수행되는데, 이는 GPU 연산보다 훨씬 느림.
분산 환경에서 레이어 의존성을 해결하기 위한 동기화 작업이 필요.
예: GPU 1에서 연산이 끝나야 GPU 2가 작업을 시작할 수 있음.
*통신 지연(latency)**와 대역폭 한계로 인해 실제 성능이 크게 저하.

5. 메모리가 큰 GPU 하나를 사용하는 이유

단일 GPU는 모델 그래프와 데이터를 하나의 메모리 공간에서 효율적으로 관리 가능.
분산 추론에 비해 통신 오버헤드가 없고, 레이어 간 동기화 작업도 필요 없음.
H100 GPU, A100 GPU와 같이 메모리가 40GB~80GB인 고성능 GPU는 대형 모델을 실행할 수 있는 환경 제공.
단일 GPU를 사용하는 경우, 개발 복잡도가 낮아지고 유지보수가 용이함.

6. 분산 추론의 가능성과 한계

가능성:
현재 연구 중인 기술, 예를 들어 Tensor ParallelismPipeline Parallelism, **ZeRO(Zero Redundancy Optimizer)**를 활용하면 대형 모델 분산이 가능.
대규모 언어 모델(예: GPT-3)에서는 모델 병렬화와 배치 병렬화를 혼합하여 사용.
한계:
실시간 추론 환경에서는 GPU 간 동기화와 통신 지연이 여전히 병목.
대부분의 산업 환경에서 모델 단순화를 통해 단일 GPU 사용이 선호됨.

결론

대형 모델은 GPU 메모리 전체를 사용하는 구조로 설계되기 때문에, 메모리가 큰 GPU 한 대에서 실행하는 것이 더 간단하고 효율적.
분산 추론은 통신 오버헤드와 동기화 문제로 인해 성능 저하가 발생하며, 모델 추론 환경에서 적합하지 않은 경우가 많음.
이를 해결하기 위해 연구 중인 다양한 기술이 있지만, 아직 실시간 추론에는 단일 고성능 GPU가 최적의 선택.

+추가 (241130_1627)

싱글 GPU에서 학습된 모델을 여러 GPU로 추론하는 것은 가능하지만, 특정 조건에서만 효과적이며, 분산 추론의 제한 사항을 이해하고 설정을 잘 조정해야 함.
아래는 여러 GPU로 모델 추론을 수행하는 방식제약 사항에 대한 설명:

1. 여러 GPU로 추론 가능한 경우

(1) 데이터 병렬화(Data Parallelism)

여러 GPU에 동일한 모델 복사본을 올리고, 다른 데이터 배치를 동시에 처리.
주요 특징:
각 GPU가 독립적으로 같은 모델로 작업을 수행.
GPU 간 통신이 최소화되므로 효율적.
예:
10개의 GPU에서 각각 다른 입력 배치를 처리하면 10배 가까운 처리 속도 증가 가능.
한계:
모델 크기가 각 GPU 메모리보다 작아야 함.
단일 입력에 대해 추론을 가속하는 데는 적합하지 않음.

(2) 모델 병렬화(Model Parallelism)

모델을 여러 GPU에 나누어 로드하고, 각 GPU가 모델의 다른 레이어를 처리.
주요 특징:
GPU 간 중간 데이터(텐서) 전송이 필요하므로 통신 오버헤드 발생.
매우 큰 모델(예: GPU 메모리에 단일 GPU로 적재 불가능한 모델)에서 사용.
한계:
구현 복잡도가 높음.
실시간 추론에는 적합하지 않음.

(3) 파이프라인 병렬화(Pipeline Parallelism)

모델의 레이어를 분리하여 각 GPU가 연속적으로 작업을 처리.
주요 특징:
데이터가 순차적으로 흐르며 각 GPU에서 부분 모델 실행.
대규모 모델에서 메모리 분산 가능.
한계:
GPU 간 동기화 지연이 성능 병목.
효율성이 배치 크기에 크게 의존.

(4) 혼합 방식 (Hybrid Parallelism)

데이터 병렬화와 모델 병렬화, 또는 파이프라인 병렬화를 결합.
대형 AI 시스템(GPT-3, BERT)에서 자주 사용됨.
GPU 자원을 최적 활용 가능하지만 설정 복잡도가 높음.

2. 여러 GPU로 추론이 어려운 경우

(1) 단일 입력 추론 (Single Input Inference)

한 개의 입력 데이터로 추론하려는 경우, 데이터 병렬화가 불가능.
모델 병렬화와 파이프라인 병렬화는 GPU 간 통신 오버헤드로 인해 오히려 속도가 느려질 가능성.

(2) 동기화 및 통신 오버헤드

GPU 간 통신 비용(P2P 전송, NVLink 또는 PCIe 대역폭)이 GPU 계산 속도를 따라가지 못함.
특히, 추론 과정에서는 통신 병목 현상이 더 두드러질 수 있음.

(3) 작은 배치 크기

GPU 간 작업을 나누려면 배치 크기가 커야 함.
배치 크기가 작을 경우, 각 GPU가 처리할 데이터가 부족해 자원 낭비 발생.

3. 여러 GPU 추론 시 최적화 방법

(1) 텐서 병렬화 (Tensor Parallelism)

모델의 연산을 텐서 단위로 나누어 GPU에 분산.
Ex) GPT, BERT와 같은 Transformer 기반 모델에서 활용.
PyTorch의 Megatron-LM, DeepSpeed 등에서 지원.

(2) 배치 병렬화 최적화

대량의 데이터를 배치 크기를 늘려 GPU에 병렬 처리.
Ex) 입력 이미지나 텍스트 데이터를 대규모 배치로 나눠 여러 GPU에서 동시에 추론.

(3) Inference Engine 활용

NVIDIA Triton Inference Server, TensorRT 등을 사용하여 분산 추론 최적화.
GPU 간 통신 및 메모리 활용 효율성을 높여 성능 향상.

(4) 지연 동기화 (Asynchronous Inference)

각 GPU에서 독립적으로 작업을 수행하고, 결과를 비동기적으로 결합.
입력 데이터 독립성이 높을 때 적합.
싱글 GPU 학습 모델을 여러 GPU로 추론 가능 여부
데이터 병렬화: 가능, 입력 데이터를 병렬로 처리하여 성능 개선.
모델 병렬화: 가능, 하지만 효율성이 떨어질 가능성 높음.
실시간 단일 입력 추론: 통신 오버헤드로 인해 여러 GPU로 분산하기 어려움.
큰 모델을 다루는 경우
메모리가 충분히 큰 GPU를 사용하는 것이 더 간단하고 효율적.
여러 GPU를 활용하려면 PyTorch, TensorFlow의 분산 추론 옵션과 Inference Engine을 활용한 최적화 필요.

안녕하세요

한국전자기술연구원 김영광입니다.
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

I'm Yeonggwang Kim from the Korea Electronics Research Institute.
For technical and business inquiries, please contact me at “glory@keti.re.kr”