본문으로 건너뛰기

AI 추론 GPU와 TCO를 과투자 없이 산정하는 법

사용 사례와 토큰·동시성·지연 목표를 바탕으로 GPU 용량과 TCO를 산정하고 모델을 압축하는 실무 프레임워크입니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

AI 추론용 GPU 규모와 TCO는 GPU 사양만이 아니라 사용 사례, 입력·출력 토큰 수, 동시성, KV cache 적중률, TTFT 목표, 모델 선택에 따라 결정됩니다. 안정적인 기본 트래픽은 온프레미스 또는 예약 GPU인 core 용량으로 처리하고, 급증·실험 수요는 클라우드 spot 또는 on-demand GPU인 flex 용량으로 흡수하는 방식이 과잉 투자를 줄입니다. 모델 측면에서는 FP16/BF16 가중치를 FP8 또는 INT8로 낮추는 Quantization이 재훈련 없이 메모리를 줄이는 첫 단계이며, Llama-3.1-8B의 가중치 메모리는 16.06GB에서 9.08GB로 43.5% 감소했습니다. 더 큰 절감이 필요하면 레이어와 차원을 줄이는 Pruning, teacher의 지식을 작은 student에 이전하는 Knowledge Distillation을 이어 적용할 수 있습니다.

빠른 이해

새로운 점

GPU 수를 고정된 사양표가 아니라 토큰 패턴·캐시 적중률·동시성·지연 목표와 모델 압축 단계의 조합으로 산정하는 프레임워크입니다.

핵심 메커니즘

사용 사례와 요청별 입력·출력 토큰, DAU·동시성·TTFT·KV cache 적중률을 수집해 core-and-flex GPU 용량을 정하고, 모델 메모리가 과하면 Quantization, Pruning, Knowledge Distillation으로 모델 크기를 낮춘 뒤 실제 정확도와 지연을 재측정합니다.

핵심 수치

  • AI Chatbots/Copilots 토큰 범위: Cached Input 1,000~5,000 / Input 2,000~8,000 / Output 200~800- 긴 입력·짧은 출력의 예시 workload
  • FP8 가중치 메모리: 16.06GB -> 9.08GB, 43.5% 감소- Llama-3.1-8B, 재훈련 없음
  • Pruning validation loss: Width 3.21 / Depth 3.60- 소규모 예시 데이터셋 기반으로 확정적 수치가 아닌 예시 결과
  • 6B depth-pruned 모델 속도: Qwen3-4B 대비 30% 빠름- NVIDIA 공개 실행 기준
  • MMLU 정확도: 72.5 vs 70.0- 6B depth-pruned 모델과 Qwen3-4B 비교

섹션별 상세

01

사용 사례가 GPU 규모를 결정하는 출발점

GPU 산정은 해결하려는 문제와 요청 패턴을 먼저 구분하는 데서 시작합니다. AI Chatbots/Copilots는 긴 입력과 짧은 출력을, AI Agents는 128,000토큰을 넘는 극장문 컨텍스트를, Content Generation은 짧은 입력과 긴 출력을, Translation Apps는 입력과 출력이 비슷한 요청을 주로 사용합니다. 예시 표에서 AI Chatbots/Copilots는 Cached Input Tokens 1,000~5,000, Input Tokens 2,000~8,000, Output Tokens 200~800으로 제시되며, AI Agents는 Input Tokens 500~1,000과 Output Tokens 200~300을 사용합니다. 이 값은 예시 범위일 뿐 실제 운영 환경에서는 크게 달라질 수 있으므로, 모델 선택과 GPU 메모리 산정에 관측된 요청 패턴을 넣어야 합니다.
02

토큰·동시성·지연으로 용량 산정

모델 크기만으로는 필요한 GPU 수를 결정할 수 없고, DAU, 동시 요청 수, 요청당 토큰 수, KV cache 적중률, 지연 목표와 계약 기간을 함께 계산해야 합니다. 입력 문자열과 출력 문자열이 길어질수록 GPU 메모리와 연산 수요가 커지며, 높은 동시성은 단순한 일일 사용자 수보다 메모리와 지연에 더 큰 부담을 줍니다. 반복 입력이 KV cache에 저장되어 적중하면 해당 토큰의 prefill을 건너뛰므로 TTFT와 요청당 비용이 낮아지고 같은 트래픽을 처리하는 데 필요한 GPU 용량도 줄어듭니다. 응답성은 평균 TTFT만 보지 않고 99번째 백분위 지연과 intertoken latency까지 함께 측정해야 하며, 일일 총 요청량은 DAU에 사용자당 일일 요청 수를 곱해 추정합니다.
03

Core-and-flex 배치와 GPU 선택

