메인 콘텐츠로 건너뛰기

Transformers v5 토크나이제이션 대개편: 더 단순하고, 더 강력해진 이유

“이번에 나온 Transformers v5, 토크나이저가 완전 갈아엎어졌다던데… 업그레이드 해야 할까, 말까?”

라이브러리 메이저 버전이 바뀔 때마다 개발자들이 가장 두려워하는 지점이 바로 이거죠. 기존 코드 깨지는 거, 미묘하게 결과 달라지는 거, 문서랑 실제 동작 안 맞는 거.

하지만 Transformers v5에서 토크나이제이션 개편은, 겁먹기보다 “이득 볼 게 훨씬 많은 변화”에 가깝습니다. 특히 커스텀 토크나이저를 만들거나, 도메인 특화 LLM을 굴리는 사람이라면 말 그대로 게임 체인저에요.

이 글에서는 복잡한 내부 구현 대신, “개발자 입장에서 뭐가 어떻게 좋아졌는지”에 집중해서 정리해봅니다.

읽고 나면 대략 이런 질문에 답할 수 있게 됩니다.

  • v5에서 “Fast vs Slow 토크나이저” 구분이 왜 사라졌는지

  • 왜 토크나이저를 모듈처럼 설계했다고 하는지

  • AutoTokenizer가 이제 어떤 역할까지 대신해 주는지

  • 내 데이터로 “LLaMA 스타일 토크나이저”를 새로 훈련하는 게 얼마나 쉬워졌는지

1. v4에서 v5로: 토크나이저 철학 자체가 바뀌었다

v4까지의 Transformers 토크나이저를 떠올려 보면 이런 이미지일 겁니다.

  • 같은 모델 이름인데 TokenizerTokenizerFast가 따로 있고

  • 어떤 건 Rust 백엔드, 어떤 건 Python 구현이라 동작이 살짝 다를 때도 있고

  • 토근화 설정은 여기저기 설정 파일과 클래스에 흩어져 있고

“Fast 써야 되는 건 알겠는데, 정확히 뭐가 다른지, 어디서 뭘 바꾸는지가 늘 헷갈리는” 구조였죠.12

Transformers v5는 이걸 아예 철학 수준에서 갈아엎었습니다.

핵심 아이디어는 딱 하나입니다.

“토크나이저도 모델처럼,
구조(architecture)훈련된 파라미터(가중치) 를 분리해서 다루자.”

모델 쪽은 이미 익숙하죠.

  • 구조: LlamaForCausalLM, BertModel 같은 nn.Module 정의

  • 가중치: .bin, .safetensors로 저장된 실제 파라미터

v5에서는 토크나이저도 똑같이 봅니다.

  • 구조: 정규화 방식, pre-tokenization, BPE/Unigram 등 모델 타입, special tokens 정의

  • 파라미터: vocab, merges, 학습된 통계 정보

이렇게 나누면 어떤 일이 가능해지냐면:

  • “LLaMA랑 동일한 규칙으로 토큰을 쪼개되,
    단어장은 내 도메인(의학, 법률 등)에 맞게 새로 학습” 같은 게 훨씬 명확해집니다.3

  • 토크나이저 구조를 템플릿처럼 재사용하면서,
    파라미터만 바꿔끼우는 식의 커스텀 실험이 쉬워집니다.

이제 토크나이저는 “어떤 텍스트를 어떻게 바라볼지 규칙을 정의한 모듈”이 되고,
vocab/merges는 거기에 꽂는 “훈련된 파츠”에 가깝다고 보면 됩니다.

2. Fast vs Slow? 이제 그런 고민 자체가 사라진다

v4에서는 늘 이런 코드 많이 썼을 겁니다.

from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("bert-base-uncased", use_fast=True)

여기서 use_fast=True를 안 넣으면,
어느 모델은 느린 Python 버전을 쓰고, 어느 모델은 Fast 버전을 쓰고…
모델마다 결과가 살짝 달라지는 경우도 있었죠.4

Transformers v5에서 이 부분이 대대적으로 정리됐습니다.12

