将 Meta Llama 3 与人类偏好对齐,使用 DPO、Amazon SageMaker Stu

用 DPO、Amazon SageMaker Studio 和 Amazon SageMaker Ground Truth 对 Meta Llama 3 进行人类偏好的调整

作者:Anastasia Tzeveleka、Pranav Murthy 和 Sundar Raghavan日期:2024年9月9日类别: Advanced (300)、Amazon SageMaker、Amazon SageMaker Ground Truth、Amazon SageMaker Studio、人工智能、生成性人工智能、技术操作指南阅读原文

关键要点

大型语言模型LLM在客户导向的应用中表现出色,但需要根据组织的价值观进行调整,因此使用直接偏好优化DPO可以帮助使用人类偏好数据微调 LLM。通过 Amazon SageMaker Studio 和 Amazon SageMaker Ground Truth,用户可以高效地收集人类偏好数据,并通过这些数据对模型进行微调。本文展示了一个遵循虚拟数字银行 示例银行 价值观的 DPO 微调过程,包括数据收集、模型训练及部署。

大型语言模型LLMs具备令人惊叹的功能。然而,当这些模型被应用于服务客户的场景时,通常需要对它们的回答进行个性化的调整,使其与组织的价值观和品牌形象保持一致。在这篇文章中,我们将演示如何使用直接偏好优化DPO,这一技术能够让您通过人类偏好数据对 LLM 进行微调,并结合Amazon SageMaker Studio和Amazon SageMaker Ground Truth来调整Meta Llama 3 8B Instruct模型的回答,使其符合您的组织价值观。

使用 SageMaker Studio 和 SageMaker Ground Truth 进行 DPO

通过 DPO,用户可以使用人类偏好数据如评分或排名来微调 LLM,使其生成符合最终用户预期的输出。DPO 计算效率高,帮助提升模型的有用性、诚实性和无害性,避免 LLM 处理某些特定话题,并降低偏见。在这个技术中,您通常从选择一个现有的或训练一个新的监督微调SFT模型开始。您将使用该模型生成回答,并收集人类对这些回答的反馈。之后,您可以利用这些反馈进行 DPO 微调,以使模型符合人类偏好。

无论是对预训练的 LLM 进行监督微调SFT,还是加载现有的微调模型进行 DPO,您通常都需要强大的 GPU。在 DPO 微调期间同样如此。借助 Amazon SageMaker,您可以快速启动并通过使用配备 GPU 实例的托管 Jupyter 笔记本进行快速实验。您可以通过在 SageMaker Studio 中创建一个JupyterLab 空间来开始,该环境是专为机器学习设计的集成开发环境 (IDE),从而启动运行在 GPU 实例上的 JupyterLab 应用。

对通过 SageMaker Ground Truth 的人类标注者进行排名或评分的应用程序进行端到端的数据收集工作流程,以及开发相关应用程序,可能会非常耗时。SageMaker Ground Truth 提供人机协作功能,帮助您设置工作流程,管理标注者,并收集一致且高质量的反馈。

本文将指导您通过 DPO 将 SFT 模型的回答调整为一个虚拟数字银行 示例银行 的价值观。您的笔记本将在 SageMaker Studio 中运行,使用单个 mlg548xlarge 实例8 个 A10G GPU。可选地,您可以选择使用较小的实例类型,例如 mlg512xlarge4 个 A10G GPU或 mlg612xlarge4 个 L4 GPU以及bitsandbytes量化。您将使用Meta Llama 3 8B Instruct由 Hugging Face Hub 提供的适用于对话情况的 Meta Llama 3 指令微调模型生成回答,并通过 SageMaker Ground Truth 收集偏好数据,使用HuggingFace TRL 库中的DPOTrainer进行 DPO 微调,结合参数高效微调PEFT。您还将把调整后的模型部署到 SageMaker 端点以进行实时推断。您可以使用相同的方法来处理其他模型。

解决方案概述

以下图示展示了该方法。

工作流程包含以下关键步骤:

