跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Amazon Bedrock 模型微调实践:微调基础篇

探讨了大型语言模型微调与检索增强生成(RAG)的技术差异及应用场景。文章首先介绍了微调的基本概念及其在低延迟、高准确度任务中的优势,同时也指出了 RAG 在处理动态数据和减少训练成本方面的灵活性。随后,文章详细对比了两种方法的优缺点,提供了选择决策准则。最后,基于 Amazon SageMaker 平台,给出了使用 Llama 2 模型进行微调的完整实践流程,涵盖数据准备、模型选择、超参数配置、性能评估及部署步骤,旨在帮助开发者掌握大模型微调的核心技术与落地方法。

Qiny01发布于 2025/2/7更新于 2026/7/2840 浏览
Amazon Bedrock 模型微调实践:微调基础篇

Amazon Bedrock 模型微调实践(一):微调基础篇

引言和综述

在当今方兴未艾的大型语言模型(LLM)领域,如 Meta 的 Llama、Cohere 的 Command、Amazon 的 Titan 和 Anthropic 的 Claude 等,这些大模型彻底改变了我们处理语言任务的方式。它们在大量文本数据上进行了预训练,并可以通过称为**微调(Fine-tuning)**的过程适应各种下游任务。

**微调(Fine-tuning)**是一种技术,涉及使用与该任务相关的较小数据集进一步训练特定任务或领域的预训练语言模型。通过这样做,模型可以学会更好地理解和生成针对特定上下文的文本,从而提高性能和准确性。

但是,在某些情况下,微调可能不是最合适的方法。在这种情况下,**检索增强生成 RAG(Retrieval-Augmented Generation)**方法可能更合适。RAG 将基础模型的强大功能与外部知识源相结合,允许它们在生成过程中访问和整合来自数据库或文档集合的相关信息。

在这篇技术博客中,我们将探讨微调和 RAG 的基础知识,并分享为不同业务用例选择正确方法(微调或 RAG)的实践经验。我们将介绍:

  • 模型微调概述
  • 检索增强生成(RAG)概述
  • 在模型微调和 RAG 之间进行选择的标准
  • 开始使用模型微调

微调(Fine-tuning)概述

当您需要将基础模型适应专门的任务或领域时,微调是一种强大的技术。例如,如果正在为某个特定行业构建客户服务聊天机器人,那么根据该行业的相关客户服务数据对预先训练的模型进行微调,可以显著增强其对特定领域术语、行话和上下文的理解。

与检索增强生成(RAG)方法相比,模型微调的一个关键优势是:因为不涉及额外的检索步骤,它有可能在推理过程中提高性能并降低延迟。这使得微调模型非常适合低延迟和高吞吐量至关重要的场景,例如实时对话式 AI 应用程序。

然而,模型微调也有其自身的挑战。与检索增强生成(RAG)相比,它通常需要更大的计算资源投入。因为它需要标记、精选数据进行训练,以及微调过程本身的额外计算资源。此外,微调模型可能会难以应对快速变化的数据,因为模型需要定期重新训练才能有效地整合新信息。

该示例涵盖了模型微调的各个方面:包括数据准备、定义微调超参数、创建 Amazon SageMaker 估算器、启动微调作业、评估微调模型的性能以及将其部署到 Amazon SageMaker 终端节点。示例的 notebook 文件完整展示了利用 Amazon SageMaker 的功能对大型语言模型进行高效且可扩展的微调,提供了从头到尾的全面工作流程代码实现,我们还将在后面的章节中详细展开分析这些代码。

检索增强生成(RAG)概述

检索增强生成(RAG)是一种将大语言模型(LLM)的强大功能与信息检索技术相结合的方法。在 RAG 设置中,模型可以根据提供的提示生成文本,从知识库或语料库中获取相关信息以增强模型的输出。

在处理频繁变化的数据或领域知识太广泛而无法仅通过微调模型有效捕获时,RAG 特别有用。新闻机构、媒体和处理快速变化信息的组织通常会受益于 RAG 方法,因为他们可以轻松更新知识库,而无需重新训练整个模型。

