AWS Machine Learning Blog

Fine-tune LLM with Databricks Unity Catalog and Amazon SageMaker AI

8.5内容质量
Fine-tune LLM with Databricks Unity Catalog and Amazon SageMaker AI

TL;DR · AI 摘要

本文介绍了如何使用Databricks Unity Catalog和Amazon SageMaker AI进行大型语言模型的微调,确保数据治理和安全合规的同时实现高效的机器学习工作流。

核心要点

  • 通过Databricks Unity Catalog和Amazon SageMaker AI结合Amazon EMR Serverless,可以实现对大型语言模型的高效微调。
  • 该方案包括从Unity Catalog读取训练数据、使用EMR Serverless进行预处理、使用SageMaker AI训练模型并追踪数据血缘。
  • 这种方法确保了数据治理和安全合规,特别适用于受监管行业和生产工作负载。

结构提纲

按章节快速跳转。

  1. 介绍如何在使用Databricks Unity Catalog时,利用Amazon SageMaker AI进行大型语言模型的微调。

  2. 讨论在使用Databricks Unity Catalog和Amazon SageMaker AI时可能遇到的数据治理和安全合规挑战。

  3. 展示如何构建一个安全、完整的大型语言模型微调工作流,整合Unity Catalog和Amazon SageMaker AI。

  4. 详细说明各个组件在解决方案中的作用,如Amazon SageMaker AI Studio、Amazon EMR Serverless等。

  5. 列出使用该解决方案所需的AWS服务权限和其他配置。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 大型语言模型微调

金句 / Highlights

值得收藏与分享的关键句。

  • 通过Databricks Unity Catalog和Amazon SageMaker AI结合Amazon EMR Serverless,可以实现对大型语言模型的高效微调。

    引言

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 该方案包括从Unity Catalog读取训练数据、使用EMR Serverless进行预处理、使用SageMaker AI训练模型并追踪数据血缘。

    解决方案概述

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 这种方法确保了数据治理和安全合规,特别适用于受监管行业和生产工作负载。

    先决条件

    ⬇︎ 下载 PNG𝕏 分享到 X
#Databricks Unity Catalog#Amazon SageMaker AI#大型语言模型#数据治理#机器学习
打开原文

使用 Databricks Unity Catalog 和 Amazon SageMaker AI 对大语言模型进行微调 | Amazon Web Services

URL 源:https://aws.amazon.com/blogs/machine-learning/fine-tune-llm-with-databricks-unity-catalog-and-amazon-sagemaker-ai/

发布时间:2026-05-13T09:22:42-08:00

Markdown 内容: 当您使用 Amazon SageMaker AI 微调大型语言模型 (LLM) 并结合 Databricks Unity Catalog 时,可能会面临一些独特的挑战,例如如何在使用一流的机器学习 (ML) 服务的同时保持严格的数据治理。

Unity Catalog 负责管理和权限控制,而底层数据存储在 Amazon Simple Storage Service (Amazon S3) 中,如果您选择 AWS 作为 Databricks 工作区的云环境。当 SageMaker AI 训练作业 访问这些数据时,必须保留并不得绕过 Unity Catalog 的细粒度授权模型。如果没有结构化的集成模式,您可能会面临策略执行不一致、审计缺口和合规性风险。例如,如果 SageMaker AI 训练作业在读取 S3 对象时绕过 Unity Catalog 的授权模型,您将无法跟踪哪些数据训练了哪些模型。这在受监管行业和生产工作负载中会带来严重的合规性风险。

本文档展示了如何构建一个安全且完整的 LLM 微调工作流,该工作流通过使用 Amazon EMR Serverless 进行预处理,将 Unity Catalog 与 Amazon SageMaker AI 集成。该解决方案演示了如何安全访问受控数据,在服务之间维护数据血缘关系,微调 Ministral-3-3B-Instruct 模型,并将训练好的工件注册回 Unity Catalog。通过这种方法,您可以在继续使用现有服务的同时,保持中央治理,跟踪数据血缘关系而不牺牲安全性和合规性要求。

解决方案概述

