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の認可モデルをバイパスすると、どのデータがどのモデルをトレーニングしたかの可視性が失われます。これは、規制産業や本番ワークロードにおいて重大なコンプライアンスリスクを引き起こします。
この投稿では、Unity CatalogとAmazon SageMaker AIを統合し、Amazon EMR Serverlessで前処理を行う、安全で完全なLLMファインチューニングワークフローの構築方法を紹介します。このソリューションは、管理されたデータへの安全なアクセス、サービス間での系列の維持、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ジョブは、AWS Secrets Managerに保存されたOAuth認証情報を使用してUnity CatalogのオープンREST APIを介し、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とシークレット)を作成 |
詳細手順
ステップ1:AWS設定
このステップを完了すると、以下の設定が完了します:
- Unity Catalog管理下のS3バケットを作成し、データをアップロード
- Databricks OAuth認証情報を保存するAWS Secrets Managerのシークレットを作成
- SageMaker AI実行ロールとEMR Serverlessジョブランタイムロールを作成
ノートブックでは、LLMファインチューニングに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とクライアントシークレットが必要です。まず、Databricksのドキュメントに従ってサービスプリンシパルを作成し、OAuthシークレットを生成します。次に、クライアントIDとシークレットをAWS Secrets Managerに保存して安全に管理および取得できるようにします。
IAMロールの作成
後続のステップでは、EMR ServerlessジョブとSageMaker AIトレーニングジョブを使用します。どちらも他のAWSサービスにアクセスしてジョブを実行するためにIAMロールが必要です。EMR ServerlessとSageMaker AIがIAMとどのように連携するかについては、関連ドキュメントを参照してください。以下は各IAMロールのサンプルポリシーです。
ステップ2: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テーブルの詳細を取得できます。
ステップ3: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アプリケーションを、インターネットアクセスがある既存のサブネットを使用するように設定するか、VPC設定に関するセクションを参照してください。
(注:原文が長いため、こちらは重要な詳細を保持した書き直しです。)