跳至主要內容

Hugging Face and Transformers

Liz大约 7 分钟LLMHuggingFaceTransformers

Hugging Face and Transformers

1. 官网

官网:https://huggingface.co/open in new window

简介:Hugging Face 是一个专注于自然语言处理(NLP)和人工智能的开源平台,提供了丰富的工具和资源,它拥有当前最活跃、最受关注、影响力最大的LLM社区,最新最强的LLM大多在这里发布和开源。

2. 主要功能

  • Models 模型库
    • 模型下载
    • 模型分享
  • Datasets 数据集
    • 数据集下载
    • 数据集分享
  • Spaces 分享空间
    • 里面有近期有趣的比较火的应用
    • 支持 Gradio 和 Streamlit 等工具,快速构建可视化界面
    • 用于展示模型效果、测试模型性能或作为教学工具
  • Trending 趋势
    • 在首页展示了最近7天最火的Models,Datasets和Spaces
  • Docs 文档库
    • HuggingFace核心库以及模型算法的说明使用文档
  • 核心库
    • Transformers库
      • Hugging Face 的核心开源库,提供了API和工具,可以轻松下载和训练最先进的预训练模型,支持多种深度学习框架(PyTorch,TensorFlow和JAX)其中Pytorch支持所有的模型和框架。
    • Datasets库
      • 提供了最大的现成机器学习数据集中心,带有快速、易用和高效的数据操作工具,提供统一的 API 来访问和管理各种机器学习数据集,便于处理不同数据源
    • Tokenizers库
      • 用于创建和使用分词器的库,对自然语言处理模型的文本处理至关重要,提供高性能和灵活性
    • Evaluate库
      • 用于评估和比较模型性能的库,提供简单统一的 API,用于评估机器学习模型在不同任务和指标上的性能,便于基准测试和比较不同模型。
    • PEFT库
      • 参数高效微调库,高效微调大语言模型,仅更新模型参数的一小部分,有助于在有限计算资源下适应新任务
    • TRL (Transformer Reinforcement Learning)库
      • 强化学习库,提供工具以强化学习技术训练大语言模型,便于监督微调、奖励建模和近端策略优化(PPO),用于大型语言模型的进一步微调
    • Accelerate库
      • 分布式训练和推理库,使同一代码能够在各种分布式配置(如单 GPU、多节点集群)上运行,仅需少量修改,支持自动混合精度和分布式训练,增强了大规模机器学习任务的效率
    • Optimum库
      • 优化加速库,使用易用的硬件优化工具加速模型的推理和训练,提供工具以优化模型在各种硬件上的性能,包括多 GPU 系统和 TPU,便于扩展和加速模型训练和推理。
    • Gradio库
      • 用于创建机器学习模型的用户界面,允许开发者快速构建和分享交互式机器学习应用,通过 Hugging Face Spaces 免费托管演示。
  • Daily Papers 每日精选论文
    • 提供 AI 领域的最新研究论文,用户可以与作者互动并推荐相关论文
  • Learn 课程
  • 社区论坛

3. Models

3.1. 模型列表页

  • 涵盖了各种任务,可根据任务选择模型,也可以直接搜索模型名称
    • Multimodal 多模态
    • Computer Vision 计算机视觉
    • Natural Language Processing 自然语言处理
    • Audio 语音
    • Tabular 表格
    • Reinforcement Learning 强化学习
  • 不带前缀是官方提供的模型,带前缀是第三方提供的模型

3.2. 模型详情页

  • Model card: 模型介绍
  • File and versions: 模型文件
  • Use this model: 使用该模型的样例代码,一般都提供pipeline的方式
  • Inference Providers: 界面提供
  • Model tree: 模型的变体
  • Spaces using model: 使用该模型的Space

3.3. 模型文件

  • 文档/元数据:提供使用指南、许可和版本控制
    • README.md:模型的说明文档,通常包含模型的介绍、使用方法、训练细节、性能评测等信息
    • LICENSE:开源许可协议,规定了该模型的使用、分发和修改权限
    • .gitattributes:用于 Git 版本控制,尤其是 Git LFS(Large File Storage),通常包含对大文件的 LFS 追踪规则
  • 模型配置文件:定义模型架构和推理参数
    • config.json:模型的主要配置文件,定义了模型架构(如层数、隐藏单元数、注意力头数等)
    • generation_config.json:生成文本时的默认参数配置文件,如最大长度、温度、top-k 采样等,用于控制推理阶段的文本生成方式
  • 模型权重文件:存储神经网络参数
    • safetensors文件:模型的主要权重文件,采用 safetensors 格式(比传统的 .bin 更安全、加载更快),通过 Git LFS 存储
      • model-00001-of-000002.safetensors
      • model-00002-of-000002.safetensors
    • model.safetensors.index.json:索引文件,描述了模型权重在不同 .safetensors 文件中的存储位置,允许分片加载模型
  • 分词器:用于文本预处理和后处理
    • tokenizer.json:分词器的核心文件,包含所有 token 及其对应的 ID,用于文本编码和解码
    • tokenizer_config.json:定义分词器的相关参数,如是否使用特殊 token,是否是 BPE/WordPiece 分词器等