RAG 的关键优势之一在于其灵活性和易于实施性。由于不需要大量训练,因此与微调相比,RAG 系统可以相对快速地建立,并且初始成本较低。但是,由于额外的检索步骤,RAG 往往比微调模型慢,并且由于涉及多个组件(如矢量数据库、嵌入模型和文档加载器)的协同工作,使得其实现的架构可能会变得比较复杂。

在这个定制的 RAG 工作流程(Customized RAG Workflow)中,模型根据输入提示生成初始响应,而检索组件同时从亚马逊云科技致股东信的语料库中获取相关信息。然后将检索到的知识与模型的输出结果集成,最终产生一个增强响应,这个增强响应结合了模型输出结果和外部知识源的共同信息。

模型微调还是 RAG?

那么,什么时候应该选择微调而不是 RAG?反之亦然。这取决于你所面对的业务场景具体要求和用例。以下是一些一般准则供参考:

微调

何时使用微调:
  • 领域专门任务:微调非常适合精度和性能至关重要的领域专门任务。例如,如果你正在开发医学诊断模型,则对精选的医疗记录数据集进行微调将产生更高更准确的模型输出结果。
  • 高性能和低延迟:如果你的应用程序需要低延迟和高吞吐量,则模型微调是更好的选择。微调模型不需要额外的检索步骤,从而使其推理速度更快。
  • 精选数据集:如果你可以访问与特定任务相关的定义明确、标记和精选的数据集,则微调可以利用这些数据来优化性能。
  • 预测质量:对于预测质量和准确性至关重要的任务,模型微调允许你根据特定要求定制模型。
微调的优势:
  • 高性能:针对特定任务进行了优化,从而提高了模型输出的准确性和性能。
  • 低延迟:推理时间更快,因为不需要额外的检索步骤。
  • 任务特异性:经过量身定制,可在所训练的特定任务上表现出色。
微调的权衡(Trade-Offs):
  • 成本:微调需要大量的模型训练所需的计算资源投入,包括抓取、转换和清理数据等数据预处理的成本。
  • 缺乏泛化能力:微调模型高度专业化,这意味着不同的任务需要不同的模型。
  • 不适合频繁变化的数据:由于模型是在静态数据集上训练的,因此它不能很好地适应动态数据环境。

检索增强生成(RAG)

何时使用 RAG:
  • 频繁变化的数据:当数据频繁变化时,例如在新闻机构或媒体机构中,由于信息变化量巨大,因此 RAG 是首选,模型无需重新训练即可检索最新信息。
  • 广泛的领域知识:如果你的应用程序涵盖广泛的主题或领域,RAG 可以通过动态检索相关信息来有效地处理多样性。
  • 标记数据有限:当缺少大量优质的标记数据时,RAG 就非常有帮助。它可以使用预先训练的模型从外部数据源来检索上下文,从而减少对大量训练数据的需求。
  • 成本和时间效率:RAG 可以快速实施,初始成本较低,因为它避免了极为耗时耗资源的模型再训练过程。
RAG 的优点:
  • 灵活性:通过动态检索相关信息来处理各种各样的任务。
  • 较低的初始成本:避免与训练相关的成本,使其更易于访问和部署更快。
  • 保留泛化:基础模型保持不变,保持其在不同任务中进行泛化的能力。
RAG 的权衡:
  • 推理速度较慢:由于 RAG 架构中增加了外部信息源检索这一步骤,因此会相应增加延迟,使 RAG 与微调模型相比响应速度会更慢。
  • 复杂性:由于 RAG 涉及多个组件,例如矢量数据库、嵌入模型和文档加载器,这可能会使系统复杂化。
  • 更高的令牌(Token)使用率:由于 RAG 需要解析查询和上下文,从而导致每个提示的令牌使用量增加。
选择准则小结
  • 性能敏感性:如果你的应用程序需要高性能、低延迟和针对狭窄领域的高质量预测,则建议使用模型微调方法。
  • 动态数据环境:对于处理频繁更新信息或广泛领域知识的应用程序,RAG 通常是更实用且更具成本效益的解决方案。

