Tech Story/AI Cloud

[Performance Testing] kt cloud AI : 가상화 환경별 GPU 기반 AI 워크로드 성능 비교

kt cloud 테크블로그 2025. 4. 14. 15:50

 [ kt cloud AI플랫폼팀 최지우 님 ] 

 

AI의 발전은 GPU를 인공지능과 데이터 분석에 없어서는 안 될 핵심 자원으로 자리매김하게 했습니다. 특히, 딥러닝과 같은 고성능 연산 작업에서 GPU의 처리 속도와 성능은 AI 모델의 결과물에 직접적인 영향을 미칩니다.

 

최근 대규모 언어 모델(LLM)의 확산과 함께, 이러한 모델을 학습하고 추론하는 데 필요한 GPU 자원의 수요가 기하급수적으로 늘어나고 있습니다. 이에 따라 GPU를 효율적으로 활용할 수 있는 클라우드 환경은 더 이상 선택이 아닌 필수로 여겨지고 있습니다. 클라우드 환경에서는 GPU가 다양한 방식으로 제공되는데, 대표적으로 가상 머신(VM)과 컨테이너 기반 가상화 기술이 있습니다.

 

각각의 가상화 방식은 자원의 활용성과 관리 효율성을 높이기 위한 목적을 가지고 있지만, AI 워크로드의 성능 측면에서는 각기 다른 결과를 보여줍니다. 예를 들어, 베어메탈 서버는 하드웨어에 직접 접근하기 때문에 이론적으로 최고의 성능을 제공하지만, 운영과 관리에서 유연성이 부족할 수 있습니다. 반대로, VM과 컨테이너는 리소스의 분리와 관리를 쉽게 해주지만, 가상화 레이어가 성능 저하를 초래할 가능성이 있습니다.

 

그렇다면 AI 워크로드에서 베어메탈, VM, 그리고 컨테이너 방식의 실제 성능 차이는 얼마나 될까요? 그리고 가상화 기술이 AI 모델 훈련과 추론 같은 중요한 작업에 어떤 영향을 미칠까요?

 

이 글에서는 GPU 서버의 가상화 방식이 AI 학습/추론의 성능에 미치는 영향을 분석하고, 각 방식의 장단점과 숨겨진 비용을 파헤쳐 보겠습니다. 이를 통해 AI 워크로드에 가장 적합한 가상화 기술을 선택하는 데 도움이 되는 인사이트를 제공하고자 합니다.


가상화 기술 개요

클라우드 환경에서 GPU 서버를 제공하는 방식은 크게 베어메탈, 가상 머신(VM), 컨테이너로 나눌 수 있습니다. 이 세 가지 방식은 각기 다른 자원 활용 방식과 관리 효율성, 성능 최적화를 목표로 하며, 특히 AI 워크로드에서의 영향은 각 방식마다 차이를 보입니다.

 

베어메탈(Bare Metal) 방식은 물리적인 하드웨어에 가상화 계층 없이 직접 접근하는 방식입니다. 이 방식에서는 GPU와 CPU 자원을 최대한 효율적으로 활용할 수 있어 성능 최적화가 용이합니다. 가상화 오버헤드가 없기 때문에 대규모 AI 모델 훈련이나 실시간 추론과 같은 고성능 작업에 적합합니다. 그러나 베어메탈의 단점은 유연성이 부족하고 자원 분배에 제한이 있다는 점입니다. 또한 초기 설정과 유지보수 비용이 상대적으로 높다는 점도 고려해야 합니다.

 

가상 머신(Virtual Machine, VM)은 하이퍼바이저라는 소프트웨어를 통해 물리적 서버를 여러 개의 독립적인 가상 서버로 분리하는 방식입니다. 각 VM은 고유한 운영체제를 실행하며, 이로 인해 완전한 격리 환경을 제공합니다. VM의 장점은 보안 및 자원 격리가 뛰어나고, 다양한 운영체제를 동시에 실행할 수 있는 유연성을 제공한다는 것입니다. 하지만 하이퍼바이저 계층으로 인한 성능 오버헤드가 발생하며, GPU 리소스를 공유할 때 성능 저하가 있을 수 있다는 단점도 존재합니다.

 

