使用提示指令微调大型语言模型 (LLM) - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用提示指令微调大型语言模型 (LLM)

基于指令的微调使用已标注的样本,提高预训练基础模型在特定任务上的性能。已标注样本采用提示和响应对的格式,可解析为指令。这个微调过程修改模型的权重。有关基于指令的微调的更多信息,请参阅论文简介FLAN:具有指令微调和缩放指令的更具通用性的语言模型-Finetun ed 语言模型。

经过微调的 LAnguage Net (FLAN) 模型使用指令调整来使模型更适合解决一般的下游NLP任务。Amazon 在模型系列中 SageMaker JumpStart 提供了许多基础FLAN模型。例如,FLAN-T5 模型针对各种任务进行了指令微调,以提高各种常见用例的零风险性能。通过额外的数据和微调,基于指令的模型可以针对在预训练期间未考虑过的更具体的任务进一步进行调整。

要使用提示-响应对任务LLM说明对特定任务进行微调,请执行以下操作:

  1. 在JSON文件中准备您的指令。有关提示-响应对文件所需格式和数据文件夹结构的更多信息,请参阅。准备并上传训练数据以进行基于指令的微调

  2. 创建您的微调训练作业。有关说明,请参阅 创建训练作业以进行基于指令的微调

你可以在中找到 end-to-end示例示例笔记本

只有一部分 JumpStart 基础模型与基于指令的微调兼容。基于指令的微调适用于以下基础模型:

注意

一些 JumpStart 基础模型,例如 Llama 2 7B,要求在微调和执行推理之前接受最终用户许可协议。有关更多信息,请参阅 最终用户许可协议

  • Flan-T5 Base

  • Flan-T5 大号

  • Flan-T5 小号

  • Flan-T5 XL

  • Flan-T5 XXL

  • Llama 2 13B

  • Llama 2 13B 聊天

  • Llama 2 13B Neuron

  • Llama 2 70B

  • Llama 2 70B 聊天

  • Llama 2 7B

  • Llama 2 7B Chat

  • Llama 2 7B Neuron

  • Mistral 7B

  • RedPajama INCITEBase 3B V1

  • RedPajama INCITEBase 7B V1

  • RedPajama INCITE聊天室 3B V1

  • RedPajama INCITEChat 7B V1

  • RedPajama INCITEInstruct 3B V1

  • RedPajama INCITEInstruct 7B V1

准备并上传训练数据以进行基于指令的微调

基于指令的微调的训练数据必须以 Lin JSON es 文本文件格式提供,其中每行都是一本字典。所有训练数据必须放在一个文件夹中。该文件夹可以包含多个.jsonl 文件。

培训文件夹还可以包含一个模板JSON文件 (template.json),用于描述数据的输入和输出格式。如果未提供模板文件,则使用以下模板文件:

{ "prompt": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{context}", "completion": "{response}" }

根据该template.json文件,训练数据的每个.jsonl 条目都必须包含{instruction}{context}、和字段。{response}

如果您提供自定义模板JSON文件,请使用"prompt""completion"键定义自己的必填字段。根据以下自定义模板JSON文件,训练数据的每个.jsonl 条目都必须包含{question}{context}、和字段:{answer}

{ "prompt": "question: {question} context: {context}", "completion": "{answer}" }

拆分数据用于训练和测试

您可以选择提供另一个包含验证数据的文件夹。此文件夹还应包含一个或多个.jsonl 文件。如果未提供验证数据集,则会预留一定数量的训练数据用于验证目的。在选择用于微调模型的超参数时,可以调整用于验证的训练数据的百分比。

将微调数据上传到 Amazon S3

将准备好的数据上传到亚马逊简单存储服务 (Amazon S3),以便在微调 JumpStart 基础模型时使用。您可以使用以下命令上传数据:

from sagemaker.s3 import S3Uploader import sagemaker import random output_bucket = sagemaker.Session().default_bucket() local_data_file = "train.jsonl" train_data_location = f"s3://{output_bucket}/dolly_dataset" S3Uploader.upload(local_data_file, train_data_location) S3Uploader.upload("template.json", train_data_location) print(f"Training data: {train_data_location}")

创建训练作业以进行基于指令的微调

将数据上传到 Amazon S3 后,您可以微调和部署 JumpStart 基础模型。要在 Studio 中微调您的模型,请参阅在 Studio 中微调模型。要使用微调模型 SageMaker Python SDK,请参阅与课堂一起微调公开可用的基础模型 JumpStartEstimator

示例笔记本

有关基于指令的微调的更多信息,请参阅以下示例 notebook: