跳至主内容

MLflow Transformers 风格

介绍

Transformers 由 🤗 Hugging Face 开发,是机器学习领域的基石,为多种框架(包括 PyTorchTensorFlowJAX)提供最先进的功能。该库已成为自然语言处理 (NLP) 和音频转录处理的事实上的标准。它还为计算机视觉和多模态 AI 任务提供了强大且先进的选项。Transformers 通过提供预训练模型和易于使用的高级 APIs 来实现这一切,这些 APIs 不仅功能强大,而且灵活且易于实现。

例如,transformers 库简洁性的基石之一是 pipeline API,它将最常见的自然语言处理任务封装为一次 API 调用。该 API 允许用户根据指定的任务执行各种操作,而无需担心底层模型或预处理步骤。

Transformers Pipeline Architecture

Transformers Pipeline Architecture for the Whisper Model

将 Transformers 库与 MLflow 集成,可增强对机器学习工作流的管理,从实验跟踪到模型部署。该组合为将先进的自然语言处理 (NLP) 和人工智能能力纳入您的应用程序提供了稳健且高效的途径。

Transformers 库的主要特性:

  • 访问预训练模型: 大量的pre-trained models集合,适用于各种任务,从而减少训练时间和资源消耗。
  • 任务多样性: 支持包括文本、图像和语音处理任务在内的多种模态。
  • 框架互操作性: 与 PyTorch, TensorFlow, JAX, ONNX 和 TorchScript 的兼容性。
  • 社区支持: 一个活跃的社区,便于协作与支持,可通过论坛和 Hugging Face Hub 访问。

MLflow 的 Transformers Flavor:

MLflow 通过提供以下内容来支持 Transformers 包的使用:

  • 简化的实验跟踪: 在fine-tuning process期间高效记录参数、指标和模型。
  • 轻松实现模型部署: 将部署流程简化以适配各种生产环境。
  • 库集成: 与 HuggingFace 库(如 Accelerate, PEFT)集成以进行模型优化。
  • 提示管理: Save prompt templates 借助 transformers pipelines 优化推理,减少样板代码。

示例用例:

有关使用 MLflow 对模型进行微调并记录结果的示例,请参阅 fine-tuning tutorials。这些教程演示了将预训练的基础模型微调为特定应用的模型的过程,例如垃圾邮件分类器、SQL 生成器。MLflow 在跟踪微调过程(包括数据集、超参数、性能指标和最终模型制品)方面发挥着关键作用。下图显示了该教程在 MLflow UI 中的结果。

Fine-tuning a Transformers Model with MLflow

Fine-tuning a Transformers Model with MLflow

轻松部署

模型训练完成后,需要进行 deployed for inference。 MLflow 与 Transformers 的集成通过提供诸如 mlflow.transformers.load_model()mlflow.pyfunc.load_model() 等函数简化了这一过程,从而可以轻松地提供模型服务。 作为对 transformers 增强推理功能支持的一部分,MLflow 提供了机制以启用使用 inference arguments,这可以减少计算开销并降低部署时的内存需求。

使用 MLflow Transformers Flavor 入门 - 教程与指南

下面,您将找到一些指南,专注于使用 transformers 的不同用例,这些用例利用 MLflow 的 APIs 来实现跟踪和推理功能。

使用 Transformers 和 MLflow 的入门快速开始

如果这是你第一次接触 transformers,或者你广泛使用 transformers 但对 MLflow 不熟悉,这是一个很好的起点。

使用 MLflow 的 Transformers 微调教程

微调模型是机器学习工作流程中的常见任务。这些教程旨在展示如何使用 transformers 库微调模型,并利用 MLflow 的 APIs 来跟踪实验配置和结果。

结合 MLflow 的 Transformers 用例教程

想了解如何将 transformers 应用于除基本文本生成之外的任务吗? 想更多地了解使用 transformers 和 MLflow 可以解决的各种问题吗?

这些更高级的教程旨在展示 transformers 模型架构的不同应用,以及如何利用 MLflow 跟踪和部署这些模型。

关于 transformers flavor 需要注意的重要细节

