正在把公司內部十幾萬份PDF與會議記錄轉換成向量資料庫前,要先跑一輪分詞前處理
想像你要教電腦讀懂一句話,電腦沒辦法直接「看」文字,得先把句子切成一塊一塊的「代號」,這個切字的動作就叫 分詞(tokenization)讓電腦讀文字前,先把句子切成一小塊一小塊的「代號」,讓模型看得懂。每一個AI模型在訓練和使用前,幾乎都要先做這件事,資料量一大,分詞花的時間就很可觀。
目前業界最常用的分詞工具箱是 HuggingFace tokenizers目前最多AI模型專案使用的「分詞工具箱」,像業界標配的瑞士刀,OpenAI自家模型則常用 tiktokenOpenAI自己推出的分詞工具,GPT系列模型常用它。這兩套工具其實已經是用 Rust一種以「快」和「安全」聞名的程式語言,許多追求極致效能的工具都用它寫 寫成的 多執行緒(multithreaded)讓電腦同時動用很多顆運算核心一起處理同一件事,而不是一顆一顆慢慢做 版本,理論上已經不算慢。
但這篇文章的主角 GigaToken 宣稱,用同樣的硬體,它還能再快上幾百到上千倍,而且是 drop-in replacement不用大改原本程式碼,只要換一行「進口」的寫法,其他照舊還能動——意思是你原本用HuggingFace或tiktoken寫好的程式,幾乎不用改就能套用。它的關鍵賣點反映在 吞吐量(throughput)衡量「單位時間內能處理多少資料量」的指標,這裡用GB/s(每秒幾GB)來算 上:原本工具一秒鐘只能處理幾十MB文字,GigaToken能衝到一秒鐘20幾GB。
| 模型系列 | GigaToken | HuggingFace tokenizers | 相對HF的倍數 |
|---|---|---|---|
| GPT-2 | 24.53 GB/s | 24.8 MB/s | 989× |
| Llama 3 / 3.1 / 3.2 | 22.15 GB/s | 48.5 MB/s | 457× |
| DeepSeek V3 / R1 / V4 | 19.69 GB/s | 26.2 MB/s | 750× |
這段程式示範怎麼用「相容模式」,幾乎不改原本程式碼就把HuggingFace tokenizer換成GigaToken加速版
import gigatoken as gtfrom transformers import AutoTokenizerhf_tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen3-8B")tokenizer = gt.Tokenizer(hf_tokenizer).as_hf()texts = ["這是一段測試文字", "這是另外一段"]tokens = tokenizer.encode_batch(texts)print(tokens)這是一個真實小專案:下載(或複製)檔案,照步驟在你電腦上跑起來。
"""
比較 HuggingFace tokenizers 與 GigaToken 的分詞速度
使用方式:python benchmark_compare.py
"""
import time
from transformers import AutoTokenizer
import gigatoken as gt
MODEL_NAME = "gpt2"
SAMPLE_TEXT = "AI 教案工廠正在測試分詞速度。" * 5000 # 造一份夠大的測試文字
def run_huggingface():
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
start = time.perf_counter()
tokenizer.encode(SAMPLE_TEXT)
return time.perf_counter() - start
def run_gigatoken():
hf_tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
fast_tokenizer = gt.Tokenizer(hf_tokenizer).as_hf()
start = time.perf_counter()
fast_tokenizer.encode(SAMPLE_TEXT)
return time.perf_counter() - start
if __name__ == "__main__":
hf_time = run_huggingface()
print(f"HuggingFace tokenizers 花費:{hf_time:.4f} 秒")
gt_time = run_gigatoken()
print(f"GigaToken(相容模式)花費:{gt_time:.4f} 秒")
if gt_time > 0:
print(f"加速倍數:約 {hf_time / gt_time:.1f} 倍")