4. Datasets

数据集列表页

数据集详情页

Trending展示了近期比较火的模型、数据集和分享空间

6. Transformers

6.1. Transformers API

API 描述了所有类和函数:

  • MAIN CLASSES : 详细介绍了最重要的类,如configuration, model, tokenizer, and pipeline
    • Pipelines : 提供高层次 API,简化常见任务的执行
    • AutoClasses : 提供统一API自动加载模型、tokenizer 和配置的类
    • Configuration : 定义模型的参数和结构,确保模型的正确初始化
    • Models : 模型
    • Tokenizer : 分词器,对数据进行预处理,文本到 token 序列的互相转换
    • Trainer : 支持模型训练和微调,提供完整的 PyTorch 训练 API,支持分布式训练和混合精度
  • MODELS : 详细介绍了与库中实现的每个模型相关的类和函数
    • text models
    • vision models
    • audio models
    • video models
    • multimodal models
    • reinforcement learning models
    • time series models
    • graph models
  • INTERNAL HELPERS : 详细介绍了内部使用的实用类和函数

6.2. Pipelines

6.2.1. Pipelines介绍

Pipeline是Transformers库的一个高层次封装类,将数据预处理、模型调用和结果后处理三部分组装成流水线。

pipeline() 是使用预训练模型进行推理的最简单、最快捷的方法。可以将 pipeline() 用于不同模式下的许多任务,下表显示了其中一些任务:

6.2.2. Pipelines使用

1个参数:只指定任务类型

  • 如果不指定模型,将下载目标任务的默认模型和配套tokenizer
from transformers import pipeline

pipe = pipeline("text-classification")
pipe("This restaurant is awesome")

1个参数:只指定模型名称

  • 模型有相应的任务类型和配套的 tokenizer
from transformers import pipeline

pipe = pipeline(model="FacebookAI/roberta-large-mnli")
pipe("This restaurant is awesome")

2个参数:指定任务类型和模型名称

from transformers import pipeline

messages = [
    {"role": "user", "content": "Who are you?"},
]
pipe = pipeline("text-generation", model="Qwen/QwQ-32B")
pipe(messages)

3个参数:指定任务类型、模型名称、embedding模型名称

from transformers import pipeline

oracle = pipeline(
    "question-answering", model="distilbert/distilbert-base-cased-distilled-squad", tokenizer="google-bert/bert-base-cased"
)

3个参数:先加载模型再创建Pipeline

# Named entity recognition pipeline, passing in a specific model and tokenizer

from transformers import *

model = AutoModelForTokenClassification.from_pretrained("dbmdz/bert-large-cased-finetuned-conll03-english")
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")
recognizer = pipeline("ner", model=model, tokenizer=tokenizer)
  • 一般来说,第一次执行时pipeline会加载模型,模型会自动下载到本地,可以直接用
  • Pipeline加载模型的方式和先加载模型再创建Pipeline其中的加载模型方式一致1,都是用Auto Classes的方式进行加载

Pipeline官方文档:https://huggingface.co/docs/transformers/main_classes/pipelines#pipelinesopen in new window

6.3. AutoClasses

  • AutoClasses可以从from_pretrained()方法的传参,也就是通过预训练模型的名称或路径,自动检索预训练模型的架构来进行自动加载Model、Tokenizer和Config
  • 主要包括 AutoConfig、AutoModel 和 AutoTokenizer
from transformers import AutoConfig

config = AutoConfig.from_pretrained("google-bert/bert-base-uncased")
from transformers import AutoModel

model = AutoModel.from_pretrained("google-bert/bert-base-cased")
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
  • 特定任务的 AutoModel类(如 AutoModelForSequenceClassification),后缀ForSequenceClassification指明了任务类型,之所以有特定任务AutoModel类,是因为骨干模型可以处理多个任务:相同的 model,接入不同的 post processing 模块,就可以用于不同的任务
  • 这些类通过提供统一的 API,使代码更灵活,适合不同模型,它们在简化模型使用方面非常有效。

Auto Classes官方文档:https://huggingface.co/docs/transformers/model_doc/autoopen in new window