컨테이너(Container)는 운영체제 수준에서 가상화를 구현하여 애플리케이션과 그에 필요한 라이브러리만을 패키징하는 방식입니다. 컨테이너는 호스트 운영체제를 공유하므로 매우 경량화되어 빠르게 배포할 수 있는 장점이 있습니다. Docker와 Kubernetes 같은 오케스트레이션 도구와 결합되어 사용되며, 이는 빠른 배포와 확장성을 가능하게 합니다. 또한, NVIDIA의 Docker 지원 덕분에 GPU 활용이 최적화되기도 합니다. 그러나 컨테이너는 VM보다 리소스 격리 수준이 낮을 수 있으며, GPU 자원에 대한 직접 접근이 제한될 수 있다는 단점이 존재합니다.

 

이와 같은 가상화 방식들은 각자의 강점과 단점을 가지고 있으며, AI 워크로드의 성격에 따라 최적의 선택이 달라질 수 있습니다. 다음 섹션에서는 각 방식이 실제 AI 워크로드의 성능에 어떤 영향을 미치는지 분석해보겠습니다.


AI 워크로드 성능 측정: TensorFlow AI-Benchmark, vLLM Benchmark , AutoTrain 활용

GPU 서버에서 AI 워크로드의 성능을 제대로 평가하기 위해서는 적절한 벤치마크 도구를 활용해야 합니다. 이번 섹션에서는 TensorFlow기반 AI Benchmark, vLLM Benchmark, 그리고 AutoTrain를 활용해 베어메탈, 가상 머신(VM), 컨테이너 환경에서의 AI 성능 차이를 비교합니다.

AI Benchmark(TensorFlow)

먼저 AI Benchmark는 TensorFlow 기반으로 딥러닝 모델의 학습 및 추론 속도를 평가하기 위한 가벼운 솔루션입니다. 총 19개의 모델 섹션과 42개의 테스트로 구성되어 있습니다. 마지막으로 릴리즈로부터 5년이 넘은 패키지이긴 하지만, 설치와 벤치마킹이 매우 간단하고 다른 벤치마크 툴과 대비하여 유사한 GPU 디바이스 성능 수치를 뽑아주기 때문에 필자는 아직도 유용하게 활용하고 있습니다. 다만, 반드시 GPU 1장만을 이용하기 때문에 다중 GPU에 대한 성능은 파악할 수 없습니다. GPU 1장의 성능을 온전하게 활용하고 있는 지를 파악하기에는 편리한 벤치마크 툴입니다.

 

TensorFlow 최신 버전인 2.18 버전에서는 Keras 버전이 3 이상으로 설치되기 때문에, 환경은 Python 3.10, TensorFlow 2.14, Keras 2.14 로 통일하여 테스트를 진행합니다.

 

만약 Python 3.8 이하 버전을 사용 중이라면, pip으로는 TensorFlow 2.13 버전까지만 설치할 수 있으므로, 우선 Python 3.10과 가상 환경을 설치해야 합니다.

sudo apt install python3.10 python3.10-venv
python3 -m venv myenv
source myenv/bin/activate

그리고 nvidia cuda 패키지들이 포함된 tensorflow[and-cuda]와, ai-benchmark를 설치합니다. 바로 실행하면 numpy 버전으로 인한 오류가 발생하니, 호환되는 버전인 numpy 1.23.4 버전으로 다운그레이드합니다.

pip install tensorflow[and-cuda]==2.14
pip install ai-benchmark
pip install numpy==1.23.4

 

이제 환경 준비는 끝났습니다. 단 세 줄의 파이썬 스크립트만으로 학습/추론 테스트를 통해 서버의 AI 워크로드 성능을 수치화할 수 있습니다.

from ai_benchmark import AIBenchmark
benchmark = AIBenchmark()
results = benchmark.run()

 

스크립트는 환경/GPU 디바이스에 따라 10분~20분 정도 소요되며, 최종적으로는 학습/추론 성능 스코어와 종합 스코어를 출력합니다. 이 수치를 통해 서버 환경 별 AI 워크로드에 대한 GPU 디바이스의 성능 차이를 분석할 수 있습니다.

