「AGIへの道」飛書ナレッジベースへ直行 →
ホーム/すべての質問
微调训练框架的选择
以下是关于微调训练框架选择的相关内容: 在 Stable Diffusion 中: 首先,config 文件夹中有两个配置文件 config_file.toml 和 sample_prompt.toml,分别存储着训练超参数与训练中的验证 prompt。 config_file.toml 文件主要包含了 model_arguments、optimizer_arguments、dataset_arguments、training_arguments、sample_prompt_arguments 以及 saving_arguments 六个维度的参数信息。 v2 和 v_parameterization:两者同时设置为 true 时,开启 Stable Diffusion V2 版本的训练。 pretrained_model_name_or_path:读取本地 Stable Diffusion 预训练模型用于微调训练。 optimizer_type:有七种优化器可以选择。不进行选择时默认启动 AdamW 优化器;显存不太充足时,可选择 AdamW8bit 优化器,但会有轻微性能损失;Lion 优化器是较新的版本,性能优异,但学习率需设置较小,比如为 AdamW 优化器下的 1/3。 learning_rate:单卡推荐设置 2e6,多卡推荐设置 1e7。 除了上述的训练环境参数传入,还需将配置好的 config_file.toml 和 sample_prompt.txt 参数传入训练脚本中。 当设置 1024 分辨率+FP16 精度+xformers 加速时,SD 模型进行 Batch Size=1 的微调训练需要约 17.1G 的显存,进行 Batch Size=4 的微调训练需要约 26.7G 的显存,所以最好配置一个 24G 以上的显卡。 微调训练完成后,模型权重会保存在之前设置的 output_dir 路径下。可以使用 Stable Diffusion WebUI 作为框架加载模型进行 AI 绘画,需将训练好的模型放入/models/Stablediffusion 文件夹下。 在 OpenAI 中: 使用 OpenAI CLI 开始微调工作,需指定从哪个 BASE_MODEL 开始(ada、babbage、curie 或 davinci),还可使用后缀参数自定义微调模型的名称。 运行命令后会上传文件、创建微调作业并流式传输事件直到作业完成。 每个微调工作都从一个默认为 curie 的基本模型开始,模型的选择会影响性能和成本。 开始微调作业后,可能需要几分钟或几小时才能完成,工作完成后会显示微调模型的名称。此外,还可以列出现有作业、检索作业状态或取消作业。
2025-01-06
数据集的准备
以下是关于数据集准备的相关内容: 对于 Flux 的 Lora 模型训练: 建议使用自然语言。 数据集放置路径为:Flux_train_20.4\\train\\qinglong\\train ,即下图红色文件夹,里面一直往里找。绿色部分是训练好的模型产出的地方。 如果还未准备数据集,可先检查此路径中是否有原先放好的试验数据集,可直接使用,试验操作时这一步可先省略,等训练成功再准备自己的训练集。 对于 RAG 提示工程: 可以上传自己的测试数据集,也可以使用 PromptLayer 提供的测试数据集,目前 PromptLayer 支持的数据集格式有 Json 和 CSV 两种。 经过测试,上传中文数据集可能会出现乱码,构建数据集时需留意。 为方便演示,可使用 PromptLayer 提供的数据集样例和自己编写的一套测试集。真实环境中需要真实的测试集进行提示词调试,详情可至的“Datasets”中查看。 对于创建图像描述模型: 定义预处理图像和文本数据后,需要组织这些数据,形成训练、验证和测试数据集。 对于每一对图像和字幕,需要创建一个目标(或标签)序列,它是原始字幕序列向右移动一个位置的版本,用于训练模型预测下一个单词。
2025-01-06
测试微调模型
以下是关于测试微调模型的相关内容: 在完成微调之后,需要对结果进行测试。微调不会直接影响原有的大模型,而是生成一些文件,包括模型权重文件、配置文件、训练元数据、优化器状态等。这些文件可以和原有大模型合并并输出新的大模型。 在测试之前,先通过不合并的方式进行微调结果的验证。例如,若数据集中有问答“问:你是谁?答:家父是大理寺少卿甄远道”,当给微调后的模型指定角色“现在你要扮演皇帝身边的女人甄嬛”,然后问模型“你是谁?”,若回答是“家父是大理寺少卿甄远道”,则认为模型微调有效果。 测试代码结果成功。之后可以将微调结果和原有大模型进行合并,然后输出新的模型,使用 webdemo 进行测试。包括切换到对应的目录、执行合并代码、生成相应文件、创建 chatBotLora.py 文件并执行代码进行本地测试、开启自定义服务等步骤,最终验收成功。 此外,当作业成功时,fine_tuned_model 字段将填充模型名称,可将此模型指定为 Completions API 的参数,并使用 Playground 向它发出请求。首次完成后,模型可能需要几分钟准备好处理请求,若超时可能是仍在加载中,几分钟后重试。可通过将模型名称作为 model 完成请求的参数传递来开始发出请求,包括 OpenAI 命令行界面、cURL、Python、Node.js 等方式。 要删除微调模型,需在组织中被指定为“所有者”。 创建微调模型时,假设已准备好训练数据。使用 OpenAI CLI 开始微调工作,需指定基本模型的名称(ada、babbage、curie 或 davinci),还可使用后缀参数自定义微调模型的名称。运行命令会上传文件、创建微调作业、流式传输事件直到作业完成,每个微调工作都从默认为 curie 的基本模型开始,模型选择会影响性能和成本。开始微调作业后,可能需要一些时间才能完成,若事件流中断可恢复。工作完成后会显示微调模型的名称,还可列出现有作业、检索作业状态或取消作业。
2025-01-06
模型微调对模型的影响和价值
模型微调对模型具有重要的影响和价值,主要体现在以下几个方面: 1. 提高结果质量:能够获得比即时设计更高质量的结果。 2. 增加训练示例:可以训练比提示中更多的例子,从而改进小样本学习,在大量任务中取得更好的效果。 3. 节省 Token 和成本:由于更短的提示而节省了 Token,对模型进行微调后,不再需要在提示中提供示例,能够节省成本并实现更低延迟的请求。 4. 提高模型效率:通过专门化模型,可以使用更小的模型,并且由于只对输入输出对进行训练,舍弃示例或指令,进一步改善延迟和成本。 5. 适应特定领域:针对特定领域进行微调,优化所有层的参数,提高模型在该领域的专业性。 目前,微调适用于以下基础模型:davinci、curie、babbage 和 ada。参数规模角度,大模型的微调分成全量微调 FFT(Full Fine Tuning)和 PEFT(ParameterEfficient Fine Tuning)两条技术路线,从成本和效果综合考虑,PEFT 是目前业界较流行的微调方案。 通用大模型如 GPT4.0、GPT3.5 等具有广泛的自然语言理解能力,但在特定领域表现可能不理想。而通过微调,可以在现有模型基础上,更经济、高效地适应新的应用领域,节省成本并加快模型部署和应用速度。
2025-01-06
训练以及部署微调模型
以下是关于训练以及部署微调模型的相关知识: 创建微调模型: 假设您已准备好训练数据,使用 OpenAI CLI 开始微调工作。需指定从哪个 BASE_MODEL 开始,如 ada、babbage、curie 或 davinci,还可使用后缀参数自定义微调模型的名称。运行命令后会进行以下操作: 1. 使用文件 API 上传文件(或使用已上传的文件)。 2. 创建微调作业。 3. 流式传输事件直到作业完成,这通常需要几分钟,但如果队列中有很多作业或数据集很大,则可能需要数小时。每个微调工作都从默认为 curie 的基本模型开始,模型的选择会影响性能和成本,您可访问定价页面了解微调费率的详细信息。开始微调作业后,可能需要一些时间才能完成,若事件流中断,可通过运行特定命令恢复。工作完成后,会显示微调模型的名称。此外,还可以列出现有作业、检索作业状态或取消作业。 GPT 助手的训练: 在有监督的微调阶段,收集少量但高质量的数据集,要求人工承包商收集提示和理想响应的数据,通常是几万个或类似数量。然后对这些数据进行语言建模,算法不变,只是训练集从互联网文档变为问答提示响应类型的数据。训练后得到有监督的微调模型(SFT 模型),可实际部署,它们在某种程度上是有用的。 大型语言模型的微调: 一旦有了基础模型,就进入计算成本相对较低的微调阶段。在这个阶段,编写标签说明明确助手的表现期望,雇佣人员创建文档,例如收集 100,000 个高质量的理想问答对来微调基础模型,这个过程可能只需一天。然后进行大量评估,部署模型并监控表现,收集不当行为实例并纠正,将正确答案加入训练数据,由于微调成本较低,可每周或每天进行迭代。例如 Llama2 系列,Meta 发布时包括基础模型和助手模型,基础模型不能直接使用,助手模型可直接用于回答问题。
2025-01-06
中外开源模型概览与分类
以下是关于中外开源模型的概览与分类: 国内方面: 国内模型在 Agent 核心基础能力上已较为接近或部分超过 GPT3.5 水平。 如 ChatGLM3Turbo 在任务分解、多文档问答和检索 API 能力上表现出色。 国内开源模型如 Baichuan213BChat 具备较强竞争力,在某些方面超过一些闭源模型。 国外方面: OpenAI 发布了开源模型,包括 PointE、Whisper、Jukebox 和 CLIP。可访问供研究人员的模型索引详细了解其研究论文中介绍的模型以及 InstructGPT 和 GPT3.5 等模型系列之间的差异。 智谱·AI 开源模型: 多模态模型方面,推出了具有视觉和语言双模态的模型,如 CogAgent18B、CogVLM17B、Visualglm6B 等。 详情可访问:【新基准】SuperCLUEAgent:首个 AI 智能体中文测评基准发布 www.CLUEbenchmarks.com/superclue_agent.html 。
2025-01-06
理解LoRA训练以及参数
LoRA 训练的参数主要包括以下方面: 1. 学习步数:指 AI 对每张图片的学习次数。二次元图片的 repeat 一般在 10 15,写实人物图片的 repeat 一般在 30 50,真实世界的景观场景可能要达到 100。repeat 值越高,AI 越能读懂图片,但图片精细度越高,学习步数也要越高。 2. 循环次数:AI 将所有图片按照学习步数学习一轮就是一次循环,循环次数就是将这个过程重复的遍数。一般数值在 10 20 之间,次数并非越多越好,过多会导致过拟合。总的训练步数 = 图片张数×学习步数×循环次数。 3. 效率设置:主要控制电脑的训练速度,可保持默认值,也可根据电脑显存微调,但要避免显存过载。 4. DIM:不同场景有不同的推荐值。如二次元一般为 32,人物常见为 32 128,实物、风景则≥128。DIM 为 64 时,输出文件一般为 70MB +;DIM 为 128 时,输出文件一般为 140MB + 。 5. 样图设置:主要控制训练过程中的样图显示,“sample every n steps”为 50 代表每 50 步生成一张样图。Prompts 提示词可预设效果或自定义。 6. 并行数量:代表 AI 同一时间学习的图片数量。数值越大,训练速度越快,内存占用越大,但收敛得慢;数值越小,训练速度越慢,内存占用越小,但收敛得快。显存小于等于 6g 时,batch size 设为 1;显存为 12g 以上时,batch size 可设为 4 或 6。 7. 质量设置: 学习率:指 AI 学习图片的效率,过高会过拟合,过低会不拟合。1e 4 实际为 1 除以 10 的 4 次方,即 0.0001;1e 5 为 1 除以 10 的 5 次方,即 0.00001。一般保持默认,如需调整可点击数值旁的加减号。 网格维度:network dim 决定出图精细度,数值越高有助于 AI 学会更多细节,但数值越大学习越慢,训练时间越长,易过拟合。
2025-01-06
高效微调技术-LoRA 全量微调与少量参数微调
以下是关于高效微调技术 LoRA 全量微调与少量参数微调的相关信息: LoRA 微调: 微调脚本: 脚本见: 具体实现代码见: 单机多卡的微调可以通过修改脚本中的include localhost:0来实现。 加载微调模型: 基于 LoRA 微调的模型参数见:基于 Llama2 的中文微调模型,LoRA 参数需要和基础模型参数结合使用。 通过加载预训练模型参数和微调模型参数,示例代码中,base_model_name_or_path 为预训练模型参数保存路径,finetune_model_path 为微调模型参数保存路径。 全量参数微调: 微调脚本: 脚本见: 具体实现代码见: 加载微调模型: 对于全量参数微调的模型,调用方式同模型调用代码示例,只需要修改其中的模型名称或者保存路径即可。 此外,关于微调还有以下补充信息: 微调模型意味着改变模型的权重,现在微调变得越来越容易,因为开发了许多技术并建立了代码库。 像 LoRA 这样的参数高效微调技术只训练模型的小部分稀疏片段,模型大部分保持基础模型状态,效果好且成本低。 微调技术上更为复杂,需要更多技术专业知识,包括人工数据合同承包商的数据集和复杂的合成数据流程,会减慢迭代周期。 SFT(有监督的微调)相对简单明了,RLHF(基于人类反馈的强化学习)则是非常研究性的领域,难度大,不适合初学者。 目前除了传统的全量训练和 freeze 冻结某些层方式,还发展出了很多种高效的微调方法,如 LoRA、Prefix Tuning、PTuning、Prompt Tuning、AdaLoRA、3、MultiTask Prompt Tuning 等。本篇主要采用 LoRA 方式,主要思路是训练一个参数量较小的分支,然后再与底模合并,从而在模型中注入新的知识。
2025-01-06
全量微调与少量参数微调
在参数规模的角度,大模型的微调主要分为全量微调(FFT,Full Fine Tuning)和少量参数微调(PEFT,ParameterEfficient Fine Tuning)两条技术路线。 全量微调是对全量的模型参数进行全量的训练。全量参数微调脚本见:。 少量参数微调则只对部分模型参数进行训练。从成本和效果的角度综合考虑,PEFT 是目前业界比较流行的微调方案。OpenAI 官方微调教程: 微调是在较小的、特定领域的数据集上继续 LLM 的训练过程,通过调整模型本身的参数,而不是像提示工程和 RAG 那样仅仅更改提示,来大幅提高模型在特定任务中的性能。把微调想象成把通用工具打磨成精密仪器。 微调有两大好处: 1. 提高模型在特定任务中的性能。微调意味着可以输入更多的示例。可以在数以百万计的代币上进行微调,而少量学习提示仅限于数以万计的代币。经过微调的模型可能会失去一些通用性,但对于其特定任务而言,应该期待它有更好的表现。 2. 提高模型效率。LLM 应用程序的效率意味着更低的延迟和更低的成本。实现这一优势有两种方法。通过专门化模型,可以使用更小的模型。此外,由于只对输入输出对进行训练,而不是对完整的提示及其任何提示工程技巧和提示进行训练,因此可以舍弃示例或指令。这可以进一步改善延迟和成本。 在微调中,超参数的选择也很重要。我们选择了适用于一系列用例的默认超参数,唯一需要的参数是训练文件。但调整用于微调的超参数通常可以产生产生更高质量输出的模型。特别是,可能需要配置以下内容: 1. model:要微调的基本模型的名称。可以选择“ada”、“babbage”、“curie”或“davinci”之一。要了解有关这些模型的更多信息,请参阅文档。 2. n_epochs 默认为 4。训练模型的时期数。一个纪元指的是训练数据集的一个完整周期。 3. batch_size 默认为训练集中示例数量的 0.2%,上限为 256。批量大小是用于训练单个正向和反向传递的训练示例数。总的来说,我们发现更大的批次大小往往更适用于更大的数据集。 4. learning_rate_multiplier 默认为 0.05、0.1 或 0.2,具体取决于 final batch_size。微调学习率是用于预训练的原始学习率乘以该乘数。建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。根据经验,我们发现较大的学习率通常在较大的批量大小下表现更好。 5. compute_classification_metrics 默认为假。如果为 True,为了对分类任务进行微调,在每个 epoch 结束时在验证集上计算特定于分类的指标(准确性、F1 分数等)。要配置这些额外的超参数,请通过 OpenAI CLI 上的命令行标志传递它们。 LoRA 微调脚本见:加载预训练模型参数和微调模型参数,以下示例代码中,base_model_name_or_path 为预训练模型参数保存路径,finetune_model_path 为微调模型参数保存路径。对于全量参数微调的模型,调用方式同模型调用代码示例,只需要修改其中的模型名称或者保存路径即可。
2025-01-06
常见GPU卡介绍与比较
以下是常见 GPU 卡的介绍与比较: 在选择 GPU 作为 AI 基础设施时,需要考虑多个因素: 训练与推理方面:训练大型 Transformer 模型通常需要在机器集群上完成,最好是每台服务器有多个 GPU、大量 VRAM 以及服务器之间的高带宽连接。许多模型在 NVIDIA H100 上最具成本效益,但获取较难且通常需要长期合作承诺。如今,NVIDIA A100 常用于大多数模型训练。对于大型语言模型(LLM)的推理,可能需要 H100 或 A100,而较小的模型如 Stable Diffusion 则对 VRAM 需求较少,初创公司也会使用 A10、A40、A4000、A5000 和 A6000 甚至 RTX 卡。 内存要求方面:大型 LLM 的参数数量众多,无法由单张卡容纳,需要分布到多个卡中。 硬件支持方面:虽然绝大多数工作负载在 NVIDIA 上运行,但也有公司开始尝试其他供应商,如谷歌 TPU 和英特尔的 Gaudi2,但这些供应商面临的挑战是模型性能高度依赖软件优化。 延迟要求方面:对延迟不太敏感的工作负载可使用功能较弱的 GPU 以降低计算成本,而面向用户的应用程序通常需要高端 GPU 卡来提供实时用户体验。 峰值方面:生成式 AI 公司的需求经常急剧上升,在低端 GPU 上处理峰值通常更容易,若流量来自参与度或留存率较低的用户,以牺牲性能为代价使用较低成本资源也有意义。 此外,算力可以理解为计算能力,在电脑中可直接转化为 GPU,显卡就是 GPU,除了 GPU 外,显存也是重要参数。GPU 是一种专门做图像和图形相关运算工作的微处理器,其诞生是为了给 CPU 减负,生产商主要有 NVIDIA 和 ATI。
2025-01-06