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 비교
섹션별 상세
사용 사례가 GPU 규모를 결정하는 출발점
토큰·동시성·지연으로 용량 산정
Core-and-flex 배치와 GPU 선택
업무별 메모리와 정밀도 기준
Quantization으로 메모리 줄이기
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로 내보내는 코드입니다.
Pruning과 Distillation의 추가 절감
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-prunedNVIDIA 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 Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.