diff --git a/README.md b/README.md index e3973bb5fb4081e4fd8ddebd003ee0615b90cd29..d9706bb8dd442f594304c098bea5e6ee3f131e68 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,12 @@ $ yarn ``` +### 添加 env 文件 + +``` +$ cp .env.example .env +``` + ### 开发 ``` diff --git a/docs/getting-started/intro.md b/docs/getting-started/intro.md index 81ce7001eb98ddb5ecf92d80a73ea42396ba0a2a..14c3012194ad7c750cf6600a827b8485120c6511 100644 --- a/docs/getting-started/intro.md +++ b/docs/getting-started/intro.md @@ -39,6 +39,6 @@ API 为开发者提供一个便捷的方式来调用不同种类的模型,无 我们正在打造一个全新的应用平台,通过我们的 SDK 和 API 服务,快速让您的应用接入 AI 能力以及支付、订阅套餐等能力。平台将为您提供运营、数据分析等能力,帮助您更好地运营推广您的应用,查看[如何成为首批内测用户](/docs/getting-started/enroll-as-an-app-developer)。 -### 模型微调(内测) +### 模型微调 -模型微调支持文生图(已上线)和大语言模型(即将上线),您可以上传自己的数据集,进行微调,并生成新的 LoRA 模型。LoRA 模型将保存在您的模型仓库中,您可以在 Serverless API 中动态加载微调后的 LoRA 模型。想了解更多,请查看[模型微调使用指南](/docs/training/guide)。 +模型微调支持文生图和大语言模型,您可以上传自己的数据集,进行微调,并生成新的 LoRA 模型。LoRA 模型将保存在您的模型仓库中,您可以在 Serverless API 中动态加载微调后的 LoRA 模型。想了解更多,请查看[模型微调使用指南](/docs/training)。 diff --git a/docs/training.md b/docs/training.md index 65a701f3af7c7c2fb6463618b1f8217c889a8602..b0236bea151750035ab52c04ceeeb875a27a111e 100644 --- a/docs/training.md +++ b/docs/training.md @@ -6,8 +6,13 @@ GiteeAI支持开箱即用的微调功能。具体支持的微调功能有: -- 图片生成类: SDXL (FLUX 正在开发中) -- 大预言模型(规划中) +- 文生图模型: SDXL (FLUX 正在开发中) + [上手指南](/training/image-generate) +- 大语言模型:Qwen2.5 -请点击 [上手指南](/training/guide) 查看详细的使用说明。 +:::tip +模型微调功能现已上线,欢迎扫描下方二维码加入微调交流群了解最新动态 + +![](/img/training/guide/contact-qrcode-wx-group.png) +::: diff --git a/docs/training/guide.md b/docs/training/image-generate.md similarity index 95% rename from docs/training/guide.md rename to docs/training/image-generate.md index 201944a694e5bfc56795312be8e7d07aa2227cd5..0a2eceffe314ac8e7fcb137d87ded8cc019a9284 100644 --- a/docs/training/guide.md +++ b/docs/training/image-generate.md @@ -1,13 +1,8 @@ -# 使用指南 +# 文生图模型微调 ## 概述 图像大模型本身已经学到非常多通用的艺术风格和物体,但是它没法理解某个具体的人、具体的事物是什么样子的。通过微调,我们可以教会大模型画出你身边某个具体的人或事物。 本文将通过 5 张特定狗狗照片的数据集,通过 GiteeAI 开箱即用的模型微调功能。让大模型 “记住” 特定狗狗的特征。 -:::tip -模型微调功能现已上线,欢迎扫描下方二维码加入微调交流群了解最新动态 - -![](/img/training/guide/contact-qrcode-wx-group.png) -::: ## 步骤一:创建微调任务 在 GiteeAI 控制台的左边侧边栏找到`模型微调`。点击右上角 `新建任务`,填写任务名称,点击`创建任务`。 diff --git a/docs/training/step-by-step-llm-train.md b/docs/training/step-by-step-llm-train.md new file mode 100644 index 0000000000000000000000000000000000000000..f5e214f6401712d1e814daea437d414dbbb400f7 --- /dev/null +++ b/docs/training/step-by-step-llm-train.md @@ -0,0 +1 @@ +# 手把手教你微调一个会思考的模型 diff --git a/docs/training/text-generate.md b/docs/training/text-generate.md new file mode 100644 index 0000000000000000000000000000000000000000..508f52a7067ad110de6b64285f669e1b00b6ac4b --- /dev/null +++ b/docs/training/text-generate.md @@ -0,0 +1,125 @@ +# 大语言模型微调 + +## 模型类别 + +我们目前支持Qwen2.5系列的多个纯文本对话类的模型微调,后续会支持更多模型。 + +## 数据集准备 + +### 数据集类型 + +对于纯文本类数据集,我们目前支持 OpenAI 的 messages 对话格式的类型,后续将支持更多类型。一轮对话典型的数据集格式如下所示: + +```json +{ + "messages": [ + { + "role": "system", + "content": "系统提示词(选填)" + }, + { + "role": "user", + "content": "用户的问题内容" + }, + { + "role": "assistant", + "content": "语言模型的回答内容" + } + ] + } +``` + +* 一轮对话的数据由一条 `messages`的 `json`数据组成,包含三种角色:`system `、`user `、`assistant`,而 `content`包含该角色的会话内容。 +* `system`表示“系统提示词”,一轮对话只能有一条且必须是第一个,它是一个指令权重很高的内容,用于初步规范模型的通用行为。 +* `user`和 `assistant`分别表示“用户提示词”和“模型回复”。模型在训练中要根据会话记录学习 `assistant`的内容,因此数据集中要**至少包含一对 user 和 assistant 的问答对**。 +* 会话不限长度,`user`和 `assistant`的会话内容可以不止一条。 + +### 数据集保存类型 + +我们目前仅支持 `jsonl`的保存格式,文件内容由多行 message 的对话数据组成,内容示例如下: + +```json lines +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "什么是大语言模型?"}, {"role": "assistant", "content": "大语言模型(Large Language Model,简称LLM)是指使用大量文本数据训练的深度学习模型,能够生成自然语言文本或理解语言文本的含义,是自然语言处理领域的重要工具,可以处理多种自然语言任务"}]} +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "请你证明费马大定理"}, {"role": "assistant", "content": "由于费马大定理的证明非常复杂且涉及高级的数学概念,我无法在这里给出一个完整的证明过程。"}]} +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "热胀冷缩是什么导致的?"}, {"role": "assistant", "content": "热胀冷缩现象是物质的一种基本性质,其主要原因与物质内部的微观结构以及粒子间的相互作用有关。"}, {"role": "user", "content": "感谢你的回答!"}, {"role": "assistant", "content": "不用谢,很高兴可以帮到你,还有什么其他问题吗?"}]} +``` + +同时,您可以通过[此处](/files/training/example.jsonl)下载该文件用于参考。 + +## 模型微调 + +### 微调种类简介 + +#### SFT (监督微调) + +监督微调(SFT)通过一个包含明确问题和答案的规范数据集继续训练一个已有的模型,使得最终训练好的模型生成的内容尽可能与数据集中相似。应用SFT微调的可能场景有: + +- 提升模型在特定领域或场景的能力:原预训练模型的问答效果在特定场景或任务中较差,通过拿这些领域或场景的数据内容训练,模型可以学习这些场景下的回复内容、格式、语气等,以提升相应的能力。 +- 有限数据的训练:SFT微调不要求预训练那样巨量的数据,仅需很少且质量很高的数据,就可以以更低成本的让模型实现回复预期内容。 +- 知识蒸馏:往往在行业中,仅需使用模型某项很强的能力,但该模型又因为尺寸很大导致使用成本过高。通过使用该模型生成的数据继续训练一个成本更低的且可以达到预期效果的模型部署,可以显著降低在指定项目的使用成本。 + +### 进入训练界面 + +首先在我们的模型广场主页中,点击“工作台”进入到个人主页,如下图所示: + +![模型广场页面](/img/training/guide-llm/first-in-index.png) + +进入到个人主页后,点击左边栏中的“模型微调”即可进入到个人微调总览界面。如下图所示: + +![左边栏](/img/training/guide-llm/fist-go-to-finetune.png) + +在个人微调总览的右上角,点击“新建任务”,即可新建一个微调任务。如下图所示: + +![个人微调总览](/img/training/guide-llm/fist-great-task.png) + +微调任务选项的界面如下图所示。首先为新任务取一个响亮的名字,然后选择“文本生成”,接下来做“算力选择”,最后点击“创建任务”后,就可以愉快的开始训练之旅了~ + +![微调任务配置](/img/training/guide-llm/fist-setup-task.png) + +### 配置训练参数 + +在训练任务开始前,您需要配置一些参数,界面如下图所示。首先选择要使用的“微调方式”和“基础模型”。然后训练设置中可以根据说明理解调节训练参数,点击“更多设置”可以配置更高级的参数。 + +![训练参数配置](/img/training/guide-llm/second-train-set.png) + +最后是上传文件了,若数据集检测成功,则开始训练按钮点亮,点击即可开始训练模型,如下图所示: + +![数据集检查](/img/training/guide-llm/second-upload-dataset-check.png) + +![数据集上传成功](/img/training/guide-llm/second-upload-dataset-success.png) + +点击“开始训练”后需要提交订单并付款,成功后点击查看资源,如下图所示: + +![付款成功](/img/training/guide-llm/second-bill-out.png) + +之后就可以在训练页面看到自己的训练进度和结果了~ + +### 训练与保存 + +刚进入到训练页面时,须排队请求GPU资源,训练初始化成功后如下图所示,表示已经开始训练了。 + +![开始训练的状态](/img/training/guide-llm/third-train-begin.png) + +您可以在此处看到训练进度、时间等 LoRA 信息,一个完整的训练结束的 LoRA 如下图所示: + +![训练结束页面](/img/training/guide-llm/third-train-end.png) + +左侧列是一些重要的训练过程指标展示,它可以从指标上反映训练的好坏,以及时终止较差的训练。右侧列是每个训练完成的 LoRA 检查点,我们提前从您的数据中拿取一个用于自动的生成结果,这可以看到随着训练生成内容的变化是否符合您训练数据的偏好。 + +如果您觉得某一步的 LoRA 符合初步需求,可以点击“效果测试”,会打开下图的弹窗: + +![体验侧边弹窗](/img/training/guide-llm/third-train-exp.png) + +如果您的数据集中有系统提示词,则需要在此处填写。这些默认参数在正常情况下有着比较好和稳定的输出内容,在确认输入内容无误后点击发送,即可查看回复结果。 + +如果两种测试结果都符合您的需求,就可以将该训练检查点的 LoRA 保存到您自己的仓库中了。首先点击设置仓库,如下图所示: + +![设置仓库](/img/training/guide-llm/third-save-setting.png) + +设置完成后可转到刚才心仪 LoRA 所在的检查点,点击“保存到仓库”,如下图所示: + +![保存到仓库](/img/training/guide-llm/third-save-start.png) + +当显示保存成功时,这个 LoRA 文件就到您的仓库了,您可以选择继续在平台体验效果,也可以将 LoRA 进行后续的任何操作。 + +以上就是所有的操作了,祝您可以顺利微调出自己心仪的 LoRA 模型~ diff --git a/sidebars.ts b/sidebars.ts index a373bbb733a8c5983005fca84aef67e5cb45445a..8a4db4c26f79eedccd7872bb54158445fab6e492 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -272,7 +272,11 @@ const sidebars: SidebarsConfig = { items: [ { type: 'doc', - id: 'training/guide', + id: 'training/image-generate', + }, + { + type: 'doc', + id: 'training/text-generate', }, ], }, diff --git a/static/files/training/example.jsonl b/static/files/training/example.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..249abd9536c3022889821a22fee08f385daed78e --- /dev/null +++ b/static/files/training/example.jsonl @@ -0,0 +1,3 @@ +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "什么是大语言模型?"}, {"role": "assistant", "content": "大语言模型(Large Language Model,简称LLM)是指使用大量文本数据训练的深度学习模型,能够生成自然语言文本或理解语言文本的含义,是自然语言处理领域的重要工具,可以处理多种自然语言任务"}]} +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "请你证明费马大定理"}, {"role": "assistant", "content": "由于费马大定理的证明非常复杂且涉及高级的数学概念,我无法在这里给出一个完整的证明过程。"}]} +{"messages": [{"role": "system", "content": "you are a helpful assistant. "}, {"role": "user", "content": "热胀冷缩是什么导致的?"}, {"role": "assistant", "content": "热胀冷缩现象是物质的一种基本性质,其主要原因与物质内部的微观结构以及粒子间的相互作用有关。"}, {"role": "user", "content": "感谢你的回答!"}, {"role": "assistant", "content": "不用谢,很高兴可以帮到你,还有什么其他问题吗?"}]} diff --git a/static/img/training/guide-llm/first-in-index.png b/static/img/training/guide-llm/first-in-index.png new file mode 100644 index 0000000000000000000000000000000000000000..688c8d1ea13bad167bb0edde7465278e6251d513 Binary files /dev/null and b/static/img/training/guide-llm/first-in-index.png differ diff --git a/static/img/training/guide-llm/fist-go-to-finetune.png b/static/img/training/guide-llm/fist-go-to-finetune.png new file mode 100644 index 0000000000000000000000000000000000000000..751c3f8d8aedfab88d41d3c193996fb1189e3352 Binary files /dev/null and b/static/img/training/guide-llm/fist-go-to-finetune.png differ diff --git a/static/img/training/guide-llm/fist-great-task.png b/static/img/training/guide-llm/fist-great-task.png new file mode 100644 index 0000000000000000000000000000000000000000..0859c8d71bc3968c0c9a46211c4c15fe3a1fd83d Binary files /dev/null and b/static/img/training/guide-llm/fist-great-task.png differ diff --git a/static/img/training/guide-llm/fist-setup-task.png b/static/img/training/guide-llm/fist-setup-task.png new file mode 100644 index 0000000000000000000000000000000000000000..934b59e08d712b878527f516bb3be53aabc5aeec Binary files /dev/null and b/static/img/training/guide-llm/fist-setup-task.png differ diff --git a/static/img/training/guide-llm/second-bill-create.png b/static/img/training/guide-llm/second-bill-create.png new file mode 100644 index 0000000000000000000000000000000000000000..e58bf96d4c4c33ccd9eaa154a957154e9eae6090 Binary files /dev/null and b/static/img/training/guide-llm/second-bill-create.png differ diff --git a/static/img/training/guide-llm/second-bill-out.png b/static/img/training/guide-llm/second-bill-out.png new file mode 100644 index 0000000000000000000000000000000000000000..48e9e559d3805c20af6465204de12096366fe885 Binary files /dev/null and b/static/img/training/guide-llm/second-bill-out.png differ diff --git a/static/img/training/guide-llm/second-train-set.png b/static/img/training/guide-llm/second-train-set.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6ea1d3b8d8d190f79515a50893fcc71e35a484 Binary files /dev/null and b/static/img/training/guide-llm/second-train-set.png differ diff --git a/static/img/training/guide-llm/second-upload-dataset-check.png b/static/img/training/guide-llm/second-upload-dataset-check.png new file mode 100644 index 0000000000000000000000000000000000000000..10fdc7463a1fa0cbc9a5ff98e8ff15823ad15cc5 Binary files /dev/null and b/static/img/training/guide-llm/second-upload-dataset-check.png differ diff --git a/static/img/training/guide-llm/second-upload-dataset-success.png b/static/img/training/guide-llm/second-upload-dataset-success.png new file mode 100644 index 0000000000000000000000000000000000000000..56455638e910afd47261eb5836fbfb34a675a7a8 Binary files /dev/null and b/static/img/training/guide-llm/second-upload-dataset-success.png differ diff --git a/static/img/training/guide-llm/third-save-setting.png b/static/img/training/guide-llm/third-save-setting.png new file mode 100644 index 0000000000000000000000000000000000000000..277ec123d53ebcaf9125a43bd51ed12ca452b06d Binary files /dev/null and b/static/img/training/guide-llm/third-save-setting.png differ diff --git a/static/img/training/guide-llm/third-save-start.png b/static/img/training/guide-llm/third-save-start.png new file mode 100644 index 0000000000000000000000000000000000000000..26e78d32010cc78a4139d0f5d4078db699f7a046 Binary files /dev/null and b/static/img/training/guide-llm/third-save-start.png differ diff --git a/static/img/training/guide-llm/third-train-begin.png b/static/img/training/guide-llm/third-train-begin.png new file mode 100644 index 0000000000000000000000000000000000000000..0275bcbf156bba794ae202ad83beb4444ef210d4 Binary files /dev/null and b/static/img/training/guide-llm/third-train-begin.png differ diff --git a/static/img/training/guide-llm/third-train-end.png b/static/img/training/guide-llm/third-train-end.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6b0479fb47a52959bea41649794fb9a333ebc3 Binary files /dev/null and b/static/img/training/guide-llm/third-train-end.png differ diff --git a/static/img/training/guide-llm/third-train-exp.png b/static/img/training/guide-llm/third-train-exp.png new file mode 100644 index 0000000000000000000000000000000000000000..121ebfd4bd8e5d656e10cf28f78e79af35cd285e Binary files /dev/null and b/static/img/training/guide-llm/third-train-exp.png differ diff --git a/static/img/training/guide/contact-qrcode-wx-group.png b/static/img/training/guide/contact-qrcode-wx-group.png index 017366290b9399f6b29bb0c7afd82fd6fc002849..21b2aeffa7735c4b71b855999976250e85af0edb 100644 Binary files a/static/img/training/guide/contact-qrcode-wx-group.png and b/static/img/training/guide/contact-qrcode-wx-group.png differ diff --git a/static/img/training/guide/datasets-format-conversation.png b/static/img/training/guide/datasets-format-conversation.png new file mode 100644 index 0000000000000000000000000000000000000000..f9eb813b0848618b6fbdd2bd16ce31a86d841c47 Binary files /dev/null and b/static/img/training/guide/datasets-format-conversation.png differ