예측 가능한 기본 트래픽은 온프레미스 또는 예약 클라우드 GPU의 core 용량으로 처리하고, 출시 시점·트래픽 급증·실험 수요는 public cloud의 spot 또는 on-demand GPU인 flex 용량으로 보완합니다. 이 구조는 안정적인 서비스 물량을 확보하면서 변동 수요에 필요한 운영비를 완충 장치로 사용해 과잉 프로비저닝을 줄입니다. 데이터가 온프레미스에 있고 용량이 안정적이면 colocation이 필요하지 않을 수 있지만, 빠른 확장이나 데이터 레지던시 요건이 있으면 colocation 파트너가 필요할 수 있습니다. GPU는 모델의 메모리 사용량, 목표 지연, 동시성에 맞춰야 하며 용량이 과하면 utilization 하락과 token당 비용 상승이, 부족하면 처리량 저하와 지연 증가가 발생합니다.
04

업무별 메모리와 정밀도 기준

관계 관리자용 금융 Copilot은 질의당 Input 5,000토큰과 Output 500토큰, 1초 미만 TTFT, 10~50개 동시 세션을 기준으로 하며 7~8B 모델에는 약 24GB, 13B 모델에는 48GB GPU 메모리가 권장됩니다. 신약 연구용 AI Agent는 Input 20,000토큰과 Output 2,000토큰, 2초 미만 TTFT, 20~30명 동시 사용을 기준으로 하고 80GB를 넘는 메모리 용량이 필요합니다. 마케팅용 Content Generator는 Input 500토큰과 Output 2,000토큰, 1초 미만 TTFT, 피크 시 50~100명 이상의 동시 사용을 목표로 하며 GPU당 16~24GB를 기준으로 삼습니다. 대규모 번역 플랫폼은 Input과 Output 각각 1,000토큰, 수백 건의 동시 요청과 자동 확장을 전제로 하며 8~16GB GPU부터 시작할 수 있고, FP16 또는 INT8을 사용할 수 있습니다.
05

Quantization으로 메모리 줄이기

FP16과 BF16 모델은 파라미터당 2바이트를 사용하지만, Quantization은 가중치와 선택적으로 활성값·KV cache를 FP8 또는 INT8의 1바이트 표현으로 바꿔 메모리 사용량을 낮춥니다. NVIDIA ModelOpt의 Post-training Quantization은 이미 학습된 모델에 대표 프롬프트를 넣어 레이어별 scaling factor를 정하고, FP16 범위를 8비트 범위로 매핑한 뒤 재훈련 없이 checkpoint를 생성합니다. Llama-3.1-8B의 가중치 메모리는 FP8 적용 전 16.06GB에서 9.08GB로 줄어 43.5% 감소했으며, 확보한 공간은 더 작은 GPU 사용이나 더 큰 batch·KV cache 탑재에 활용할 수 있습니다. 기사에서는 FP8을 정확도 손실이 거의 없는 시작점으로 권장하지만, 실제 업무의 정확도 허용 범위를 확인하고 PTQ 손실이 크면 forward pass에서 양자화를 모사하며 재학습하는 Quantization-Aware Training으로 전환하도록 안내합니다.
python
import torchimport modelopt.torch.quantization as mtqfrom modelopt.torch.export import export_hf_checkpointfrom transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-3.1-8B-Instruct", dtype=torch.float16, device_map="auto").eval()tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct") def calibration_loop(model): for prompt in ["Summarize this client email:", "What are the key risks here?"]: inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): model(**inputs) model = mtq.quantize(model, mtq.FP8_DEFAULT_CFG, forward_loop=calibration_loop)export_hf_checkpoint(model, export_dir="./llama-3.1-8b-fp8")

NVIDIA ModelOpt로 대표 프롬프트를 이용해 FP8 Post-training Quantization을 수행하고 Hugging Face checkpoint로 내보내는 코드입니다.

06

Pruning과 Distillation의 추가 절감