1/19. MobileNet-V2
1.1 - inference | batch=50, size=224x224: 29.5 ± 1.3 ms
1.2 - training  | batch=50, size=224x224: 62.0 ± 1.1 ms

2/19. Inception-V3
2.1 - inference | batch=20, size=346x346: 34.0 ± 0.3 ms
2.2 - training  | batch=20, size=346x346: 74.2 ± 0.7 ms

3/19. Inception-V4
...
Device Inference Score: 27325
Device Training Score: 31849
Device AI Score: 59174

vLLM Benchmark

vLLM은 지난 블로그 글에서 소개한 적이 있습니다. LLM의 추론 및 서빙을 위한 라이브러리로, PagedAttention 기법을 활용하여 메모리 사용을 최적화하고 추론 속도를 향상시킵니다. HuggingFace 모델과 통합되며 NVIDIA GPU 뿐만 아니라 CPU, AMD GPU 외의 다양한 NPU까지 다양한 가속기를 지원합니다. 자세한 설명은 'AMD MI250 GPU로 vLLM 최적화하기' 글에서 vLLM 설명 문단을 참고해주세요.

 

추론 성능을 벤치마크하기 위해 vLLM 프로젝트의 Git Repository에서 제공하는 Benchmark 스크립트를 사용해보겠습니다. vllm/benchmarks at main · vllm-project/vllm 먼저 vllm을 설치합니다. 만약 PyTorch가 설치되어 있지 않아도 의존성에 의해 자동으로 설치됩니다.

pip install vllm datasets

그리고 vllm-project의 vllm Git Repository를 Clone합니다.

git clone https://github.com/vllm-project/vllm

 

설치된 경로의 benchmarks 디렉토리 아래에 다양한 benchmark 스크립트가 준비되어 있습니다. 이들 중 benchmark_thoroughput.py과 benchmark_latency.py, 그리고 benchmark_serving.py를 이용해 전체적인 추론/서빙 성능을 측정해보도록 하겠습니다.

 

latency와 serving 성능은 별도의 데이터셋이 없어도 모델만 입력하면 측정 가능하나, throughput 측정을 위해서는 데이터셋이 필요합니다. 동일한 디렉토리 경로의 README.md 파일에 테스트용 데이터셋 ShareGPT_V3_unfiltered_cleaned_split.json을 다운로드하는 방법이 설명되어 있습니다.

wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json

데이터셋을 다운로드하고 각 스크립트를 실행시킬 명령어를 준비하면 완료입니다.

python benchmark_latency.py
python benchmark_throughput.py --model meta-llama/Llama-3.3-70B-Instruct --dataset ShareGPT_V3_unfiltered_cleaned_split.json

benchmark_serving.py 스크립트는 먼전 vllm serve를 통해 localhost:8000에 모델을 서빙한 후 실행시켜야 합니다.

vllm serve meta-llama/Llama-3.3-70B-Instruct --tensor-parallel 4
python3 ./vllm/benchmarks/benchmark_serving.py --model meta-llama/Llama-3.3-70B-Instruct \
  --dataset-name sharegpt --dataset-path ./vllm/benchmarks/ShareGPT_V3_unfiltered_cleaned_split.json
  
============ Serving Benchmark Result ============
Successful requests:                     1000      
Benchmark duration (s):                  376.68    
Total input tokens:                      215196    
Total generated tokens:                  192070    
Request throughput (req/s):              2.65      
Output token throughput (tok/s):         509.91    
Total Token throughput (tok/s):          1081.21   
---------------Time to First Token----------------
Mean TTFT (ms):                          135887.52 
Median TTFT (ms):                        128111.16 
P99 TTFT (ms):                           306886.61 
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          518.93    
Median TPOT (ms):                        451.32    
P99 TPOT (ms):                           1613.18   
---------------Inter-token Latency----------------
Mean ITL (ms):                           411.09    
Median ITL (ms):                         299.84    
P99 ITL (ms):                            1616.00   
==================================================

 

여기서는 단일 노드 내 A100 80GB GPU 4장에 meta-llama/Llama-3.3-70B-Instruct 모델을 배포하여 성능 측정을 진행하겠습니다.

