초당 토큰 수의 작동 방식
기본 계산식은 다음과 같습니다.
TPS = 측정한 토큰 수 / 경과 시간(초)
추론(inference) 중에 언어 모델은 출력으로 토큰을 생성합니다. 생성 속도를 측정하는 일은 간단해 보이지만, 벤치마크에서는 다음 세 가지를 정해야 합니다.추론 중에 언어 모델은 출력으로 토큰을 생성합니다. 생성 속도를 측정하는 일은 간단해 보이지만, 벤치마크에서는 다음 세 가지를 정해야 합니다.
- 누구의 토큰인가요? 하나의 요청만 포함할지, 시스템의 모든 동시 요청을 포함할지 정합니다.
- 어떤 토큰인가요? 출력 토큰, 입력 토큰 또는 둘 다를 셉니다.
- 어떤 시간을 사용하나요? 첫 토큰 이후의 생성 기간만 사용할지, 전체 요청 시간을 사용할지, 전체 벤치마크 구간을 사용할지 정합니다.
이러한 선택에 따라 두 가지 일반적인 의미가 생깁니다.
요청별 출력 속도는 하나의 응답이 시작된 후 얼마나 빠르게 스트리밍되는지를 나타냅니다. 일반적으로 첫 토큰을 기다리는 시간은 제외하고 출력 토큰 사이의 간격을 사용해 계산합니다. 텍스트가 표시되는 동안 사용자가 체감하는 속도와 가장 가까운 TPS인 경우가 많습니다.
시스템 출력 TPS는 모든 요청의 출력 토큰을 합산한 뒤 벤치마크 기간으로 나눕니다. 이는 배포 환경의 전체 생성 용량을 측정합니다. NVIDIA의 벤치마크 정의와 Anyscale의 지표 가이드는 부하가 변할 때 두 범위의 지표가 서로 반대 방향으로 변할 수 있으므로 이를 구분합니다.
프롬프트 처리량을 측정하는 입력 TPS나 입력과 출력 토큰을 합산하는 총 TPS도 볼 수 있습니다. 값을 비교하기 전에 레이블을 확인하세요. 입력 처리는 출력 생성과 서로 다른 작업이지만, 둘 다 토큰을 사용합니다.
계산 예시
요청을 0.0초에 제출했다고 가정해 보겠습니다. 출력 토큰은 41개입니다.
- 첫 토큰은
0.4초에 도착합니다. - 마지막 토큰은
2.4초에 도착합니다. - 첫 토큰 이후의 40개 간격은
2.0초에 걸쳐 있습니다.
안정적인 출력 속도는 다음과 같습니다.
40개 간격 / 2.0초 = 20 tok/s
전체 요청을 포함하는 도구는 다음과 같이 계산할 수도 있습니다.
출력 토큰 41개 / 2.4초 = 17.1 tok/s
두 결과는 동일한 응답에서 나온 것입니다. 첫 번째 결과는 출력이 시작된 후의 생성만 분리합니다. 두 번째 결과는 초기 대기 시간을 포함하고 모든 출력 토큰을 사용합니다. 현재 문서에는 하나의 보편적인 관례가 없습니다. Artificial Analysis는 출력 속도에서 첫 토큰 대기 시간을 제외하는 반면, 일부 종단 간 지표에는 이 시간이 포함됩니다.
이제 범위를 바꿔 보겠습니다. 5초 동안 진행한 벤치마크에서 여러 동시 요청이 총 400개의 출력 토큰을 생성했습니다.
출력 토큰 400개 / 5초 = 80 system tok/s
이 80 tok/s는 집계된 용량입니다. 어떤 하나의 응답이 80 tok/s로 스트리밍되었다는 뜻은 아닙니다.
초당 토큰 수가 중요한 이유
요청별 TPS는 응답이 시작된 후 긴 응답이 얼마나 빠르게 도착하는지 판단하는 데 도움이 됩니다. 채팅, 코드 생성, 답변이 완성되기 전에 스트리밍 답변을 사용하는 모든 워크플로에서 중요합니다.
시스템 TPS는 용량과 비용을 계획하는 데 도움이 됩니다. 명시된 부하에서 배포 환경이 얼마나 많은 출력을 생성할 수 있는지 보여 줍니다. 동시성을 높이면 하드웨어를 더 효율적으로 사용하여 이 집계 속도가 향상될 수 있지만, 각 요청은 느려질 수도 있습니다. 용량이 높은 시스템이 한 사용자에게 항상 빠른 경험을 제공하는 것은 아닙니다.
TPS만으로는 전체 응답 시간의 양상을 알 수 없습니다. 요청별 TPS를 출력이 시작되기 전의 대기 시간을 측정하는 첫 토큰까지의 시간과 함께 확인하세요. 시스템 TPS는 부하에 따른 추론 처리량 및 지연 시간과 함께 확인하세요. 배포 환경은 애플리케이션의 응답 시간 요구를 충족하면서 충분한 작업을 처리할 때만 유용합니다.
TPS 결과를 바꾸는 요소
TPS는 단순히 모델 이름만으로 정해지는 값이 아니라 측정된 설정의 특성입니다. 다음 요소에 따라 달라질 수 있습니다.
- 모델의 아키텍처와 크기
- 하드웨어와 장치 수
- 추론 엔진, 수치 정밀도, 캐싱 및 디코딩 방식
- 프롬프트와 출력의 길이
- 동시성, 배치 처리, 요청률 및 기타 트래픽 패턴
- 토큰을 계산하는 데 사용한 토크나이저
- 스트리밍 청크와 네트워크 전송 같은 클라이언트 측 요인
더 긴 프롬프트는 초기 대기 시간과 이후 출력 속도를 모두 바꿀 수 있습니다. 또한 서빙 엔진이 추측 디코딩과 같은 방법을 사용하면 생성된 콘텐츠에 따라 출력 속도가 달라질 수 있습니다. 따라서 재현 가능한 결과에는 모델과 엔드포인트, 워크로드 형태, 부하, 토크나이저 및 정확한 계산식을 명시해야 합니다. vLLM의 벤치마크 문서는 지표 이름만이 아니라 측정 지점과 계산식을 비교할 것을 권장합니다.
흔한 오해
“TPS를 보면 답변이 언제 시작되는지 알 수 있다”
TPS는 일반적으로 생성 중의 속도 또는 벤치마크 구간 전체의 속도를 나타냅니다. 첫 토큰 전의 공백 대기 시간을 따로 측정하지는 않습니다. 두 시스템의 출력 TPS가 같아도 첫 토큰까지의 시간은 크게 다를 수 있습니다.
“시스템 TPS가 높을수록 내 응답도 빠르다”
반드시 그렇지는 않습니다. 더 많은 요청을 함께 처리하면 전체 시스템 TPS는 높아질 수 있지만, 각 요청이 토큰을 받는 간격은 길어질 수 있습니다. 결과가 요청별인지 집계값인지 확인하세요.
“토큰은 단어다”
토큰은 눈에 보이는 텍스트의 고정된 단위가 아닙니다. 토크나이저에 따라 같은 문장도 다르게 분할될 수 있으므로, 동일한 tok/s 값이 서로 다른 텍스트 양에 해당할 수 있습니다. 이러한 이유로 모델 간 벤치마크에서는 출력물을 공통 토크나이저로 다시 토큰화하기도 합니다.
“TPS는 하나의 표준화된 지표다”
강제된 단일 정의는 없습니다. TPS에는 첫 토큰 대기 시간이 포함되거나 제외될 수 있고, 출력 토큰만 또는 입력과 출력 토큰을 함께 셀 수도 있습니다. 항상 계산식을 확인하세요.
다음으로 알아볼 내용
응답 지연을 이해하려면 추론 지연 시간을, 초기 대기 시간을 확인하려면 첫 토큰까지의 시간을, 전체 서빙 용량을 확인하려면 추론 처리량을 사용하세요. 이 네 가지 측정값의 차이와 경계를 모두 알아보려면 지연 시간 vs. TTFT vs. 초당 토큰 수 vs. 처리량을 참조하세요.