You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载AutoTokenizer为何占用大量内存?

问题

我在测量脚本内存占用时发现,加载sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2对应的AutoTokenizer占用了约300MB内存,但分词器文件本身仅约9MB,请问原因是什么?

我进行了如下测试:

from transformers import AutoTokenizer
from memory_profiler import profile

@profile
def load_tokenizer():
    path = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" 
    tokenizer = AutoTokenizer.from_pretrained(path)

    return tokenizer

load_tokenizer()

输出结果:

Line #    Mem usage    Increment  Occurrences   Line Contents
=============================================================
     4    377.4 MiB    377.4 MiB           1   @profile
     5                                         def load_tokenizer():
     6    377.4 MiB      0.0 MiB           1       path = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2" 
     7    676.6 MiB    299.2 MiB           1       tokenizer = AutoTokenizer.from_pretrained(path)
     8                                              
     9                                          
    10    676.6 MiB      0.0 MiB           1       return tokenizer

原因分析

  • 内存数据结构的构建:磁盘上的9MB是压缩存储的分词器文件,但加载后会在内存中生成大量高效查询的结构——比如词汇表的哈希映射、用于快速分词的前缀树(Trie)、特殊标记的索引映射等。多语言分词器的词汇表本身规模大,这些辅助结构会大幅增加内存占用。
  • 初始化的额外开销:AutoTokenizer.from_pretrained加载时,会初始化整个transformers生态的配套组件,包括分词器配置类、预处理逻辑、内部缓存对象等,这些都会占用额外内存。
  • 内存测量的统计范围:memory_profiler统计的是进程总内存增量,包含了加载过程中临时创建的对象、Python解释器的内存分配开销,甚至下载/缓存文件时的临时内存占用(哪怕磁盘文件小,加载时的内存拷贝、解压过程也会占内存)。
  • 多语言特性的额外负担:这个分词器是多语言版本,内置了多种语言的子分词规则、字符映射表,这些针对不同语言的特殊处理逻辑,会显著增加内存占用规模。

内容的提问来源于stack exchange,提问作者Yanina Kolotilova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:33:22