ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

transformers 模型定义框架解析:三大核心类体系与 Pipeline、Trainer、generate 实战入口

transformers 模型定义框架解析:三大核心类体系与 Pipeline、Trainer、generate 实战入口 transformers 模型定义框架解析三大核心类体系与 Pipeline、Trainer、generate 实战入口【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers本文基于 transformers 官方文档首页docs/source/en/index.md展开介绍 transformers 作为模型定义框架model-definition framework的定位与生态枢纽作用并结合仓库源码逐层剖析其设计原则——每个模型仅由配置类、模型类、预处理类三个核心类构成以及三大核心能力推理入口Pipeline、训练入口Trainer和生成入口generate的实现脉络与使用方式。读完本文你将理解 transformers 为什么能同时被训练框架、推理引擎与周边建模库复用并能直接上手用三行代码完成加载、推理与微调。定位模型定义框架而非普通模型库官方文档首页对 transformers 的定义非常明确它是面向文本、计算机视觉、音频、视频与多模态模型同时覆盖推理inference与训练training的模型定义框架。这个定位的关键在于模型定义被集中化It centralizes the model definition so that this definition is agreed upon across the ecosystem。换言之transformers 在整个生态中扮演的是**枢纽pivot**角色只要一个模型的定义被 transformers 支持它就能与绝大多数训练框架打通文档中列举了 Axolotl、Unsloth、DeepSpeed、FSDP、PyTorch-Lightning 等同时与主流推理引擎兼容包括 vLLM、SGLang、TGI 等还被周边建模库如 llama.cpp、mlx直接复用其模型定义。这种定义一次、生态共享的设计正是各框架愿意与 transformers 对接的根本原因。官方文档还指出Hugging Face Hub 上已有超过 100 万个基于 transformers 的模型检查点model checkpoints可供直接使用开发者可以在 Hub 上查找模型并立即用 transformers 开始推理与训练。从仓库结构看生态枢纽的实现仓库顶层目录印证了这一枢纽地位src/transformers/下不仅有 200 模型的models/目录还内置了连接外部生态的适配层从源码结构看这些正是文档所述pivot的落点quantizers/量化方案适配对接各类量化库exporters/将模型导出为推理引擎可用格式如 ONNX Runtimedistributed/分布式相关工具支撑 FSDP、张量并行等训练形态integrations/与 DeepSpeed、bitsandbytes、Executorch 等数十个外部库的集成点。三大核心能力Pipeline、Trainer、generate文档首页的 Features 一节指出transformers 提供了推理或训练所需的一切其中三大主功能是Pipeline、Trainer和generate。下面结合仓库源码逐一说明它们的职责边界。Pipeline面向任务的简化推理类Pipeline是简单且经过优化的推理类覆盖文本生成、图像分割、自动语音识别ASR、文档问答等众多机器学习的任务。从源码看所有任务型 Pipeline 都继承自 src/transformers/pipelines/base.py 中的Pipeline基类该基类统一处理了模型、tokenizer / feature extractor / processor 的联合加载与缓存批处理时的 padding 逻辑pad_collate_fn会依据 tokenizer 的pad_token_id与padding_side对齐文本、图像、音频等不同模态的输入多设备检测CUDA、MPS、XPU、NPU 等与分布式环境判断。src/transformers/pipelines/ 目录下按任务划分了完整的实现包括text_generation.py、automatic_speech_recognition.py、image_segmentation.py、document_question_answering.py、zero_shot_classification.py等覆盖了文档列举的全部任务类型。任务映射与自动工厂机制AutoPipelineForXxx则定义在pipelines/__init__.py中开发者通常无需手写模型装配代码直接按任务名调用即可。Trainer支持混合精度与分布式训练的综合训练器Trainer是文档所述支持混合精度mixed precision、torch.compile、FlashAttention 以及 PyTorch 模型分布式训练的综合训练器入口位于 src/transformers/trainer.py。从源码结构看这些能力都有明确的参数落点混合精度TrainingArguments的bf16/fp16参数Trainer内部通过args.bf16判断并配合fp16_full_eval、bf16_full_eval等参数处理评估阶段的精度切换见 trainer.py 的设备延迟放置逻辑torch.compile通过torch_compile开关及torch_compile_backend、torch_compile_mode参数控制编译后端与模式见 trainer.py分布式训练与 DeepSpeed、FSDP 深度集成Trainer在评估与保存流程中对is_deepspeed_enabled、is_fsdp_enabled等状态分别处理见 trainer.py。配套文档见 docs/source/en/trainer.md其参数配置、回调机制trainer_callbacks.md与自定义扩展trainer_customize.md均在该目录下有完整说明。一个最小的典型用法如下参数取值均可在TrainingArguments源码中查证from transformers import TrainingArguments, Trainer training_args TrainingArguments( output_dir./results, learning_rate2e-5, bf16True, # 混合精度训练 torch_compileTrue, # 启用 torch.compile 加速 report_tonone, ) trainer Trainer(modelmodel, argstraining_args, train_datasettrain_ds) trainer.train()generateLLM 与 VLM 的快速文本生成文档将generate描述为面向大语言模型LLM与视觉语言模型VLM的快速文本生成支持流式输出streaming与多种解码策略。其核心实现位于 src/transformers/generation/utils.py 的GenerationMixin.generate方法函数签名本身就体现了文档所述能力def generate( self, inputs: torch.Tensor | None None, generation_config: GenerationConfig | None None, logits_processor: LogitsProcessorList | None None, stopping_criteria: StoppingCriteriaList | None None, prefix_allowed_tokens_fn: Callable | None None, synced_gpus: bool | None None, assistant_model: PreTrainedModel | None None, streamer: BaseStreamer | None None, # 流式输出 negative_prompt_ids: torch.Tensor | None None, custom_generate: str | Callable | None None, # 可插拔的自定义生成逻辑 **kwargs, )几个值得注意的实现细节均以源码为准参数优先级绝大多数生成控制参数由GenerationConfig承载未显式传入时按1) 检查点中的generation_config.json文件 → 2) 模型配置的顺序加载默认值而直接传给generate()的同名**kwargs会覆盖这些默认值见 generation/utils.py 的 docstring 说明。流式输出通过streamer参数注入BaseStreamer对象生成的 token 会逐个经streamer.put(token_ids)传递具体流式实现位于 src/transformers/generation/streamers.py。多种解码策略贪心、束搜索beam search、采样等策略的参数化均通过GenerationConfig完成束搜索约束可通过prefix_allowed_tokens_fn实现前缀受限生成。可插拔生成逻辑custom_generate参数允许从 Hub 仓库、本地路径或可直接传入的Callable替换标准解码循环这是较新的扩展机制见 generation/utils.py。assistant 模型加速assistant_model参数支持用一个小得多的助手模型快速预测候选 token 以加速大模型生成。generation/目录下的其余模块各司其职logits_process.pylogits 处理器、stopping_criteria.py停止条件、configuration_utils.pyGenerationConfig定义此外还有watermarking.py生成水印与continuous_batching/连续批处理子模块。更多策略示例可参考 docs/source/en/generation_strategies.md。一个标准的加载 生成流程from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer AutoTokenizer.from_pretrained(gpt2) model AutoModelForCausalLM.from_pretrained(gpt2) inputs tokenizer(Hello, my dog is, return_tensorspt) outputs model.generate(**inputs, max_new_tokens20) print(tokenizer.decode(outputs[0], skip_special_tokensTrue))LLM 端到端使用数据集整理、微调、推理能力实现的完整教程见 docs/source/en/llm_tutorial.md。设计原则一个模型 三个核心类文档 Design 一节给出了两条核心设计原则第一条在源码层面有非常具体的体现——每个模型只由三个主类实现配置类configuration、模型类model和预处理类preprocessor并可通过Pipeline或Trainer快速用于推理或训练。第二条是优先使用预训练模型以降低碳足迹、计算成本与时间且每个预训练模型都尽量复现原模型的原始表现。三核心类在源码中的形态以 LLaMA 为例src/transformers/models/llama/configuration_llama.py 中的LlamaConfig(PreTrainedConfig)就是配置类的典型形态主要参数及默认值如下均可在源码中直接查证参数默认值含义vocab_size32000词表大小hidden_size4096隐藏层维度intermediate_size11008FFN 中间层维度num_hidden_layers32层数num_attention_heads32注意力头数num_key_value_headsNone回退为 attention 头数GQA 的 KV 头数hidden_actsilu激活函数max_position_embeddings2048最大位置编码长度rms_norm_eps1e-6RMSNorm 的 epsuse_cacheTrue是否缓存 KV 用于自回归生成可以看到__post_init__会自动推导head_dim与num_key_value_heads的缺省值validate_architecture则校验hidden_size是否为注意力头数的整数倍——配置类不仅存储超参还承担了架构合法性验证的职责。模型类方面所有模型都是torch.nn.Module并由PreTrainedModel统一包装定义于 src/transformers/modeling_utils.py从而共享from_pretrained、save_pretrained、generate等能力。预处理类按模态细分这一点在 docs/source/en/philosophy.md 中有更完整的阐述TokenizerPreTrainedTokenizer实现见 src/transformers/tokenization_python.py存储词表负责字符串与 token 索引之间的编码/解码Image processor预处理视觉输入基类 image_processing_base.pyVideo processor预处理视频输入video_processing_utils.pyFeature extractor预处理音频输入feature_extraction_utils.pyProcessor预处理多模态输入processing_utils.py。统一的 from_pretrained / save_pretrained / push_to_hub 契约philosophy 文档进一步说明上述所有类都可以用统一的from_pretrained()方法从预训练实例初始化——它会按需下载、缓存并加载配置超参、tokenizer 词表、processor 参数与模型权重来源可以是 Hub 上的预训练检查点或本地保存的检查点。围绕这一契约三个方法构成了完整的存取闭环from_pretrained()从 Hub 或本地加载模型、配置与预处理类save_pretrained()将三者保存到本地以便再次用from_pretrained()读回push_to_hub()将三者分享到 Hub 供他人复用。在源码中这套方法由公共基类PreTrainedConfig、PreTrainedModel、PreTrainedTokenizerBase等统一实现因此对任意模型都保持行为一致——这正是Minimal User API设计原则的直接体现。设计原则Core Tenetsphilosophy 文档列出的八条核心准则是理解 transformers 代码风格的关键Source of Truth实现必须忠于官方结果与预期行为One Model, One File核心推理/训练逻辑可在用户阅读的那个模型文件内自上而下完整看到Code is the Product优先保证可读性与可 diff 性宁可显式命名不做巧妙绕行Standardize, Dont Abstract模型特有行为留在模型自身共享接口只用于通用基础设施DRY*在有帮助用户时再复用面向用户的建模文件保持自包含基础设施才做因子化抽取Minimal User API代码路径少、kwargs 可预测、方法稳定Backwards Compatibility不破坏公开接口旧的 Hub 产物必须继续可用Consistent Public Surface命名、输出与可选诊断信息保持一致并有测试保障。其中与模块化开发相关的一点值得展开贡献者可以只编写一个很小的modular_*.py分片声明对已有组件的复用库会将其自动展开为用户实际阅读与调试的modeling_*.py文件。仓库中 examples/modular-transformers/ 提供了完整示例如modular_new_model.py、modular_multimodal2.py该机制在保留 One Model, One File 原则的同时避免了样板代码漂移——这在当前仓库中已大规模落地src/transformers/models/下大量模型目录同时包含modular_*.py与modeling_*.py文件。模型时间线浏览架构演进文档引导读者通过 Models Timeline 了解 Transformers 中文本、视觉、音频与多模态模型架构的最新进展。该页面以交互图表形式展示各架构随时间的演变可以按模态或任务过滤、设定自定义日期区间聚焦特定时期的新增模型并点击模型卡片查看其能力、支持任务与文档链接。对于需要评估某个模型属于哪个架构世代的选型场景这是仓库内的权威参考。上手建议与延伸阅读如果你是 Transformers 的新手或想系统学习 transformer 模型官方文档推荐从 LLM 课程入手——它覆盖从 transformer 工作原理基础到各任务实际应用的全流程包含数据集整理、大语言模型微调与推理能力实现等内容兼顾理论与动手练习。结合本文内容推荐的上手路径是理解定位先接受transformers 模型定义框架这一定位它决定了生态兼容性与版本策略本仓库根目录还附有 MIGRATION_GUIDE_V5.md说明该框架对公开接口的向后兼容承诺非常严格掌握三核心类通过AutoConfig/AutoModelForXxx/AutoTokenizer三个 Auto 类实现在 src/transformers/models/auto/统一加载任意模型无需关心具体配置类的类名按场景选入口快速推理用Pipeline微调训练用Trainer精细控制生成行为用generateGenerationConfig。主要延伸阅读均为仓库内文档docs/source/en/pipeline_tutorial.mdPipeline 完整教程docs/source/en/trainer.mdTrainer 参数与用法docs/source/en/llm_tutorial.mdLLM 端到端实战docs/source/en/philosophy.md设计哲学全解docs/source/en/generation_strategies.md解码策略与代码示例docs/source/en/main_classes配置、模型、tokenizer 等主类参考。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表