本篇文档描述的工作流实现了以下目标:

  1. 从 Unity Catalog 管理的表中读取训练数据,并应用适当的治理控制。
  2. 使用 EMR Serverless 和 Apache Spark 进行数据预处理
  3. 使用 SageMaker AI 训练作业微调 Ministral-3-3B-Instruct 模型
  4. 在 Unity Catalog 中跟踪从源数据到训练模型的数据血缘关系

下图展示了架构:

图 1:架构图,显示 AWS 云与 Unity Catalog 的集成,用于使用 Amazon SageMaker、Amazon EMR 和 Hugging Face 进行机器学习模型微调。
图 1:架构图,显示 AWS 云与 Unity Catalog 的集成,用于使用 Amazon SageMaker、Amazon EMR 和 Hugging Face 进行机器学习模型微调。

图 1:解决方案架构,展示 SageMaker AI Studio、EMR Serverless 和 Databricks Unity Catalog 之间的数据流

组件目的 Amazon SageMaker AI Studio – JupyterLab Space 工作流编排和模型训练 Amazon EMR Serverless 基于 Apache Spark 的数据预处理,无需管理集群 Databricks Unity Catalog 元数据目录、治理和血缘追踪 Hugging Face 访问预训练模型 Amazon S3 数据和模型工件的存储 AWS Secrets Manager 凭据管理

在此解决方案中,用户登录到 SageMaker AI Studio 并使用 EMR Serverless 作业启动数据预处理。EMR Serverless 作业使用 Unity Catalog 的 Open REST API 和存储在 AWS Secrets Manager 中的 OAuth 凭据,访问并处理来自 Unity Catalog 管理的 S3 存储桶中的数据。数据处理完成后,在 Unity Catalog 中创建一个包含处理后数据的表。然后,SageMaker AI 训练作业从 Hugging Face 获取 Ministral-3-3B-Instruct 模型,在处理后的表上对其进行微调,并将生成的模型工件存储回 Unity Catalog 管理的 S3 存储桶。最后,将模型注册到 Unity Catalog 并创建外部数据血缘关系。此完整工作流集成了 SageMaker AI、EMR Serverless 和 Databricks Unity Catalog,以实现受控且可扩展的 LLM 微调。

先决条件

开始之前,请验证您是否具备以下条件:

服务 要求 细节 AWS AWS 账户 权限适用于以下 AWS 服务

Amazon VPC 配置具有互联网访问权限的 VPC 和安全组 Databricks 为工作区设置 Unity Catalog 为您的工作区设置 Unity Catalog。 设置外部访问 在元存储上启用外部数据访问。此选项默认关闭。 生成 OAuth 凭证 为程序化访问 Databricks 创建 OAuth 凭证(客户端 ID 和密钥)

实施步骤

本部分详细介绍使用 Unity Catalog 治理的数据对 LLM 进行微调的完整过程。下载完整的笔记本 _LLM_Finetunig_SageMaker_AI_Unity_Catalog.ipynb_,并在 SageMaker AI Studio 中按照以下步骤运行它:

  1. 导航到 Amazon SageMaker AI 控制台
  2. 如果没有现有的域,请使用快速设置创建一个 SageMaker Studio 域
  3. 登录 SageMaker AI Studio。
  4. 使用以下配置创建一个 JupyterLab 空间:
  5. 实例类型:ml.m5.2xlarge
  6. 镜像:Sagemaker 分发版 3.8.0
  7. 存储:5 GB
  1. 上传下载的 Jupyter 笔记本。
  2. 打开笔记本(选择 Python3 (ipykernel) 作为内核)。

接下来的部分概述了关键步骤的高层次概览。请参阅笔记本以获取完整的代码实现。

第一步:AWS 设置

完成此步骤后,您将完成以下设置。

需求详情 Amazon S3 存储桶 创建一个由 Unity Catalog 管理的 S3 存储桶,并上传数据 AWS Secrets Manager 创建一个密钥来存储 Databricks OAuth 凭证 AWS IAM 角色 创建 SageMaker AI 执行角色和 EMR Serverless 作业运行时角色

S3 存储桶设置 / 上传数据集