Autotrain

먼저 AI Training 단계에서는 HuggingFace AutoTrain을 통해 AI 워크로드에서의 성능을 평가해 보겠습니다. Hugging Face에서 개발한 AutoTrain Advanced는 여러 도메인(자연어 처리(NLP), 컴퓨터 비전(CV), 심지어 표 형식 데이터 분석)에서 최신 모델을 훈련하는 과정을 단순화하도록 설계된 강력한 No-Code 플랫폼입니다.

 

Autotrain은 공식적인 벤치마크 도구는 아니지만 AI 학습을 위한 가장 간단하고 쉬운 도구이기 때문에, 초당 처리하는 iteration 수 / 학습 속도 등을 이용해 비교를 해보겠습니다.

 

로컬에서 모델 학습을 실행하기 위해서는 우선 파이썬 패키지를 통해 Autotrain을 설치해야 합니다. 다른 패키지와의 충돌을 피하기 위해 가상 환경에 설치하는 것이 좋습니다.

pip install autotrain-advanced
pip install -U bitsandbytes

이제 CLI에서 AutoTrain을 사용할 수 있습니다.

usage: autotrain <command> [<args>]

positional arguments:
{
    app,
    llm,
    setup,
    api,
    text-classification,
    text-regression,
    image-classification,
    tabular,
    spacerunner,
    seq2seq,
    token-classification
}
    
    commands

options:
  -h, --help            show this help message and exit
  --version, -v         Display AutoTrain version
  --config CONFIG       Optional configuration file

For more information about a command, run: `autotrain <command> --help`

 

여기서는 단일 노드 내 A100 80GB GPU 8장에 meta-llama/Llama-3.3-70B-Instruct 모델을 파인튜닝하여 성능 측정을 진행하겠습니다.

autotrain llm --train --project-name "project1" --model meta-llama/Llama-3.3-70B-Instruct \
  --data-path "royboy0416/ko-alpaca" --text_column "text" \
  --peft --batch-size 4 --trainer sft --model_max_length 2048

벤치마크 결과 분석

각 환경에서 벤치마크 결과를 비교하며 다음과 같은 지표를 분석합니다.

  1. TensorFlow AI Benchmark: 각 환경에서의 Train, Inference,Total Score
  2. vLLM Benchmark: 모델 서비스 환경에서 처리량(Request/s, Total Token/s)
  3. AutoTrain: 학습 1 Epoch 과정의 소요 시간 및 처리량(iteration/s)

이 데이터를 바탕으로 가상화 계층이 AI 워크로드 성능에 미치는 영향을 구체적으로 파악해보겠습니다.


성능 비교 및 분석: 베어메탈 vs VM vs 컨테이너

1. TensorFlow AI Benchmark

  • 베어메탈
Device Inference Score: 27873
Device Training Score: 32840
Device AI Score: 60713
  • Openstack VM
Device Inference Score: 26611
Device Training Score: 31843
Device AI Score: 58454
  • VM 내 K8S Pod (Container)
Device Inference Score: 26199
Device Training Score: 31373
Device AI Score: 57572

먼저 단일 GPU를 이용한 TensorFlow AI Benchmark에서의 측정 성능은 BM > VM > Container in VM 순으로 관측되었습니다. 각 환경의 차이는 3% 내외였고, 이는 대부분의 실전 환경에서 무시해도 될 수준입니다.

[Performance Testing] kt cloud AI : 가상화 환경별 GPU 기반 AI 워크로드 성능 비교

2. vLLM Benchmark

4개의 GPU를 Tensor Parallel 처리하는 vLLM Serving 벤치마크에서는 베어메탈 환경과 VM 사이에 큰 차이가 발생하였습니다. 나열하면 Docker in BM = BM > K8S Pod in VM = VM 으로, 컨테이너 가상화로 인한 성능 차이는 거의 없는 수준이었고 오히려 컨테이너가 더 나은 성능을 보였습니다.

[Performance Testing] kt cloud AI : 가상화 환경별 GPU 기반 AI 워크로드 성능 비교

