HuggingFace 模型使用指南

本文探讨了HuggingFaceChatGLM模型的构成,包括Tokenizer的文本处理、不同类型的Model(如BERT、GPT、BART)及其应用,以及PostProcessing在NLP任务中的作用。还涉及模型配置和标准化技术如LayerNorm和RMSNorm的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HuggingFace 模型共有三个部分组成:Tokennizer、Model 和 Post Processing。

1 Tokenizer

把输入的文本做切分,然后变成向量。Tokenizer包含三个文件:参考Tokenizer的分词使用过程

  • tokenization_chatglm.py:分词器的 .py 文件,用于模型分词器,加载和使用模型的必要部分(只是处理文本,不涉及任何向量操作)。
  • tokenizer.model:包含了训练好的分词模型,用于将输入文本转换为标记序列;二进制使用 pickle 或者其他序列化工具进行存储和读取。
  • tokenizer_config.json:分词模型的配置信息,用于指定分词模型的超参和其他的相关信息,例如分词器的类型、词汇表大小、最大序列长度、特殊标记等。

2 Model

根据输入的变量提取语义信息。对不同的NLP任务,需要选取不同的模型。

  • Encoder 模型:如 Bert,常用于句子分类、命名实体识别(以及更普遍的单词分类)和抽取式问答;
  • Decoder 模型:如GPT,GPT2,常用于文本生成;
  • Sequence2Sequence 模型:如 BART,常用于摘要,翻译和生成式问答。

Model 模型导出时将生成 config.json 和 pytorch_model.bin 参数文件:参考config.json参数详解

  • config.json:包括模型各种参数,如层数、隐藏层大小、注意力头数以及 Transformers API 的调用关系等,用于加载、配置和使用预训练模型。
  • configuration_chatglm.py:针对 ChatGLM 模型配置的 .py 文件。
  • modeling_baichuan.py:源码文件,定义了模型的结构和前向传播过程。
  • pytorch_model.bin:pytorch 模型的权重文件,保存了模型权重的信息。
{
  "_name_or_path": "THUDM/chatglm3-6b-128k",  # 模型的名称或路径
  "model_type": "chatglm",  # 模型类型是 chatglm
  "architectures": [
    "ChatGLMModel"  # 模型所使用的架构
  ],
  "auto_map": {  # 自动映射的模块,包括配置、模型和序列分类
    "AutoConfig": "configuration_chatglm.ChatGLMConfig",
    "AutoModel": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForCausalLM": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSeq2SeqLM": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSequenceClassification": "modeling_chatglm.ChatGLMForSequenceClassification"
  },
  "add_bias_linear": false,  # 是否添加偏置线性层
  "add_qkv_bias": true,  # 是否添加查询-键-值的偏置
  "apply_query_key_layer_scaling": true,  # 是否应用查询-键层缩放
  "apply_residual_connection_post_layernorm": false,  # 是否应用残差连接后的层归一化
  "attention_dropout": 0.0,  # 注意力矩阵中的 dropout 概率
  "attention_softmax_in_fp32": true,  # 注意力 softmax 是否在 float32 上计算
  "bias_dropout_fusion": true,  # 是否将偏置 dropout 融合
  "ffn_hidden_size": 13696,  # FeedForward 网络隐藏层大小
  "fp32_residual_connection": false,  # 是否在 float32 上计算残差连接
  "hidden_dropout": 0.0,  # 隐藏层中的 dropout 概率
  "hidden_size": 4096,  # 隐藏层的大小
  "kv_channels": 128,  # 键值通道数
  "layernorm_epsilon": 1e-05,  # layer normalization 中 epsilon 的值
  "rope_ratio": 500,  # ROPE 比例
  "multi_query_attention": true,  # 每个隐藏层中的自注意头的数量
  "multi_query_group_num": 2,  # 多查询组数
  "num_attention_heads": 32,  # 注意力头数量
  "num_layers": 28,  # 模型的隐藏层数量
  "original_rope": true,  # 是否使用原始 ROPE
  "padded_vocab_size": 65024,  # 填充词汇表大小
  "post_layer_norm": true,  # 是否使用层归一化
  "rmsnorm": true,  # 是否使用 RMSNorm
  "seq_length": 131072,  # 序列长度
  "use_cache": true,  # 是否使用缓存
  "torch_dtype": "float16",  # Torch 数据类型
  "transformers_version": "4.27.1",  # Transformers 库的版本号
  "tie_word_embeddings": false,  # 是否将编码器和解码器的词嵌入层绑定
  "eos_token_id": 2,  # 终止标记的 id
  "pad_token_id": 0  # 填充标记的 id
}

