通过 Terraform 为 Amazon Bedrock 的自定义模型创建和部署简化配置吞吐量 机

使用 Terraform 简化 Amazon Bedrock 自定义模型的创建与部署

作者 Josh Famestad Tyler Lynch 和 Kevon Mayers 2024年6月4日发表于 Amazon Bedrock,人工智能,AWS SDK for Python,生成式 BI,技术操作指南

主要要点

本文讨论如何使用基础设施即代码IaC方案,通过 Terraform 自动化创建和部署 Amazon Bedrock 自定义模型的过程。Amazon Bedrock 允许用户通过细调和持续预训练来个性化基础模型,从而满足特定的业务需求。将本指南中的步骤应用于自定义模型创建,您将能生成可复用和可版本控制的模型训练流程。

客户们在将其知识库整合入生成式人工智能AI应用时,数据科学团队往往想进行 A/B 测试并进行可重复的实验。本文将讨论一种解决方案,使用基础设施即代码IaC来定义检索和格式化数据以进行模型定制的过程,并启动模型定制。这使得版本管理和迭代变得更加方便。

通过 Amazon Bedrock,您可以安全地使用自己的数据自定义基础模型FMs,以创建适合您领域、组织和用例的应用程序。使用 自定义模型,您可以创造独特的用户体验,反映公司的风格、声音和服务。

模型定制方法

Amazon Bedrock 支持两种模型定制方法:

细调允许您通过提供特定任务的标注训练数据集来提高模型准确性,从而进一步专业化您的基础模型。持续预训练允许您在安全的管理环境中使用未标注的数据训练模型,并支持客户管理的密钥。持续预训练有助于模型积累更强的知识和适应能力,从而更加特定于领域。

本文将指导您如何使用 HashiCorp Terraform 创建 Amazon Bedrock 自定义模型,从而自动化定制数据集的准备过程。

解决方案概述

我们使用 Terraform 从 Hugging Face Hub 下载一个公开数据集,将其转换为 JSONL 格式,并上传到具有版本前缀的 Amazon 简单存储服务 桶中。然后,我们创建一个使用细调的 Amazon Bedrock 自定义模型,并创建一个使用持续预训练的第二个模型。最后,我们为新模型配置 预置吞吐量,以便我们能测试并广泛部署这些自定义模型。

通过 Terraform 为 Amazon Bedrock 的自定义模型创建和部署简化配置吞吐量 机

以下图表展示了解决方案架构:

工作流程步骤

工作流程包括以下步骤:

用户运行 terraform apply。Terraform 的 localexec 配置器用于运行一个 Python 脚本,从 Hugging Face Hub 下载公共数据集 DialogSum。该数据集用于创建细调训练的 JSONL 文件。一个 S3 桶用于存储训练、验证和输出数据。生成的 JSONL 文件将上传到 S3 桶。Terraform 配置中定义的基础模型用于创建自定义模型训练作业。自定义模型训练作业使用存储在 S3 桶中的细调训练数据来丰富基础模型。由于在 Terraform 配置中定义的 AWS 身份和访问管理IAM角色授予了对 S3 桶的访问权限,因此 Amazon Bedrock 能够访问桶中的数据。自定义模型训练作业完成后,新模型可供使用。

要实现该解决方案的高层次步骤如下:

创建并初始化一个 Terraform 项目。创建用于上下文查找的数据源。创建一个 S3 桶用于存储训练、验证和输出数据。创建一个 IAM 服务角色,允许 Amazon Bedrock 运行模型定制作业,访问您的训练和验证数据,并将输出数据写入 S3 桶。配置本地 Python 虚拟环境。下载 DialogSum 公开数据集并转换为 JSONL 格式。将转换后的数据集上传至 Amazon S3。使用细调创建 Amazon Bedrock 自定义模型。为您的模型配置自定义模型预置吞吐量。

前提条件

该方案需要满足以下前提条件:

一个 AWS 账户。如果尚未拥有,请 注册。访问 IAM 用户或角色,具备创建 自定义服务角色、创建 S3 桶、向该 S3 桶上传对象以及创建 Amazon Bedrock 模型定制作业所需的权限。配置 模型访问,以便使用 Cohere CommandLight 模型如果您打算使用该模型。安装 Terraform v100 或更高版本。安装 Python v38 或更高版本。