该笔记本使用 SEC EDGAR(美国证券交易委员会电子数据收集、分析和检索)文件数据 进行大语言模型的微调。SEC EDGAR 是 SEC 的公司文件公共数据库。解决方案通过 SEC 的公共 API 获取 2023-2024 年 S&P 500 公司的 10-K 和 10-Q 表格,下载文件,提取 风险因素 部分,并将数据上传到 Amazon S3 存储桶中。文件以 JSON 格式存储,每个记录包含公司标识符(CIK)、股票代码、实体名称、文件类型、财政期间以及公司描述潜在业务、财务、监管和运营风险的完整文本。上传数据后,您将在 S3 存储桶中看到以下结构:

s3://aws-blog-smai-uc-bucket-ACCOUNTID/

├── raw/

│ └── risk_factors/

│ ├── form_type=10-K/

│ │ └── fiscal_year=2024/

│ │ └── cik=0000320193/

│ │ └── risk_factors.json

│ └── form_type=10-Q/

│ └── fiscal_year=2024/

│ └── quarter=1/

│ └── cik=0000320193/

│ └── risk_factors.json

├── curated/

└── ml/

存储 Databricks 凭证

Databricks 支持多种身份验证和授权方法来控制对资源的访问。此解决方案使用 OAuth 服务主体 (OAuth M2M),它为服务主体提供短期 OAuth 令牌。使用 OAuth 2.0 是访问 Databricks 控制台外部的首选认证协议。OAuth 授权需要客户端 ID 和客户端密钥。当服务主体经过身份验证并获得同意后,OAuth 会颁发一个访问令牌供 SDK 或其他工具使用。首先,按照 Databricks 文档 创建一个服务主体并生成 OAuth 密钥。然后,将客户端 ID 和密钥存储在 AWS Secrets Manager 中,以安全地管理和检索凭证。

创建 IAM 角色

在后续步骤中,您将使用 EMR Serverless 作业和 SageMaker AI 训练作业。两者都需要 IAM 角色来访问其他 AWS 服务并执行作业。查阅 Amazon EMR Serverless 作业运行时角色如何使用 SageMaker AI 执行角色 以了解 EMR Serverless 作业和 SageMaker AI 如何与 IAM 一起工作。以下是每个 IAM 角色的示例 IAM 策略。请参考笔记本中的 _1-4 创建 IAM 角色_ 部分以获取完整的实施指导。

EMR Serverless 运行时角色

code
emr_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                f"arn:aws:s3:::{UC_MANAGED_BUCKET}/*",
                f"arn:aws:s3:::{UC_MANAGED_BUCKET}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                f"arn:aws:secretsmanager:{AWS_REGION}:{AWS_ACCOUNT_ID}:secret:databricks/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_ID}:*"
        }
    ]
}

JSON

SageMaker AI 执行角色策略

sagemaker_policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ f"arn:aws:s3:::{UC_MANAGED_BUCKET}/*", f"arn:aws:s3:::{UC_MANAGED_BUCKET}" ] }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ f"arn:aws:secretsmanager:{AWS_REGION}:{AWS_ACCOUNT_ID}:secret:databricks/*" # 所有 Databricks 密钥 ] }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams" ], "Resource": f"arn:aws:logs:{AWS_REGION}:{AWS_ACCOUNT_ID}:*" }, { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

code

JSON

## 第二步:设置 Databricks Unity Catalog

接下来,在 Databricks Unity Catalog 侧完成以下设置步骤,并通过 Databricks SDK 验证对 Unity Catalog 表的访问权限。

设置完成后,您将拥有以下 Unity Catalog 结构,并且您的服务主体具有适当的权限:

├── RAW 数据库 (原始数据) │ └── RISK_FACTORS 表 (指向 UC_MANAGED_BUCKET/raw/) ├── TRAINING 数据库 (整理数据) │ └── (整理后的训练数据) └── MODEL 数据库 (机器学习模型) └── (模型构件和版本)

code

在完成 Unity Catalog 设置后,请初始化您的 Databricks 客户端并测试与 Unity Catalog 的连接,然后再继续下一步。该笔记本使用 AWS 密钥管理器检索客户端 ID 和密钥。成功认证后,您可以获取 Unity Catalog 表的详细信息,例如存储位置和表格式。

初始化 Databricks 客户端

from databricks.sdk import WorkspaceClient

w = WorkspaceClient( host=UNITY_WORKSPACE_URL, client_id=DATABRICKS_CLIENT_ID, client_secret=DATABRICKS_CLIENT_SECRET )

