LLM Inference 를 위한 A to Z

효율적이고 안정적인 LLM 서빙

by Dr Jenna

0. 전체 개요


추론(Inference)의 목표는 이미 학습된 모델을 빠르고, 싸고, 안정적으로 서빙하는 것이다. 추론의 성능과 비용은 대부분 (1) KV 캐시의 메모리/대역폭, (2) Attention 커널과 변형(Flash Attention, GQA/MQA, Windowed/Sliding 등), (3) 정밀도와 양자화(bf16/fp16, INT8/INT4, KV 캐시 양자화), (4) 병렬화와 스케줄링(Data/Tensor/Pipeline, continuous batching, prefill/ decode 분리), (5) 프레임워크 선택(vLLM, TensorRT-LLM, TGI 등), (6) 롱컨텍스트 전략(RoPE/ALiBi 스케일링, Paged KV, Prefix/결과 캐싱, RAG)에서 결정된다. 아래에서는 이 모든 항목을 개념, 예시, 비교, 수식까지 포함해 하나씩 설명한다.




1. 프리필(prefill)과 디코드(decode)를 디코더 구조로 이해하기




Decoder-only Transformer의 추론은 두 단계로 작동한다.


1-1) 프리필 단계 입력 프롬프트 전체(길이 T)를 한 번에 처리해 레이어별 Key/Value(K/V)를 KV 캐시에 쌓고, 마지막 토큰의 은닉표현으로 로짓을 만든다. 이때 모든 토큰 쌍에 대해 Attention을 계산하므로 계산 복잡도는 O(T^2)다. 긴 프롬프트일수록 첫 토큰이 나오기 전까지 시간이 길어지는 이유가 여기에 있다. 동작 요약: 임베딩 → (각 레이어에서) Q/K/V 생성 → QK^T → softmax → V 가중합 → 다음 레이어 … → 로짓 → 첫 출력 토큰 샘플링.


1-2) 디코드 단계 이후에는 토큰을 한 개씩 생성한다. 새로운 토큰에 대해서만 Q를 계산하고, 과거 K/V는 프리필에서 저장해 둔 KV 캐시에서 읽어온다. 계산 복잡도는 O(T)로 내려간다(현재 토큰의 Q가 과거 K 전체와만 곱해지기 때문). 다만 길이가 늘수록 매 토큰 생성 시 참조해야 할 K/V가 늘어나므로, 디코드가 길어질수록 점점 느려지는 것은 피할 수 없다.


1-3) 수식적 관점 KV 메모리 근사: KV_memory ≈ num_layers × batch_size × seq_len × n_kv_heads × head_dim × 2 × bytes_per_elem (2는 K와 V, bytes_per_elem은 bf16/fp16이면 2B, int8이면 1B 등)


프리필 계산량: 대략 레이어마다 O(T^2·d)

디코드 계산량(토큰당): 대략 레이어마다 O(T·d)


이 때문에 추론 최적화는 사실상 “프리필 비용(길이 제곱)과 디코드 중 KV 접근(길이 선형)”을 줄이거나 숨기는 기술들의 조합이다.




2. Positional Encoding과 RoPE: 왜 Q/K에 또 쓰는가




초기 Transformer(예: GPT-2, BERT)는 절대 위치 인코딩을 Input Embedding에 더했다. 이 방식은 위치 정보를 토큰 표현에 “간접”으로 섞는다. 그러나 Attention score(Q·K^T) 자체가 “상대적 거리”를 수학적으로 직접 반영하지는 않는다.


RoPE(Rotary Position Embedding)는 Q와 K 벡터에 위치 의존적인 회전 변환을 곱하여, Q·K^T 값이 토큰 간 상대적 거리를 직접 반영하도록 만든다. 즉 “토큰 간 몇 칸 떨어져 있는가”가 Attention 연산 결과에 수학적으로 녹아든다. 그래서 Input Embedding 단계에서 절대 위치를 더했더라도, RoPE는 Q/K 단계에 “또” 적용한다. 둘은 역할이 다르다. 절대 위치는 표현 초기화, RoPE는 Attention의 상대 위치 민감도 강화다. RoPE는 원래 디코더 기본 구조에 없었고(2017), 2021년 RoFormer 이후 최근 LLM(예: LLaMA, Qwen 등)에 광범위하게 채택되었다.


