MLflow Transformers 风格

注意

transformers 风格正在积极开发中,并被标记为实验性。公共API可能会发生变化,随着功能的增加,可能会添加新功能。

介绍

Transformers 由 🤗 Hugging Face 在机器学习领域中代表了一个基石,为包括 PyTorchTensorFlowJAX 在内的多种框架提供了最先进的能力。这个库已成为自然语言处理(NLP)和音频转录处理的实际标准。它还为计算机视觉和多模态AI任务提供了一套引人注目且先进的选择。Transformers 通过提供预训练模型和易于访问的高级API实现了这一切,这些API不仅功能强大,而且灵活且易于实施。

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

Transformers 流水线架构

Whisper 模型的 Transformers 流水线架构

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

Transformers 库的关键特性:

  • 访问预训练模型:大量针对各种任务的 预训练模型,减少训练时间和资源。

  • 任务多样性:支持包括文本、图像和语音处理任务在内的多种模式。

  • 框架互操作性: 兼容 PyTorch、TensorFlow、JAX、ONNX 和 TorchScript。

  • 社区支持:一个活跃的社区,用于协作和支持,可通过论坛和 Hugging Face Hub 访问。

MLflow 的 Transformers 风格:

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

  • 简化实验跟踪:在 微调过程 中高效记录参数、指标和模型。

  • 轻松模型部署:简化部署到各种生产环境。

  • 库集成: 与 HuggingFace 库集成,如 AcceleratePEFT 用于模型优化。

  • 提示管理:使用 保存提示模板 与转换器管道,以减少样板代码优化推理。

示例用例:

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

使用 MLflow 微调 Transformers 模型

使用 MLflow 微调 Transformers 模型

轻松部署

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

开始使用 MLflow Transformers 风格 - 教程和指南

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

使用 Transformers 和 MLflow 的入门快速启动

如果你是第一次接触变压器(transformers),或者虽然广泛使用变压器但对MLflow不熟悉,这里是一个很好的起点。

使用 MLflow 进行 Transformers 微调教程

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

使用案例教程:使用 MLflow 的 Transformers

有兴趣了解如何利用变换器进行基本文本生成以外的任务吗?想了解更多关于你可以用变换器和MLflow解决的问题范围吗?

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

需要注意的 transformers 风格的重要细节

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

  • 实验状态:MLflow 中的 Transformers 风格被标记为实验性,这意味着 API 可能会发生变化,并且随着时间的推移可能会添加新功能,这些新功能可能会带来潜在的破坏性变化。

  • PyFunc 限制: 使用 python_function 风格时,可能无法捕获 Transformers 管道的所有输出。例如,如果需要从输出中获取额外的引用或分数,则应使用原生实现。此外,并非所有管道类型都支持 pyfunc。请参阅 将 Transformers 模型加载为 Python 函数 以获取支持的管道类型及其输入和输出格式。

  • 支持的管道类型:并非所有 Transformers 管道类型当前都支持与 python_function 风格一起使用。特别是,新的模型架构可能在其支持的管道实现中没有指定的管道类型之前不会得到支持。

  • 输入和输出类型:python_function 实现的输入和输出类型可能与原生管道的预期不同。用户需要确保与他们的数据处理工作流兼容。

  • 模型配置:在保存或记录模型时,可以使用 model_config 来设置某些参数。然而,如果同时保存了 model_config 和一个带有参数的 ModelSignatureModelSignature 中的默认参数将覆盖 model_config 中的参数。

  • 音频和视觉模型: 支持使用 pyfunc 的基于音频和文本的大型语言模型,而其他类型如计算机视觉和多模态模型仅支持原生类型加载。

  • 提示模板:目前仅支持部分管道类型的提示模板。有关支持的管道完整列表及该功能的更多信息,请参见 此链接

记录大型模型

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

使用 tasks 进行 Transformer 管道操作

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

详细文档

要了解更多关于 MLflow 中 transformers 风格的细微差别,请深入阅读 综合指南 ,其中涵盖:

  • 流水线与组件日志记录: 探索保存模型组件或完整流水线的不同方法,并理解在各种用例中加载这些模型的细微差别。

  • 将 Transformers 模型作为 Python 函数 : 熟悉与 pyfunc 模型风格兼容的各种 transformers 管道类型。了解 pyfunc 模型实现中输入和输出格式的标准化,确保与 JSON 和 Pandas DataFrames 的无缝集成。

  • 提示模板: 学习如何使用转换器管道保存提示模板以优化推理并减少样板代码。

  • 推理的模型配置和模型签名参数: 学习如何利用 model_configModelSignature 进行灵活和定制化的模型加载和推理。

  • 自动元数据和ModelCard日志记录: 探索模型卡和其他元数据的自动日志记录功能,增强模型文档和透明度。

  • 模型签名推断 : 了解 MLflow 在 transformers 风格中自动推断和附加模型签名的能力,从而促进更简单的模型部署。

  • 覆盖 Pytorch 数据类型 : 深入了解优化 transformers 模型以进行推理,重点关注内存优化和数据类型配置。

  • 音频管道的输入数据类型: 了解在变压器管道中处理音频数据的具体要求,包括处理不同输入类型如str、bytes和np.ndarray。

  • MLflow Transformers 风格中的 PEFT 模型: PEFT(参数高效微调)在 MLflow 中得到了原生支持,能够启用各种优化技术,如 LoRA、QLoRA 等,以显著降低微调成本。查看指南和教程,了解更多关于如何利用 PEFT 与 MLflow 的信息。

了解更多关于 Transformers

有兴趣了解更多关于如何利用变压器进行机器学习工作流程的信息吗?

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