简化大模型微调门槛:运用Ludwig低代码框架的平台技术实战 原创
在人工智能的璀璨星河中,大型语言模型(LLMs)犹如引领方向的灯塔。但要让这些灯塔照亮特定领域,微调技术成为了关键。今天,我们将深入探索Ludwig框架微调与预训练技术,它们正以革新的方式,重塑AI模型微调的领域。
一、Ludwig 简介
在AI的世界里,简单性和灵活性是构建强大模型的关键。Ludwig 作为一个开源的低代码框架,用于构建自定义AI 模型,如LLM和其他深度神经网络。让这一过程变得像搭积木一样简单。
仓库地址:https://github.com/ludwig-ai/ludwig
官网地址:https://ludwig.ai/latest/
二、Ludwig 的核心优势
- 极简上手:用户仅需使用一个声明式的 YAML 配置文件,即可轻松训练出最先进的 LLM 模型。Ludwig 支持多任务和多模态学习,并提供全面的配置验证功能,能够在运行前检测无效参数组合,避免错误发生。
- 高效性和可扩展性:自动选择最佳批量大小,支持 DDP、DeepSpeed 等分布式训练策略,并提供参数高效微调(PEFT)、4 位量化(QLoRA)、分页和 8 位优化器等多种优化特性,即使面对超大规模数据集也能轻松应对。
- 专家级控制:用户可以完全掌控模型的各个方面,细致到激活函数的选择。同时,Ludwig 还提供超参数优化、模型可解释性分析以及丰富的指标可视化工具,满足专业开发者的需求。
- 模块化和可扩展设计:如同深度学习的“积木”,用户可以通过简单的参数调整尝试不同的模型架构、任务、特征和模态,极大地提升了模型开发的灵活性。
- 面向生产环境:提供预构建的 Docker 容器,原生支持在 Kubernetes 上使用 Ray 进行模型部署,并支持将模型导出至 Torchscript 和 Triton 等平台,以及一键上传模型至 HuggingFace。
三、Ludwig 的主要功能
- 训练和微调: 支持多种训练模式,包括对预训练模型进行完整的训练和微调。
- 模型配置: 使用 YAML 文件进行配置,允许用户对模型参数进行详细定义,实现高度的可定制性和灵活性。
- 超参数调整: 集成自动超参数优化工具,以增强模型性能。
- 可解释的人工智能: 提供工具帮助用户深入了解模型决策,提高模型的可解释性和透明度。
- 模型服务和基准测试: 简化模型服务的过程,并支持在不同条件下对模型性能进行基准测试。
Ludwig 的整体设计理念是简化 AI 模型的构建和部署流程,无论是 AI 领域的新手还是专家,都可以轻松上手,快速构建出适用于各种场景的定制化 AI 模型。
四、Ludwig 工作原理
配置
Ludwig 为用户构建 ML 管道的方式提供了一个富有表现力的声明性配置系统,例如数据预处理、模型架构、后端基础设施、训练循环、超参数优化等。
文档参考:https://ludwig.ai/latest/configuration/
了解更多,请参阅 Ludwig 官网获得深入参考。
数据类型抽象
Ludwig 中的每个功能都由特定的数据类型描述。每种数据类型都映射到一组特定的模块,这些模块负责处理该类型的预处理、编码、解码和后处理。反之亦然,每个模块(预处理器、编码器、解码器)都注册到该模块支持的一组特定数据类型。
了解更多,请参阅 Ludwig 官网获得深入参考。
ECD 技术架构
Ludwig 的核心建模架构称为 ECD(编码器-组合器-解码器)。多个输入特征被编码并输入到Combiner 模型,Combiner模型对编码的输入进行操作以将它们组合起来。在输出端,组合器模型的输出被输入到每个输出特征的解码器进行预测和后处理。详细了解 Ludwig 的组合器模型,如TabNet、Transformer 和 Concat(广度和深度学习)。
ECD 架构的示意图就像一只翩翩起舞的蝴蝶,因此也被称为“蝴蝶架构”。
ECD 架构可以灵活处理各种不同类型的输入和输出数据,因此适用于许多不同的应用场景。
五、Ray 分布式训练
Ludwig on Ray使用户能够扩展他们的训练过程,从在本地笔记本电脑上运行,到在云端的 GPU 实例上运行,再到并行扩展到数百台机器,所有这些都无需更改一行代码。
通过与 Ray 集成,Ludwig 能够提供一种统一的分布式训练方法:
- Ray 使您能够通过其集群启动器用单个命令配置一组机器。
- Ray 上的 Horovod使您能够进行分布式训练,而无需在您的环境中配置 MPI。
- Dask on Ray使您能够处理单台机器内存无法容纳的大型数据集。
- Ray Tune使您能够轻松地在多台机器上并行运行分布式超参数搜索。
Ludwig 中无需更改任何一行代码。当 Ludwig 检测到您在 Ray 集群中运行时,Ray 后端将自动启用。
集群配置文档:https://docs.ray.io/en/latest/cluster/cli.html#ray-start
集群参考文档:https://docs.ray.io/en/latest/ray-core/configure.html#cluster-resources
命令行示例:
创建一个名为 config.yaml 的 Ludwig 配置
创建一个名为cluster.yaml
Ray Cluster 的配置文件
开始训练示例:
六、Ludwig 微调与预训练实战
在开始微调你的 AI 模型之前,需要做一些准备工作,一般 Ludwig 微调 LLM 详细步骤如下:
- 环境设置: 安装必要的软件和软件包。
- 数据准备: 选择和预处理合适的数据集。
- YAML 配置: 在 YAML 文件中定义模型参数和训练选项。
- 模型训练和评估: 执行微调过程并评估模型性能。
从技术角度来看,Ludwig 能够训练和微调任何神经网络,并支持广泛的机器学习和深度学习用例。
此外,Ludwig 还提供了可视化、超参数调整、可解释的人工智能、模型基准测试以及模型服务等功能。
安装必要的软件包
如果遇到 Transformers 版本的运行时错误,请执行以下操作。
数据准备和预处理
先决条件:
- HuggingFace API 令牌获取
- 获得Llama2-7b-hf的访问批准
- 具有至少 12 GiB VRAM 的 GPU(在我们的测试中,我们使用了 Nvidia T4)
我们将使用Stanford Alpaca数据集,该数据集将被格式化为如下所示的表格文件:
创建 YAML 配置文件
首先创建一个名为 model.yaml 的 YAML 配置文件,告诉 Ludwig 如何训练我们的模型。
示例如下:
微调命令示例:
编码方式示例:
预训练监督机器学习示例:
Ludwig 模型导出
结语
Ludwig 不仅是一个框架,它是一位精通技艺的导师,轻轻推开了人工智能领域的神秘大门。它以平易近人的姿态,迎接每一位对AI充满好奇的探索者,无论他们是初学者还是资深专家。
Ludwig 的低代码框架,就像一把精准的瑞士军刀,为大型语言模型(LLM)的微调提供了一种既高效又便捷的途径。它巧妙地在用户友好的界面与强大的自定义能力之间找到了完美的平衡点。
借助Ludwig,开发人员可以像编织定制西装一样,利用其全面的模型开发、训练和评估工具,打造出为特定用例量身定做的AI模型。这些模型不仅强大,而且性能卓越,能够满足现实世界多样化的应用场景。
本文转载自公众号顶层架构领域