첫 번째 변화는 백엔드 통합입니다.

  • 기본값은 Rust 기반 백엔드

  • PythonBackend, SentencePieceBackend는 “정말 필요한 특수한 경우”에만 사용

  • 동일 모델에 대해 Fast/Slow 두 파일을 나눠 관리하던 구조 → 하나의 토크나이저 파일로 통합

즉, 이제는 이런 느낌입니다.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")
# 별다른 옵션 없이도, 가능한 가장 빠른 Rust 백엔드를 자동 선택

사용자 입장에서는:

  • “Fast 쓸까 말까”를 고민할 필요가 줄어들고

  • 같은 모델, 같은 이름이면 동일한 백엔드·동일한 동작을 기대할 수 있고

  • 토크나이저 파일도 하나라, 코드랑 설정을 따라가기 더 수월합니다.

라이브러리 내부 입장에서도:

  • Fast와 Slow를 각각 따로 구현하던 시절에 비해 코드 중복이 대폭 줄어듦

  • 버그 수정이나 기능 추가를 한 군데만 하면 전체가 반영

  • 유지보수 비용과 혼란이 같이 줄어든 구조입니다.12

3. 토크나이저를 “모듈”처럼 다루기: PyTorch nn.Module을 닮다

v5 토크나이저 개편의 진짜 맛은 여기서 나옵니다.

이제 토크나이저는 내부적으로 레이어드 아키텍처를 따릅니다.5

  • AutoTokenizer: “이 모델이면 이 토크나이저 구조”를 자동으로 골라주는 상위 레이어

  • 구체 토크나이저 클래스: LlamaTokenizer, BertTokenizer 등, 구조와 역할이 명확히 드러나는 레벨

  • 백엔드: Rust / Python / SentencePiece 등 실제 연산을 수행하는 레벨

이것이 왜 중요할까요?

3-1. “이 토크나이저가 정확히 뭘 하는지” 한눈에 보인다

이전에는 토크나이저가 실제로:

  • 어떤 방식으로 정규화하는지

  • 공백/대소문자/악센트를 어떻게 처리하는지

  • 어떤 special token들을 갖고 있는지

이걸 파악하려면 소스코드 이곳저곳을 뒤져야 했습니다.

v5에서는 토크나이저 구조가 한 클래스 안에 명시적으로 정의됩니다.

그래서 특정 토크나이저를 로드한 뒤,
구조를 살펴보면 “이 녀석이 텍스트를 어떤 규칙으로 처리하는지”를 명확히 이해할 수 있습니다.
디버깅할 때도 훨씬 덜 고통스럽습니다.

3-2. 구조 재사용 + 파라미터만 갈아끼우는 커스텀 실험

예를 들어 이런 요구사항을 생각해봅시다.

  • “LLaMA 3와 완전히 같은 토큰화 규칙을 쓰고 싶다.
    다만 내 회사 코드베이스나 내부 문서를 잘 다루도록,
    토큰 단위는 내 데이터로 다시 학습하고 싶다.”

v4 시절에는:

  • LLaMA 토크나이저 pipeline을 문서/코드에서 긁어모아

  • normalizer, pre-tokenizer, model type, post-processor를 조합해

  • 조용히 삽질하며 맞춰야 했습니다.3

v5에서는 구조 자체가 템플릿으로 존재합니다.36

  • “LLaMA 스타일 구조”를 텅 빈 상태로 인스턴스화(architecture만)

  • 거기에 내 데이터로 vocab/merges를 학습

  • 결과를 저장해두고, 이후에는 일반 from_pretrained처럼 쓰기

이 흐름이 자연스럽고 공식적인 사용 패턴이 됩니다.

즉, “모델 구조는 그대로, 토큰 세계관만 내 데이터에 최적화”하는 작업의 장벽이 확 내려갑니다.
LLM을 도메인 특화시키고 싶은 팀에게는 상당히 큰 의미가 있습니다.

4. AutoTokenizer의 역할: “맞는 토크나이저를 대신 골라주는 AI 비서”