创建并初始化 Terraform 项目

完成以下步骤创建并初始化 Terraform 项目。您可以在选择的本地文件夹中进行操作。

在首选终端中创建一个名为 bedrockcm 的新文件夹并切换至该文件夹:

如果在 Windows 中使用如下代码: bash md bedrockcm cd bedrockcm

如果在 Mac 或 Linux 中使用如下代码: bash mkdir bedrockcm cd bedrockcm

现在您可以在文本编辑器中输入代码。

在首选文本编辑器中,新增一个文件并添加如下 Terraform 代码: hcl terraform { requiredversion = gt= 100 requiredproviders { aws = { source = hashicorp/aws version = gt= 5350 } } }

将文件保存至 bedrockcm 文件夹根目录,命名为 maintf。

在终端中运行以下命令以初始化 Terraform 工作目录: bash terraform init 输出将包含一个成功的信息,例如: “Terraform 已成功初始化”

在终端中 验证 Terraform 文件的语法: bash terraform validate

接下来的步骤将指导您创建数据源、S3 桶、IAM 服务角色等。

(以下内容继续保持原文格式,针对内容进行简体中文重写,适当延长文本,以保持原文长度)

数据源创建

接下来,添加配置以定义 数据源,获取 Terraform 当前操作的上下文信息。这些数据源在定义 IAM 角色和策略以及创建 S3 桶时会用到。有关更多信息,请查阅 Terraform 文档关于 awscalleridentity,awspartition,以及 awsregion 的说明。

在文本编辑器中,将以下 Terraform 代码添加到 maintf 文件中: hcl # 数据源用于查询当前上下文 data awscalleridentity current {} data awspartition current {} data awsregion current {}

保存文件。

创建 S3 桶

在这一步中,您将使用 Terraform 创建一个 S3 桶,以便在模型定制及相关输出过程中使用。S3 桶名称在全球范围内唯一,因此您可以使用 Terraform 数据源 awscalleridentity 来查找当前 AWS 账户的 ID,并使用字符串拼接将其包含在桶名称中。完成以下步骤:

魔方加速器(免费版)

向 maintf 文件中添加以下 Terraform 代码: hcl # 创建一个 S3 桶 resource awss3bucket modeltraining { bucket = modeltraining{dataawscalleridentitycurrentaccountid} }

保存文件。

创建 Amazon Bedrock 的 IAM 服务角色

接下来,您需要创建 Amazon Bedrock 将用于操作模型定制作业的服务角色。

您首先需要创建一个策略文档,即 assumerolepolicy,该文档定义了 IAM 角色的信任关系。此策略允许 bedrockamazonawscom 服务假设该角色。您将使用 全局条件上下文键 来防止 跨服务混淆。同时,您还需要指定两个条件:源账户必须与当前账户匹配,源 ARN 必须为当前分区、AWS 区域和当前账户中运行的 Amazon Bedrock 模型定制作业。

完成以下步骤:

向 maintf 文件中添加以下 Terraform 代码: hcl # 创建一个策略文档以允许 Bedrock 假设角色 data awsiampolicydocument assumerolepolicy { statement { actions = [stsAssumeRole] effect = Allow principals { type = Service identifiers = [bedrockamazonawscom] } condition { test = StringEquals variable = awsSourceAccount values = [dataawscalleridentitycurrentaccountid] } condition { test = ArnEquals variable = awsSourceArn values = [arn{dataawspartitioncurrentpartition}bedrock{dataawsregioncurrentname}{dataawscalleridentitycurrentaccountid}modelcustomizationjob/] } } }

第二个策略文档 bedrockcustompolicy 定义了访问您为模型训练、验证和输出创建的 S3 桶的权限。该策略允许对指定资源执行 GetObject、PutObject 和 ListBucket 操作,这些资源包括 modeltraining S3 桶和其所有内容。之后,您将创建一个 awsiampolicy 资源,在 AWS 中创建该策略。

向 maintf 文件中添加以下 Terraform 代码: hcl # 创建一个策略文档以允许 Bedrock 访问 S3 桶 data awsiampolicydocument bedrockcustompolicy { statement { sid = AllowS3Access actions = [s3GetObject s3PutObject s3ListBucket] resources = [awss3bucketmodeltrainingarn {awss3bucketmodeltrainingarn}/] } }