通过仔细评估你的用例和要求,你可以选择最合适的方法,平衡成本、性能和复杂性之间的权衡。无论你选择微调还是 RAG,每种方法都具有独特的优势,可以利用这些优势来满足你的特定业务需求。

开始使用模型微调

如果你已经确定模型微调是适合你用例的最佳方法,那么下一步就是准备数据并配置模型微调过程。以下是一些关键注意事项:

1. 数据准备

模型微调需要与你的任务相关的高质量标记数据集。这可能涉及从各种来源收集数据、清理和转换数据,并使用适当的标签对其进行注释。数据质量至关重要,因为质量差的数据会导致模型性能不佳。

在《Generative AI on AWS》一书中的 Llama 2 模型微调代码实现中,使用了 Dolly 数据集(用于开放域对话的大型数据集)的一个子集。代码片段演示了预处理和过滤数据以创建适合微调的较小子集。然而,在现实世界中,你需要仔细整理和预处理自己的数据集,以确保微调任务的高质量和相关数据。相关代码片段如下所示:

from datasets import load_dataset

# 加载 Dolly 数据集
dolly_dataset = load_dataset("databricks/databricks-dolly-15k", split="train")

# 为了进行问答/信息提取训练,可以替换下一行的断言条件
# 这里我们筛选出摘要类别的数据
summarization_dataset = dolly_dataset.filter(lambda example: example["category"] == "summarization")
summarization_dataset = summarization_dataset.remove_columns("category")

# 将数据集拆分为训练集和测试集,其中测试数据用于最终评估
train_and_test_dataset = summarization_dataset.train_test_split(test_size=0.1)
print(train_and_test_dataset["test"][0])

2. 模型选择

选择合适的预训练模型作为起点。在此示例中,其选择的微调模型是由 Meta AI 开发的语言模型 Llama 2。Llama 模型目前可通过 Amazon SageMaker JumpStart 获得,这简化了使用亚马逊云科技资源访问和微调模型的过程。选择模型时需考虑参数量、许可证限制以及是否支持指令微调(Instruction Tuning)。

3. 微调超参数

选择模型后,在使用 Amazon SageMaker 对其进行微调之前,我们需要定义用于微调的实例。然后,我们可以尝试不同的超参数,例如学习率、批处理大小、epoch、最大输入长度,以优化特定任务和数据集的微调过程。

此 Llama 2 微调示例中提供的代码片段演示了如何设置各种微调超参数,包括启用指令调整模式、设置最大输入长度为 1024 以及运行 5 个 epoch 等等。必须注意的是,这些超参数值可能并非对所有任务或数据集都是最佳的。尝试不同的配置以找到适合你特定用例的最佳设置至关重要。相关代码片段如下所示:

from sagemaker.jumpstart.estimator import JumpStartEstimator

estimator = JumpStartEstimator(
    model_id=model_id,
    model_version=model_version,
    instance_type="ml.g5.12xlarge",
    instance_count=2,
    environment={"accept_eula": "true"}
)

# 默认情况下,指令调整设置为 false。因此,要使用指令调整数据集,需显式设置
estimator.set_hyperparameters(instruction_tuned="True", 
                              epoch="5", 
                              max_input_length="1024")
estimator.fit({"training": train_data_location})

4. 评估和迭代

使用适当的指标和测试数据集定期评估微调模型的性能。微调是一个迭代过程,你可能需要调整数据、超参数甚至预训练模型以获得最佳结果。持续监控和改进对于提高模型性能并确保其满足你的业务要求至关重要。

在微调 Llama 2 示例中,它包含用于评估微调模型在验证集上的性能的代码。根据评估结果,你可以确定微调模型是否满足你的要求,或者是否需要通过调整数据、超参数或尝试不同的预训练模型进行进一步迭代。

