當您在使用Amazon SageMaker AI微調大型語言模型(LLM)時,如果同時使用Databricks Unity Catalog,可能會面臨獨特挑戰,例如如何在利用最佳機器學習服務的同時維護嚴格的資料治理。
Unity Catalog負責管理後設資料和許可權,而當您選擇AWS作為Databricks工作空間的雲環境時,底層資料儲存在Amazon Simple Storage Service (Amazon S3) 中。當SageMaker AI訓練作業訪問這些資料時,必須保留且不能繞過Unity Catalog的細粒度授權模型。沒有結構化的整合模式,您將面臨策略執行不一致、審計漏洞和合規風險。例如,如果SageMaker AI訓練作業在讀取S3物件時繞過Unity Catalog的授權模型,您將無法獲知哪些資料訓練了哪些模型。這在受監管行業和生產工作負載中會帶來嚴重的合規風險。
本文演示瞭如何構建一個安全的、完整的LLM微調工作流,將Unity Catalog與Amazon SageMaker AI整合,並使用Amazon EMR Serverless進行預處理。該解決方案展示瞭如何安全訪問受治理的資料、跨服務保持資料血緣、微調Ministral-3-3B-Instruct模型,並將訓練好的工件註冊回Unity Catalog。透過這種方法,您可以繼續使用現有服務,同時保持中央治理,在不影響安全或合規要求的情況下追蹤資料血緣。
解決方案概述
本工作流實現了以下功能:
- 從Unity Catalog管理的表中讀取帶有適當治理控制的訓練資料
- 使用EMR Serverless和Apache Spark預處理資料
- 使用SageMaker AI訓練作業微調Ministral-3-3B-Instruct模型
- 在Unity Catalog中追蹤從源資料到訓練模型的整個資料血緣
架構圖如下:

元件說明
- Amazon SageMaker AI Studio – JupyterLab空間:工作流編排和模型訓練
- Amazon EMR Serverless:基於Spark的資料預處理,無需叢集管理
- Databricks Unity Catalog:後設資料目錄、治理和血緣追蹤
- Hugging Face:訪問預訓練模型
- Amazon S3:儲存資料和模型工件
- AWS Secrets Manager:憑證管理
在此解決方案中,使用者登入SageMaker AI Studio,並使用EMR Serverless作業啟動資料預處理。EMR Serverless作業透過Unity Catalog的開放REST API(使用儲存在AWS Secrets Manager中的OAuth憑證)訪問和處理Unity Catalog管理的S3桶中的資料。處理資料後,在Unity Catalog中建立一個包含處理資料的表。然後,SageMaker AI訓練作業從Hugging Face檢索Ministral-3-3B-Instruct模型,對處理後的表進行微調,並將生成的模型工件儲存回Unity Catalog管理的S3桶。最後,在Unity Catalog中註冊模型並建立外部資料血緣。
前提條件
開始前,請確保您具備以下條件:
| 服務 | 要求 | 詳細資訊 | |------|------|----------| | AWS | AWS賬戶 | 以下AWS服務的許可權 | | Amazon SageMaker AI | 已配置 | | | Amazon EMR Serverless | 已配置 | | | Amazon S3 | 已配置 | | | AWS Secrets Manager | 已配置 | | | AWS IAM | 已配置 | | | Amazon VPC | 已配置 | | | Amazon CloudWatch Logs | 已配置 | | | Amazon ECR | 已配置 | | | Amazon VPC | VPC和安全組配置了網際網路訪問 | | | Databricks | 為工作空間設定Unity Catalog | 按照Databricks文件設定Unity Catalog | | Databricks | 設定外部訪問 | 在Metastore上啟用外部資料訪問(預設關閉) | | Databricks | 生成OAuth憑證 | 建立用於Databricks程式設計訪問的OAuth憑證(客戶端ID和金鑰) |
詳細步驟
第一步:AWS設定
完成此步驟後,您將完成以下設定:
- 建立由Unity Catalog管理的S3桶並上傳資料
- 在AWS Secrets Manager中建立儲存Databricks OAuth憑證的金鑰
- 建立SageMaker AI執行角色和EMR Serverless作業執行時角色
筆記本使用SEC EDGAR(美國證券交易委員會電子資料收集、分析和檢索系統)的申報資料用於LLM微調。SEC EDGAR是SEC的公司申報公共資料庫。該解決方案透過SEC的公共API獲取2023-2024年標普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和客戶端金鑰。首先,按照Databricks文件建立服務主體並生成OAuth金鑰。然後,將客戶端ID和金鑰儲存在AWS Secrets Manager中以安全管理和檢索。
建立IAM角色
後續步驟中,您將使用EMR Serverless作業和SageMaker AI訓練作業。兩者都需要IAM角色來訪問其他AWS服務並執行作業。請參閱相關文件瞭解EMR Serverless和SageMaker AI如何與IAM配合使用。以下是每個IAM角色的示例策略。
第二步:Databricks Unity Catalog設定
接下來,在Databricks Unity Catalog端完成以下設定步驟,並透過Databricks SDK確認對Unity Catalog表的訪問。
要求:
- 配置外部位置:將S3桶註冊為Unity Catalog中的外部位置,以設定對S3中資料的訪問。
- 建立Unity Catalog資料庫物件:在Unity Catalog環境中設定以下資料庫物件:目錄、模式、外部表。
- 授予許可權:為服務主體授予必要的許可權。
完成後,您將擁有以下Unity Catalog結構,併為服務主體配置了適當的許可權:
UNITY_CATALOG_NAME
├── UNITY_SCHEMA_DATA (raw)
│ └── UNITY_TABLE_NAME (指向UC_MANAGED_BUCKET/raw/的外部表)
├── UNITY_SCHEMA_TRAINING (curated)
│ └── (處理後的訓練資料)
└── UNITY_SCHEMA_MODEL (ml)
└── (模型工件和版本)Unity Catalog設定完成後,初始化Databricks客戶端並測試到Unity Catalog的連線。筆記本使用AWS Secrets Manager檢索客戶端ID和金鑰。成功認證後,您可以檢索Unity Catalog表的詳細資訊,例如儲存位置和表格式。
第三步:EMR Serverless應用程式設定
在此步驟中,您將建立一個使用具有網際網路訪問的VPC的EMR Serverless應用程式。該解決方案首先從Unity Catalog識別S3桶位置,然後EMR Serverless作業讀取並寫入該S3桶中的Delta表。由於截至2026年2月,EMR Serverless預設不包含Delta Lake支援,Spark應用程式必須在初始化期間從Maven中央倉庫透過網際網路下載Delta Lake JAR檔案。如果沒有網際網路訪問,此下載將失敗,Spark應用程式無法解析Delta表格式,導致作業啟動失敗。請配置您的EMR Serverless應用程式使用具有網際網路訪問的現有子網,或參考相關部分設定VPC。
(注:原文較長,此處為改寫後的內容,保留了所有重要細節。)