Transformers를 처음 쓸 때 가장 고마운 기능이 AutoModel, AutoTokenizer였죠.5

  • 모델 이름만 알면 AutoModel.from_pretrained(...)

  • 토크나이저도 AutoTokenizer.from_pretrained(...)

v5에서는 이 Auto 계열이 라이브러리의 레이어드 아키텍처의 입구 역할을 합니다.5

토크나이저 쪽만 떼어 보면 AutoTokenizer는 이제 다음을 대신 처리해 줍니다.

  1. 해당 모델에 대응하는 올바른 토크나이저 클래스 선택

  2. 해당 클래스에 맞는 구조(architecture) 인스턴스화

  3. 적절한 백엔드(Rust/Python/SentencePiece) 선택

  4. 저장된 vocab/merges 등 훈련 파라미터 로드

사용자 입장에서는 그냥 이렇게 쓰면 됩니다.

from transformers import AutoTokenizer

tok = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Llama-8B")

뒤에서 어떤 클래스가 선택되고, 어떤 백엔드가 붙는지, 어떤 구조 템플릿이 쓰이는지는
대부분 신경 쓸 필요가 없습니다.

다만, v5 초기에는 일부 모델에서 “기존과 토크나이저 디코더 타입이 달라졌다”는 이슈도 보고되고 있습니다.7
예를 들어 동일 모델에서 v4와 v5가 서로 다른 디코더 구성을 보여주는 경우가 있었죠.

이건 “파일에 정의된 토크나이저를 그대로 신뢰하던 v4”와
“구조를 라이브러리 쪽에서 재구성하는 v5”의 철학 차이 때문에 생긴 과도기적 버그에 가깝습니다.7

중요한 건:

  • 이런 이슈는 대부분 빠르게 잡히는 편이고

  • 토크나이저 구조가 명확해진 덕분에, 문제 원인 추적과 수정도 더 쉬워졌다는 점입니다.

5. 실무에서 체감하는 변화: ML 시스템 구축이 편해진다

여기까지의 얘기를 “철학”이 아니라 “실무” 관점에서 정리해보면 이렇습니다.

5-1. 코드 베이스가 단순해지면서, 버그 리스크가 줄어든다

v5는 토크나이제이션뿐 아니라 전체 모델 아키텍처를 모듈화하고 중복 코드를 줄이는 방향으로 바꿨습니다.12

  • 토크나이저: Fast/Slow 이원화 → 하나의 통합 구현

  • 이미지 프로세서 등도 Fast 기반만 유지하는 방향으로 정리

  • 전체 라이브러리도 PyTorch-first로 방향성을 명확히 함1

이는 곧:

  • 똑같은 모델인데 구현 버전에 따라 결과가 달라지는 상황 감소

  • 유지보수 지옥을 줄이면서, 새로운 기능을 더 안정적으로 올릴 수 있는 구조

  • 실무에서 “예상치 못한 edge case”에 덜 시달림

으로 이어집니다.

5-2. 도메인 특화 토크나이저를 “정석적인 방법”으로 만들 수 있다

이전에는 커스텀 토크나이저를 만들려면:

  • 토크나이저 라이브러리를 직접 불러

  • 파이프라인을 하나하나 수동으로 조립하고

  • 모델의 기대 토큰 규칙과 실제 토크나이저 규칙이 잘 맞는지
    엔지니어가 눈으로 비교해가며 검증해야 했습니다.6

v5에서는:

  • 이미 잘 정의된 구조(예: LLaMA-style, GPT-style)를 그대로 불러와

  • 내 데이터로 vocab/merges만 새로 학습

  • 동일 구조를 그대로 쓰기 때문에 “원본 모델과의 호환성”을 유지하기 쉬움

즉, “모델이 기대하는 토큰 세계관”을 유지한 채로
내 도메인에 맞춘 어휘 분해를 적용할 수 있게 됩니다.36

5-3. 토크나이저와 나머지 생태계가 더 잘 맞물린다