참고로 ALiBi는 점수에 선형 편향을 더해 거리 효과를 넣는 방식이다. RoPE/ALiBi 스케일링 기법을 쓰면 학습 시보다 긴 컨텍스트에서도 품질을 덜 잃고 동작하게 만들 수 있지만, 실제 품질은 태스크별 검증이 필요하다.




3. Attention window와 Long Context 최적화




Full attention은 과거 모든 토큰을 본다. Attention window(주의창 또는 Attention window)는 최근 W개 토큰까지만 보도록 제한하는 방식이다. 이러면 디코드 토큰당 계산량이 O(W)로 제한되어 시간·메모리가 크게 줄어든다. 품질·속도 트레이드오프가 있으므로 W는 태스크에 맞춰 조정한다.


긴 문맥에서의 추가 최적화:


- Paged KV: KV를 고정 크기 페이지로 관리해 파편화와 재할당 비용을 줄이고, 중간에 끝난 요청의 페이지를 재사용한다(예: vLLM).

- 연속 배치(continuous batching): 들어오는 요청을 즉시 배치에 합류시켜 프리필/디코드를 섞어 처리한다.

- Prefix/결과 캐싱: 공통 프리픽스의 KV를 재사용하거나, 반복되는 서두·시스템 프롬프트의 프리필 결과를 재사용한다.

- 프리필 청크: 긴 입력을 작은 단위로 나누어 interleave 처리함으로써 디코드 단계가 대기 하지 않고 연속적으로 진행되도록 하여 체감 지연을 줄인다.

- RAG: 긴 원문을 전부 넣는 대신 검색·요약으로 필요한 부분만 투입해 토큰 자체를 줄인다.

- RoPE/ALiBi 스케일링: 최대 길이를 늘릴 때 품질 저하를 완화(반드시 A/B 검증).




4. Flash Attention, GQA/MQA, Softmax reduction, 커널 최적화




4-1) Flash Attention 수학 연산 자체는 동일하게 두되 메모리 I/O를 줄이는 타일링과 정밀한 수치 안정성을 높이는 최적화를 통해 어텐션을 고속·저메모리로 계산하는 GPU 전용 함수 (커널)이다. 특히 프리필 구간에서 효과가 크다. 최신 커널(FA v2/v3, FlashDecoding 등)은 하드웨어 특성을 더 잘 활용한다.


4-2) GQA/MQA와 “왜 Q 헤드는 줄이지 않나” MHA에서는 Q/K/V 모두 여러 헤드다. MQA는 K/V를 1개(또는 소수) 헤드로 공유, GQA는 여러 Q 헤드가 K/V 헤드 하나를 그룹으로 공유한다. 공통 목표는 n_kv_heads를 줄여 KV 캐시 메모리와 대역폭을 절감하는 것이다. Q 헤드를 줄이면 표현력(서로 다른 하위공간을 보는 능력)이 떨어지기 쉬워 성능 저하 위험이 크므로 보통 Q는 유지하고 K/V만 줄인다. 최근 LLM 다수가 GQA를 채택한다(모델 config에 num_attention_heads, num_key_value_heads로 고정).


4-3) Softmax reduction이란 Attention에서 QK^T 후 softmax (행(토큰)마다 합이 1이 되도록 정규화)하게 되는데, 이때 여러 GPU 스레드에서 분산 처리한 뒤 얻은 최대값, 지수 계산, 합산 등을 합치는 과정을 소프트맥스 축소(reduction)라고 부른다. vLLM, Flash Attention 같은 프레임워크에서는 이 부분도 fused kernel로 최적화해서 latency를 줄인다. 즉, 고성능 커널은 이 과정을 수치 안정성과 메모리 효율을 유지하며 구현한다(예: log-sum-exp 트릭, 타일링).


4-4) 커널이 무엇이고 어떻게 빨라지는가 커널은 GPU에서 실행되는 특정 연산 함수다(예: MatMul, LayerNorm, Softmax, RoPE, GeLU 등). 고속화의 핵심은 다음과 같다.

- 커널 퓨전: GPU에서 개별 연산을 각각 실행하면 메모리 읽기쓰비 오버헤드가 커진다. 이런 여러 연산들( MatMul→Bias→Activation 등)을 하나의 GPU 커널로 합쳐 한번의 메모리 로드/스토어로 처리해 메모리 왕복을 줄이고 속도를 높인다 (예, Fused LayerNorm, Fused Softmax)

