跳到主内容

MLflow Transformers Flavor

注意

transformers Flavor 正在积极开发中,并被标记为实验性(Experimental)。公共 API 可能会发生变化,并且随着更多功能添加到该 Flavor 中,新功能可能会被添加。

引言

🤗 Hugging Face 出品的 Transformers 是机器学习领域的基石,为 PyTorchTensorFlowJAX 等多种框架提供最先进的功能。该库已成为自然语言处理 (NLP) 和音频转录处理的事实标准。它还为计算机视觉和多模态 AI 任务提供了引人注目的高级选项集。Transformers 通过提供强大的、多功能的且易于实现预训练模型和易于访问的高级 API 来实现这一切。

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

Transformers Pipeline Architecture

用于 Whisper Model 的 Transformers Pipeline 架构

Transformers 库与 MLflow 的集成增强了机器学习工作流的管理,从实验跟踪到模型部署。这种组合为将先进的 NLP 和 AI 功能整合到您的应用中提供了强大且高效的途径。

Transformers 库的关键特性:

  • 访问预训练模型:庞大的预训练模型集合,适用于各种任务,最大限度地减少训练时间和资源。
  • 任务多样性:支持多种模态,包括文本、图像和语音处理任务。
  • 框架互操作性:与 PyTorch、TensorFlow、JAX、ONNX 和 TorchScript 兼容。
  • 社区支持:一个积极的社区,用于协作和支持,可通过论坛和 Hugging Face Hub 访问。

MLflow 的 Transformers Flavor:

MLflow 通过提供以下功能支持使用 Transformers 包:

  • 简化实验跟踪:在微调过程中高效记录参数、指标和模型。
  • 轻松的模型部署:简化部署到各种生产环境的过程。
  • 库集成:与 HuggingFace 库(如AcceleratePEFT)集成,用于模型优化。
  • Prompt 管理:使用transformers pipelines 保存 prompt 模板,以优化推理并减少样板代码。

示例用例

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

Fine-tuning a Transformers Model with MLflow

使用 MLflow 微调 Transformers 模型

轻松部署

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

MLflow Transformers Flavor 入门 - 教程和指南

下面,您将找到许多关于使用 transformers 的不同用例的指南,它们利用 MLflow 的 API 进行跟踪和推理。

使用 MLflow 的 Transformers 入门快速指南

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

使用 MLflow 的 Transformers 微调教程

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

使用 MLflow 的 Transformers 用例教程

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

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

使用 transformers flavor 需要注意的重要细节

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

  • 实验性状态:MLflow 中的 Transformers flavor 被标记为实验性,这意味着 API 可能会发生变化,并且随着时间的推移可能会添加新功能,并可能包含破坏性更改。
  • PyFunc 限制:并非所有来自 Transformers pipeline 的输出在使用 python_function flavor 时都能被捕获。例如,如果输出中需要额外的参考或分数,则应使用原生实现。此外,并非所有 pipeline 类型都支持 pyfunc。请参阅将 Transformers 模型加载为 Python 函数以了解支持的 pipeline 类型及其输入和输出格式。
  • 支持的 Pipeline 类型:并非所有 Transformers pipeline 类型目前都支持与 python_function flavor 一起使用。特别是,新的模型架构可能不会被支持,直到 transformers 库在其支持的 pipeline 实现中指定了相应的 pipeline 类型。
  • 输入和输出类型:python_function 实现的输入和输出类型可能与原生 pipeline 预期的类型不同。用户需要确保与其数据处理工作流的兼容性。
  • 模型配置:保存或记录模型时,可以使用 model_config 设置某些参数。然而,如果同时保存了 model_config 和带有参数的 ModelSignature,则 ModelSignature 中的默认参数将覆盖 model_config 中的参数。
  • 音频和视觉模型:音频和基于文本的大型语言模型支持与 pyfunc 一起使用,而计算机视觉和多模态模型等其他类型仅支持原生类型加载。
  • Prompt 模板:Prompt 模板化目前支持少量 pipeline 类型。有关支持的 pipeline 的完整列表以及该功能的更多信息,请参阅此链接

记录大型模型

默认情况下,MLflow 会消耗一定的内存占用和存储空间来记录模型。这在使用具有数十亿参数的大型基础模型时可能是一个问题。为了解决这个问题,MLflow 提供了一些优化技术,以减少记录过程中的资源消耗并加快记录速度。请参阅使用 MLflow Transformers flavor 处理大型模型指南,了解有关这些技巧的更多信息。

使用 Transformer Pipelines 的 tasks

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

详细文档

要了解有关 MLflow 中 transformers flavor 的细微之处,请深入阅读详细指南,其中涵盖:

  • Pipeline 与组件记录:探讨保存模型组件或完整 pipeline 的不同方法,并了解加载这些模型用于各种用例的细微之处。
  • 将 Transformers 模型作为 Python 函数:熟悉与 pyfunc 模型 flavor 兼容的各种 transformers pipeline 类型。了解 pyfunc 模型实现中该 flavor 的输入和输出格式的标准化,确保与 JSON 和 Pandas DataFrames 的无缝集成。
  • Prompt 模板:了解如何使用 transformers pipelines 保存 prompt 模板,以优化推理并减少样板代码。
  • 用于推理的模型配置和模型签名参数:了解如何利用 model_configModelSignature 实现灵活且定制化的模型加载和推理。
  • 自动记录元数据和模型卡:发现模型卡和其他元数据的自动记录功能,增强模型文档和透明度。
  • 模型签名推理:了解 MLflow 在 transformers flavor 中的能力,它能自动推断和附加模型签名,从而简化模型部署。
  • 覆盖 PyTorch dtype:深入了解如何优化 transformers 模型进行推理,重点关注内存优化和数据类型配置。
  • 音频 Pipeline 的输入数据类型:了解在 transformers pipelines 中处理音频数据的具体要求,包括处理 str、bytes 和 np.ndarray 等不同输入类型。
  • MLflow Transformers flavor 中的 PEFT 模型:PEFT(参数高效微调)在 MLflow 中原生支持,支持 LoRA、QLoRA 等各种优化技术,可显著降低微调成本。请查看指南和教程,了解如何利用 PEFT 和 MLflow。

了解更多关于 Transformers 的信息

有兴趣了解如何将 transformers 应用于您的机器学习工作流吗?

🤗 Hugging Face 提供了一个很棒的 NLP 课程。请查看并了解如何利用 Transformers、Datasets、Tokenizers 和 Accelerate