使用 Amazon Bedrock 运行自定义笔记本进行微调和持续预训练的设置

在这个笔记本中,我们将创建一组角色和一个 S3 存储桶,这些将在本模块的其他笔记本中使用。

这个笔记本应该可以很好地与 Data Science 3.0Python 3ml.c5.2xlarge 内核一起使用

先决条件

自定义作业角色

该笔记本允许我们在 创建 IAM 自定义作业角色 部分创建一个 Bedrock 角色来运行自定义作业,或者我们可以跳过该部分,按照管理自定义作业权限的说明 创建一个 Bedrock 服务角色来进行自定义作业。如果我们想使用现有的自定义作业角色,请编辑变量 customization_role,并确保它可以访问包含数据集的 S3 存储桶。

创建 IAM 先决条件

这个笔记本需要权限来:

  • 创建和删除 Amazon IAM 角色
  • 创建、更新和删除 Amazon S3 存储桶
  • 访问 Amazon Bedrock

如果我们在没有管理员角色的情况下运行这个笔记本,请确保我们的角色包含以下托管策略:

  • IAMFullAccess
  • AmazonS3FullAccess
  • AmazonBedrockFullAccess

我们也可以按照这里 的说明在 Bedrock 控制台中创建一个自定义模型。

设置

安装并导入完成此笔记本所需的所有库和依赖项。

警告: 请忽略与 pip 的依赖解析器相关的错误消息。

测试 boto3 连接

我们将列出基础模型,以测试 bot3 连接并确保 bedrock 客户端已成功创建。

创建 s3 存储桶

在这一步中,我们将创建一个 s3 存储桶,它将用于存储微调和持续预训练笔记本的数据。

创建运行 Amazon Bedrock 自定义作业所需的角色和策略

这个 JSON 对象定义了允许 bedrock 服务假定一个角色的信任关系,该角色将赋予它与其他所需的 AWS 服务对话的能力。设置的条件将角色的假定限制在特定的帐户 ID 和 bedrock 服务的特定组件(model_customization_jobs)上。

这个 JSON 对象定义了我们希望 bedrock 假定的角色的权限,以允许访问我们创建的将保存我们的微调数据集的 S3 存储桶,并允许对某些存储桶和对象进行操作。

设置运行其他笔记本进行微调和持续预训练的准备工作已经完成。

准备 CNN 新闻文章数据集进行微调作业和评估

将使用的数据集是来自 CNN 的新闻文章集合及其相关的亮点。更多信息可以在 huggingface 上找到: https://huggingface.co/datasets/cnn_dailymail

查看数据集的结构

准备微调数据集 在这个例子中,我们使用一个 .jsonl 数据集,遵循示例格式:

{“prompt”: “”, “completion”: “”}

下面是一个问答任务的示例项目:{“prompt”: “prompt is AWS”, “completion”: “it’s Amazon Web Services”}

请参阅有关如何准备我们的 Bedrock 微调数据集 的更多指导。

用于指令微调的常见提示结构包括系统提示、指令和提供附加上下文的输入。这里我们定义了将添加到每篇文章之前的提示头,它们将是每个数据点的"提示"组成部分。

对于"完成"组件,我们将附加单词"response"和新行,并将其与文章的摘要/亮点一起使用。下面的代码执行每个数据点的转换。

一个处理过的数据点的示例可以如下打印。

对验证和测试集也进行了同样的处理。

这里我们定义了一些帮助函数,通过修改我们想要包含在每个集合中的数据点数量和数据点的最大字符串长度来进一步处理我们的数据点。最终的函数将我们的数据集转换为 JSONL 文件。

处理数据分区。每个 LLM 可能有不同的输入令牌限制,特定模型的词汇表定义了什么字符串表示一个令牌。为简单起见,我们将每个数据点限制为 <=3,000 个字符。

创建数据集的本地目录

请注意,我们用于微调的训练数据集不能超过 10K 条记录,验证数据集的最大限制为 1K 条记录。

创建 JSONL 格式的 Bedrock 微调作业数据集

将数据集上传到 s3 存储桶

上传训练和测试数据集。 我们将使用训练和验证数据集来微调模型。测试数据集将用于评估模型在未见过的输入上的性能。

将变量存储以供其他笔记本使用。

请确保为其他微调和持续预训练笔记本使用与 00_setup.ipynb 相同的内核。

现在我们已经准备好使用 Bedrock 创建一个微调作业了!