- 메모리 접근 최적화: coalesced access, shared memory 활용, 타일링

- 워프·스레드 최적화: 하드웨어 병렬단위(warp=32) 맞춤 스케줄링



Flash Attention, fused RMSNorm/SiLU, fused sampling 등은 이러한 최적화의 결과물이다.





5. Mixed Precision과 양자화(Quantization)




추론은 보통 bf16 또는 fp16로 동작한다(bf16이 표현 범위가 넓어 gradient scaling 없이 안정적). 일부 연산(LayerNorm, 일부 softmax 축소, 일부 로짓 처리)은 fp32를 유지하기도 한다.


Weight-only quantization(INT8/INT4, 예: GPTQ, AWQ)은 가중치만 저정밀로 줄여 메모리·대역폭을 크게 절약한다. KV 캐시까지 INT8/INT4/fp8로 낮추면 롱컨텍스트에서 큰 메모리 절감이 가능하지만, 품질 영향이 weight-only보다 크기 쉬워 태스크별 검증이 필수다. 실무에서는 Weights INT4/8 + Activations bf16 + KV INT8 같은 혼합 구성이 자주 쓰인다.


※ AWQ: Activation-aware Weight Quatization

모덕ㄹ weight 양자화 시 단순히 weight 값 분포만 고려하는게 아니라, 해당 weight가 실제로 곱해지는 activation (입력값)의 분포까지 고려해 양자화 스케일을 더 최적화하는 방법. 정확도 손실을 최소화하면서 모델을 더 작고 빠르게 만듦.




6. 병렬화와 스케줄링(추론 관점)




6-1) Data Parallelism(DP) 모델 복제본(replica)을 여러 GPU/노드에 두고 서로 다른 요청을 분산 처리한다. 동시 처리량(throughput)을 높이지만, 한 요청의 지연(latency)을 줄이는 효과는 제한적이다. 예: 8GPU에서 2GPU씩 묶여 모델 한 개가 돌아간다면, 4개의 replica로 스케일된다(“GPU 개수”와 “replica 수”는 개념이 다르다).


6-2) Tensor Parallelism(TP) 한 레이어의 큰 행렬 연산을 GPU 여러 장으로 쪼개 동시 수행한다. 모델이 단일 GPU에 안 들어가거나 한 GPU 대역폭/연산량이 병목일 때 유용하다. 추론에서는 PP보다 TP가 일반적으로 효율적이다.


6-3) Pipeline Parallelism(PP) 레이어 구간을 여러 GPU에 나눠 파이프라인처럼 흐르게 한다. 학습에서는 마이크로배치로 파이프라인을 채워 버블(유휴 시간)을 줄일 수 있어 유용하지만, 추론의 디코드는 토큰 단위라 버블이 커지기 쉽다. 그래서 “학습은 PP도 자주, 추론은 TP를 주로” 쓰는 경향이 있다.


6-4) Prefill/Decode 분리와 배칭 정책 긴 입력을 처리하는 프리필과 토큰 단위의 디코드를 분리해 스케줄링하면 체감 지연을 낮출 수 있다(프리필 청크, interleave). 연속 배치(continuous batching)는 들어오는 요청을 실시간 배치에 합류시키며, 스케줄러가 프리필 폭주와 디코드 진행을 공정하게 배분한다. vLLM, TensorRT-LLM, TGI는 각자 스케줄러를 제공한다.


6-5) 리소스 분할과 운영 MIG로 GPU를 슬라이스해 지연 민감/경량 요청을 격리하거나, NUMA 친화적 바인딩과 CPU 코어 핀닝으로 메모리 이동을 줄인다. 멀티테넌시에서는 간섭을 줄이는 정책이 중요하다.




7. 디코딩 전략과 빠르게 만드는 하이퍼파라미터




7-1) 샘플링 vs 빔서치 샘플링은 확률분포에서 무작위 추출로 다양성을 늘리고, 빔서치는 여러 경로를 동시 탐색해 점수 높은 문장을 고르는 방식이라 더 결정적이지만 느리다. 속도를 높이고 레이턴시를 줄이려면 샘플링을 쓰고, 빔 수를 1 또는 아주 작게 둔다.


7-2) top-k, top-p, temperature 권장 속도를 높이고 결정성을 키우려면 top-k를 작게, top-p를 작게, temperature를 1 이하(0.7~0.9 등)로 둔다. 예:

