跳到主要内容

MLflow Transformers 风味

简介

🤗 Hugging FaceTransformers 是机器学习领域的核心,为 PyTorchTensorFlowJAX 等多种框架提供最先进的功能。该库已成为自然语言处理 (NLP) 和音频转录处理的事实标准。它还为计算机视觉和多模态 AI 任务提供了一套引人注目且先进的选项。Transformers 通过提供预训练模型和易于访问的高级 API 来实现所有这些,这些 API 不仅功能强大,而且用途广泛且易于实现。

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

Transformers Pipeline Architecture

Whisper 模型的 Transformers Pipeline 架构

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

Transformers 库的主要特点:

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

MLflow 的 Transformers 风味:

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

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

示例用例

有关使用 MLflow 微调模型和记录结果的示例,请参阅微调教程。这些教程演示了将预训练基础模型微调为特定应用程序模型(如垃圾邮件分类器、SQL 生成器)的过程。MLflow 在跟踪微调过程(包括数据集、超参数、性能指标和最终模型工件)中发挥着关键作用。下图显示了 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 风味入门 - 教程和指南

下面,您将找到一些指南,这些指南侧重于使用 transformers 的不同用例,这些用例利用 MLflow 的 API 进行跟踪和推理功能。

使用 MLflow 进行 Transformers 的入门快速入门

如果这是您首次接触 transformers 或广泛使用 transformers 但不熟悉 MLflow,那么这是一个很好的起点。

使用 MLflow 的 Transformers 微调教程

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

使用 MLflow 的 Transformers 用例教程

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

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

关于 transformers 风味需要注意的重要细节

在使用 MLflow 中的 transformers 风味时,有几个重要的注意事项需要牢记

  • PyFunc 限制:使用 python_function 风味时,并非所有 Transformers 管道的输出都可能被捕获。例如,如果需要从输出中获取其他引用或分数,则应使用本机实现。此外,并非所有管道类型都支持 pyfunc。有关支持的管道类型及其输入和输出格式,请参阅将 Transformers 模型加载为 Python 函数
  • 支持的管道类型:并非所有 Transformers 管道类型当前都支持与 python_function 风味一起使用。特别是,新的模型架构可能不受支持,直到 transformers 库在其支持的管道实现中具有指定的管道类型。
  • 输入和输出类型:python_function 实现的输入和输出类型可能与本机管道预期的不同。用户需要确保与其数据处理工作流的兼容性。
  • 模型配置:保存或记录模型时,可以使用model_config设置某些参数。但是,如果同时保存 model_config 和带有参数的ModelSignature,则 ModelSignature 中的默认参数将覆盖model_config中的参数。
  • 音频和视觉模型:支持将音频和基于文本的大型语言模型与 pyfunc 一起使用,而计算机视觉和多模态模型等其他类型仅支持本机类型加载。
  • 提示模板:提示模板目前支持少数管道类型。有关支持的管道的完整列表以及有关该功能的更多信息,请参阅此链接

记录大型模型

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

使用 Transformer Pipelines 的 tasks

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

详细文档

要了解有关 MLflow 中 transformers 风味细微差别的更多信息,请深入研究综合指南,其中包括

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

了解有关 Transformers 的更多信息

有兴趣了解如何利用 transformers 进行机器学习工作流吗?

🤗 Hugging Face 有一个很棒的 NLP 课程。查看它,看看如何利用Transformers、Datasets、Tokenizers 和 Accelerate