16장. vLLM 서빙 벤치마킹과 RAG 최적화
용어 짚고 가기
서빙(serving)학습한 모델을 서버에 올려 여러 사용자의 요청에 답하게 하는 일입니다. serve 는 "음식을 차려 내다, 시중들다"라는 뜻입니다.서빙 엔진(serving engine)모델을 올리고 요청을 받아 생성을 빠르게 돌려주는 프로그램입니다. vLLM, Ollama, TGI 등이 있습니다. engine 은 "기관, 엔진"이라는 뜻으로, 일을 실제로 돌리는 핵심 프로그램을 가리킵니다.vLLMKV 캐시를 쪽 단위로 관리하고 요청을 연속 배치로 묶어 처리량을 높인 오픈소스 서빙 엔진입니다. LLM(Large Language Model, 대규모 언어 모델)을 서빙하려고 만든 엔진이라 이름에 LLM 이 들어 있습니다.프리필(prefill)입력 프롬프트 전체를 한 번에 읽어 KV 캐시를 채우는 단계입니다. pre(미리)와 fill(채우다)을 붙인 말입니다.디코드(decode)토큰을 하나씩 이어 쓰는 단계입니다. 출력 토큰 수만큼 되풀이합니다. decode 는 "부호를 풀다, 해독하다"라는 뜻입니다.PagedAttentionKV 캐시를 작은 쪽(블록)으로 나눠 필요한 만큼만 잡는 vLLM 의 방법입니다. page(쪽)와 attention(어텐션, 주의)을 붙인 이름으로, 운영체제가 메모리를 쪽 단위로 나눠 쓰는 방식에서 착안했습니다.배치(batch)여러 요청을 묶어 한 번의 계산으로 처리하는 일입니다. batch 는 "한 번에 구워 내는 한 판, 한 묶음"이라는 뜻입니다.연속 배치(continuous batching)끝난 요청의 자리에 기다리던 요청을 바로 넣어 묶음을 계속 채우는 배치입니다. continuous 는 "끊이지 않는"이라는 뜻입니다.TTFT(Time To First Token)요청을 보낸 뒤 첫 토큰을 받기까지의 시간입니다. Time(시간), To(~까지), First(첫), Token(토큰)의 머리글자입니다.TPOT(Time Per Output Token)첫 토큰 뒤 토큰 하나가 나오는 데 드는 평균 시간입니다. Time(시간), Per(~마다), Output(출력), Token(토큰)의 머리글자입니다.지연 시간(latency)요청 하나를 보내고 답을 다 받기까지의 시간입니다. latency 는 "늦어짐, 지연"이라는 뜻입니다.처리량(throughput)서버가 1초에 만들어 내는 토큰 수나 처리하는 요청 수입니다. through(통과하여)와 put(내놓다)을 붙인 말로, 일정 시간에 처리해 내는 양을 뜻합니다.p95(95th percentile)값을 작은 것부터 늘어놓았을 때 95% 자리의 값입니다. 느린 요청을 볼 때 씁니다. p 는 percentile(백분위수)의 머리글자이고, percentile 은 per cent(백에 대하여)에서 온 말입니다.동시성(concurrency)서버에 한꺼번에 보내는 요청의 수입니다. concurrent 는 "함께 달리는, 동시에 일어나는"이라는 뜻입니다.병목(bottleneck)전체 속도를 붙잡는 가장 느린 단계입니다. 병의 목처럼 좁아 흐름이 막히는 곳이라는 뜻의 bottleneck 을 옮긴 말입니다.프리픽스 캐시(prefix cache)앞부분이 같은 프롬프트의 KV 캐시를 다시 써서 프리필을 건너뛰는 캐시입니다. prefix 는 "앞에 붙는 것, 접두사"이고, cache 는 프랑스어로 "숨겨 두는 곳"에서 온 말입니다.