- 빠른·결정적 응답: top-k=5, top-p=0.3 temperature=0.7~0.9

- 창의성·다양성: top-k=100+, top-p=0.95+, temperature=1.0~1.2 샘플링 후처리는 가능하면 GPU 내부에서 fused로 처리하여 CPU 왕복을 줄인다.



7-3) speculative decoding 작은 드래프트 모델이 여러 토큰을 예견하고 큰 모델이 한 번에 검증한다. 수용률이 높을수록 1.3~2.5배 가속 가능. 정확도 손실 없이 디코드 병목을 줄이는 방법이다.




8. KV 캐시: 어디에, 어떤 정밀도로, 어떻게 재사용하나




8-1) 저장 위치 성능을 위해서는 GPU 메모리에 두는 것이 기본이다. 하지만 롱컨텍스트나 동시 세션이 매우 많을 때 GPU 메모리가 부족해지므로, 일부 레이어를 CPU/NVMe로 오프로딩할 수 있다. 다만 PCIe/NVMe 왕복은 지연에 치명적일 수 있어 “비상시”나 “저비용 대량 처리” 시나리오에서만 신중히 사용한다.


8-2) Mixed Precision 적용 KV를 fp16/bf16로 저장해도 보통 품질 손실이 작다. 더 줄이고 싶다면 INT8/FP8을 시도하되 롱컨텍스트·정밀 태스크에서 A/B 검증이 필수다.


8-3) Prefix KV Cache 여러 요청이 동일한 Prefix(공통 서두·시스템 프롬프트)를 공유한다면, 그 구간의 KV를 재사용해 프리필을 건너뛸 수 있다. 프레임워크는 내부적으로 Prefix 해시를 계산해 동일성 판단을 하거나, API 차원에서 Prefix를 명시적으로 넘길 수 있다.




9. 프레임워크 선택과 vLLM 옵션




9-1) 프레임워크 특성


- vLLM: Paged KV + continuous batching으로 대규모 동시 세션에 강하고 사용이 쉽다.


- TensorRT-LLM: 컴파일 기반 최적화로 최저 지연·최고 처리량을 노릴 때 유리. INT8/FP8, GQA, FlashAttention, 커널 퓨전이 강력.


- TGI: 범용 서빙, 운영 편의와 적당한 성능의 균형.



9-2) vLLM 옵션 예시(버전에 따라 명칭/지원 여부가 다를 수 있으므로 실제 사용 전 --help 확인 권장) 아래는 주요 조정점들을 한 번에 담은 예시다. 값은 환경에 맞게 조정한다.


python -m vllm.entrypoints.api_server \

--model /path/to/model \ # 모델 경로 또는 허브 ID

--served-model-name my-llm \ # 서비스에서 보일 이름

--host 0.0.0.0 --port 8000 \ # 바인딩

--tensor-parallel-size 2 \ # 텐서 병렬 크기

--pipeline-parallel-size 1 \ # 파이프라인 병렬(지원 여부 버전 의존)

--max-model-len 32768 \ # Input+Output의 총 허용 토큰 길이

--gpu-memory-utilization 0.9 \ # VRAM 사용 상한(0~1)

--dtype bfloat16 \ # bf16/fp16/float32 등

--quantization int4 \ # weight-only 양자화(int8/int4 등)

--kv-cache-dtype fp16 \ # KV 캐시 정밀도(fp16/bf16/fp8/int8 등 지원 범위 버전 의존)

--enable-flash-attn \ # Flash Attention 사용

--enable-prefix-caching \ # Prefix KV 재사용

--max-num-batched-tokens 8192 \ # 한 배치에서 총 토큰 상한(=∑(seq_len_i))

--max-num-seqs 128 \ # 동시 처리 시퀀스 수

--swap-space 4 \ # CPU 오프로딩 스왑 공간(GB, 필요시)

--enforce-eager \ # 이저 모드: 첫 토큰 지연을 줄일 때 유용

--enable-chunked-prefill \ # 프리필 청크(버전 의존)

--disable-log-requests \ # 요청 로그 최소화

--seed 42 # 재현성(완전 결정은 아님)


결정 기준 정리:


- tensor_parallel_size: 단일 GPU에 모델이 안 들어가거나, 대역폭/연산 병목이면 증가. 일반적으로 장수와 동일하게 맞춤(예: 2, 4).


