1.transformers代码
from transformers import AutoModelForCausalLM
path = "./models/Qwen2.5-0.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(path)
2.transformers/PreTrainedModel 机制
2.1 定位
PreTrainedModel 是”模型骨架的标准化包装盒”,定义了”模型长什么样、怎么存、怎么取”的统一规范,但不包含任何具体网络结构的实现。作为Hugging Face 生态的”模型标准化协议”——它通过 config.json(结构蓝图)+ state_dict(权重数据)两层松耦合设计,实现了”同一份权重,用任何框架、在任何上下文、从任何来源加载”的终极目标。
PreTrainedModel (抽象基类)
│
├── 提供统一的 保存/加载/配置管理 接口
│ ├── .save_pretrained(save_directory)
│ ├── .from_pretrained(model_path)
│ └── .save_to_cache() / .from_cache()
│
├── 提供统一的 配置管理 接口
│ ├── .config → PretrainedConfig 实例
│ └── .save_config(config, save_directory)
│
├── 提供统一的 设备/精度管理 接口
│ ├── .to(device) / .cuda() / .cpu() / .half() / .bfloat16()
│ └── .float() / .double()
│
├── 提供统一的 梯度检查点 / 编译 支持
│ ├── .gradient_checkpointing_enable()
│ └── .compile()
│
└── 派生为各种具体模型类
├── PreTrainedModel → Qwen2Model (基座模型,无 LM Head)
│ └── Qwen2ForCausalLM (加了 LM Head)
│ └── Qwen2ForSequenceClassification (加分类头)
├── PreTrainedModel → BertModel (基座)
│ └── BertForSequenceClassification
│ └── BertForQuestionAnswering
└── PreTrainedModel → LlamaForCausalLM
└── MistralForCausalLM
└── Qwen2ForCausalLM