将 Meta Llama 3 8B Instruct 模型加载到 SageMaker Studio,并为一组常见问题和有毒问题生成响应。该数据集作为模型性能的初始基准。生成的问答对存储在Amazon 简单存储服务Amazon S3中。这些数据稍后会展示给人类标注者,以便他们对模型的响应进行排名。在 SageMaker Ground Truth 中创建工作流程,收集响应的人类偏好数据。这涉及到创建工作团队、设计反馈收集的用户界面和设置标注工作。人类标注者通过标注门户与模型的响应进行互动,根据其与组织价值观的 alignment 来评估和排名响应。收集的数据被处理为符合 DPOTrainer 的预期格式。使用 Hugging Face TRL 库和 DPOTrainer,利用前一步处理的数据微调 Llama 3 模型。在保留的评估数据集上测试微调后的模型,以评估其性能并验证其符合预期标准。当您对模型性能满意时,便可以将其部署到 SageMaker 端点以进行大规模实时推断。

前提条件

要运行本帖中描述的解决方案,您必须设置一个 AWS 账户,并拥有一个AWS 身份与访问管理IAM角色,授予您创建并访问解决方案资源所需的权限。如果您是 AWS 新用户并且尚未创建账号,请参考创建独立的 AWS 账户。

要使用 SageMaker Studio,您需要设置一个SageMaker 域,并具有启动 SageMaker Studio 应用的必要权限的用户配置文件。如果您是 SageMaker Studio 新用户,可以使用快速 Studio 设置快速入门。点击一下按钮,SageMaker 将以默认预设设置所需域,包括设置用户配置文件、IAM 角色、IAM 身份验证和公共互联网访问。与本帖附带的 notebooks 假定使用 mlg548xlarge 实例类型相关。要查看或增加配额限制,请导航到 AWS 服务配额控制台,在左侧导航窗格中选择 AWS Services,然后选择 Amazon SageMaker,并参考 Studio JupyterLab Apps running on mlg548xlarge instances 的值。

将 Meta Llama 3 与人类偏好对齐,使用 DPO、Amazon SageMaker Stu

请求增量配额值大于或等于 1 以用于实验。

Meta Llama 3 8B Instruct 在Llama 3 许可证下可用。要从 Hugging Face 下载模型,您需要一个访问令牌。如果您没有令牌,请在 Hugging Face 网站上导航到设置页面以获取。

确保 SageMaker Studio 角色具备 SageMaker Ground Truth 和 Amazon S3 访问的必要权限。当您在 SageMaker Studio 中工作时,您已经在使用 IAM 角色,要启动 SageMaker Ground Truth 标注作业,您需要修改该角色。要启用 SageMaker Ground Truth 功能,您应将 AWS 管理策略AmazonSageMakerGroundTruthExecution附加到您的 SageMaker Studio 角色。此策略提供了创建和管理标注作业的必要权限。

对于 Amazon S3 访问,将权限范围缩小到特定的存储桶和操作能提高安全性,并符合最佳实践。这符合最小权限原则,减少了由于过于宽松的策略而带来的潜在风险。以下是一个示例的限制性 Amazon S3 策略,仅授予必要的权限:

json{ Version 20121017 Statement [ { Effect Allow Action [ s3GetObject s3PutObject s3ListBucket ] Resource [ arnawss3ltYOURBUCKETNAMEgt arnawss3ltYOURBUCKETNAMEgt/ ] } ]}

要将这些策略添加到您的 SageMaker Studio 角色,请完成以下步骤:

在 IAM 控制台中查找并选择您的 SageMaker Studio 角色通常以 AmazonSageMakerExecutionRole 开头。在 Permissions 标签下,选择 Add permissions,然后选择 Attach policies。搜索并附加 AmazonSageMakerGroundTruthExecution。如有需要,创建并附加示例中所示的 S3 自定义内联策略。

请记住遵循最小权限原则,仅授予特定使用案例所需的权限。定期审查您的 IAM 角色和策略,以验证它们是否符合安全需求。有关 SageMaker Ground Truth 的 IAM 策略的更多详细信息,请参考使用 IAM 管理策略与 Ground Truth。

设置笔记本和环境

