AI VIDEO BRIEFING
sLLM 서빙 최적화 정리, 연속 배치와 플래시 어텐션 페이지드 어텐션 그리고 vLLM 실습
작은 언어모델을 직접 서빙할 때 속도를 좌우하는 배치 전략과 어텐션 최적화, KV 캐시 관리 기법을 스터디 발표 내용과 실측 결과로 정리했다. vLLM으로 돌린 비교 실험과 로컬 모델의 도구 호출 한계까지 담았다.

핵심 메시지
쉽게 이해하기
AI·ML·Quant 스터디가 'LLM을 활용한 실전 AI 애플리케이션 개발' 8장을 함께 읽으며 작은 언어모델을 실제로 서빙해본 발표다. 발표자는 모델을 그냥 가져다 쓰는 것이 아니라 쓸 때도 전략이 필요하다는 점을 강조하며, 배치 전략과 연산 최적화, 추론 최적화, 그리고 실제 서빙 프레임워크 순서로 내용을 정리했다.
먼저 배치 전략이다. 언어모델은 토큰을 왼쪽에서 오른쪽으로 하나씩 만들어내는데, 여러 사용자의 요청을 한 묶음으로 처리하면 생성 길이가 가장 긴 요청이 끝날 때까지 나머지 자리가 비어 있게 된다. 요청이 어느 정도 모일 때까지 기다렸다 처리하는 동적 배치는 GPU 활용도를 높이지만 응답이 늦어지고, 길이 차이에서 오는 낭비는 그대로 남는다. 그래서 자리가 비는 즉시 새 요청을 밀어 넣는 연속 배치가 해법으로 제시된다.
다음은 트랜스포머 연산 최적화다. 발표자는 어텐션 계산에서 정작 시간을 잡아먹는 것은 행렬 곱이 아니라 마스킹과 소프트맥스처럼 큰 행렬을 다루며 GPU의 큰 메모리와 연산부 근처의 작은 메모리 사이를 오가는 과정이라고 설명했다. 플래시 어텐션은 이 행렬을 아예 만들지 않고 블록으로 쪼개 작은 메모리 안에서 계산을 끝내는 방식이고, 후속 버전은 행렬 연산에 맞춘 최적화와 문장을 더 잘게 나눈 병렬화를 더했다. 위치 정보에서는 절대 위치 인코딩이 학습 길이를 넘어서면 급격히 무너지는 반면, 거리가 멀수록 어텐션에 감점만 주는 단순한 방식이 길이 확장에 가장 강했다.
추론 단계의 최적화로는 여러 연산을 하나로 합쳐 메모리 왕복을 줄이는 커널 퓨전, 이전 계산 결과를 담아두는 KV 캐시를 블록 단위로 관리하는 페이지드 어텐션, 그리고 작고 빠른 초안 모델이 앞서 써 내려가면 크고 정확한 모델이 병렬로 검증하는 추측 디코딩이 소개됐다. 쉬운 부분은 초안 모델이 맡고 어려운 부분만 큰 모델이 다시 계산하기 때문에 전체 속도가 빨라진다는 설명이다.
실습에서는 같은 파인튜닝 모델을 일반 파이프라인과 vLLM으로 각각 돌려 비교했다. 배치 크기를 1에서 32까지 늘리자 처리 시간이 눈에 띄게 줄었고, 배치 32에서는 vLLM이 8초로 33초 대비 3배가량 빨랐다. 이어서 OpenAI와 같은 형식의 API로 서버를 띄우고 워크플로 자동화 도구의 채팅 트리거에 연결해 대화까지 붙여봤다. 다만 로컬 모델은 도구 호출에서 형식을 맞추지 못해 실패했고, 발표자는 이 부분이 해결돼야 로컬 모델로 외부 도구 연동까지 갈 수 있다고 정리했다.
주요 인사이트
- 서빙 성능은 모델을 바꾸기 전에 배치 전략과 캐시 관리에서 먼저 갈리며, 이 기법들은 이미 프레임워크에 구현돼 있어 개념만 알면 설정으로 쓸 수 있다.
- 플래시 어텐션은 알고리즘 개선이라기보다 GPU의 메모리 계층을 정확히 겨냥한 설계여서, 최신 버전일수록 지원되는 GPU 세대가 제한된다는 실무적 제약이 따른다.
- 긴 입력을 다뤄야 한다면 위치 인코딩 선택만으로도 체감 성능이 달라지며, 계산량을 거의 늘리지 않고 길이 확장에 강한 방식이 존재한다.
- 대량 데이터를 한 번에 처리하는 오프라인 추론은 배치 크기 튜닝이, 실시간 응답이 필요한 온라인 추론은 연속 배치와 캐시가 핵심이라 최적화 지점이 서로 다르다.
- 언어모델 서버 자체는 대화를 기억하지 않으므로, 이전 대화를 다시 실어 보내는 별도 장치가 필요하고 그만큼 요청이 무거워진다는 점을 감안해야 한다.
자주 묻는 질문
동적 배치와 연속 배치는 어떻게 다른가요?
동적 배치는 요청이 어느 정도 모일 때까지 기다렸다가 한 번에 처리해 GPU가 노는 시간을 줄이지만 대기 시간이 늘고, 요청마다 생성 길이가 다르면 낭비가 남습니다. 연속 배치는 먼저 끝난 자리에 새 요청을 곧바로 채워 이 빈틈을 없앱니다.
페이지드 어텐션이 필요한 이유는 무엇인가요?
KV 캐시를 쓸 때 요청마다 시퀀스 길이만큼 메모리를 미리 잡아두면 실제로 쓰지 않는 영역이 크게 남습니다. 페이지드 어텐션은 캐시를 블록으로 나눠 필요한 만큼 동적으로 할당해 이 낭비를 줄이고, 그만큼 배치 크기를 키울 수 있게 합니다.
로컬 모델을 띄우면 외부 도구 연동도 바로 되나요?
발표에서는 되지 않았습니다. API 형식은 같아 대화까지는 잘 붙었지만, 도구를 호출할 때 요구되는 출력 형식을 로컬 모델이 맞추지 못해 오류가 났습니다. 반면 다른 실행 환경에서 시험한 모델은 계산기 도구 호출이 정상 동작했습니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