3. Autotrain-Advanced

  • 베어메탈
{'train_runtime': 14581.8735, 
'train_samples_per_second': 0.317, 
'train_steps_per_second': 0.002, 
'train_loss': 6.2323797014024525, 'epoch': 0.99}
100%|██████████| 36/36 [4:02:57<00:00, 404.94s/it]
  • Openstack VM
{'train_runtime': 14570.645, 
'train_samples_per_second': 0.317, 
'train_steps_per_second': 0.002, 
'train_loss': 6.243494775560167, 
'epoch': 0.99}
100%|██████████| 36/36 [4:02:44<00:00, 404.57s/it]

Autotrain을 이용한 학습과정에서는 베어메탈과 VM이 사실상 거의 동일한 학습 속도와 Throughput을 보여주었습니다.

[Performance Testing] kt cloud AI : 가상화 환경별 GPU 기반 AI 워크로드 성능 비교

결과적으로 요약하면, BM>VM>Container 순으로 볼 수 있으나 성능 격차는 예전보다 크게 줄었음을 보여주며, 특히 5% 이내의 속도/처리량 차이는 대부분의 실전 환경에서 무시해도 될 수준입니다. 따라서 단일 서버 내에서 성능 극대화가 최우선이라면 베어메탈을 고려하되, 최신 하드웨어 가상화 기술과 Kubernetes 오케스트레이션을 활용하면서도 사실상 베어메탈에 준하는 AI 워크로드 성능을 얻을 수 있습니다.


환경 선택 가이드

가상화 기술은 다양한 AI 워크로드에 따라 적합성이 달라질 수 있습니다. 모델 훈련이나 추론 같은 워크로드의 특성을 이해하고 적절한 환경을 선택하는 것이 중요합니다. 베어메탈은 GPU의 성능을 최대한 활용할 수 있어 대규모 훈련 작업에 적합하지만, 초기 구축 비용과 관리의 복잡성이 단점으로 작용할 수 있습니다. 반면, VM은 멀티테넌시 환경에서 격리된 자원을 제공하여 보안성과 독립성을 보장하지만, vLLM 추론과 같은 CPU 작업이 많은 경우 하이퍼바이저로 인한 오버헤드가 발생할 수 있습니다.

 

컨테이너는 자원 활용의 유연성과 빠른 확장이 강점입니다. 특히, 분산 추론이나 마이크로서비스 기반 AI 애플리케이션에서는 컨테이너의 자동화 기능과 확장성이 빛을 발합니다. 클라우드 환경에서 오케스트레이션 도구를 활용하면, 다양한 워크로드에 최적화된 자원을 제공할 수 있어 관리 부담을 줄일 수 있습니다.

 

환경 선택에 있어 비용과 자원의 효율성도 고려해야 합니다. 클라우드에서 베어메탈은 고성능 작업에 유리하지만, 자원의 활용도가 낮을 경우 비효율적일 수 있습니다. VM과 컨테이너는 필요에 따라 자원을 동적으로 확장할 수 있어 비용 절감에 유리합니다. 이러한 선택은 단순히 성능뿐 아니라 워크로드의 요구사항, 조직의 목표, 장기적인 확장성까지 고려해 이루어져야 합니다.


결론

이번 글에서는 베어메탈, VM, 컨테이너 환경에서 AI 워크로드의 성능 차이를 비교하고 각 기술의 장단점을 분석했습니다. 앞으로 AI 기술과 인프라는 점점 더 복잡해질 것이며, 다양한 환경에서 최적의 성능을 끌어내기 위해 가상화 기술의 선택은 더욱 중요해질 것입니다. 특히 멀티 클라우드와 하이브리드 클라우드 환경이 대두되면서 여러 환경 간 상호운용성을 고려해야 합니다. 또한, Kubernetes와 같은 컨테이너 오케스트레이션 도구는 더욱 정교한 자원 관리와 자동화를 제공할 것으로 기대됩니다.

AI플랫폼팀은 이러한 트렌드를 주시하며, 고객들에게 안정적이고 효율적인 인프라를 제공하기 위해 노력하고 있습니다.

다음 글에서는 다중 노드에서 분산 처리를 실행할 때의 성능 비교 분석을 해보겠습니다.