table_info = w.tables.get(f"{UNITY_CATALOG_NAME}.{UNITY_SCHEMA_DATA}.{UNITY_TABLE_NAME}") print(f"表: {table_info.name}") print(f"存储位置: {table_info.storage_location}") print(f"表格式: {table_info.data_source_format}")

输出: 表: RISK_FACTORS 存储位置: s3://aws-blog-smai-uc-bucket-ACCOUNTID/raw/risk_factors 表格式: DataSourceFormat.DELTA

code

Python

## 第三步:设置 EMR Serverless 应用程序

在此步骤中,您将创建一个带有互联网访问权限的 VPC 的 EMR Serverless 应用程序。解决方案首先从 Unity Catalog 中识别 S3 存储桶位置,然后 EMR Serverless 作业从该 S3 存储桶读取并写入 Delta 表。由于截至 2026 年 2 月,EMR Serverless 默认不包含 Delta Lake 支持,因此在初始化阶段,Spark 应用程序必须从 Maven Central 仓库下载 Delta Lake JAR 文件并通过互联网进行安装。如果没有互联网访问权限,此下载将失败,导致 Spark 应用程序无法解析 Delta 表格式,从而在启动时失败。请配置您的 EMR Serverless 应用程序以使用现有具有互联网访问权限的子网,或者参考笔记本中的 _1.4 设置 VPC 和互联网访问_ 部分进行配置。

## 第四步:使用 EMR Serverless 作业进行数据预处理

接下来,创建一个预处理脚本并提交一个 EMR Serverless 作业。预处理脚本从 Delta 表中读取 SEC EDGAR 风险因素,过滤和清理文本数据,将其格式化为用于微调的指令式提示,并将处理结果作为 Delta 表写入 S3。

在您的 EMR Serverless 作业 Spark 配置中,配置 `sparkSubmitParameters` 以从 Maven Central 仓库下载 Delta Lake 库,并设置 Delta 特定的 SQL 扩展和目录配置如下。这些参数允许 EMR Serverless Spark 应用程序在 S3 中读取和写入 Delta 表以进行数据预处理。请参阅笔记本中的 _4-3 提交 EMR 作业_ 部分以获取完整代码实现。