resource awsiampolicy bedrockcustompolicy { nameprefix = BedrockCM description = Policy for Bedrock Custom Models customization jobs policy = dataawsiampolicydocumentbedrockcustompolicyjson }

最后,awsiamrole 资源 bedrockcustomrole 创建一个子名为 BedrockCM 的 IAM 角色,并且角色描述。该角色使用 assumerolepolicy 作为其信任策略,使用 bedrockcustompolicy 作为管理策略以允许指定的操作。

向 maintf 文件中添加以下 Terraform 代码: hcl # 创建一个 Bedrock 假设的角色 resource awsiamrole bedrockcustomrole { nameprefix = BedrockCM description = Role for Bedrock Custom Models customization jobs

assumerolepolicy = dataawsiampolicydocumentassumerolepolicyjson managedpolicyarns = [awsiampolicybedrockcustompolicyarn] }

保存文件。

配置本地 Python 虚拟环境

Python 支持 创建轻量级虚拟环境,每个环境都有自己独立安装的 Python 包。您可以创建并激活一个虚拟环境,然后安装 [datasets](https//pypiorg/project/datasets/) 包。

在终端中,在 bedrockcm 文件夹根目录运行以下命令以 创建虚拟环境: bash python3 m venv venv

激活虚拟环境:

如果在 Windows 上,可以使用以下命令: bash venvScriptsactivate如果在 Mac 或 Linux 上,可以使用以下命令: bash source venv/bin/activate

现在您可以通过 pip 安装 datasets 包。

在终端中运行以下命令以安装 datasets 包: bash pip3 install datasets

下载公开数据集

现在,您将利用 Terraform 的 localexec provisioner 来调用一个本地 Python 脚本,该脚本从 Hugging Face Hub 下载公共数据集 DialogSum。该数据集已经分为训练、验证和测试的拆分,示例中使用的是训练拆分。

您可以通过删除 id 和 topic 列、重命名 dialogue 和 summary 列,并将数据集截断为 10000 条记录来 准备训练数据。之后,将数据集保存为 JSONL 格式。您也可以使用您自己内部的私有数据集;我们在此使用公开数据集作为示例。

首先,创建一个本地 Python 脚本,命名为 dialogsumdatasetfinetunepy,该脚本用于下载数据集并将其保存到磁盘。

在文本编辑器中添加一个新文件,并输入以下 Python 代码: python import pandas as pd from datasets import loaddataset

# 从 Hugging Face Hub 加载数据集 dataset = loaddataset(knkarthick/dialogsum)

# 转换数据集为 pandas DataFrame dft = dataset[train]topandas()

# 删除不需要的细调列 dft = dftdrop(columns=[id topic])

# 根据细调要求重命名列 dft = dftrename(columns={dialogue prompt summary completion})

# 限制行数至 10000 行以用于细调 dft = dftsample(10000 randomstate=42)

# 将 DataFrame 保存为 JSONL 文件,每行一个 JSON 对象 dfttojson(dialogsumtrainfinetunejsonl orient=records lines=True)

将文件保存至 bedrockcm 文件夹根目录,命名为 dialogsumdatasetfinetunepy。

接下来,编辑您一直在处理的 maintf 文件,并添加 terraformdata 资源类型,使用本地 provisioner 调用您的 Python 脚本。

在文本编辑器中编辑 maintf 文件,并添加以下 Terraform 代码: hcl resource terraformdata trainingdatafinetunev1 { input = dialogsumtrainfinetunejsonl

provisioner localexec { command = python dialogsumdatasetfinetunepy } }

上传转换后的数据集到 Amazon S3

Terraform 提供了 awss3object [资源类型](https//registryterraformio/providers/hashicorp/aws/latest/docs/resources/s3object

开启您的云财务管理之旅:成本节省 云财务管理

开启您的云财务管理之旅:成本节省 云财务管理

开始您的云端财务管理之旅:节省成本关键要点在本文中,我们将探讨如何透过有效的云端财务管理来实现成本节省。我们将分享许多工具和定价模型,帮助您识别优化开支的机会。在开始云端财务管理(CFM)计划时,从零...

订阅