在使用 MLflow 的 transformers flavor 时,有几个需要注意的重要事项:

  • PyFunc 限制:使用 python_function flavor 时,可能无法捕获来自 Transformers pipeline 的所有输出。例如,如果需要从输出中获取额外的引用或得分,则应改用原生实现。此外,并非所有 pipeline 类型都受 pyfunc 支持。请参阅 Loading a Transformers Model as a Python Function 以了解受支持的 pipeline 类型及其输入和输出格式。
  • 支持的 Pipeline 类型: 并非所有 transformers 的 pipeline 类型当前都支持与 python_function flavor 一起使用。尤其是,新的模型架构在 transformers 库的受支持 pipeline 实现中尚未为其指定相应的 pipeline 类型之前,可能无法得到支持。
  • 输入和输出类型: python_function 实现的输入和输出类型可能与原生管道所期望的不同。用户需要确保其与数据处理工作流兼容。
  • 模型配置: 在保存或记录模型时,model_config 可用于设置某些参数。但是,如果同时保存了 model_config 和带有参数的 ModelSignature,则 ModelSignature 中的默认参数会覆盖 model_config 中的参数。
  • 音频和视觉模型: 支持将基于音频和文本的大型语言模型与 pyfunc 一起使用,而像计算机视觉和多模态模型这样的其他类型只支持以原生类型加载的方式。
  • 提示模板: 提示模板目前仅支持某些流水线类型。有关受支持流水线的完整列表以及该功能的更多信息,请参见 this link.

记录大型模型

默认情况下,MLflow 在记录模型时会消耗一定的内存占用和存储空间。对于具有数十亿参数的大型基础模型来说,这可能会成为问题。为了解决这一点,MLflow 提供了一些优化技术,以在记录期间减少资源消耗并加快记录过程。请参阅 Working with Large Models in MLflow Transformers flavor 指南以了解有关这些提示的更多信息。

在 Transformer 管道中使用 tasks

在 MLflow Transformers flavor 中,task 对确定模型的输入和输出格式起着关键作用。请参阅 Tasks in MLflow Transformers 指南,了解如何使用原生 Transformers 任务类型,并利用诸如 llm/v1/chatllm/v1/completions 等高级任务来进行与 OpenAI 兼容的推理。

详细文档

要了解 MLflow 中 transformers flavor 的细微差异,请查阅 the comprehensive guide,其中涵盖:

  • Pipelines vs. Component Logging: 探索用于保存模型组件或完整流水线的不同方法,并了解在各种使用场景下加载这些模型的细微差别。
  • Transformers Model as a Python Function : 熟悉与 transformers 管道类型兼容的 pyfunc model flavor。了解该 flavor 的 pyfunc 模型实现中输入和输出格式的标准化,以确保与 JSON 和 Pandas DataFrames 的无缝集成。
  • Prompt Template: 学习如何使用 transformers pipelines 保存提示模板,以通过减少样板代码来优化推理。
  • Model Config and Model Signature Params for Inference: 了解如何利用 model_configModelSignature 来实现灵活且定制化的模型加载与推理。
  • Automatic Metadata and ModelCard Logging: 了解用于模型卡和其他元数据的自动记录功能,提升模型文档和透明度。
  • Model Signature Inference : 了解 MLflow 在 transformers flavor 中自动推断并附加模型签名的功能,从而便于更轻松地部署模型。
  • Overriding Pytorch dtype : 深入了解如何为推理优化 transformers 模型,侧重于内存优化和数据类型配置。
  • Input Data Types for Audio Pipelines: 理解在 transformers 管道中处理音频数据的具体要求,包括对不同输入类型(如 str、bytes 和 np.ndarray)的处理。
  • PEFT Models in MLflow Transformers flavor: PEFT(Parameter-Efficient Fine-Tuning)在 MLflow 中被原生支持,能够启用各种优化技术,如 LoRA、QLoRA 等,从而显著降低微调成本。请查看指南和教程,了解如何在 MLflow 中利用 PEFT。

了解有关 Transformers 的更多信息

想了解更多关于如何在机器学习工作流程中利用 transformers 吗?

🤗 Hugging Face 有一个很棒的自然语言处理(NLP)课程。去看看并了解如何利用 Transformers, Datasets, Tokenizers, and Accelerate