此外,建议在单独的测试数据集上评估微调模型的性能,以获得其实际性能的无偏估计。测试数据应代表目标域,并且在微调过程中看不见。你可以使用相关指标在此测试数据集上比较微调模型与预训练模型的性能。结果可以以表格或图形格式呈现,例如准确率对比表或 Loss 下降曲线图。常用的评估指标包括困惑度(Perplexity)、BLEU 分数、ROUGE 分数以及人工评估反馈。

5. 模型部署

评估通过后,可以将模型部署到 Amazon SageMaker 终端节点以提供在线推理服务。部署过程通常涉及创建端点配置、分配实例类型以及设置自动扩缩容策略。确保在生产环境中监控推理延迟和错误率,以便及时调整资源或模型版本。

全篇小结

在这篇文章中,我们深入研究了模型微调(Fine-tuning)和检索增强生成(RAG)技术,提供了概述和建议,以便根据特定用例选择适当的方法。我们还提供了有关如何开始微调的见解,并提供了一个使用 Amazon SageMaker 微调 Llama 2 模型的示例,演示了数据预处理、超参数调整、评估及部署等。这将有助于开发人员理解模型微调过程。

在实际项目中,建议先从小规模实验开始,验证数据质量和模型效果,再逐步扩大规模。同时,关注模型的安全性和合规性也是不可忽视的重要环节。通过合理选择微调或 RAG 方案,并结合工程化实践,可以最大化大模型在业务场景中的价值。

目录

  1. Amazon Bedrock 模型微调实践(一):微调基础篇
  2. 引言和综述
  3. 微调(Fine-tuning)概述
  4. 检索增强生成(RAG)概述
  5. 模型微调还是 RAG?
  6. 微调
  7. 何时使用微调:
  8. 微调的优势:
  9. 微调的权衡(Trade-Offs):
  10. 检索增强生成(RAG)
  11. 何时使用 RAG:
  12. RAG 的优点:
  13. RAG 的权衡:
  14. 选择准则小结
  15. 开始使用模型微调
  16. 1. 数据准备
  17. 加载 Dolly 数据集
  18. 为了进行问答/信息提取训练,可以替换下一行的断言条件
  19. 这里我们筛选出摘要类别的数据
  20. 将数据集拆分为训练集和测试集,其中测试数据用于最终评估
  21. 2. 模型选择
  22. 3. 微调超参数
  23. 默认情况下,指令调整设置为 false。因此,要使用指令调整数据集,需显式设置
  24. 4. 评估和迭代
  25. 5. 模型部署
  26. 全篇小结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 循环神经网络(RNN)与序列数据处理实战
  • OpenClaw 实战部署指南:配置 AI 远程员工与自动化工作流
  • AI 时代细胞生物学最新进展综述
  • CellWhisperer 多模态学习实现单细胞数据对话式探索
  • Python 核心优势、应用场景及就业市场分析
  • 位运算实战:判断字符唯一性与查找缺失数字
  • Whisper v0.2 语音转文字工具安装与使用指南
  • Spring Boot 整合 Nacos 配置中心:动态刷新与多环境管理
  • 大疆无人机如何导出日志并解析
  • 采摘机器人毕业设计:基于 ROS 2 与 STM32 的感知控制实现
  • MoltBot 接入钉钉 Stream 流式接口配置指南
  • Flask 工厂模式与蓝图设计:构建可扩展大型应用架构
  • Python 爬虫自动化选股:潜力股筛选实战
  • 开源 PPT 生成大模型技术原理与实战效果对比
  • OpenClaw 跨平台安装实战:Windows 与 Ubuntu 环境配置
  • 2022 年信奥赛 C++ 提高组 CSP-S 初赛真题及答案解析(完善程序第 2 题)
  • 利用腾讯云 HAI 与 DeepSeek 快速搭建个人网页
  • 昇腾平台 DeepSeek-R1 与 Qwen2.5 强化学习训练优化实践
  • MaxKB v1.4.0 发布:支持 OpenAI、Ollama 和本地向量模型
  • C++ 函数重载:原理、匹配规则与底层实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online