•
최근에 읽었던 논문에서 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 Parallelism과 Pipeline 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”