预备知识:

  • WarmUp Learning Rate(学习率预热阶段):在优化 Transformer 结构时,除了设置初始学习率和它的衰减策略,往往还需要在训练的初始阶段设置一个非常小(接近0)的学习率,让它经过一定的迭代轮数后逐渐增长到初始的学习率。
  • Post-LN:是指 Transformer 架构中传统的 Add&Norm 代表的 Layer Normalization 的方式,即把 Layer Normalization 加在残差连接之后。性能良好请参考 Norm 为什么用 LayerNorm (LN) 不用 BatchNorm(BN)
  • Pre-LN:是指把 Layer Normalization 加在残差连接之前。训练稳定 

Post-LN 和 Pre-LN 示意图如下所示,参考原文

因此,可以得出的一个结论是如果层数少,Post-Norm 的效果其实要好一些,如果要把层数加大,为了保证模型的训练,Pre-Norm 显然更好一些。参考PostNorm/PreNorm的差别

Q1:当前主流大模型使用的 Normalization 主要有几种? 

  • Layer Normalization:是对特征张量按照某一维度或某几个维度进行 0 均值,1 方差的归一化操作。参考LayerNorm参数详解,计算过程
  • RMS Normalization:均方根层归一化(Root Mean Square Layer Normalization)是对 Layer Normalization 的改进,去掉了减去均值的部分,性能基本一致,但运行时间减少了 7%-64%。参考文章
  • Deep Normalization:是对 Post-LN 和 Pre-LN 的综合改进,成功地将 Transformer 扩展到 1000 层(即 2500 个注意力和前馈网络子层)。参考文章

3 Post Processing

根据模型输出的语义信息,执行具体的 NLP 任务,比如情感分析,文本自动打标签等。

后期处理 Post Processing 通常要根据你选择的模型来确定,一般模型的输出是 logits(可以看作神经网络输出的经过归一化(softmax 或 sigmoid)的概率),其包含我们需要的语义信息,然后 Post Processing 是经过一个激活函数输出我们可以使用的向量,比如 softmax 层做二分类,会输出对应两个标签的概率值,最后转化为我们需要的信息。

  • Logits 可以取任意实数值,正值表示趋向于分类到该类,负值表示趋向于不分类到该类。
  • 与之对应的 Probability 是经过 Softmax 或 Sigmoid 归一化到 (0-1)之间,表示属于该类的概率。参考深度学习的logits是什么?
