답변 속도와 가속

최종 업데이트

LLM 메모리 대역폭 vs 연산 성능: 속도 병목 찾는 법

메모리 대역폭과 연산 성능은 서로 다른 대기 시간을 줄여줘요.

메모리 대역폭1은 메모리에서 계산 장치로 초당 얼마나 많은 데이터를 보낼 수 있는지를 뜻해요. GPU2 연산 성능은 받은 데이터로 계산할 수 있는 양이에요. LLM3이 답변을 한 토큰4씩 만들 때와 긴 입력을 읽을 때는 필요한 작업이 달라서, 두 사양의 영향도 달라져요.

문서 요약을 할 때 첫 답이 늦게 나오는지, 답이 시작된 뒤 문장이 천천히 이어지는지 구분해보세요. 앞쪽은 입력을 처리하는 프리필5, 뒤쪽은 답을 생성하는 디코드6와 관련돼요. 어느 구간에서 오래 기다리는지 알면, 장비 사양표에서 어떤 숫자를 먼저 비교할지도 정할 수 있어요.

실행 조건과 핵심 내용
  • 메모리 용량은 데이터를 담을 공간이고, 대역폭은 데이터를 보내는 속도예요.
  • 단일 사용자 디코드는 가중치 공급 속도의 영향을 크게 받을 수 있어요.
  • 긴 입력과 여러 요청을 함께 처리하면 GPU의 연산 성능이 더 중요해질 수 있어요.

답을 한 토큰씩 만들 때는 가중치를 계속 읽어요.

LLM은 모델에 저장된 가중치를 사용해 다음 토큰을 계산해요. 한 사람의 답변을 생성할 때는 앞 토큰이 정해진 뒤 그다음 토큰을 만들죠. 이 과정에서 필요한 가중치를 메모리에서 반복해서 가져와요. 계산 장치가 데이터를 기다리는 상황이라면, 연산 유닛을 더 늘려도 그 기다림부터 줄여야 해요.

메모리 용량과 대역폭은 여기서 역할이 달라요. 용량이 충분해야 모델과 KV 캐시7를 올릴 수 있고, 대역폭이 넓어야 계산에 필요한 데이터를 빠르게 공급할 수 있어요. 모델이 들어간 뒤 답변이 느리다면, 용량을 더 늘리는 것보다 실제 디코드 속도와 데이터 공급 경로를 살펴보는 편이 도움이 돼요.

모델 가중치가 메모리에서 계산 장치로 흐르는 그림
한 토큰씩 생성할 때는 필요한 가중치를 반복해서 공급해요.

20GB를 읽는 시간을 계산해볼게요.

한 토큰의 계산에 필요한 가중치가 20GB이고, 실제 전송 속도가 400GB/s라고 가정해볼게요. 데이터를 읽는 시간은 20÷400=0.05초예요. 이 읽기를 1초 동안 반복하면 1÷0.05=20회가 돼요. 읽을 양이 줄거나 전송 속도가 높아지면 같은 데이터를 기다리는 시간도 줄어드는 원리예요.

이 예시는 가중치 읽기만 계산한 값이에요. 실제 tok/s에는 연산, KV 캐시 접근, 실행 프로그램8의 처리 비용도 들어가요. 제품 사양의 최고 대역폭 대신 실제 전송 속도를 가정했고, MoE9처럼 일부 가중치를 선택하는 구조에서는 읽는 양도 달라져요. 계산식은 대역폭의 역할을 이해하는 데 쓰고, 장비 속도는 같은 모델을 실행한 결과로 비교하면 돼요.

긴 문서를 읽을 때는 많은 토큰을 함께 처리해요.

문서를 보내면 모델은 답을 만들기 전에 입력 토큰을 처리해요. 프리필에서는 이미 주어진 토큰을 묶어 계산할 수 있어, 연산 장치를 넓게 활용할 여지가 커요. 긴 계약서를 읽고 첫 답이 나올 때까지 오래 걸린다면 프리필 처리량10과 첫 토큰 지연을 함께 비교해보세요.

여러 사람의 요청을 묶는 배치 처리에서도 같은 가중치를 여러 계산에 활용할 수 있어요. 서버가 초당 처리하는 전체 토큰 수가 늘어나는 동안 각 요청은 대기열에서 기다릴 수 있죠. 개인 채팅에서는 한 답변의 속도를, 공동 서버에서는 개별 지연과 전체 처리량을 함께 확인해야 사용 목적에 맞는 장비를 고를 수 있어요.

