亚马逊AWS官方博客
通过微调和持续预训练,使用您自己的数据在 Amazon Bedrock 中自定义模型
今天,我很高兴地与大家分享,您现在可以在 Amazon Bedrock 中使用自己的数据以私有和安全的方式自定义基础模型(FM),构建特定于您的域、组织和用例的应用程序。借助自定义模型,您可以创建反映公司风格、声音和服务的独特用户体验。
借助微调,您可以提供自己的任务特定标记训练数据集,来提高模型的准确性,并进一步实现 FM 的专业化。借助持续预训练,您可以在安全的托管环境中利用客户管理的密钥,以使用未标记的数据训练模型。持续预训练通过在原始训练之外积累更强大的知识和适应性,从而使模型更加针对特定的域。
下面我快速介绍一下这两个模型自定义选项。您可以使用 Amazon Bedrock 控制台或 API 创建微调和持续预训练作业。在控制台中,导航到 Amazon Bedrock,然后选择自定义模型。
微调 Meta Llama 2、Cohere Command Light 和 Amazon Titan FM
Amazon Bedrock 现在支持对 Meta Llama 2、Cohere Command Light 以及 Amazon Titan 模型进行微调。要在控制台中创建微调作业,请选择自定义模型,然后选择创建微调作业。
下面是使用适用于 Python 的 Amazon SDK(Boto3)的快速演示。让我们对 Cohere Command Light 进行微调,以总结对话。出于演示目的,我使用的是公共 dialogsum 数据集,但也可以使用您公司的特定数据。
为了准备在 Amazon Bedrock 上进行微调,我将数据集转换为 JSON Lines 格式,并将其上传到 Amazon S3。每行 JSON 都要有一个提示和完成字段。您最多可以指定 1 万条训练数据记录,但只需几百个示例,您就可以看到模型性能的提升。
{"completion": "Mr. Smith's getting a check-up, and Doctor Haw...", "prompt": Summarize the following conversation.\n\n#Pers..."}
{"completion": "Mrs Parker takes Ricky for his vaccines.Dr.P...", "prompt": "Summarize the following conversation.\n\n#Pers..."}
{"completion": "#Person1#'s looking for a set of keys and asks...", "prompt": "Summarize the following conversation.\n\n#Pers..."}
为了简洁起见,我编辑了提示和完成字段。
您可以使用以下命令列出支持微调的可用基础模型:
import boto3
bedrock = boto3.client(service_name="bedrock")
bedrock_runtime = boto3.client(service_name="bedrock-runtime")
for model in bedrock.list_foundation_models(
byCustomizationType="FINE_TUNING")["modelSummaries"]:
for key, value in model.items():
print(key, ":", value)
print("-----\n")
接下来,我将创建一个模型自定义作业。我指定了支持微调的 Cohere Command Light 模型 ID,将自定义类型设置为 FINE_TUNING
,并指向训练数据的 Amazon S3 位置。如果需要,您还可以调整超参数以进行微调。
# Select the foundation model you want to customize
base_model_id = "cohere.command-light-text-v14:7:4k"
bedrock.create_model_customization_job(
customizationType="FINE_TUNING",
jobName=job_name,
customModelName=model_name,
roleArn=role,
baseModelIdentifier=base_model_id,
hyperParameters = {
"epochCount": "1",
"batchSize": "8",
"learningRate": "0.00001",
},
trainingDataConfig={"s3Uri": "s3://path/to/train-summarization.jsonl"},
outputDataConfig={"s3Uri": "s3://path/to/output"},
)
# Check for the job status
status = bedrock.get_model_customization_job(jobIdentifier=job_name)["status"]
作业完成后,您将收到自定义模型的唯一模型 ID。您的微调模型由 Amazon Bedrock 安全存储。要测试和部署模型,您需要购买预置吞吐量。
我们来看看结果。我从数据集中选择一个示例,在微调之前询问基础模型,在微调之后询问自定义模型,总结出以下对话:
prompt = """Summarize the following conversation.\\n\\n
#Person1#: Hello.My name is John Sandals, and I've got a reservation.\\n
#Person2#: May I see some identification, sir, please?\\n
#Person1#: Sure.Here you are.\\n
#Person2#: Thank you so much.Have you got a credit card, Mr. Sandals?\\n
#Person1#: I sure do.How about American Express?\\n
#Person2#: Unfortunately, at the present time we take only MasterCard or VISA.\\n
#Person1#: No American Express? Okay, here's my VISA.\\n
#Person2#: Thank you, sir.You'll be in room 507, nonsmoking, with a queen-size bed.Do you approve, sir?\\n
#Person1#: Yeah, that'll be fine.\\n
#Person2#: That's great.This is your key, sir.If you need anything at all, anytime, just dial zero.\\n\\n
Summary: """
使用 Amazon Bedrock InvokeModel API 查询模型。
body = {
"prompt": prompt,
"temperature": 0.5,
"p": 0.9,
"max_tokens": 512,
}
response = bedrock_runtime.invoke_model(
# Use on-demand inference model ID for response before fine-tuning
# modelId="cohere.command-light-text-v14",
# Use ARN of your deployed custom model for response after fine-tuning
modelId=provisioned_custom_model_arn,
modelId=base_model_id,
body=json.dumps(body)
)
以下是微调之前的基础模型响应:
#Person2# 帮助 John Sandals 预订房间。John 提供了他的信用卡信息,#Person2# 确认他们只接受 MasterCard 和 VISA。John 将住在 507 房间,如果他需要任何东西,#Person2# 会接待他。
以下是微调之后的响应,更为简短,切中要点:
John Sandals 已预订并入住酒店。#Person2# 拿走他的信用卡,然后给他一把钥匙。
Amazon Titan Text 的持续预训练(预览版)
Amazon Bedrock 上的持续预训练已于今日在 Amazon Titan Text 模型(包括 Titan Text Express 和 Titan Text Lite)的公开预览版中推出。要在控制台中创建持续预训练作业,请选择自定义模型,然后选择创建持续预训练作业。
下面是另一个使用 boto3 的快速演示。假设您在一家投资公司工作,希望使用财务和分析报告对模型进行持续预训练,使其更加熟悉金融行业术语。出于演示目的,我选择了一批 Amazon 股东信件作为训练数据。
为了准备持续预训练,我再次将数据集转换为 JSON Lines 格式,并将其上传到 Amazon S3。因为我处理的是未标记数据,所以每行 JSON 只需要有提示字段。您最多可以指定 10 万条训练数据记录,通常在提供至少 10 亿个令牌后会看到积极的效果。
{"input": "Dear shareholders: As I sit down to..."}
{"input": "Over the last several months, we to..."}
{"input": "work came from optimizing the conne..."}
{"input": "of the Amazon shopping experience f..."}
为了简洁起见,我编辑了输入字段。
然后,创建一个指向数据的模型自定义作业,其自定义类型为 CONTINUED_PRE_TRAINING
。如果需要,您还可以调整超参数以进行持续预训练。
# Select the foundation model you want to customize
base_model_id = "amazon.titan-text-express-v1"
bedrock.create_model_customization_job(
customizationType="CONTINUED_PRE_TRAINING",
jobName=job_name,
customModelName=model_name,
roleArn=role,
baseModelIdentifier=base_model_id,
hyperParameters = {
"epochCount": "10",
"batchSize": "8",
"learningRate": "0.00001",
},
trainingDataConfig={"s3Uri": "s3://path/to/train-continued-pretraining.jsonl"},
outputDataConfig={"s3Uri": "s3://path/to/output"},
)
作业完成后,您将收到另一个唯一模型 ID。Amazon Bedrock 会再次安全存储您的自定义模型。与微调一样,您需要购买预置吞吐量来测试和部署模型。
注意事项
这里需要牢记以下几点:
数据隐私和网络安全 – 借助 Amazon Bedrock,您可以控制自己的数据,并且您的所有输入和自定义内容都是 AWS 账户私有的。您的数据(比如提示、完成情况、自定义模型以及用于微调或持续预训练的数据)不会用于改进服务,也不会与第三方模型提供商共享。您的数据将保留在处理 API 调用的 AWS 区域。所有数据在传输中和静态时都会加密。您可以使用 AWS PrivateLink 在您的 VPC 和 Amazon Bedrock 之间创建私有连接。
账单 – Amazon Bedrock 对模型自定义、存储和推理收取费用。模型自定义按处理的令牌收费。即训练数据集中的令牌数乘以训练纪元数。纪元是自定义期间对训练数据的一次完整遍历。模型存储按模型按月收费。按小时对使用预置吞吐量的模型单位收取推理费。有关详细定价信息,请参阅 Amazon Bedrock 定价。
自定义模型和预置吞吐量 – Amazon Bedrock 允许您通过购买预置吞吐量对自定义模型进行推理。这保证了一致的吞吐量水平,以换取长期承诺。您可以指定满足应用程序性能需求所需的模型单位数。对于最初评估自定义模型,您可以按小时购买预置吞吐量,无需长期承诺。在没有承诺的情况下,每个预置吞吐量有一个模型单位的配额。每个账户最多可以创建两个预置吞吐量。
可用性
现已在美国东部(弗吉尼亚州北部)和美国西部(俄勒冈州)的 AWS 区域推出对 Meta Llama 2、Cohere Command Light 和 Amazon Titan Text FM 的微调支持。持续预训练现已在如下 AWS 区域推出公开预览版:美国东部(弗吉尼亚州北部)和美国西部(俄勒冈州)。要了解更多信息,请访问 Amazon Bedrock 开发人员体验网页并查看用户指南。
— Antje
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。