- pipeline_parallel_size: 레이어 수가 많고 배치가 커서 파이프라인을 채울 수 있을 때 고려. 추론에서는 TP 위주, PP는 제한적 사용.


- max_model_len: Input+Output 합계의 상한. 크면 KV 메모리 폭증. 길이 요구와 VRAM 간 절충.


- gpu_memory_utilization: 0.85~0.95 사이에서 시작. OOM 발생 시 낮춤.


- max_num_batched_tokens, max_num_seqs: VRAM과 지연 목표에 맞춰 조정. 크게 잡으면 처리량↑/첫 토큰 지연↑, 작게 잡으면 반대.


- dtype/quantization/kv-cache-dtype: 품질-속도-메모리 트레이드오프. bf16 기본, weight INT8/4로 시도, 필요시 KV INT8/fp8을 검증.



참고: max-parallel-loading은 모델을 “여러 개 복제”하는 옵션이 아니라, 로딩 시 weight shard를 병렬로 읽는 개수다(초기 로딩 속도 개선, I/O 압박 증가 가능).




10. seq length, max_model_len, 입력/출력 길이 관계




seq length는 “현재 요청”의 시퀀스 길이이고, max_model_len은 모델이 한 번에 처리 가능한 최대 토큰 수다. 일반적으로 max_model_len은 Input+Output의 합으로 해석된다. 예를 들어 max_model_len=4096, 입력이 3000이면 출력은 최대 1096까지다. seq length는 항상 max_model_len을 넘지 않아야 한다.




11. Prefix KV Cache는 어떻게 동작하나




서버/프레임워크가 입력 프롬프트의 접두(prefix)를 해시해 동일성을 판단하거나, API 인자로 “이 부분은 공통 프리픽스”라고 명시할 수 있다. 공통 구간의 KV를 재사용하면 프리필을 건너뛰어 첫 토큰 지연과 비용을 줄인다. 일반 KV 캐시는 “이 세션의 과거”를 재사용하는 것이고, Prefix KV는 “여러 세션 간 공통 과거”를 재사용한다는 차이가 있다.




12. 파이프라인 버블과 학습/추론에서 PP/TP의 용도 차이




PP에서는 파이프라인이 가득 차기 전과 비우는 마지막 구간에 유휴 시간이 생기는데 이를 버블이라 한다. 학습은 마이크로배치로 파이프라인을 꽉 채울 수 있어 버블을 줄이기 쉽다. 추론 디코드는 토큰 단위라 버블을 메우기 어려워 비효율이 커진다. 그래서 학습은 PP도 자주 쓰지만, 추론은 TP 중심이 일반적이다.




13. 샘플링/빔서치 요약과 빠르게 만드는 설정 팁




샘플링은 확률분포에서 무작위 선택으로 다양성이 있고 빠르며, 빔서치는 여러 경로 동시 탐색으로 결정성이 높지만 느리다. 추론을 빠르게 하려면 top-k/top-p를 낮추고 temperature를 1 이하로 두어 분포를 뾰족하게 만든다. 예: top-k=200.9, temperature=0.7~0.9. 반대로 창의성이 필요하면 top-k↑, top-p↑, temperature≥1.0. 로짓 후처리는 GPU 내부 fused 커널로 처리해 왕복 비용을 줄인다.




14. 레플리카와 GPU 수




레플리카는 동일 모델 사본을 의미한다. GPU 장수와 같지 않다. 예를 들어 8GPU 서버에서 2GPU를 TP로 묶어 모델 한 개를 띄우면, 같은 구성으로 네 개를 띄워 4 replica를 만들 수 있다. 로드밸런서가 요청을 replica에 분산한다.




15. 기본 운영 체크리스트(실전)




목표 수치 정의: 첫 토큰 지연, 평균 지연, 토큰당 비용, 동시 세션 수

프레임워크 선택: vLLM(운영 편의/동시성), TensorRT-LLM(최저 지연/최고 처리량), TGI(범용)

정밀도/양자화: bf16 기본 → weight INT8/4 → KV INT8/fp8(검증 필수)

롱컨텍스트: RAG로 토큰 줄이기, Prefix 캐싱, Paged KV, Attention window

배칭/스케줄링: 연속 배치, 프리필 청크, 디코드 공정성

병렬화: 단일 GPU에 안 들어가면 TP, 처리량 부족하면 replica 확장

