Hugging Face tokenizers v1 릴리스 노트

Hugging Face는 모델 속도와 워크로드가 증가함에 따라 토크나이제이션이 성능 저하의 원인이 되지 않도록 하기 위해 극한의 성능 최적화에 초점을 맞춘 tokenizers v1의 릴리스 후보를 발표했습니다. Apple M4 Max에서 v1은 10개의 모델 패밀리에 걸쳐 v0.23보다 3배에서 30배 빠르게 텍스트를 인코딩하며, 특히 GPT-2에서 가장 큰 성능 향상을 보였습니다.

핵심 기술 최적화

v1의 성능 향상은 대부분의 계산이 발생하는 모델 단계에 초점을 맞춘 토크나이제이션 파이프라인의 완전한 리팩터링에 기인합니다. 이 라이브러리는 v0.23과 완전히 호환되며, 동일한 토큰 ID, API, 사전을 생성합니다.

SIMD 기반 분할 (Bitcannon)

BPE 모델은 일반적으로 정규 표현식을 사용하여 입력 텍스트를 사전 토큰으로 분할합니다. v1은 일반적인 정규 표현식 엔진 대신 "bitcannon"이라는 수동으로 작성된 분할 함수를 도입합니다. 이 함수는 SIMD(Single Instruction, Multiple Data) 명령어를 사용하여 입력 바이트를 병렬적인 비트 스트림으로 간주하고, 전체 레지스터를 통해 부울 연산을 수행하여 경계를 식별합니다. 한 번의 레지스터 연산으로 64바이트를 처리할 수 있습니다. 이 접근 방식은 GPT-2, cl100k, o200k, Tekken, DeepSeek를 포함한 대부분의 바이트 수준 BPE 모델에 적용 가능합니다.

단어 캐시

중복 계산을 방지하기 위해 v1은 스레드 로컬 단어 캐시를 구현했습니다. BPE는 주어진 사전 토큰에 대해 결정론적인 토큰 ID를 생성하므로, 라이브러리는 이제 사전 토큰 바이트를 완성된 ID로 매핑합니다. 텍스트 내에서 단어가 반복될 경우, 토크나이저는 병합 과정을 완전히 건너뛰고 캐시에서 결과를 가져옵니다.

메모리 할당 없이 수행되는 병합 루프

BPE 병합 루프는 반복적인 메모리 할당을 제거하도록 재작성되었습니다. 주요 변경 사항은 다음과 같습니다:

  • 작업 버퍼: 병합 작업 세트는 이제 호출자 소유의 작업 버퍼에 위치하여 루프 중에 할당기에 접근할 필요가 없습니다.
  • 내재형 이중 연결 리스트: 기호는 평탄한 배열에 저장되며 위치로 연결되므로, 병합은 데이터를 이동하는 대신 두 인덱스만 업데이트함으로써 수행됩니다.
  • 정수 비교: 후보 쌍은 병합 순위를 상위 비트에 포함한 64비트 값으로 패킹되어, 브랜칭 없이 간단한 정수 비교로 다음 병합을 찾을 수 있습니다.

성능 및 확장성

tokbench 리포지토리를 통해 수행된 벤치마크 결과에 따르면, v1은 8개의 워커에서 선형 확장의 76% 수준으로 확장됩니다. 또한 라이브러리는 바이너리 크기와 종속성 오버헤드를 줄이기 위해 워크스페이스로 재구성되었습니다:

  • tk-encode: 인코딩에 필요한 런타임.
  • tk-serialize, tk-convert, tk-train: 특정 기능이 필요할 때만 링크되는 선택적 크레이트.

구현 로드맵

릴리스 후보 기능

핵심 인코딩 속도 향상 외에도 현재 릴리스 후보에는 다음 기능이 포함되어 있습니다:

  • 재사용 가능한 버퍼에 직접 바이트를 쓰는 병렬 디코딩을 통해 중간 문자열을 피함.
  • Node.js 바인딩.
  • role_to_token 지원.
  • 단일 호출로 여러 사전 토큰 스팬을 처리하는 배치 모델 호출.

v1.0.0 및 이후 방향

안정적인 1.0.0 릴리스를 위한 다음 업데이트에는 다음이 포함될 예정입니다:

  • 통합 인코딩: 훈련 검증 시 tk-encode를 사용하여 훈련과 추론 간 일관성 보장.
  • 바인딩 개선: 잠금을 줄이고 free-threaded CPython를 지원하는 더 간단한 Python 바인딩, 그리고 llama.cpp와 ExecuTorch를 위한 추론 전용 C/C++ 바인딩.
  • 최적화된 메타데이터: 오프셋과 마스크를 선택적으로 계산하여 토큰 ID만을 사용하는 경로를 가볍게 유지.

1.0.0 릴리스 이후 Hugging Face는 GPU 기반 인코딩과 배치 디코딩을 위한 선택적 구성 요소인 tok-devices를 탐색할 계획이며, 대규모 배치에서 텍스트와 토큰 ID를 장치 내부에 유지할 수 있도록 할 예정입니다.

Sources