Quantization만으로 메모리 목표를 충족하지 못하면 Pruning으로 레이어, Attention head, FFN 채널 또는 embedding dimension을 제거해 모델 구조와 연산량을 줄입니다. NVIDIA NeMo 예제는 Qwen3-8B를 teacher로 두고 depth pruning에서 레이어를 36개에서 24개로, width pruning에서 ffn_hidden_size를 12288에서 9216으로, hidden_size를 4096에서 3584로 축소해 약 6B student를 만듭니다. 이후 원본 teacher의 학습 신호로 각 pruned student를 Distillation해 축소 과정에서 생긴 성능 저하를 보완하며, 예제 실행에는 80GB H100 또는 A100 GPU 2개가 필요합니다. 비교 실험에서는 width pruning의 최종 validation loss가 3.21로 depth pruning의 3.60보다 낮았고, depth pruning은 더 빠르게 수렴했으며, NVIDIA 공개 실행에서는 6B depth-pruned 모델이 Qwen3-4B보다 30% 빠르고 MMLU 정확도가 72.5 대 70.0으로 높았습니다.
bash
NEMO_TEACHER_PATH="./nemo_ckpt/Qwen3-8B.nemo" # original (un-pruned) Qwen3-8B .nemo # Pruning runs single-GPU — FastNAS asserts tp_size=1 for both depth and width pruningPRUNE_COMMON="--devices 1 --tp_size 1 --pp_size 1 \ --restore_path ${NEMO_TEACHER_PATH} --legacy_ckpt \ --seq_length ${SEQ_LENGTH} --num_train_samples ${NUM_TRAIN_SAMPLES} --mbs ${MICRO_BATCH_SIZE} \ --data_paths ${DATA_PATHS} --index_mapping_dir ${INDEX_MAPPING_DIR}"PRUNE="torchrun --nproc_per_node 1 ${NEMO_ROOT}/scripts/llm/gpt_prune.py" # Step 1a — Depth pruning: 36 → 24 layers (~6B model)${PRUNE} ${PRUNE_COMMON} --save_path ${ROOT_DIR}/Qwen3-8B-nemo-depth-pruned \ --target_num_layers 24 # Step 1b — Width pruning: ffn_hidden_size 12288→9216, hidden_size 4096→3584${PRUNE} ${PRUNE_COMMON} --save_path ${ROOT_DIR}/Qwen3-8B-nemo-width-pruned \ --target_ffn_hidden_size 9216 --target_hidden_size 3584 #Step 2 — Distillation: train each pruned student against the teacherTRAIN="torchrun --nproc_per_node ${DEVICES} ${NEMO_ROOT}/scripts/llm/gpt_train.py" # Step 2a — Depth-pruned student${TRAIN} \ --name depth_distill --model_path ${ROOT_DIR}/Qwen3-8B-nemo-depth-pruned \ --teacher_path ${NEMO_TEACHER_PATH} --log_dir ${ROOT_DIR}/depth_distill_logs --legacy_ckpt \ --data_paths ${DATA_PATHS} --index_mapping_dir ${INDEX_MAPPING_DIR} --seq_length ${SEQ_LENGTH} \ --max_steps ${MAX_STEPS} --gbs ${GLOBAL_BATCH_SIZE} --mbs ${MICRO_BATCH_SIZE} \ --val_check_interval ${VAL_CHECK_INTERVAL} --precision bf16-mixed # Step 2b — Width-pruned student (same as above, swap the two lines below)# --name width_distill --model_path ${ROOT_DIR}/Qwen3-8B-nemo-width-pruned

NVIDIA NeMo에서 Qwen3-8B를 깊이 또는 너비 방향으로 Pruning한 뒤 원본 teacher와의 Knowledge Distillation을 실행하는 명령입니다.

용어 해설

첫 토큰 생성 시간(TTFT)
Time to First Token의 약자로, 요청을 받은 뒤 첫 번째 출력 토큰이 생성될 때까지 걸리는 시간입니다. 입력 토큰을 처리하는 prefill 부담과 사용자 체감 응답성을 함께 나타냅니다.
KV 캐시(KV Cache)
이전 입력 토큰의 Attention 관련 Key와 Value를 저장해 반복되는 입력을 다시 계산하지 않도록 하는 메모리 구조입니다. 캐시 적중률이 높으면 prefill 작업과 TTFT가 줄어듭니다.
양자화(Quantization)
모델 가중치와 필요에 따라 활성값·KV cache의 수치 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 기법입니다. FP16 값을 FP8 또는 INT8로 바꾸면 추론용 메모리 절감이 가능합니다.
가지치기(Pruning)
중요도가 낮은 레이어, Attention head, FFN 채널 또는 임베딩 차원을 제거해 모델의 파라미터 수와 연산량을 줄이는 방법입니다. 깊이와 너비 방향으로 구조를 축소할 수 있습니다.
지식 증류(Knowledge Distillation)
큰 teacher 모델의 출력을 학습 신호로 사용해 더 작은 student 모델이 성능을 이어받도록 훈련하는 방법입니다. Pruning으로 줄어든 모델의 정확도 회복에 활용됩니다.
총소유비용(Total Cost of Ownership)
GPU 구매·임대비뿐 아니라 전력, 운영, 용량 여유분과 인프라 관리 비용까지 합산한 전체 비용입니다. 모델 크기와 트래픽 변동에 맞춘 용량 산정이 TCO를 좌우합니다.

기술

  • NVIDIA ModelOpt
  • PyTorch
  • Transformers
  • Hugging Face
  • NVIDIA NeMo
  • TensorRT
  • FP16
  • BF16
  • FP8
  • INT8
  • Qwen3-8B
  • Llama-3.1-8B-Instruct
  • WikiText-103-v1
  • H100
  • A100

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

수집 2026. 09. 02.출처 타입 WEB

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.