要开始,请打开 SageMaker Studio 并创建 JupyterLab 空间。对于 实例,选择 mlg548xlarge。启动该空间,打开 JupyterLab,然后克隆下面的GitHub 仓库中的代码。您可以将 JupyterLab 空间配置为使用高达 100GB 的Amazon 弹性块存储Amazon EBS卷。此外,mlg5 实例系列配备 NVMe SSD 本地存储,您可以在 JupyterLab 应用中使用。NVMe 实例存储目录在 /mnt/sagemakernvme 中挂载到应用容器中。在本帖中,您将使用 mlg548xlarge 实例中可用的 NVMe 存储。

当您的空间准备好后,克隆GitHub 仓库并打开名为 llama3/rlhfgenaistudio/RLHFwithLlama3onStudioDPOipynb的笔记本,其中包含解决方案代码。在弹出的窗口中,确保选择了 Python 3 内核。

让我们通过笔记本的内容。首先,安装所需的 Python 库:

pythonimport torchimport osimport sagemakerimport boto3import datetimefrom transformers import pipelineimport jsonimport asyncioimport aiofilesfrom datasets import Dataset loaddatasetfrom peft import ( getpeftmodel LoraConfig preparemodelforkbittraining)import bitsandbytes as bnbfrom tqdm import tqdmfrom transformers import ( AutoModelForCausalLM AutoTokenizer BitsAndBytesConfig TrainingArguments AutoModelForSequenceClassification)from IPythoncoredisplay import display HTML

以下行将默认路径设置为存储临时工件的 NVMe 存储位置:

pythoncachedir = /mnt/sagemakernvme

这是一种本地存储,这意味着您的数据将在 JupyterLab 应用被删除、重启或修补时丢失。替代方案是将 AWS EBS 卷的大小设置为大于或等于 100GB,以为 Meta Llama 3 基模型、PEFT 适配器以及新的合并微调模型提供足够的存储。

在笔记本中加载 Meta Llama 3 8B Instruct

在导入所需库后,您可以从 Hugging Face 下载 Meta Llama 3 8B Instruct 模型及其相关的 tokenizer:

pythonbasemodelid = metallama/MetaLlama38BInstruct

model = AutoModelForCausalLMfrompretrained( basemodelid token=hfaccesstoken torchdtype=torchbfloat16 devicemap=auto cachedir=cachedir)

modelconfigusecache = False

tokenizer = AutoTokenizerfrompretrained( basemodelid token=hfaccesstoken cachedir=cachedir)

飞机加速app官方下载

收集常见和有毒问题的初始模型响应

文件examplebankquestionstxt包含金融组织呼叫中心收到的常见问题清单,以及有毒和离题问题的列表。

在请求模型生成这些问题的答案之前,您首先需要指定 示例银行 的品牌和核心价值观。您将在后面的提示中将这些价值观作为背景信息以帮助模型做出合适的回应。

pythoncompanycontext = 示例银行是一家下一代数字银行,致力于革新银行体验。成立于 2020 年,我们致力于利用前沿技术让银行服务简单、可及和透明。在示例银行,我们相信银行应该是无缝、直观的,并且符合现代消费者的需求。我们的创始人是来自科技和金融行业的资深专业人士,致力于创建一家以人为本的银行,增强客户轻松掌控个人财务的能力。在示例银行,我们设想一个不再把银行视为负担,而是享受的全新世界。我们致力于打破障碍,民主化金融服务的获得。我们的目标是通过提供必要的工具和资源,助力个人和企业在日益数字化的环境中蓬勃发展。我们的价值观: 创新:我们拥抱尖端技术,不断寻求创新解决方案,以提供最佳的银行体验。我们是一家仅在线的银行,因此没有任何实体分支机构。我们所有的服务都通过网络或移动应用提供。这让我们可以降低成本,并将节省转嫁给客户。 透明度:我们致力于直接且诚实地对待客户。我们相信,透明是建立信任的关键,我们希望客户能有信心做出明智的财务决策。为此,我们提供

加速跨账户Amazon RDS的增量快照刷新关键要点使用Amazon RDS的增量快照刷新可以提高跨AWS账户数据传输的效率。该方法通过增量快照的复制减少了时间和成本。具体流程包括快照的设置、共享及复...

提升应用程序的弹性与性能:多可用区 Amazon FSx for OpenZFS作者:Benjamin Hodgens 和 Tom McDonald发布日期:2024年2月5日标签:高级、Amazon...