<think>好的,我现在需要帮助用户了解如何在Windows系统上下载和使用Hugging Face模型。首先,我得回忆一下Hugging Face的生态系统,他们主要提供Transformers库,还有模型仓库。用户可能对Python和深度学习有一定的了解,但可能不熟悉具体步骤,所以需要分步骤讲解。 首先,用户需要在Windows环境下安装必要的库。Hugging Face的Transformers库是核心,但可能还需要其他依赖,比如PyTorch或TensorFlow,因为Transformers支持这两个框架。我应该建议用户根据他们的需求选择安装其中一个。同时,datasets库如果用户需要加载数据集的话也会用到,但可能用户现在只需要基础功能,所以先提Transformers和PyTorch/TensorFlow。 然后是安装步骤,用户可能需要用pip或者conda安装。考虑到用户可能使用的是pip,所以给出pip install transformers命令。另外,PyTorch的安装可能需要去官网获取正确的命令,特别是Windows版本,所以建议用户查看PyTorch官网的命令,避免直接给出可能过时的指令。 接下来是下载模型的部分。Hugging Face的模型可以通过from_pretrained方法自动下载,但用户可能需要预先下载到本地,比如网络问题或者离线使用的情况。这时候可以使用snapshot_download函数,或者直接使用git lfs,不过这可能对新手有点复杂。需要详细说明两种方式:在线自动下载和手动下载到本地后加载。 然后,使用模型的步骤。用户可能想了解如何加载模型和分词器,进行推理任务,比如文本分类、生成等。需要给出示例代码,比如使用pipeline API,这样最简单,适合快速上手。另外,对于更自定义的使用,展示如何显式地加载模型和分词器,进行编码和预测。 另外,注意事项方面,需要提到模型的文件大小,尤其是大模型可能需要较长时间下载。还有选择适合任务的模型,比如BERT适合文本分类,GPT-2适合生成等。另外,缓存路径的问题,用户可能需要更改缓存目录,可以通过环境变量设置。 用户还可能遇到的问题包括网络连接问题,特别是国内用户可能访问Hugging Face较慢,可能需要镜像源或者代理。这时候可以建议设置镜像,比如修改环境变量HF_ENDPOINT。另外,硬盘空间的问题,模型可能占用几个GB,需要提醒用户注意空间。 最后,给出一个总结,让用户清楚整个流程:安装环境、下载模型使用模型。同时提供示例代码,让用户可以直接复制和测试,比如用BERT做文本分类的例子。 需要检查是否有遗漏的步骤,比如是否需要先注册Hugging Face账号?大部分模型是公开的,不需要登录,但私有模型可能需要,但用户可能只是使用公开模型,所以可能不需要提到。另外,是否需要使用虚拟环境?虽然建议,但对于新手可能暂时不提,避免复杂化。 现在整理这些思路,分步骤写出,并确保示例代码正确,特别是Windows下的路径处理,比如反斜杠可能需要双反斜杠或者原始字符串。此外,确保代码中的模型名称是存在的,比如bert-base-uncased,确保用户运行时不会出错。</think>以下是在Windows系统上下载和使用Hugging Face模型的详细指南: --- ### **1. 环境准备** #### 安装必要库 ```bash # 安装Transformers库(核心工具) pip install transformers # 可选:安装PyTorch(根据需求选择CPU/GPU版本) # 从PyTorch官网获取安装命令:https://pytorch.org/ # 示例(CPU版本): pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu # 可选:安装TensorFlow(二选一) pip install tensorflow ``` --- ### **2. 下载模型** #### 方式1:自动下载(在线) 直接在代码中调用模型,Hugging Face会自动下载并缓存: ```python from transformers import AutoModel, AutoTokenizer model_name = "bert-base-uncased" # 示例模型 model = AutoModel.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) ``` #### 方式2:手动下载(离线) - **通过Hugging Face官网**: 1. 访问 [Hugging Face Hub](https://huggingface.co/models),搜索模型(如`bert-base-uncased`)。 2. 进入模型页面 → 点击“Files and versions” → 下载所有文件到本地目录(如 `./models/bert-base-uncased`)。 - **通过代码下载**: ```python from huggingface_hub import snapshot_download snapshot_download(repo_id="bert-base-uncased", local_dir="./models/bert-base-uncased") ``` --- ### **3. 使用模型** #### 示例1:快速推理(使用Pipeline) ```python from transformers import pipeline # 文本分类示例 classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english") result = classifier("I love using Hugging Face models!") print(result) # 输出:标签和置信度 ``` #### 示例2:自定义加载本地模型 ```python from transformers import AutoModel, AutoTokenizer # 加载本地已下载的模型 model_path = "./models/bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModel.from_pretrained(model_path) # 编码文本并推理 inputs = tokenizer("Hello, world!", return_tensors="pt") outputs = model(**inputs) print(outputs.last_hidden_state.shape) # 输出特征维度 ``` --- ### **4. 注意事项** 1. **网络问题**: - 国内用户可通过设置镜像加速下载: ```python import os os.environ["HF_ENDPOINT"] = "https://hf-mirror.com" # 镜像源 ``` - 或使用代理(需配置`HTTP_PROXY`环境变量)。 2. **模型缓存路径**: - 默认缓存目录:`C:\Users\<用户名>\.cache\huggingface\hub`。 - 自定义路径:设置环境变量`HF_HOME`。 3. **硬件要求**: - 大模型(如GPT-2/3)需较高显存,若显存不足可尝试小规模模型(如`distilbert`)。 --- ### **5. 进阶使用** - **微调模型**:使用`Trainer`类结合自有数据集。 - **模型导出**:将模型转换为ONNX/TensorRT格式提升推理速度。 - **更多任务**:文本生成、翻译、问答等,参考[Hugging Face文档](https://huggingface.co/docs/transformers/index)。 --- 通过以上步骤,你可以轻松在Windows系统中下载并使用Hugging Face模型。遇到问题时,可查阅官方文档或社区论坛(如GitHub Issues)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞雪兆我心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值