模型
基类 PreTrainedModel 实现了从本地文件或目录加载/保存模型,或从库提供的预训练模型配置(从 HuggingFace Hub 下载)加载/保存模型的通用方法。
PreTrainedModel 还实现了一些所有模型通用的方法:
- 当词汇表中添加了新标记时,调整输入标记嵌入
各模型通用的其他方法定义在 ModuleUtilsMixin 和 GenerationMixin 中。
PreTrainedModel
所有模型的基类。
PreTrainedModel 负责存储模型的配置,并处理模型的加载、下载和保存方法,以及所有模型共用的若干方法:
- 调整输入嵌入
类属性(由派生类覆盖):
- config_class (PreTrainedConfig) — 用作此模型架构配置类的 PreTrainedConfig 子类
- base_model_prefix (
str) — 一个字符串,用于指示在相同架构的派生类中,与基础模型相关联的属性。这些派生类会在基础模型之上添加模块。 - main_input_name (
str) — 模型主要输入的名称(对于 NLP 模型通常为input_ids,对于视觉模型为pixel_values,对于语音模型为input_values)。 - can_record_outputs(字典):
push_to_hub
< source >( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )
参数
- repo_id (
str) — 要推送模型的目标仓库名称。推送到特定组织时,应包含该组织的名称。 - commit_message (
str, 可选) — 推送时提交的提交信息。默认为"Upload model"。 - commit_description (
str, 可选) — 将创建的提交的描述 - private (
bool,可选) — 是否将仓库设为私有。如果为None(默认值),除非组织的默认设置为私有,否则仓库将是公开的。如果仓库已存在,则忽略此值。 - token (
bool或str,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为True(默认值),将使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - revision (
str, 可选) — 要推送上传文件的目标分支。 - create_pr (
bool,可选,默认为False) — 是否使用上传的文件创建 PR,还是直接提交。 - max_shard_size (
int或str,可选,默认为"50GB") — 仅适用于模型。分片前检查点的最大大小。分片后的每个检查点大小都将小于该值。如果以字符串形式表示,则必须为数字后跟单位(例如"5MB")。 - tags (
list[str],可选) — 要推送到 Hub 的标签列表。
将模型文件上传到 🤗 Model Hub。
示例:
from transformers import AutoModel
model = AutoModel.from_pretrained("google-bert/bert-base-cased")
# Push the model to your namespace with the name "my-finetuned-bert".
model.push_to_hub("my-finetuned-bert")
# Push the model to an organization with the name "my-finetuned-bert".
model.push_to_hub("huggingface/my-finetuned-bert")停用当前模型的激活检查点。
activation_checkpointing_enable
< source >( activation_checkpointing_kwargs = Noneevery_n_layers: int = 1offload: bool = False )
参数
- every_n_layers (
int,可选,默认为 1) — 仅对每every_n_layers个解码器层执行一次检查点,其余层保留其激活值。1表示对每一层都执行检查点,这是常见的全有或全无行为。较大的值会以速度换取内存,当完全检查点释放的内存未被使用时,这样做是值得的。 - offload (
bool,可选,默认为False) — 将用于重计算的激活值保存在固定的主机内存中,而不是加速器上。 这会释放layers x sequence x hidden字节的设备内存,在长序列长度下,这部分内存占用占主导地位,代价是在前向传播中产生一次设备到主机的拷贝,在反向传播中产生一次主机到设备的拷贝。这两次拷贝都在计算流上执行,因此步骤会变慢。 - activation_checkpointing_kwargs (dict, 可选) —
传递给
torch.utils.checkpoint.checkpoint函数的其他关键字参数。
为当前模型启用激活检查点。
我们传递模块的 __call__ 方法而不是 forward,因为 __call__ 会附加该模块的所有钩子。https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2
将自定义标签添加到推送到 Hugging Face Hub 的模型中。不会覆盖模型中已有的标签。
返回此模型是否可以使用 .generate() 生成序列,该功能来自 GenerationMixin 或具有类似接口的类。
在底层,对于此函数返回 True 的类,会触发一些与生成相关的变更:例如,模型实例将拥有一个已填充的 generation_config 属性。
点分路径(例如 torch.float32)的模拟值:属性访问链和调用行为如同透传装饰器,repr 返回点分路径,将其用作基类时会替换为普通的 type 基类(PEP 560 __mro_entries__),因此真实的子类保留正常的元类,且 inspect.signature 读取的是它们真实的 __init__,而非模拟对象的。
如果模型已通过支持反量化的量化方法进行量化,则可能需要对其进行反量化。
移除 _require_grads_hook。
启用输入嵌入的梯度。这在微调适配器权重同时保持模型权重固定的情况下非常有用。
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | None*model_argsconfig: transformers.configuration_utils.PreTrainedConfig | str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneignore_mismatched_sizes: bool = Falseforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'use_safetensors: bool | None = Noneweights_only: bool = Truefusion_config: dict[str, bool | dict[str, typing.Any]] | None = Nonedisable_mmap: bool | None = None**kwargs )
参数
- pretrained_model_name_or_path (
str或os.PathLike, 可选) — 可以是以下之一:- 一个字符串,表示托管在 huggingface.co 模型仓库中的预训练模型的 model id。
- 指向一个目录的路径,该目录包含使用 save_pretrained() 保存的模型权重,例如
./my_model_directory/。使用save_pretrained(..., distributed_checkpoint=True)保存的目录会被检测并以分布式检查点(DCP)方式加载,从而保留模型当前的 mesh 和 placements。这需要torch>=2.7,并且采用严格加载:检查点中必须包含所有模型键。 - 如果同时提供了配置和状态字典(分别通过关键字参数
config和state_dict),则返回None。
- model_args(位置参数序列,可选) —
所有剩余的位置参数都会传递给底层模型的
__init__方法。 - config (
Union[PreTrainedConfig, str, os.PathLike], 可选) — 可以是以下之一:- PreTrainedConfig 派生类的实例,
- 可作为 from_pretrained() 输入的字符串或路径。
用于替代自动加载配置的模型配置。在以下情况下,配置可以自动加载:
- 该模型是由库提供的模型(通过预训练模型的 model id 字符串加载)。
- 该模型使用 save_pretrained() 保存,并通过提供保存目录来重新加载。
- 通过提供本地目录作为
pretrained_model_name_or_path来加载模型,并且在该目录中找到了名为 config.json 的配置文件。
- state_dict (
dict[str, torch.Tensor], 可选) — 用于替代从保存的权重文件中加载的状态字典的状态字典。如果您想基于预训练配置创建模型但加载自己的权重,可以使用此选项。不过在这种情况下,您应该检查使用 save_pretrained() 和 from_pretrained() 是否是更简单的选择。如果你希望基于预训练配置创建模型,但加载自己的权重,可以使用此选项。不过在这种情况下,你应该先检查使用 save_pretrained() 和 from_pretrained() 是否是更简单的选择。
- cache_dir (
Union[str, os.PathLike], 可选) — 如果不应使用标准缓存,则用于缓存已下载的预训练模型配置的目录路径。 - ignore_mismatched_sizes (
bool,可选,默认为False) — 如果检查点中的某些权重与模型权重的尺寸不一致(例如,您使用一个包含 3 个标签的检查点来实例化一个具有 10 个标签的模型),是否抛出错误。 - force_download (
bool,可选,默认为False) — 是否强制(重新)下载模型权重和配置文件,如果存在缓存版本则覆盖它们。 - proxies (
dict[str, str],可选) — 按协议或端点使用的代理服务器字典,例如{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}。每次请求都会使用这些代理。 - output_loading_info(
bool, optional,默认为False) — 是否同时返回一个包含缺失键、意外键和错误消息的字典。 - local_files_only(
bool, 可选,默认为False) — 是否仅查看本地文件(即不尝试下载模型)。 - token (
str或bool,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为True或未指定,则使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - revision (
str, 可选, 默认为"main") — 要使用的特定模型版本。由于我们在 huggingface.co 上使用基于 git 的系统来存储模型和其他工件,因此它可以是分支名称、标签名称或提交 ID,所以revision可以是 git 允许的任何标识符。要测试您在 Hub 上创建的拉取请求,可以传入
revision="refs/pr/<pr_number>"。 - attn_implementation (
str, 可选) — 模型中使用的注意力实现方式(如适用)。可以是以下任意值:"eager"(手动实现的注意力机制)"sdpa"(使用F.scaled_dot_product_attention)"flash_attention_2"(使用 Dao-AILab/flash-attention)"flash_attention_3"(使用 Dao-AILab/flash-attention/hopper)"flash_attention_4"(使用 Dao-AILab/flash-attention/flash_attn/cute)。 默认情况下,如果可用,将使用 SDPA。否则,默认使用手动"eager"实现。
接受以下形式的 HF 内核引用:
/ [@ ][: ] 和 是任何不包含"/"和":"的序列。 - “@
”是可选的(分支、标签或 commit-ish),例如“@main”、“@v1.2.0”、“@abc123”。 - ”:
”是可选的,用于选择内核仓库中的一个函数。 - 两种选项可以一起出现,且顺序固定:先写 @revision,再写 :kernel_name。
- 我们有意允许以“
|”为前缀(例如“flash|…”),因为代码在加载前会将其去除;此处的字符类并未排除“|”。
匹配的示例: “org/model” “org/model@main” “org/model:custom_kernel” “org/model@v1.2.3:custom_kernel”
- experts_implementation (
str, 可选) — 模型中使用的专家实现方式(如适用)。可以是以下任意值:"eager"(专家矩阵乘法的顺序实现)。"batched_mm"(使用torch.bmm)。"grouped_mm"(使用torch.nn.functional.grouped_mm)。
默认情况下,如果模型支持,将使用
"grouped_mm"。否则,默认使用手动实现的"eager"。
大模型推理参数
- dtype (
str或torch.dtype, 可选, ,默认为"auto") — 覆盖默认的torch_dtype,以特定的dtype. 加载模型。可选值如下:-
torch.float16或torch.bfloat16或torch.float:以指定的dtype加载,忽略模型的config.dtype(如果存在)。如果未指定- 模型将以
torch.float(fp32)精度加载。
- 模型将以
-
"auto"- 将尝试使用模型config.json文件中的dtype或torch_dtype条目。如果未找到该条目,则接下来检查检查点中第一个浮点类型权重的dtype,并将其用作dtype。这将使用模型在训练结束时保存所用的dtype来加载模型。它不能作为模型训练方式的指示器,因为模型可能以某种半精度 dtype 进行训练,但最终以 fp32 保存。 -
一个有效的
torch.dtype字符串。例如,“float32” 会以torch.float32加载模型,“float16” 会以torch.float16加载,依此类推。
对于某些模型,其训练时使用的
dtype是未知的——您可以尝试查阅该模型的论文,或联系作者,请他们在模型卡片中补充此信息,并在 Hub 上的config.json中插入dtype或torch_dtype条目。 -
- device_map (
str或dict[str, Union[int, str, torch.device]]或int或torch.device, 可选) — 一个映射,用于指定每个子模块应放置的位置。它无需细化到每个参数/缓冲区名称,只要某个模块名称被包含在内,其所有子模块都将被发送到同一设备。如果仅传入设备(e.g.,"cpu","cuda:1","mps", 或 GPU 序号,例如1) ),模型将被分配到该设备上,设备映射会将整个模型映射到此设备。传入device_map = 0表示将整个模型放置在 GPU 0 上。要让 Accelerate 自动计算最优化的
device_map,请设置device_map="auto"。有关每个选项的更多信息,请参阅 设计设备映射。 - max_memory (
Dict, 可选) — 如果使用device_map,则为设备标识符到最大内存的字典。如果未设置,默认值为每个 GPU 的最大可用内存和可用的 CPU 内存。 - distributed_config (DistributedConfig, 可选) —
用于原生分布式加载(支持张量并行或 FSDP2)的配置。传入
DistributedConfig(tp_size=N)以使用模型预定义的张量并行方案, 传入DistributedConfig(tp_plan=...)以指定张量并行方案,或 传入DistributedConfig(fsdp_size=N)以使用 FSDP2。当tp_size > 1或fsdp_size > 1时,需要torchrun以及已初始化的进程组。与device_map互斥。 - device_mesh (
torch.distributed.DeviceMesh, 可选) — 一个 torch 设备网格。如果未提供,则默认为 world size。目前仅用于张量并行。 如果提供了该参数,且其维度大于 1,则必须包含名为"tp"的维度,该维度将用于张量并行。 - offload_folder (
str或os.PathLike,可选) — 如果device_map包含任何值为"disk"的项,则指定用于卸载权重的文件夹。 - offload_buffers (
bool, 可选) — 是否将缓冲区与模型参数一起卸载。 - quantization_config (
Union[QuantizationConfigMixin,Dict], 可选) — 用于量化的配置参数字典或 QuantizationConfigMixin 对象(例如 bitsandbytes、gptq)。 - subfolder (
str,可选,默认为"") — 如果相关文件位于 huggingface.co 上模型仓库的子文件夹中,您可以在此处指定该文件夹的名称。 - variant (
str, 可选) — 如果指定,则从variant文件名加载权重,例如 pytorch_model..bin. - use_safetensors (
bool,可选,默认为None) — 是否使用safetensors检查点。默认为None。如果未指定且未安装safetensors,则将其设置为False。 - weights_only (
bool,可选,默认为True) — 指示 unpickler 是否应被限制为仅加载张量、基本类型、字典以及通过 torch.serialization.add_safe_globals() 添加的任何类型。 当设置为 False 时,我们可以加载包装张量子类的权重。 - disable_mmap (
bool,可选) — 是否在加载 safetensors 检查点时禁用内存映射。当为None(默认值)时, 如果检查点位于hf-mountFUSE 文件系统上(由 HF Spaces/Endpoints 使用), 则会自动检测并设置为True,因为在该文件系统上,mmap 加上并行页面错误可能导致死锁。当为True时, 文件会被完整读入内存,并使用safetensors.torch.load进行解析。当为False时, 始终使用默认的内存映射加载器。 - fusion_config (
dict[str, bool | dict[str, Any]], 可选) — 在模型实例化之前应用的可选融合配置。每个键用于启用一个融合族,其值可以是True(表示使用默认选项启用该融合),也可以是一个包含该族特定选项的字典。例如,{"patch_embeddings": True}会启用 patch embedding 融合。此参数仅应作为推理优化使用,因为它可能会轻微改变输出。如果省略,from_pretrained()在可用时会回退到config.fusion_config。有关更多详细信息,请参阅docs/source/en/fusion_mapping.md中的融合映射指南。 - key_mapping (`dict[str, str], 可选) — 如果使用的是 Hub 上与 Transformers 架构兼容但未进行相应转换的模型,则可能需要提供权重名称的映射。
- kwargs (其余关键字参数字典, 可选) —
可用于更新配置对象(在加载之后)并初始化模型(例如,
output_attentions=True). 其行为取决于是否提供了config,或自动加载:- 如果通过
config提供了配置,**kwargs将直接传递给底层模型的__init__方法(我们假设对配置的所有相关更新均已完成) - 如果未提供配置,
kwargs会首先传递给配置类的初始化函数(from_pretrained())。kwargs中每个对应配置属性的键,都会使用所提供的kwargs值来覆盖该属性。其余未对应任何配置属性的键,将传递给底层模型的__init__函数。
- 如果通过
根据预训练模型配置实例化一个预训练的 pytorch 模型。
模型默认使用 model.eval() 设置为评估模式(Dropout 模块被禁用)。若要训练模型,应首先使用 model.train() 将其切换回训练模式。
The warning Weights from XXX not initialized from pretrained model means that the weights of XXX do not come pretrained with the rest of the model. It is up to you to train those weights with a downstream fine-tuning task.
警告 Weights from XXX not used in YYY 表示层 XXX 未被 YYY 使用,因此这些权重将被丢弃。
启用特殊的 “offline-mode”,以便在防火墙环境中使用此方法。
示例:
>>> from transformers import BertConfig, BertModel
>>> # Download model and configuration from huggingface.co and cache.
>>> model = BertModel.from_pretrained("google-bert/bert-base-uncased")
>>> # Model was saved using *save_pretrained('./test/saved_model/')* (for example purposes, not runnable).
>>> model = BertModel.from_pretrained("./test/saved_model/")
>>> # Update configuration during loading.
>>> model = BertModel.from_pretrained("google-bert/bert-base-uncased", output_attentions=True)
>>> assert model.config.output_attentions == Trueget_compiled_call
< source >( compile_config: transformers.generation.configuration_utils.CompileConfig | None )
返回 torch.compile 编译后的 self.__call__ 版本。这在推理过程中动态选择使用未编译或已编译的 forward 时非常有用,尤其是在 prefill 阶段(为避免因新形状而重新计算图,我们不希望使用编译版本)和迭代解码阶段(我们希望利用静态形状下编译版本带来的加速)之间进行切换时。
尽力查找 decoder 模块。
尝试顺序(涵盖当前约 85% 的用法):
self.decoder/self.language_model/self.text_modelself.base_model(许多包装器将解码器存储在此处)self.base_model.get_decoder()(嵌套包装器)- fallback:针对少数需要自定义规则的特定模型抛出异常
尽力查找 encoder 模块。如果提供了 modality 参数,则会在多模态模型中查找特定模态的编码器(例如 “image_encoder”)。
默认情况下,如果模型存在文本编码器,该函数将返回它;否则返回 self。
modality 的可能取值为 “image”、“video” 和 “audio”。
仅针对当前模型返回展开的绑定权重键(如果它们包含模块或正则表达式模式),或者如果 all_submodels=True,则递归地针对所有子模型返回(即,它将重新检查所有子模型的配置值)。
对于几乎所有模型,我们只需要绑定嵌入,因此模型具有内部属性 _tied_weights_keys = {"lm_head.weight": "model.embed_tokens.weight"}。在这种情况下,映射已经“展开”,即已经包含完整的参数,该函数将直接返回该属性的副本。
对于更复杂的模式,例如 DFineForObjectDetection,我们有以下属性
_tied_weights_keys = {
r"bbox_embed.(?![0])\d+": "bbox_embed.0",
r"class_embed.(?![0])\d+": "class_embed.0",
"model.decoder.class_embed": "class_embed",
"model.decoder.bbox_embed": "bbox_embed",
}返回以下内容:
{
'bbox_embed.1.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'bbox_embed.1.layers.0.weight': 'bbox_embed.0.layers.0.weight',
'bbox_embed.1.layers.1.bias': 'bbox_embed.0.layers.1.bias',
'bbox_embed.1.layers.1.weight': 'bbox_embed.0.layers.1.weight',
'bbox_embed.1.layers.2.bias': 'bbox_embed.0.layers.2.bias',
'bbox_embed.1.layers.2.weight': 'bbox_embed.0.layers.2.weight',
'bbox_embed.2.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'bbox_embed.2.layers.0.weight': 'bbox_embed.0.layers.0.weight',
...
'class_embed.1.bias': 'class_embed.0.bias',
'class_embed.1.weight': 'class_embed.0.weight',
'class_embed.2.bias': 'class_embed.0.bias',
'class_embed.2.weight': 'class_embed.0.weight',
...
'model.decoder.class_embed.0.bias': 'class_embed.0.bias',
'model.decoder.class_embed.0.weight': 'class_embed.0.weight',
'model.decoder.class_embed.1.bias': 'class_embed.0.bias',
'model.decoder.class_embed.1.weight': 'class_embed.0.weight',
...
'model.decoder.bbox_embed.0.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'model.decoder.bbox_embed.0.layers.0.weight': 'bbox_embed.0.layers.0.weight',
'model.decoder.bbox_embed.0.layers.1.bias': 'bbox_embed.0.layers.1.bias',
'model.decoder.bbox_embed.0.layers.1.weight': 'bbox_embed.0.layers.1.weight',
...
}返回此模型及其子模型的专家实现,格式为 dict,符合 set_experts_implementation 所接受的格式("" 表示此模型,每个 sub_config 对应一个条目)。这是 set_experts_implementation 的对应方法,例如用于快照当前实现并在之后恢复。
get_memory_footprint
< source >( return_buffers = True )
参数
- return_buffers (
bool,可选,默认为True) — 是否在计算内存占用时返回缓冲区张量的大小。缓冲区是指不需要梯度且未注册为参数的张量。例如,批归一化层中的均值和标准差。请参阅:https://discuss.pytorch.org/t/what-pytorch-means-by-buffers/120266/2
获取模型的内存占用。这将返回当前模型的内存占用(以字节为单位)。 可用于对当前模型的内存占用进行基准测试并设计一些测试。该解决方案灵感来自 PyTorch 讨论区:https://discuss.pytorch.org/t/gpu-memory-that-model-uses/56822/2
如果 target 存在,则返回其对应的参数或缓冲区,否则抛出错误。此函数将 get_parameter() 和 get_buffer() 合并为一个便捷的函数。如果目标是一个 _extra_state 属性,它将返回模块提供的额外状态。请注意,仅当 target 是模型的叶子节点时,此操作才有效。
activation_checkpointing_disable() 的已弃用别名,将在 v6 中移除。
activation_checkpointing_enable() 的已弃用别名,将在 v6 中移除。
如有需要,请初始化并绑定权重。如果使用自定义的 PreTrainedModel,则需要在 _init_weights 中实现任何初始化逻辑。
这相当于调用 self.apply(self._initialize_weights),但能正确处理复合模型。
随着递归沿模块图推进,此函数会动态地将正确的 init_weights 函数分派给各个模块。它可以处理任意数量的子模型。如果没有它,每个复合模型都必须在最外层的 _init_weights 中显式地对所有子模型进行第二次递归,这极易出错且效率低下。
返回当前模型是否为自定义代码,即从 hub 加载的代码,或在任何用户特定的模块/会话中定义的代码。
返回当前模型是否为自定义代码,即从 hub 加载的代码,或我们刚刚通过 register_for_auto_class 注册的类。
在将被绑定的参数上添加 _is_hf_initialized 标志,以避免稍后对其进行初始化,因为它们最终会被绑定(覆盖)。这一点非常重要,因为大多数嵌入层都是绑定的,且它们是巨大的参数(词表大小通常高达 256k),因此对它们执行初始化操作的成本非常高。
与 named_buffers 类似,但仅返回非持久化的缓冲区。由于判断缓冲区是否为持久化并不总是很直观,因此该功能非常实用。
该方法在每个 Transformer 模型初始化结束时执行,用于运行需要模型模块已正确初始化的代码(例如权重初始化)。 它还被用于在复合模型的情况下,正确获取所有静态属性(如并行策略、tied_weights_keys、_keep_in_fp32_modules 等),即顶层模型应了解其子模块的这些属性。
register_for_auto_class
< source >( auto_class = 'AutoModel' )
将此注册到指定的 auto 类中。此操作仅适用于自定义模型,因为库中的模型已经与 auto 类进行了映射。
resize_token_embeddings
< source >( new_num_tokens: int | None = Nonepad_to_multiple_of: int | None = Nonemean_resizing: bool = True ) → torch.nn.Embedding
参数
- new_num_tokens (
int, 可选) — 嵌入矩阵中新的 token 数量。增大该值会在末尾添加新初始化的向量。减小该值会从末尾移除向量。如果未提供或为None,则直接返回模型中输入 token 的torch.nn.Embedding模块的指针,而不执行任何操作。 - pad_to_multiple_of (
int, 可选) — 如果设置,将把嵌入矩阵填充为所提供值的倍数。如果new_num_tokens被设置为None,则仅将嵌入填充为pad_to_multiple_of.这在启用 NVIDIA 硬件(计算能力
>= 7.5,即 Volta 架构)上的 Tensor Cores 时尤为有用,或者在 TPU 上,序列长度为 128 的倍数时性能更佳。有关此功能的更多详细信息,或关于选择正确的调整大小值的帮助,请参阅此指南: https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc - mean_resizing (
bool) — 是否使用具有旧嵌入的均值和协方差的多变量正态分布来初始化新增的嵌入,还是使用均值为零、标准差为config.initializer_range.将
mean_resizing设置为True在扩大因果语言模型嵌入维度时非常有用,因为使用旧嵌入的均值来初始化新嵌入,会减小添加新嵌入前后下一个 token 概率分布之间的 KL 散度,从而使得生成 token 的概率不受新增嵌入的影响。有关更多信息,请参阅此文章:https://nlp.stanford.edu/~johnhew/vocab-expansion.html
返回值
torch.nn.Embedding
指向模型输入令牌嵌入模块的指针。
如果 new_num_tokens != config.vocab_size,则调整模型的输入 token 嵌入矩阵的大小。
如果模型类具有 tie_weights() 方法,则随后负责绑定权重嵌入。
save_pretrained
< source >( save_directory: str | os.PathLikeis_main_process: bool = Truestate_dict: dict | None = Nonepush_to_hub: bool = Falsemax_shard_size: int | str = '50GB'variant: str | None = Nonetoken: str | bool | None = Nonesave_peft_format: bool = Truesave_original_format: bool = Truedistributed_checkpoint: bool = False**kwargs )
参数
- save_directory (
str或os.PathLike) — 保存目录。如果该目录不存在,将会自动创建。 - is_main_process (
bool,可选,默认为True) — 调用此函数的进程是否为主进程。在 TPU 等分布式训练场景中,需要在所有进程上调用此函数时非常有用。在这种情况下,仅在主进程上设置is_main_process=True,以避免竞态条件。 - state_dict(
torch.Tensor的嵌套字典)— 要保存的模型状态字典。默认值为self.state_dict(),但也可以用于仅保存模型的部分内容,或在恢复模型状态字典时需要采取特殊预防措施的情况下(例如使用模型并行时)。 - push_to_hub (
bool,可选,默认为False) — 是否在保存模型后将其推送到 Hugging Face 模型库。您可以使用repo_id指定要推送到的仓库(默认使用您命名空间中save_directory的名称)。 - max_shard_size (
int或str, 可选, 默认为"50GB") — 分片前检查点的最大大小。分片后的检查点每个的大小都将小于此值。如果以字符串形式表示,则需为数字后跟单位(如"5MB").如果模型中的单个权重大于
max_shard_size,它将被单独放入一个检查点分片中,该分片的大小将超过max_shard_size。 - variant (
str,可选) — 如果指定,权重将以 model..safetensors 的格式保存。 - token (
str或bool,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为True或未指定,则使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - save_peft_format (
bool,可选,默认为True) — 为了与 PEFT 库保持向后兼容,如果适配器权重已附加到模型上,则适配器状态字典中的所有键都需要加上base_model.model前缀。高级用户可以通过将save_peft_format设置为False来禁用此行为。 - save_original_format (
bool,可选,默认为True) — 为了与transformers的早期版本保持向后兼容,您可以使用反向映射来保存检查点。即使模型是从 None 遗留检查点加载的,反向映射也必须存在。 - distributed_checkpoint (
bool,可选,默认为False) — 在保存 FSDP 或 TP 分片模型时,使用分布式检查点(DCP)写入 safetensors,而不是先将权重聚合到 CPU。每个 rank 都必须调用此方法。 当False时,在写入之前会通过gather_full_state_dict在 rank 0 上将权重聚合到 CPU。 此参数仅用于保存和恢复训练,若需要完整的save_pretrained功能,请将其设置为False。当push_to_hub=True时,rank 0 会在consolidated/子目录中整合检查点,并上传该目录。 需要torch>=2.7。 - kwargs (
dict[str, Any],可选) — 传递给 push_to_hub() 方法的额外关键字参数。
将模型及其配置文件保存到目录中,以便之后可以使用 from_pretrained() 类方法重新加载。
set_attn_implementation
< source >( attn_implementation: str | dictallow_all_kernels: bool = False )
参数
- attn_implementation (
str或dict) — 为此模型设置的注意力实现。它可以是一个str,在这种情况下,如果适用,它将分派到所有子模型;也可以是一个dict,其键为 sub_configs 的名称,在这种情况下,每个子模型将分派对应的值(分派给它自身以及嵌套在其中的所有子模型)。该值本身也可以是一个相同格式的dict,用于针对该子模型的 sub_configs(类似于使用嵌套的attn_implementation字典初始化配置时)。 - allow_all_kernels (
bool, 可选) — 如果attn_implementation是kernels-communityhub 仓库之外的自定义 kernel,是否从未经验证的 hub 仓库加载 kernel。
为此模型设置所需的 attn_implementation。
对称的 setter。镜像了 get_decoder 中使用的查找逻辑。
对称的 setter。镜像了 get_encoder 中使用的查找逻辑。
set_experts_implementation
< source >( experts_implementation: str | dict )
为此模型设置所需的 experts_implementation。
set_use_kernels
< source >( use_kernelskernel_config: transformers.utils.kernel_config.KernelConfig | None = Nonemode: Mode | None = None )
设置是否使用 kernels 库对模型的部分层进行内核化。
绑定模型权重。如果 recompute_mapping=False(在内部调用时默认为此值),它将依赖 model.all_tied_weights_keys 属性,该属性包含绑定参数的 {target: source} 映射。
如果 recompute_mapping=True,它将重新检查所有内部子模型及其配置,以确定需要绑定的参数。当在 __init__ 和 from_pretrained 之外单独调用 model.tie_weights() 时,这是默认行为,以防配置值在某个地方被修改过。
请注意,在 from_pretrained 期间,权重绑定是对称的:如果映射指定为“tie target -> source”,但 source 在检查点中缺失而 target 存在,我们会交换 source 和 target,以便仍然可以将所有内容绑定到实际存在的参数上。
点分路径(例如 torch.float32)的模拟值:属性访问链和调用行为如同透传装饰器,repr 返回点分路径,将其用作基类时会替换为普通的 type 基类(PEP 560 __mro_entries__),因此真实的子类保留正常的元类,且 inspect.signature 读取的是它们真实的 __init__,而非模拟对象的。
如果 input_ids 似乎包含填充且未提供注意力掩码,则显示一次性警告。
自定义模型还应包含 _supports_assign_param_buffer,用于确定 superfast init 是否适用于该特定模型。如果 test_save_and_load_from_pretrained 失败,则说明您的模型需要此设置。在这种情况下,请将其设置为 False。
ModuleUtilsMixin
torch.nn.Modules 的几个实用工具,可作为混入(mixin)使用。
num_parameters
< source >( only_trainable: bool = Falseexclude_embeddings: bool = False ) → int
获取模块中(可选地,可训练或非嵌入)参数的数量。
推送到 Hub
一个 Mixin,包含将模型或分词器推送到 hub 的功能。
push_to_hub
< source >( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )
参数
- repo_id (
str) — 要推送 {object} 的目标仓库名称。推送到特定组织时,应包含该组织的名称。 - commit_message (
str, 可选) — 推送时提交的提交信息。默认值为"Upload {object}"。 - commit_description (
str, 可选) — 将创建的提交的描述 - private (
bool,可选) — 是否将仓库设为私有。如果为None(默认值),除非组织的默认设置为私有,否则仓库将是公开的。如果仓库已存在,则忽略此值。 - token (
bool或str,可选) — 用于远程文件的 HTTP bearer 授权令牌。如果为True(默认值),将使用运行hf auth login时生成的令牌(存储在~/.huggingface中)。 - revision (
str, 可选) — 要推送上传文件的目标分支。 - create_pr (
bool,可选,默认为False) — 是否使用上传的文件创建 PR,还是直接提交。 - max_shard_size (
int或str,可选,默认为"50GB") — 仅适用于模型。分片前检查点的最大大小。分片后的每个检查点大小都将小于该值。如果以字符串形式表示,则必须为数字后跟单位(例如"5MB")。 - tags (
list[str],可选) — 要推送到 Hub 的标签列表。
将 {object_files} 上传到 🤗 Model Hub。
示例:
from transformers import {object_class}
{object} = {object_class}.from_pretrained("google-bert/bert-base-cased")
# Push the {object} to your namespace with the name "my-finetuned-bert".
{object}.push_to_hub("my-finetuned-bert")
# Push the {object} to an organization with the name "my-finetuned-bert".
{object}.push_to_hub("huggingface/my-finetuned-bert")