Transformers v5 전체의 큰 방향성은 “인터페이스 표준화 + 생태계 연동 강화”입니다.15

  • 모델 정의는 Transformers가 맡고

  • 학습은 torchtitan, megatron, nanotron 같은 프레임워크와 잘 붙고1

  • 추론은 vLLM, SGLang, TensorRT-LLM 같은 엔진이 가져다 쓰고1

  • 양자화는 TorchAO, bitsandbytes 같은 도구와 통합되고1

  • ONNX, GGUF, MLX, ExecuTorch 등 다양한 포맷으로 쉽게 왔다 갔다 할 수 있게 설계된 구조입니다.15

이 흐름 안에서 토크나이저도:

  • 명확한 클래스/구조를 갖고

  • Auto 계열과 백엔드 통합을 통해

  • “어디서 불러다 써도 똑같이 동작하는 표준 인터페이스”의 일부가 됩니다.

결국, 토큰화 단계부터 훈련–추론–배포까지 한 줄 흐름으로 이어지는 설계를 위해
이번 토크나이제이션 개편이 중요한 퍼즐 조각 역할을 하고 있다고 볼 수 있습니다.

마무리: 업그레이드를 미루기엔, 얻을 게 너무 많다

Transformers v5의 토크나이제이션 개편은 단순히 “성능이 좀 빨라졌다” 수준의 변화가 아닙니다.

  • 토크나이저를 모델처럼, 구조와 파라미터를 분리해 다루는 패러다임 전환

  • Fast/Slow 토크나이저 혼란을 줄이는 백엔드 통합과 코드 단순화

  • AutoTokenizer 중심의 레이어드 아키텍처로 일관성 있는 사용 경험 제공

  • 도메인 특화 토크나이저를 “정석적인 방법”으로 훈련할 수 있는 기반 마련

물론, 메이저 버전인 만큼 일부 breaking change나 초기 버그는 감수해야 합니다.27
하지만 장기적으로 봤을 때, “잘못 설계된 토크나이저 때문에 모델이 미묘하게 이상해지는 상황”을 줄이고,
커스텀 LLM을 만드는 팀에게 훨씬 탄탄한 발판을 제공하는 방향입니다.

실무에서 제가 추천하는 전략은 세 가지입니다.

  1. 새 프로젝트는 v5 기준으로 시작
    Fast/Slow 고민 없이, 새 토크나이저 철학을 전제로 설계하는 편이 낫습니다.

  2. 기존 프로젝트는 중요한 실험부터 v5 토크나이저로 병행 테스트
    동일 데이터, 동일 모델에서 v4 vs v5 토큰 분포·길이·성능을 비교해보면
    전환 시 발생할 수 있는 리스크를 미리 파악할 수 있습니다.

  3. 도메인 특화 LLM을 고민 중이라면, 지금이 토크나이저 구조를 제대로 배울 타이밍
    “모델 구조는 그대로, 토큰 세계관만 내 도메인에 맞춘다”는 사고방식이
    앞으로 점점 더 중요해질 가능성이 큽니다.

결국, Transformers v5의 토크나이제이션 개편은
“당장 좀 번거롭지만, 앞으로 몇 년간 LLM 시스템을 더 편하게 만들기 위한 투자”에 가깝습니다.

업그레이드를 미루고 있다면,
이제는 토크나이저 관점에서 한 번 진지하게 검토해볼 때입니다.

참고

1Transformers v5 Release: PyTorch-First AI Library Update | HowAIWorks.ai
(https://howaiworks.ai/blog/transformers-v5-release-announcement-2025)

2huggingface/transformers | DeepWiki – Tokenization and Multi-Modal Processing
(https://deepwiki.com/huggingface/transformers)

3I’m training a tokenizer and model from scratch — how do I prepare my dataset and set the correct tokenizer parameters? | Hugging Face Forums
(https://discuss.huggingface.co/t/i-m-training-a-tokenizer-and-model-from-scratch-how-do-i-prepare-my-dataset-and-set-the-correct-tokenizer-parameters/172131)

6Wrong tokenizer decoder type in Transformers v5 · Issue #43066 · huggingface/transformers
(https://github.com/huggingface/transformers/issues/43066)

#AI뉴스#인공지능

이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.