jobDriver={ 'sparkSubmit': { 'sparkSubmitParameters': ' '.join([ '--packages io.delta:delta-spark_2.12:3.2.0', '--conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension', '--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog' ]) }

code

JSON

EMR Serverless 作业完成后,将预处理的训练数据注册为 Unity Catalog 整理数据库中的 Delta 表,指向 S3 中的整理数据。使用 Databricks SDK 通过 Databricks Serverless SQL 仓库执行 SQL 语句,在 Unity Catalog 中整理数据库内创建表。

## 第五步:使用 SageMaker AI 训练作业进行微调

在准备好训练数据集之后,使用 SageMaker AI 训练作业对大语言模型进行微调。此解决方案使用托管在 Hugging Face 上的预训练 [Mistral-3-3B-Instruct-2512 模型](https://huggingface.co/mistralai/Ministral-3-3B-Instruct-2512)。这是一个由 Mistral AI 设计的紧凑型 30 亿参数指令遵循模型,旨在高效部署同时保持强大的推理任务性能。

### 设置 SageMaker AI 训练作业

首先,创建一个训练脚本并将其上传到 S3 存储桶。此笔记本中的训练脚本使用高效内存的技术对 Ministral-3B-Instruct 模型进行微调。它将模型加载为 8 位浮点数(FP8)量化以减少内存使用,然后应用低秩适应(LoRA)技术,仅训练模型参数的 1-2%,而不是全部 30 亿个参数。该脚本从前面步骤中预处理的数据读取,并使用 1,024 个标记的上下文窗口进行分词。有关样本实现,请参阅笔记本中的 _5.1 创建训练脚本_ 部分。

接下来,配置并提交训练作业。此解决方案使用一个 ml.g5.16xlarge 实例进行模型训练,并通过 SDK 将前几步处理数据的 S3 位置作为训练输入传递。SageMaker AI 训练作业将在作业完成后将微调后的模型文件上传到 S3 存储桶。

### 第六步:在 Unity Catalog 中注册模型元数据

在将模型元数据上传到 S3 后,使用 Databricks 的 Managed MLflow 通过 SDK 在 Unity Catalog 的 ML 架构中注册微调后的模型。使用 Unity Catalog,您可以创建一个 Model 对象,用于访问控制、生命周期管理和发现 ML 模型。Databricks 提供了 Unity Catalog 中的 MLflow 模型注册功能。您可以通过创建 MLflow 实验来记录训练元数据(超参数、源表、训练作业详情),并使用版本化和文档化的模型,包括源数据血缘、训练服务和模型规范进行注册。完成模型注册后,您可以在 Unity Catalog 控制台中查看它。

![图 2:Databricks Unity Catalog 模型注册显示经过 SEC EDGAR 风险因素分析微调的 ministral_3b_sec_risk_factors 模型版本 1。](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/04/30/Ml-19973-2.png)

### 第七步:在 Unity Catalog 中创建数据血缘

最后,在 Unity Catalog 中创建数据血缘。跟踪数据血缘可以提供每个模型所用数据的可见性,从而为合规性和治理创建审计追踪。这还有助于通过追溯问题到其源头简化调试。对于运行在 Databricks 外的数据工作负载(例如,EMR Serverless 作业、SageMaker AI 训练作业),您可以通过 [External Metadata API](https://docs.databricks.com/api/workspace/externalmetadata) 和 [External Lineage API](https://docs.databricks.com/api/workspace/externallineage) 添加外部元数据和血缘关系。这种“自带数据血缘”能力(截至 2026 年 4 月处于公测阶段)可以让您在 Unity Catalog 中获得完整的血缘视图。

使用 EMR Serverless 作业和 SageMaker AI 训练作业创建预处理作业的外部元数据对象。然后,使用外部血缘关系创建上游和下游血缘关系。您需要以下内容:

*   EMR Serverless 作业外部元数据对象
    *   上游血缘关系(原始表 → EMR Serverless 作业)
    *   下游血缘关系(EMR Serverless 作业 → 预处理表)

*   SageMaker AI 训练作业外部元数据对象
    *   上游血缘关系(预处理表 → SageMaker AI 训练作业)
    *   下游血缘关系(SageMaker AI 训练作业 → 模型版本)

按照上述步骤创建外部数据血缘关系后,您可以在 Unity Catalog 控制台中查看从源数据到最终注册的 ML 模型的数据血缘图。

![图 3:数据血缘图从 S3 导入 SEC EDGAR 风险因素数据,经过 EMR 预处理和 SageMaker 训练,最终到达 Unity Catalog 中的生产就绪 ML 模型。](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/04/30/Ml-19973-3.png)

### 清理

测试完解决方案后,请删除以下资源以避免持续收费:

*   EMR Serverless 应用程序
*   S3 存储桶和对象
*   IAM 角色和策略
*   AWS 密钥管理服务密钥
*   VPC 资源
*   Unity Catalog 资源(目录、架构、表和服务主体)

请参阅笔记本中的 _第八步:清理资源_ 部分以获取逐步指导。

### 结论

在这篇文章中,我们向您展示了如何将 Databricks Unity Catalog 与 Amazon SageMaker AI 结合起来,以实现跨服务的受治理的 LLM 微调。通过结合使用 Unity Catalog 来集中存储元数据、访问控制和血缘关系,以及使用 Amazon EMR Serverless 进行预处理和 SageMaker AI 训练作业来进行可扩展的模型开发,您可以在使用 AWS 机器学习能力的同时保持治理连续性。我们演示了如何安全地访问由 Unity Catalog 管理的数据、使用 Spark 进行预处理、对 Ministral-3-3B-Instruct 模型进行微调、将模型重新注册回 Unity Catalog 以及跨系统捕获血缘关系。通过这种方法,您可以在支持您的安全和合规需求的同时采用专门的架构。

要开始,请下载笔记本,在您的 AWS 账户中部署参考架构,并使用由 Unity Catalog 管理的数据集测试工作流。将此模式作为基础,构建跨多服务环境的受治理的生产就绪 ML 和生成式 AI 工作负载。然后,尝试将此模式应用于其他 LLM 和更大的数据集。您有任何问题吗?请在评论中分享您的问题和反馈。

* * *

### 关于作者