커널/드라이버: Flash Attention 활성화, 최신 커널/드라이버 정렬

모니터링: KV 페이지 사용률, 파편화, 에빅션 이벤트, OOM, 토큰/초, 첫 토큰 지연

폴백: 토큰 상한 축소, 요약 대체, 시간 초과 시 단락 응답, 재시도 정책




16. vLLM 실행 스니펫(종합 예, 버전에 따라 일부 옵션명/지원 여부 상이)




python -m vllm.entrypoints.api_server \

--model /path/to/model \

--served-model-name my-llm \

--host 0.0.0.0 --port 8000 \

--tensor-parallel-size 2 \

--pipeline-parallel-size 1 \

--max-model-len 32768 \

--gpu-memory-utilization 0.9 \

--dtype bfloat16 \

--quantization int4 \

--kv-cache-dtype fp16 \

--enable-flash-attn \

--enable-prefix-caching \

--max-num-batched-tokens 8192 \

--max-num-seqs 128 \

--swap-space 4 \

--enforce-eager \

--enable-chunked-prefill \

--disable-log-requests \

--seed 42


설정 선택 가이드 요약:


tensor_parallel_size: 모델이 한 장에 안 들어가면↑(2/4/8), 노드 내 대역폭 감안


pipeline_parallel_size: 추론에서는 제한적으로, 학습은 자주


max_model_len: Input+Output 합, 길이 요구와 KV 메모리 절충


gpu_memory_utilization: 0.85~0.95에서 시작, OOM 나면 낮춤


max_num_batched_tokens/max_num_seqs: 처리량 vs 레이턴시 간의 트레이드오프를 조정하는 파라미터


dtype/quantization/kv-cache-dtype: bf16 기본, weight INT8/4, KV INT8/fp8는 검증 후 단계적 적용


chunked-prefill: 긴 입력을 여러 청크로 나눠 순차적으로 프리필 하는 방식. 모든 입력을 한 번에 처리하지 않고 청크 단위로 어텐션 계산을 하면서 KV 캐시에 결과를 채워넣기 때문에 중간부터 디코딩을 병렬로 시작 가능. 이를 통해 Latency를 줄이고 GPU 사용 효율 높일수 있음



17. 자주 헷갈리는 포인트 정리




RoPE는 Q/K에 곱해 상대 위치를 Attention 점수에 직접 반영한다(절대 위치 인코딩과 역할이 다름).

max_model_len은 Input+Output 합의 상한이며, seq length는 현재 요청 길이.

Prefix KV Cache는 공통 접두의 KV를 재사용해 프리필을 건너뛰는 기술이며, 일반 KV 캐시는 “이 세션의 과거”를 재사용한다.

GQA의 그룹 수는 모델 설계 시 고정(config.json의 num_attention_heads와 num_key_value_heads).

max-parallel-loading은 로딩 I/O 병렬화일 뿐 모델 병렬이 아니다.

PP는 파이프라인 버블 때문에 추론에서 비효율적일 수 있어 TP가 보통 주력이다.

KV 캐시는 성능을 위해 GPU에 두되, 메모리가 모자라면 제한적으로 CPU/NVMe를 고려(지연 증가 감수).

샘플링은 빠르고 다양, 빔서치는 느리지만 결정적. 빠르게 하려면 top-k↓, top-p↓, temperature≤1.0.

커널은 GPU 연산 함수이며, 퓨전/타일링/메모리 접근 최적화가 성능을 크게 좌우한다. Flash Attention, fused norm/activation, fused sampling이 대표적이다.

Fused Sampling은 top k, top p 샘플링을 별도의 커널로 분리하지 않고 바로 softmax 결과에서 한 번에 샘플링까지 최적화하는 방식이다.



마지막으로, 이 문서의 핵심은 “토큰을 덜 쓰고(프롬프트 최적화·RAG), 쓰면 효율적으로 계산하고(Flash Attention, GQA/MQA, Window), 계산한 결과는 캐시해 재사용(Prefix/KV 캐시)”하는 것이다. 여기에 정밀도/양자화, 텐서 병렬과 레플리카 스케일아웃, 연속 배치 스케줄링을 묶으면, 대부분의 LLM 추론 워크로드에서 지연·처리량·비용 목표를 동시에 만족시키는 해법을 만들 수 있다.


keyword
작가의 이전글LLM 동작원리 (Decoder Achitecture)