본문 바로가기

IT & AI

GigaToken, LLM 토큰화를 최대 1,000배 빠르게 만든 방법

728x90

GigaToken, LLM 토큰화를 최대 1,000배 빠르게 만든 방법

GigaToken 토큰화 성능 썸네일
GigaToken 토큰화 성능 썸네일

대규모 텍스트를 언어 모델에 넣기 전에는 문장을 작은 토큰 단위로 바꿔야 해요. GigaToken은 이 토큰화 과정을 CPU에서 GB/s 단위로 처리하는 오픈소스 도구예요. 특정 벤치마크에서는 HuggingFace Tokenizers보다 약 1,000배 높은 처리량을 기록했어요. 다만 이 숫자는 모든 환경에 그대로 적용되는 평균값이 아니에요. 1

핵심 요약

구분핵심왜 볼 만한가요
성능GPT-2 기준 EPYC 9565에서 24.53GB/s를 기록했어요수십 GB 이상의 학습 데이터를 준비할 때 대기 시간을 줄일 수 있어요
구현사전 토큰화를 SIMD로 처리하고 캐시·분기·스레드 통신을 손봤어요단순히 스레드 수만 늘린 결과가 아니라 병목을 다시 설계했어요
호환성자체 API와 HuggingFace·Tiktoken 호환 모드를 제공해요기존 코드의 변경 폭과 최고 성능 사이에서 선택할 수 있어요
제약WordPiece와 파일 출력은 아직 지원하지 않아요BPE와 Linux·macOS·WSL 중심으로 먼저 검토해야 해요

1. 정규식 밖으로 꺼낸 사전 토큰화가 속도를 바꿨어요

토크나이저는 텍스트를 바로 숫자로 바꾸지 않아요. 먼저 단어나 공백, 구두점 같은 경계를 나누는 사전 토큰화를 거쳐요. 많은 구현이 이 단계에 정규식 엔진을 써요. GigaToken은 사전 토큰화를 SIMD 명령으로 직접 최적화했어요. 여러 바이트를 한 번에 처리하고 분기 횟수를 줄이는 방식이에요. 이미 본 문자열의 토큰 결과를 다시 쓰는 캐시도 별도로 다듬었어요. Python과 Rust 사이의 데이터 이동, 작업 스레드 사이의 통신도 줄였어요. 2

24.53GB/s가 나온 조건

공식 저장소의 11.9GB OpenWebText 벤치마크에서 GPT-2 토크나이저는 AMD EPYC 9565 144코어 환경에서 24.53GB/s를 기록했어요. 같은 표의 HuggingFace Tokenizers는 24.8MB/s로 약 989배 차이가 났어요. Tiktoken의 36.0MB/s와 비교하면 681배예요.

728x90

Apple M4 Max 16코어에서는 8.79GB/s를 기록했어요. Ryzen 7 9800X3D 16코어 환경에서는 6.27GB/s가 나왔어요. CPU가 달라도 GB/s 단위 처리량을 보였다는 점은 눈여겨볼 만해요. 하지만 토크나이저 종류에 따라 차이는 컸어요. M4 Max에서 GPT-2는 HuggingFace 대비 1,268배였지만, SentencePiece 계열 일부는 17~22배 수준이었어요. 따라서 제품 소개의 '약 1,000배'는 가장 잘 맞는 조합의 결과로 읽어야 해요. 2

호환 모드와 자체 API는 쓰임이 달라요

기존 HuggingFace Tokenizers나 Tiktoken 코드를 크게 바꾸기 어렵다면 호환 모드를 쓸 수 있어요. 기존 토크나이저를 감싼 뒤 `.as_hf()` 또는 `.as_tiktoken()`으로 변환해요. 출력 일치를 확인하는 과정이 들어가므로 자체 API보다 느려요. 그래도 공식 설명 기준으로 기존 구현보다 높은 처리량을 기대할 수 있어요.

최고 속도가 필요하면 GigaToken 자체 API가 맞아요. Rust 코드가 파일을 직접 읽고 작업을 병렬로 나눠요. Python 리스트를 넘기는 경로보다 데이터 이동이 적어요. 대규모 학습 말뭉치를 반복해서 토큰화하거나 여러 토크나이저로 데이터셋을 다시 만드는 작업에 더 잘 맞아요. 단순한 채팅 요청처럼 토큰화가 전체 지연에서 작은 비중만 차지하는 환경에서는 체감 효과가 제한적일 수 있어요.

바로 교체하기 전 확인할 항목도 있어요

현재 WordPiece는 지원하지 않아요. SentencePiece 계열은 BPE 계열보다 최적화 수준이 낮아요. GigaToken API의 파일 출력 기능도 아직 빠져 있어요. Windows 검증도 충분하지 않아 WSL 사용을 권하고 있어요. macOS에서는 첫 실행 때 보안 검사로 측정값이 낮아질 수 있어 두 번 실행해 보라는 안내가 있어요. 2

호환성은 속도와 따로 확인해야 해요. 공식 CLI는 GigaToken과 HuggingFace의 토큰 결과가 같은지 검증하는 옵션을 제공해요. 저장소의 GPT-2 예시에서는 OpenWebText 샘플 20,401개 문서가 일치했어요. 실제 도입 전에는 서비스에서 쓰는 모델, 특수 토큰, 정규화 규칙, 입력 데이터로 같은 검증을 다시 해보는 편이 안전해요.

왜 중요한가요

토큰화는 모델 추론 비용의 대부분을 차지하지 않아요. 그래서 짧은 요청을 처리하는 일반 챗봇에서는 1,000배라는 숫자만큼 서비스가 빨라지지 않아요. 효과가 큰 곳은 수십 GB에서 수 TB의 학습 데이터를 미리 처리하는 작업이에요. 데이터 정제 조건을 바꾸고 전체 말뭉치를 다시 만드는 팀이라면 반복 시간이 짧아질 수 있어요. 요청 초기에 토큰 수를 계산해 라우팅이나 사용량 제한을 결정하는 AI 플랫폼도 후보예요. 1

이 프로젝트에서 더 흥미로운 부분은 숫자보다 접근법이에요. 이미 빠른 Rust 기반 도구를 상대로 사전 토큰화, 캐시, 분기, 데이터 이동을 각각 다시 살폈어요. CPU 코어를 더 쓰는 데서 끝나지 않고 작업의 병목 자체를 바꿨어요. 다만 도입 판단은 자체 데이터로 해야 해요. 사용하는 토크나이저가 BPE인지, 출력이 완전히 일치하는지, 토큰화가 실제 파이프라인에서 얼마나 오래 걸리는지부터 재면 과장된 기대를 피할 수 있어요. 2

참고 자료

  1. GigaToken - 언어 모델 토큰화를 약 1,000배 가속 — GeekNews
  2. Gigatoken: Language model tokenization at GB/s — GitHub
728x90