많은 입력 토큰을 넓은 격자에서 함께 처리하는 프리필 행렬 계산 그림
긴 입력을 함께 처리하는 프리필은 연산 장치를 더 넓게 활용할 수 있어요.

양자화와 문맥 길이도 데이터 이동을 바꿔요.

양자화11는 가중치를 더 적은 비트로 저장해 읽을 양을 줄일 수 있어요. 이 데이터를 효율적으로 계산하는 커널이 지원되면 용량과 속도 양쪽에서 도움이 되죠. 같은 원본 모델이라도 포맷과 실행 프로그램을 함께 기록해야, 어떤 조합에서 시간이 줄었는지 다시 확인할 수 있어요.

대화가 길어지면 이전 문맥을 기억하는 KV 캐시도 커져요. 답을 만들 때 이 캐시를 참고하는 부담이 늘 수 있어, 짧은 질문에서 얻은 속도와 긴 문서의 속도가 달라져요. 문서 입력 길이를 고정하고 답변 토큰 수도 함께 기록하면, 입력과 출력이 바뀌어서 생긴 차이를 줄일 수 있어요.

메모리 운반대와 계산 장치 사이의 병목을 보여주는 그림
데이터 공급과 계산 가운데 오래 걸리는 쪽을 줄여야 실제 대기가 짧아져요.

느린 구간에 맞춰 장비를 비교해요.

먼저 원하는 모델과 실제 문맥이 메모리에 들어가는지 확인해요. 그다음 같은 문서와 질문으로 첫 토큰까지의 시간, 답변이 이어지는 속도, 완료 시간을 기록하세요. 이 세 가지를 나누면 사양이 높은 장비가 내 작업의 어느 부분을 줄여주는지 판단하기 쉬워요.

느린 구간에서 다음 점검 항목을 고를 수 있어요.
느린 구간먼저 비교할 것
답변이 천천히 이어져요.같은 모델의 디코드, 대역폭과 실제 실행 경로
긴 입력 뒤 첫 답이 늦어요.같은 입력 길이의 프리필과 TTFT
여러 요청이 줄을 서요.동시 요청에서의 개별 지연과 전체 처리량

용어 각주

  1. 메모리 대역폭 — 메모리와 프로세서 사이에서 단위 시간에 전송할 수 있는 데이터 양입니다. 보통 초당 바이트(B/s)로 나타냅니다.

    본문으로 돌아가기
  2. GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

    본문으로 돌아가기
  3. 대규모 언어 모델 — 대규모 텍스트 데이터에서 언어 패턴을 학습해 문맥에 맞는 텍스트를 처리하고 생성하는 모델입니다.

    본문으로 돌아가기
  4. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  5. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

    본문으로 돌아가기
  6. 토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.

    본문으로 돌아가기
  7. KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.

    본문으로 돌아가기
  8. 런타임 — 프로그램이 실행될 때 필요한 기능을 제공하는 소프트웨어 환경입니다. 로컬 AI에서는 모델을 실행하는 엔진을 가리키기도 합니다.

    본문으로 돌아가기
  9. MoE — 여러 전문가 하위망 중 일부를 입력에 따라 선택해 사용하는 모델 구조입니다. 총 파라미터 수와 한 토큰 처리에 활성화되는 파라미터 수는 다를 수 있습니다.

    본문으로 돌아가기
  10. 처리량 — 일정 시간 동안 처리하거나 생성한 작업량입니다. 토큰/초, 요청/초처럼 단위를 함께 확인해야 비교할 수 있습니다.

    본문으로 돌아가기
  11. 양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
메모리 대역폭은 메모리에서 계산 장치로 초당 얼마나 많은 데이터를 보낼 수 있는지를 뜻해요. GPU 연산 성능은 받은 데이터로 계산할 수 있는 양이에요. LLM이 답변을 한 토큰씩 만들 때와 긴 입력을 읽을 때는 필요한 작업이 달라서, 두 사양의 영향도 달라져요.
필요한 메모리는 어느 정도인가요?
LLM은 모델에 저장된 가중치를 사용해 다음 토큰을 계산해요. 한 사람의 답변을 생성할 때는 앞 토큰이 정해진 뒤 그다음 토큰을 만들죠. 이 과정에서 필요한 가중치를 메모리에서 반복해서 가져와요. 계산 장치가 데이터를 기다리는 상황이라면, 연산 유닛을 더 늘려도 그 기다림부터 줄여야 해요.