本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
准备用于蒸馏的训练数据集
在启动模型自定义作业之前,您至少需要准备训练数据集。要为自定义模型准备输入数据集,您需要创建 .jsonl 文件,文件中的每一行都是与记录相对应的 JSON 对象。您创建的文件必须符合您选择的模型蒸馏和模型的格式要求。文件中的记录也必须符合大小要求。
提供输入数据作为提示。Amazon Bedrock 使用输入数据从教师式模型生成响应,然后使用生成的响应来微调学生式模型。要详细了解 Amazon Bedrock 使用的输入以及如何选择最适合您的使用案例的选项,请参阅 Amazon Bedrock 模型蒸馏功能的工作原理。有几个选项可用于准备输入数据集。
注意
Amazon Nova 模型对蒸馏有不同的要求。有关更多信息,请参阅蒸馏 Amazon Nova 模型。
中列出的模型仅Amazon Bedrock 模型蒸馏功能支持的模型和区域支持该 text-to-text模式。
在模型蒸馏期间,Amazon Bedrock 会生成一个合成数据集,用于针对您的特定使用案例微调您的学生式模型。有关更多信息,请参阅 Amazon Bedrock 模型蒸馏功能的工作原理。
您可以针对所需的使用案例为输入提示设置格式,从而优化合成数据生成过程。例如,如果您的已蒸馏模型的使用案例是检索增强生成(RAG),那么您为提示设置的格式将与您希望模型专注于代理使用案例时设置的格式不同。
下面是有关如何针对 RAG 或代理使用案例为输入提示设置格式的示例。
收集您的提示并以 .jsonl 文件格式存储它们。JSONL 中的每条记录都必须使用以下结构。
-
添加必须具有值
bedrock-conversion-2024的字段schemaVersion。 -
[可选] 添加一个系统提示,指示分配给模型的角色。
-
在
messages字段中,添加包含提供给模型的输入提示的用户角色。 -
[可选] 在
messages字段中,添加包含所需响应的助手角色。
Anthropic 和 Meta Llama 模型仅支持单轮对话提示,这意味着您只能有一个用户提示。这些 Amazon Nova 模型支持多轮对话,使您可以在一条记录中提供多个用户和助手之间的交流内容。
示例格式:
{ "schemaVersion": "bedrock-conversation-2024", "system": [{ "text": "A chat between a curious User and an artificial intelligence Bot. The Bot gives helpful, detailed, and polite answers to the User's questions." }], "messages": [{ "role": "user", "content": [{ "text": "why is the sky blue" }] }, { "role": "assistant", "content": [{ "text": "The sky is blue because molecules in the air scatter blue light from the Sun more than other colors." }] } ] }}
验证数据集
在运行蒸馏作业之前,您可以使用 Python 脚本
在创建蒸馏任务时,您可以让 Amazon Bedrock 使用来自 CloudWatch 日志调用日志的现有教师回复作为训练数据。对于 Amazon Bedrock,调用日志是模型调用的详细记录。
要使用调用日志进行模型蒸馏,请将模型调用日志设置为开启,使用其中一个模型调用操作,并确保已将 Amazon S3 存储桶设置为日志的目标。在开始模型蒸馏作业之前,您必须为 Amazon Bedrock 授予访问日志的权限。有关设置调用日志的更多信息,请参阅使用 Ama CloudWatch zon Logs 监控模型调用。
使用此选项时,您可以指定是希望 Amazon Bedrock 仅使用提示还是使用调用日志中的提示-响应对。如果您希望 Amazon Bedrock 仅使用提示,那么 Amazon Bedrock 可能会添加专有数据合成技术,以从教师式模型生成多样化和更优质的响应。如果您希望 Amazon Bedrock 使用提示-响应对,那么 Amazon Bedrock 不会从教师式模型重新生成响应。Amazon Bedrock 将直接使用调用日志中的响应来微调学生式模型。
重要
您最多可以向 Amazon Bedrock 提供 15000 个提示或提示-响应对,用于微调学生式模型。为确保对学生式模型进行微调以满足您的特定需求,我们强烈建议您采取以下措施:
-
如果您希望 Amazon Bedrock 仅使用提示,请确保从所有模型生成了至少 100 个提示-响应对。
-
如果您希望 Amazon Bedrock 使用调用日志中的响应,请确保您的调用日志中至少有 100 个从该模型生成的提示-响应对,而且这些提示-响应对与您选择的教师式模型完全匹配。
您可以选择使用其中一个模型调用操作向调用日志中的提示-响应对添加请求元数据,稍后再使用该元数据来筛选日志。Amazon Bedrock 可以使用筛选后的日志来微调学生式模型。
要使用多个请求元数据筛选日志,请使用单个布尔运算符 AND、OR 或 NOT。您不能合并运算。对于单个请求元数据的筛选,请使用布尔运算符 NOT。
在调用日志中的提示和响应中添加请求元数据以进行模型蒸馏
模型调用日志记录会收集 Amazon Bedrock 中使用的所有调用的调用日志、模型输入数据(提示)和模型输出数据(响应)。如果您已启用日志记录,那么每当您通过任何 Invoke 或 Converse API 操作与 Amazon Bedrock 基础模型交互时,您都可以收集日志。如果您希望 Amazon Bedrock 使用调用日志中的提示和相关响应来微调学生式模型,则必须授予 Amazon Bedrock 访问这些日志的权限。使用模型已经生成的响应可以更快地微调学生式模型。使用调用日志中的响应还可以提高模型蒸馏的成本效益,但是,Amazon Bedrock 的专有数据合成技术未添加,而该技术原本可以提高已蒸馏模型的性能。
利用调用日志,您可以确定您希望 Amazon Bedrock 用于模型蒸馏的提示-响应对。这些提示-响应对可以用于特定使用案例。为了能够确定要用于蒸馏的提示-响应对,在调用模型或使用 Converse API 操作时,您必须向提示-响应对添加请求元数据字符串。请求元数据采用以下格式提供:"。priority" :
"High"
当您继续使用 Invoke 或 Converse API 操作与模型交互时,交互和请求元数据会记录在调用日志中。下面是来自一次 InvokeModel 调用的调用日志的示例,其中展示了请求元数据:
{ "schemaType": "ModelInvocationLog", "schemaVersion": "1.0", "timestamp": "2024-09-11T17:16:18Z", "accountId": "XXXXX", "identity": { "arn": "arn:aws:sts::XXXXXXX:assumed-role/Admin/XXXXXX" }, "region": "us-east-1", "requestId": "7ee514f3-9eff-467c-af75-8fd564ce58e5", "operation": "InvokeModel", "modelId": "meta.llama3-1-405b-instruct-v1:0", "input": { "inputContentType": "application/json", "inputBodyJson": { "prompt": "story of two dogs", "max_tokens_to_sample": 300 }, "inputTokenCount": 13 }, "output": { "outputContentType": "application/json", "outputBodyJson": { "type": "completion", "completion": " Here is a story about two dogs:\n\nRex and Charlie were best friends who lived next door to each other. Every morning, their owners would let them out into the backyard to play. Rex was a golden retriever with long, shaggy fur. He loved to run and chase sticks. Charlie was a corgi with short legs and a big smile. He was happy just sniffing the grass and rolling around. \n\nThe two dogs spent every day playing together. Rex would grab a stick and bring it over to Charlie, wagging his tail excitedly. Charlie would take the other end of the stick in his mouth and they'd have a friendly game of tug-of-war. After tiring themselves out, they'd flop down in the warm sunshine for a nap. \n\nAt lunchtime, their owners would call them in for food. Rex would gobble up his kibble hungrily while Charlie ate his at a more leisurely pace. After lunch, it was right back outside for more playtime. The afternoon sunbeams would light up their fur as they chased each other around the yard. \n\nWhen it started getting late, their owners called them in for the night. Rex and Charlie would head inside, tired but happy after another fun day of play. After slurping up fresh water from their bowls, they'd curl up on their beds, Rex's fluffy golden tail tucked over his nose and little", "stop_reason": "max_tokens", "stop": null }, "outputTokenCount": 300 }, "requestMetadata": { "project": "CustomerService", "intent": "ComplaintResolution", "priority": "High" } }
启动模型蒸馏作业时,您可以将调用日志指定为输入数据来源。您可以使用 API 或 AWS SDK 在 Amazon Bedrock 控制台中启动模型蒸馏作业。 AWS CLI
提供请求元数据的要求
请求元数据必须满足以下要求:
-
以 JSON
key:value格式提供。 -
键值对必须是长度不超过 256 个字符的字符串。
-
最多提供 16 个键值对。
使用请求元数据筛选条件
您可以将筛选条件应用于元数据,以便有选择地决定要在蒸馏中包含哪些提示-响应对用于微调学生式模型。例如,您可能只想包含那些带有 “project”: “CustomerService” 和 “优先级”: “高” 请求元数据的请求。
要使用多个请求元数据筛选日志,请使用单个布尔运算符 AND、OR 或 NOT。您不能合并运算。对于单个请求元数据的筛选,请使用布尔运算符 NOT。
启动模型蒸馏作业时,您可以指定调用日志作为输入数据来源,并可以指定使用哪些筛选条件来选择提示-响应对。您可以使用 API 或 AWS SDK 在 Amazon Bedrock 控制台中启动模型蒸馏作业。 AWS CLI有关更多信息,请参阅 在 Amazon Bedrock 中提交模型蒸馏作业。
验证数据集
在运行蒸馏作业之前,您可以使用 Python 脚本