Open80
SageMaker AI のドキュメント読んでみた - ドメイン、Autopilot、JumpStart -

はじめに
一度はドキュメントの内容を通しで読んでみたかった。
完全に自分用なので、ほかの人の役には立たないと思います。
自分の解釈は * で示しています。たまにコンソールのスクショを載せています。
ドキュメントのすべてを記載しているわけではありません。

SageMaker AI とは?
- 機械学習(ML)サービス
- ML モデルを構築・トレーニング・デプロイできる
- 2024.12.3 に名称変更(元は SageMaker)

SageMaker AI による機械学習の概要
- 一般的なMLワークフロー
- サンプルデータ生成
- 概要
- トレーニングに必要
- 必要なデータは、モデルで解決するビジネス上の問題によって異なる
- SageMaker AI では
- SageMaker Python SDK により、SageMaker API を使用してデータを前処理できる
- 内訳
- データの取得
- 社内のサンプルデータリポジトリ
- 公開されているデータセット
- 通常はデータセットを 1 つのリポジトリに取り込む
- データのクリーンアップ
- データの国別属性に United States と US がある場合、整合性をとるために編集する(* 統一するという趣旨と思われる)
- データ準備・変換
- パフォーマンス向上のため、追加のデータ変換を実施する場合あり
- 航空機の助氷が必要な状況を予測するモデルの場合、温度と湿度の属性を個別に使用する代わりに、それらの属性を新しい属性に組み合わせて、より優れたモデルを作成できる
- データの取得
- 概要
- モデルのトレーニング
- モデルのトレーニング
- アルゴリズムまたは事前トレーニング済みの基本モデルが必要
- SageMaker が提供するアルゴリズムを利用できる
- UI ベースのトレーニングソリューションに SageMaker JumpStart がある
- トレーニングにはコンピューティングリソースが必要なところ、単一の汎用インスタンスからGPUインスタンスの分散クラスターまで様々なリソースを利用できる
- モデルの評価
- トレーニング後、推論の精度が許容できるか評価する
- SageMaker Python SDK を利用できる
- 推論のリクエストをモデルに送信する
- モデルのトレーニング
- モデルのデプロイ
- 従来は、モデルをアプリに統合してデプロイ前にモデルを再設計していた
- SageMaker AIでは、モデルを個別にデプロイしてアプリのコードから切り離すことができる
- 継続的なサイクル
- モデルをデプロイした後、推論を監視し、より高品質なデータを収集し、モデルを評価してドリフトを特定する
- 次に、新しく収集した高品質なデータを含めるようにトレーニングデータを更新して、推論の精度を高める
- サンプルデータ生成

SageMaker AI のセットアップ
- クイックセットアップ
- デフォルト設定でセットアップ
- カスタムセットアップ
- 認証方法
- IAM Identity Center
- ドメインと同じリージョンに存在する必要あり
- アクセスポータルURLを利用してドメインにアクセスできる
- ドメインへのアクセスを特定の VPC などに制限したい場合は、IAM 認証を利用する必要がある
- * アクセスポータルURLからのアクセスとなるため、IAM ポリシーが利用できないことが理由と思われる
- 別途ソリューションを利用すれば IAM Identity Center でも制限できる
- IAM
- アカウントにログインした後、SageMaker AIコンソールを通じてドメインにアクセス可能
- IAM ポリシーを利用して、ドメインへのアクセスを特定の VPC などに制限できる
- IAM Identity Center
- IAM ロール
- 既存のロールを選択するか、新しいロールを作成する
- 新しいロールを作成する場合、アクセスを許可する ML アクティビティをチェックする
- アプリケーションの設定を行う
- 前のステップで有効にしたアプリケーションを構成する
- Studio UI のカスタマイズ
- Studio 表示されるアプリやツールをオフにできる
- * アプリやツールへのアクセスは可能
- Studio 表示されるアプリやツールをオフにできる
- ネットワーク設定
- ストレージ設定
- EFS、EBSが作成される
- EBSのサイズは、Code Editor と JupyterLab スペースの両方で使用される
- 認証方法

ドメイン
- ドメインの構成
- 関連づけられた EFS ボリューム
- 承認されたユーザーのリスト
- さまざまなセキュリティ、アプリケーション、ポリシー、VPC構成
- ユーザープロファイル
- ドメイン内の単独ユーザー
- ドメインにオンボードされた時に作成
- 共有スペース
- 共有 JupyterServer アプリケーション
- 共有ディレクトリ
- ドメイン内のすべてのユーザーは共有スペースにアクセス可能
- アプリ
- ユーザーのノートブック、ターミナル、コンソールの読み取りと実行エクスペリエンスをサポートするアプリ
- JupyterServer、KernelGateway、RStudioServerPro、RSession
- ユーザーは複数のアプリを同時にアクティブにできる
- アプリケーションのメンテナンス
- Amazon SageMaker Studio Classic JupyterServer および KernelGateway、SageMaker Canvas、および Amazon SageMaker Data Wranglerアプリ基盤のソフトウェアに対して、少なくとも 90 日に 1 回セキュリティとパフォーマンスの更新を実施する
- OSのアップデートなど一部のメンテナンスでは、メンテナンスウィンドウ中に SageMaker AI がアプリを短時間オフラインにするため、その間は操作を実行できない
- メンテナンスアクティビティの進行中は、アプリの状態が InService から Pending に移行
- メンテナンス完了後、InService に戻る
- パッチ適用が失敗すると、Failed になる
- Failed の場合は、同じタイプの新しいアプリを作成したほうが良い

SageMaker Studio UI でMLツールとアプリを非表示にする
- 非表示にした場合も、ツール・アプリへのアクセスはブロックされない
- Studio Classic では利用できない
- ドメインレベルとユーザーレベルでカスタマイズ可能
- ドメインレベル
- ドメイン内のすべてのユーザーのデフォルトが設定される
- ユーザーレベル
- ドメインレベルの設定よりも優先される

SageMaker Studio UI でインスタンスタイプとイメージを非表示にする
- Studio で選択できるインスタンスタイプとイメージが非表示にするルールを設定できる
- * Studio で Code Editor、JupyterLab のスペースを起動する際にインスタンスやイメージを選択できるが、それが非表示になる
- 非表示に設定したインスタンスタイプとイメージは選択して、新しいスペースの実行はできない
- 現在実行しているスペースには影響はない
- 影響を受けるユーザーが非表示のリソースを含むスペースを実行しようとすると、関連するリソースが管理者によって無効にされていることが通知される
- Studio Classic では利用できない
- ドメインレベル
- ドメイン内のすべてのユーザーのデフォルトが設定される
- ユーザーレベル
- ドメインレベルの設定よりも優先される

複数ドメインの概要
- 単一のリージョンに複数のドメインを作成可能
- 各ドメインには個別のドメイン設定可能
- 同じアカウント内の単一リージョンの複数ドメインに対し、同じユーザープロファイルは追加できない
- * 単純に同じ名前のユーザープロファイルは作成できたから、どのような意味か不明。

ドメインのタグ
- タグ付けがサポートされているリソースがドメイン内で作成されると、ドメインごとに自動的にタグづけされる
- ドメインARNタグが付与
- 2022 年 11 月 30 日以降の場合
- コスト配分タグにも使用できる
- Studio、Studio Classic に表示されるリソースはドメインに基づいて自動的にフィルタリングされる
- リソースに関連づけられた sagemaker:domain-arn タグを利用して行われる
- 他のドメインで作成されたリソースは自動的に非表示になる
- リソースのフィルタリングの改善には、バックフィルを利用する
- タグが付いていないリソースにドメインタグを追加することで、フィルタリングを改善
- resourcegroupstaggingapi の tag-resources コマンドを実行する
aws resourcegroupstaggingapi tag-resources \ --resource-arn-list arn:aws:sagemaker:region:account-id:space/domain-id/space-name \ --tags sagemaker:domain-arn=arn:aws:sagemaker:region:account-id:domain/domain-id
- 共有スペースで作成されたすべてのリソースは、その特定の共有スペースに自動的にフィルタリングされる

ドメインリソースの分離
- IAM ポリシーの条件キーを利用して制限する
- aws:ResourceTag/${TagKey} or sagemaker:ResourceTag/${TagKey}
- この条件キーを含まないリソースタイプでは使えない
- IAMポリシーはドメインの IAM 実行ロールにアタッチする

ドメインのデフォルト設定
- ドメインレベルでリソースのデフォルトを設定できる
- ドメイン内のリソース作成に使用される
- デフォルトユーザー設定
- デフォルトスペース設定
- コンテキストキー
- IAM ポリシーに追加でき、これによりユーザーがそられのフィールドに渡すことができる値を制限できる
- sagemaker:ImageArns
- sagemaker:VpcSecurityGroupIds
- sagemaker:DomainSharingOutputKmsKey

カスタムタグの伝播
- ドメイン、ユーザープロファイル、スペースレベルで設定されたカスタムタグを、Studio、JupyterLab、Code Editor、Canvas のコンテキストで作成されたすべての SageMaker AI リソースに伝播
- 伝播はドメインからのみ設定可能
- ユーザープロファイル、スペースレベルで伝播の設定は変更できない
- ユースケース
- Studio で作成されたすべての SageMaker AI リソースのコスト追跡
- Canvas で作成されたリソースのコスト追跡。エンドポイントにデプロイされたモデルを含む
- DataZone プロジェクト ID を Studio で作成されたすべてのリソースに伝播することによって、DataZone プロジェクトで発生したコストの追跡
- タグのマージ
- カスタムタグの伝播を有効にすると、ユーザープロファイル、スペースレベルで作成されたリソースは、ユーザープロファイルまたはスペースの作成時に指定されたタグと同様に、ドメインレベルで指定されたタグを引き継ぐ
- SageMaker AI リソースには 50 のタグ制限があり、超えるとエラーになる
- タグの数を制限することが推奨
- タグがドメインに 25 個、ユーザープロファイルに 30 個持っている場合、リソースには 55 個のタグが伝播されることになり、エラーとなり作成に失敗する
- カスタムタグの追加
- ドメインに新しいタグを追加しても、既存リソースには追加されない
- カスタムタグの伝播のオプトイン
- 伝播するには、ドメインから伝播のオプトインを行う必要がある
- オプトアウトも可能

ドメインにカスタムファイルシステムを追加する
- ドメインを作成すると、自動的に EFS がドメインに追加されるが、カスタム EFS、FSx for Luster を追加することができる
- JupyterLab、Code Editor 用に作成したスペースにファイルシステムにアタッチできる
- スペースを実行してアプリを起動すると、ユーザーはファイルシステムに含まれるデータにアクセスできる
- 前提条件
- ドメインがあること
- EFS または FSx for Luster があること
- EFS
- Studio がアクセスするにはドメインに関連づけられた各サブネットにマウントターゲットが必要
- マウントターゲットごとに、ドメイン作成時に SageMaker AI が作成したセキュリティグループ security-group-for-inbound-nfs-domain-id を追加する必要がある
- FSx for Luster
- ドメイン内に存在するサブネットの 1 つにファイルシステムがあること
- Luster のすべての ENI にセキュリティグループ security-group-for-inbound-nfs-domain-id をアタッチする
- EFS

ドメインの削除
- ドメインの削除前に、ユーザープロファイルおよび共有スペースを削除する必要がある
- ユーザープロファイル、共有スペースを削除するには、失敗していないアプリを含めることはできない
- アプリ削除時
- ユーザーのホームディレクトリのデータが保存される。保存されていないノートブックデータは失われる
- ユーザープロファイル削除時
- ユーザーはドメインにサインインできなくなる
- データは削除されない
- EFSからデータを取り出せる
- 認証モードを IAM から IAM Identity Center に切り替えるには、ドメインを削除する必要がある
- EFS
- マウントされたディレクトリからファイルを削除すると、カーネルまたはアプリは削除されたファイルを隠しゴミ箱フォルダに移動することがある
- ゴミ箱フォルダがマウントされたディレクトリ内にある場合、これらのファイルはEFSにコピーされ、料金が発生する
- この課金を避けるには、ゴミ箱フォルダの場所を特定し、掃除する必要がある
- デフォルトの場所は ~/.local/
- コンソールを使用してドメインを削除すると、EFSは削除されない
- AWS CLI や SageMaker Python SDK でも同じ動作だが、RetentionPolicy を HomeEfsFileSystem=Delete に設定すると、ドメインと一緒に EFS も削除される

ドメインスペースの権限と実行ロール
- 共有スペース
- ドメイン内のすべてのユーザープロファイルからアクセス可能
- スペースのデフォルト実行ロール
- プライベートスペース
- 作成したユーザープロファイルのみアクセス可能
- 作成したユーザープロファイルのユーザープロファイル実行ロール
- ドメイン実行ロールは、ドメイン内のすべてのユーザープロファイルに広範な権限を付与する

VPCの選択
- デフォルトでは、SageMaker AIドメインは 2 つの Amazon VPC を使う
- SageMaker AI によって管理され、直接インターネットアクセスを提供する VPC
- ドメインと EFS 間の暗号化されたトラフィックを提供する指定された VPC
- パブリックインターネットのみ
- EFS 以外のトラフィックは、インターネットアクセスを許可する SageMaker AI 管理の VPC を経由
- VPCのみ
- すべての SageMaker AI トラフィックは、指定された VPC を経由
- 直接インターネットにアクセスできないサブネットを使用する必要あり

自動化された ML、ノーコード、ローコード
- Canvas
- Studio の Canvas アプリケーションを利用
- データ準備、機能エンジニアリング、アルゴリズム選択、トレーニング・チューニング、推論などのタスクのために、ノーコード機能を提供
- 組み込みの視覚化と what-if 分析(* もし〜だったらという仮定を分析する)を活用して、データと様々なシナリオを探索し、自動予測によってモデルを簡単に製品化
- ユースケース
- コンピュータービジョン(* 画像・動画を自動的に認識する技術)、需要予測、インテリジェント検索、生成AIなど
- Autopilot
- モデルの構築・トレーニング・チューニング・デプロイのエンドツーエンドのプロセスを自動化する AutoML 機能
- JumpStart
- MLを始めるのに役立つ、幅広い問題に対応する事前トレーニング済みのオープンソースモデルを提供
- デプロイ前に段階的にトレーニング、調整できる
- 一般的なユースケースのインフラをセットアップするソリューションテンプレートと、実行可能なサンプルノートブックを提供

Autopilot
- モデルの構築、デプロイプロセスを自動化することで、様々な段階を簡素化、高速化する機能セット
- 最大数百 GB の大規模なデータセットでのモデル構築をサポート
- 次の問題タイプをサポート
- 各列に特定のデータ型が含まれ、各行に観測値が含まれる CSV、Parquet の表形式データを使用した回帰、バイナリ、マルチクラス分類
- CSV、Parquet を使用したテキスト分類
- PNG、JPEGなどの画像形式を使用した画像分類
- CSV、Parquetの時系列データを使用した時系列予測
- CSV、Parquetのデータを使用してテキストを生成する大規模言語モデルの微調整
- 各機能の重要性を示すレポートを自動的に生成し、モデルがどのように予測を行うかユーザーが理解できるように支援
- 評価指標の概要、混同行列、受信者動作特性曲線、適合率-再現率曲線などの様々な視覚化
- 回帰や分類などの表形式データの使用例の場合、Autopilot はパフォーマンスの高いモデルを見つけるために使用されたコードを含むノートブックを生成し、モデル候補がどのように選択、トレーニング、調整されたかについての可視性を高める
- データ探索、ノートブックに独自の変更を加えることで、よりパフォーマンスの高いモデル候補でさらに実験することができる
- データ分析と前処理
- 特定問題の種類を識別し、欠損値を処理し、データを正規化し、機能を選択し、トレーニング用にデータを全体的に準備する
- モデルの選択
- アルゴリズムを調査し、クロス検証再サンプリング手法を使用して、事前定義された客観的なメトリックに基づいてアルゴリズムの予測品質を評価するメトリックを生成
- ハイパーパラメーターの最適化
- 最適なハイパーパラメーター構成の検索を自動化
- モデルのトレーニングと評価
- データをトレーニングセットと検証セットに分割し、トレーニングデータを利用して選択したモデル候補をトレーニング
- 検証セットの未知のデータでパフォーマンスを評価
- 最適化されたモデル候補をパフォーマンスに基づいてランクづけし、最もパフォーマンスの高いモデルを特定
- モデルのデプロイ
- パフォーマンスが最も優れたモデルを特定すると、モデル成果物と API を公開するエンドポイントを作成し、モデルを自動的にデプロイするオプションを提供

AutoML API を使用して、表形式データの回帰、分類ジョブを作成
- CreateAutoMLJobV2 API を利用
- 必須パラメータ
- AutoMLJobName
- AutoMLJobInputDataConfig
- 入力データ
- AutoMLProblemTypeConfig
- 選択した教師あり学習問題のタイプ(バイナリ分類、マルチクラス分類、回帰)を指定
- 表形式データの場合、AutoMLProblemTypeConfig に TabularJobConfig を選択し、TabularJobConfigのProblemType属性で教師あり学習問題を設定
- OutputDataConfig
- ジョブの成果物を保存する S3 パス
- RoleArn
- データへのアクセスに使用
- オプションパラメータ
- トレーニングモードの設定方法
- アルゴリズムセットはモデリング戦略(ENSEMBLING、HYPERPARAMETER_TUNING)により異なる
- 空白の場合、データセットサイズに基づいて Mode が推測される
- トレーニングするための特徴とアルゴリズムの選択
- Autopilotは特徴選択と特徴抽出を含む自動データ前処理ステップを提供するが、FeatureSpecificatioS3Uri を指定してトレーニングで使用する特徴を手動で指定できる
- デフォルトではデータセットに対して事前定義されたアルゴリズムのリストを実行し、モデル候補をトレーニングする
- アルゴリズムのリストは、トレーニングモード(ENSEMBLING、HYPERPARAMETER_TUNING)により異なる
- アルゴリズムのデフォルトの選択のサブセットを提供できる
- トレーニングデータセットと検証データセットの指定
- 独自の分割比率を提供できる
- デフォルト
- データソースが 1 つの場合
- 検証データセットは 20%
- データソースが 2 つの場合
- それぞれ training、validation に設定したデータソースがトレーニングデータセット、検証データセットになる
- データソースが 1 つの場合
- 問題タイプ
- 場合によっては Autopilit が推測できない時があるので、ジョブを成功させるために値を設定する必要がある
- サンプルの重み
- 表形式のデータセットにサンプルの重み列を追加し、トレーニング、評価中にデータセットの行に重みづけを要求できる
- 大規模なデータセットに対して EMR Serverless でリモートジョブを開始する
- 大規模データセット処理のために、追加のコンピューティングリソースが必要な場合、EMR Serverless でリモートジョブを自動的に開始
- 表形式・時系列の問題タイプで利用可能
- 5 GB を超える表形式データセットには、このオプションが推奨
- トレーニングモードの設定方法
- 必須パラメータ
- 実験後、トライアルを比較してモデルの前処理手順、アルゴリズム、ハイパーパラメータ範囲の詳細を調査できる
- 提供されているノートブックを使用して、自動データ探索の結果や候補モデル定義を確認する
- * 所感として、自動で色々とやってくれるが、パラメータを指定することでカスタマイズも可能な機能

データセットと問題の種類(表形式データ)
- Autopilot では、バイナリ分類や回帰など、AutoMLジョブのモデル候補に使用できる教師あり学習問題の種類を指定するか、提供されたデータに基づいて自動的に検出するか選択する
- CSV,Parquet
- 時系列を扱っていることを検出すると、tsfresh ライブラリ(* pythonパッケージ)が提供する特殊な特徴変換器を通して時系列を処理する
- 出力された特徴は、3つの問題のタイプのうち 1 つの入力として使用される
- モデル候補に使用できる教師あり学習問題のタイプ
- 回帰
- 例:バスルームや寝室の数、家の面積、庭などの特徴から住宅価格を予測する
- 特徴の 1 つ以上を入力として受け取り、予測する
- バイナリ分類
- 例:診断テストの結果に基づいて、病気にかかっているか診断する
- マルチクラス分類
- 例:テキストドキュメントに最も関連のあるトピック(宗教、政治、金融、そのほか)を予測
- 回帰

トレーニングモードとアルゴリズムのサポート(表形式データ)
- トレーニングモード
- 手動で選択することも、データセットのサイズに基づいて自動的に選択することもできる
- アンサンブル
- AutoGluon ライブラリ(* AutoML の OSS フレームワーク)を利用して複数のベースモデルを学習する
- モデルとメタパラメータの設定を変えて 10 回の試行を行う
- スタッキング・アンサンブル法を使用してこれらのモデルを結合し、最適な予測モデルを作成する
- * スタッキング:複数の異なるモデルを組み合わせ、その出力を新たなモデルに入力して最終的な予測を行う手法
- アルゴリズム
- LightGBM
- 勾配ブースティングを備えたツリーベースのアルゴリズムを使用する最適化されたフレームワーク
- 深さではなく幅で成長するツリーを使用し、速度が高度に最適化される
- CatBoost
- カテゴリ変数の処理に最適化
- XGBoost
- 幅ではなく深さで成長する勾配ブースティングを備えたツリーベースのアルゴリズムを使用するフレームワーク
- ランダムフォレスト
- データのランダムなサブサンプルを置き換えて複数の決定木を使用する
- Extra Trees
- データセット全体に対して複数の決定木を使用する
- 追加のツリーにより、ランダムフォレストよりランダム化の度合いが増す
- 線形モデル
- 観測データ内の 2 つの変数間の関係を線形方程式を使用してモデル化
- Neural network touch
- Neural network fast.ai
- LightGBM
- ハイパーパラメータ最適化
- データセットでトレーニングジョブを実行しながら、ベイジアン最適化またはマルチフィデリティ最適化を使用してハイパーパラメータを調整し、モデルの最適なバージョンを見つける
- データセットに最も関連性の高いアルゴリズムが選択され、モデルを調整するための最適なハイパーパラメータの範囲が選択される
- モデルを調整するため、最大 100 回の試行が実行され、選択した範囲内で最適なハイパーパラメータ設定が見つけられる
- データセットのサイズが 100 MB 未満の場合、ベイジアン最適化
- データセットのサイズが 100 MB より大きい場合、マルチフィデリティ最適化
- マルチフィデリティ最適化の場合、メトリックはトレーニングコンテナから継続的に出力される
- 選択した目標メトリックに対してパフォーマンスが低いとトライアルは早期に停止される
- パフォーマンスが良いトライアルはより多くのリソースが割り当てられる
- アルゴリズム
- Linear Learner線型学習者
- 分類・回帰いずれかを解決できる
- XGBoost
- より単純で弱いモデルのセットからの推定値のアンサンブルを組み合わせることで、ターゲット変数を正確に予測しようとする
- Deep learning algorithm
- 多層パーセントプトロンとフィードフォワード人工ニューラルネットワーク。線形に分離できないデータを処理
- Linear Learner線型学習者
- 自動
- データセットサイズに基づいてモードを自動的に選択
- 100MBより大きい
- ハイパーパラメータ最適化
- それ以外
- アンサンブル
- 最適な実行時間とパフォーマンスを得るには、100MB未満のデータセットにアンサンブルモードを利用する

メトリクスと検証(表形式データ)
- メトリクス
- Accuracy
- 正しく分類された数の、すべての合計数に対する比率
- 0 - 1で、1 が完全に正確
- AUC
- Area Under the Curve
- * ROC曲線の下の面積を指す指標。分類モデルの精度を表す
- 0 - 1 で、1が完全な精度を示し、0.5 はランダム分類機よりも優れていないことを示す
- BalanceAccuracy
- 0.5 * ( (TP/P) + (TN/N) )
- アンバランスなデータセットで陽性、陰性の割合が大きく異なる場合に、良い Accuracy の尺度になる
- *アンバランスな場合の Accuracy の値を実際に計算してみる
- 陽性 90 個、陰性 10 個であり、100 個全て陽性であるとテキトーな予測をしたと仮定する
- Accuracy = TP + TN / TP + FP + TN + FN = 90 + 0 / 90 + 10 + 0 + 0 = 90 / 100 = 0.9
- 高い数値だが、実際には役に立たない予測であることは明確
- BalanceAccuracy = 0.5 * ( (TP/P) + (TN/N) ) = 0.5 * ( 90/90 + 0/10 ) = 0.5 * ( 1 + 0 ) = 0.5
- Accuracy よりかは正確であることは分かる
- Accuracy = TP + TN / TP + FP + TN + FN = 90 + 0 / 90 + 10 + 0 + 0 = 90 / 100 = 0.9
- 陽性 90 個、陰性 10 個であり、100 個全て陽性であるとテキトーな予測をしたと仮定する
- *アンバランスな場合の Accuracy の値を実際に計算してみる
- F1
- precision と recall の調和平均
- 2 * ( precision * recall ) / ( precsion + recall )
- 0 - 1 の間で、1 は最高のパフォーマンスを示す
- F1macro
- マルチクラス分類問題にF1スコアを適用
- 各クラスのF1スコアを計算し、個々のスコアを平均して F1macro を得る
- InferenceLatency
- モデル予測のリクエストを行ってから、予測を受け取るまでの時間
- 秒単位で測定され、アンサンブルモードでのみ使用可能
- LogLoss
- モデルが高い確率で不正確な予測をすることを示す指標
- 0 - 無限大で、0 だとデータを完全に予測することを示す
- MAE
- Mean Absolute Error 平均絶対誤差
- 予測値と実際の値がどれだけ異なるかを示す尺度で、回帰分析でよく使われる
- 0 - 無限大で、値が小さいほどデータへのモデルの適合が良いことを示す
- MSE
- Mean Squared Error 平均二乗誤差
- 予測値と実際の値の差の二乗の平均で、回帰に使用される
- モデルが実際の値を予測するのに優れているほど、値は小さくなる
- Precision 精度
- 予測した陽性のうち、真陽性(TP)をどれだけ予測できたか
- TP / ( TP + FP )
- 0 - 1 の範囲で、高い方が良い
- * 間違って陽性と判断することが許されない時に重要な指標
- スパムメールの判定(スパムメールの場合、陽性)
- 偽陽性だと、実際にはスパムメールでない。
- 重要な契約のメールがスパムメールと判断されて受信できなかった
- スパムメールの判定(スパムメールの場合、陽性)
- PrecisionMacro
- 他クラス分類問題の Precision を計算
- 各クラスの Precision を計算し、スコアを平均する
- 0 - 1 で高い方がモデルが識別した陽性のうち、真陽性を予測する能力を持っている
- R2
- 決定係数で、回帰で使用される
- 予測した値が実際の値とどの程度一致しているか
- -1 から 1 の範囲で、高いほどモデルで説明できている
- 0 に近い値は、ほとんどモデルで説明できていないことを示す
- 負の値は、適合が不良
- Recall
- データセット中の陽性をどれだけ正しく予測できたか
- TP / TP + FN
- 値は 0 -1 で、高いほど真陽性を予測する能力が高い
- RecallMacro
- マルチクラス分類の Recall を計算
- 複数クラスの各スコアを平均する
- 0 - 1 の値で、高いほど真陽性を予測する能力が高い
- RMSE
- Root Mean Squared Error 二乗平均平方根誤差
- 予測値と実際の値の差の二乗の平方根を測定し、すべての値で平均化される
- 予測誤差を理解するために回帰で利用
- 大きなモデル誤差や外れ値の存在を示す重要な指標
- 値は 0 - 無限大までで、小さいほどデータへの適合度が高い
- Accuracy

重みつけメトリクス(表形式データ)
- Balanced AccuracyとInferenceLatencyを除くメトリクスについて、アンサンブルモードでのみサンプルの重みをサポート
- データにサンプル重み列を追加できる
- データセットに他クラスと比較して 1 つのサンプルが不均衡の場合に役立つ
- モデルのパフォーマンスが向上し、モデルが多数クラスに偏らないようになる

クロス検証(表形式データ)
- モデル選択における過剰適合とバイアスを減らすために使用
- 検証データセットが同じ母集団から抽出された場合、モデルが未知の検証データセットの値をどの程度正確に予測できるかを評価するためにも使用される
- Autopilot は、クロス検証を使用して、ハイパーパラメータ最適化・アンサンブルトレーニングモードでモデルを構築する
- クロス検証の最初のステップは、データをk分割すること
- k 分割
- 入力トレーニングデータセットを複数のトレーニングデータセットと検証データセットに分割する方法
- フォールドと呼ばれる k 個の等しい大きさのサブサンプルに分割
- 次に k-1 個のフォールドでモデルを学習し、残りの k 番目フォールド(検証データセット)に対してテストする
- このプロセスは、検証用の異なるデータセットを用いて k 回繰り返される
- ハイパーパラメータ最適化
- 5 万以下のトレーニングインスタンスを持つ小さなデータセットに対して k 分割クロス検証を自動的に実装
- クロス検証を実行することは、小さなデータセットでトレーニングする場合に、過剰適合や選択バイアスを減らすために重要
- 複数のモデルが異なる分割でトレーニングされ、モデルは別々に保存
- トレーニングが完了すると、各モデルの検証メトリクスが平均化され、単一の推定メトリックが生成
- 最後に、Autopilot はトライアルのモデルを最適な検証メトリックと組み合わせ、アンサンブルモデルを作成
- Autopilot はこのアンサンブルモデルを利用して予測を行う
- クロス検証により、トレーニング時間が 20 % 増加する可能性がある
- アンサンブル
- データセットのサイズに関係なく、クロス検証実施
- クロス検証の k 分割の kの値は、AutoGluon エンジンによって決定される
- アンサンブルは複数のモデルで構成され、各モデルはベースモデルと呼ばれる
- 1 つのベースモデルが k-1 個のフォールドで学習され、残りのフォールドでフォールド外予測を行う
- このプロセスをすべての k 個のフォールドについて繰り返し、フォールド外予測を連結して 1 つの予測集合を形成する
- 各ベースモデルのフォールド外予測は、スタッキングモデルを学習するための特徴として利用
- スタッキングモデルは、各ベースモデルの重要度重みを学習
- 検証データセットでのパフォーマンスにより、どのベースモデルまたはスタッキングモデルが最良化が決定され、このモデルが最終モデルとして返される

リアルタイム推論のためのモデルをデプロイする(表形式データ)
- Autopilot ユーザーインターフェースからデプロイ( * Studio Classic からと思われる)
- 自動デプロイ
- Studio Classic で実験を作成
- 自動デプロイの値を「はい」に切り替える
- 手動デプロイ
- Studio Classic で実験を作成
- 自動デプロイの値を「いいえ」に切り替える
- モデルを選択
- エンドポイント名、インスタンスタイプ、そのほかオプションを構成
- 自動デプロイ
- SageMaker APIを使用してデプロイ
- DescribeAutoMLJob API を実行し、BestCandidate(* 最良のモデル候補)からからInferenceContainers( * 推論コンテナの定義)を取得
- * 推論コンテナイメージの場所や、モデルが存在するS3の場所などの情報を保持
- CreateModel API を実行し、モデルを作成
- DescribeAutoMLJob API で取得した情報を利用
- CreateEndpointConfig API を実行して、エンドポイント設定を作成
- エンドポイントでホストするモデルの情報や、ホストするためのインスタンスの設定など
- CreateEndpoint API を実行し、エンドポイントを作成
- 作成したエンドポイント設定を利用
- エンドポイントを呼び出す
- DescribeAutoMLJob API を実行し、BestCandidate(* 最良のモデル候補)からからInferenceContainers( * 推論コンテナの定義)を取得
- アカウント間でモデルをデプロイ
- モデルが作成されたアカウント A とは別のアカウント B からモデルをデプロイできる
- アカウント A で、デプロイアカウントB が引き受ける IAM ロール作成
- アカウント A で作成した IAM ロールに、モデルアーティファクトへのアクセスを許可する
- 選択肢
- A ModelDataUrl へのアクセス権を与える
- * S3 バケットポリシーでデプロイアカウントに対する許可を与えることと思われる
- B 生成アカウントから生成アカウントへモデルをコピー
- * この方法はよくわからない。
- ドキュメントの手順としては、生成アカウント内でモデルを S3 コピー、DescribeAutoMlJob で既存の ModelDataUrl を取得、コピー後のモデルの場所を ModelDataUrl に格納、デプロイアカウントで CreateModel を実行するという流れのはず
- しかし、デプロイアカウントからのデプロイでは、コピー後のモデルの場所である S3 バケットポリシーにて許可を与える必要があるはずで、結局 A の方法と同じになり、コピーするだけ無駄な気がする
- * この方法はよくわからない。
- A ModelDataUrl へのアクセス権を与える
- 選択肢

バッチ推論ジョブの実行(表形式データ)
- バッチ推論はオフライン推論とも呼ばれる
- 大規模なデータセットや、予測リクエストに即座に応答する必要がない場合に適する
- Autopilot UI からデプロイ
- Studio Classic 起動
- 左側から AutoML 選択
- デプロイするモデルに対応する Autopilot 実験を選択
- モデルを選択
- モデルのデプロイでバッチ予測を選択
- インスタンスタイプ、インスタンス数、そのほかオプションを選択
- 入力データ構成で S3 データ型、分割タイプ、圧縮を選択
- S3 の場所には入力データの S3 の場所を入力
- 出力データ設定で、出力データ用のS3選択
- バッチ変換ジョブ作成
- SageMaker API を使用してデプロイ
- DescribeAutoMLJob API を実行し、BestCandidate(* 最良のモデル候補)からInferenceContainers( * 推論コンテナの定義)を取得
- * 推論コンテナイメージの場所や、モデルが存在するS3の場所などの情報を保持
- CreateModel API を実行し、モデルを作成
- DescribeAutoMLJob API で取得した情報を利用
- CreateTransformJob API を実行して変換ジョブを作成
- CreateModel で作成したモデルを指定
- TransformInput に変換するデータセットを指定
- TransformOutput に変換ジョブの結果を保存する S3 の場所を指定
- TransformResources に変換ジョブのコンピューティングインスタンスを指定
- DescribeAutoMLJob API を実行し、BestCandidate(* 最良のモデル候補)からInferenceContainers( * 推論コンテナの定義)を取得
- 異なるアカウントからモデルをデプロイ可能

モデルの詳細を見る(表形式データ)
- Autopilot は、取得可能な候補モデルに関する詳細を生成する
- 各特徴の重要性を示す集計された SHAP 値のプロット
- * SHapley Additive exPlanations: モデルの予測に対する各特徴量の寄与度を評価
- 客観的なメトリックを含む、様々なトレーニング、検証メトリックの要約統計
- モデルのトレーニングと調整に使用されるハイパーパラメータのリスト
- 各特徴の重要性を示す集計された SHAP 値のプロット

パフォーマンスレポートを表示する(表形式データ)
- AutoML ジョブによって生成された最適なモデル候補に関する洞察と品質情報を提供
- Autopilot ジョブの詳細
- Autopilot 候補名
- Autopilot ジョブ名
- 問題の種類
- 客観的指標
- 最適化の方向
- モデル品質レポート
- レポートの内容は、問題の種類により異なる
- メトリクステーブル
- 受信者動作特性(ROC)曲線の下の領域(AUC)
- X 軸が偽陽性率で、Y 軸が真陽性率
- 真陽性率と偽陽性率のトレードオフ
- 真陽性率:TP と FN の合計(事実陽性である合計数)に対する、TP として正しく予測された真陽性の割合
- TP / TP + FN
- 偽陽性率:FP と TN の合計(事実陰性である合計数)に対する、FP として誤って予測された真陰性の割合
- FP / FP + TN
- 真陽性率:TP と FN の合計(事実陽性である合計数)に対する、TP として正しく予測された真陽性の割合
- バイナリ分類モデルに使用
- 0 - 1 で表され、1 に近いとモデルが非常に正確、0.5 だとランダムな推測と変わらない、0 に近いとデータに問題があることを示す可能性がある
- 混同行列
- バイナリ、マルチクラス分類による予測精度の視覚化
- ゲインカーブ
- * モデルがどれだけ効率よく正例(ターゲットクラス)を見つけられるかを示すグラフ
- データをモデルのスコア順に並べて、上位からどれだけ正例を発見できるかを累積的にプロット
- 上位 n % のデータを見た時、全正例の何%のを見つけられるかを表す
- 例:100人の中から金持ち(正例)を探す場合、全員チェックすれば 100% 見つかるけど、効率が悪い。年収が高い順に並べて、上から何 % を見る方がもっと効率よく見つけられる。
- 理想的なグラフは、最初の 10 % で全正例を見つける
- 上記で 10 % としているのは、トレーニング中にデータを 10 個のグループ(十分位数)に分けるから
- * モデルがどれだけ効率よく正例(ターゲットクラス)を見つけられるかを示すグラフ
- リフトカーブ
- * モデルの予測が、どれくらいランダムより良いかを示すグラフ
- 縦軸:リスト値、モデルがランダムの何倍良いか
- 横軸:データ上位%、上位からどれだけのデータを見たか
- * モデルの予測が、どれくらいランダムより良いかを示すグラフ
- Precision-recall curve 精度-再現率曲線
- 精度と再現率のトレードオフを表す
- 精度:陽性と予測したデータうち、実際に陽性で合った割合 TP / TP + FP
- 再現率:事実陽性であるデータのうち、陽性であると予測した割合 TP / TP + FN
- * 例:詐欺検出の前提で、Precision が高く、Recall が低い場合、予測した詐欺は本当に詐欺だが、多くの詐欺を見逃す
- Recall が高く、Precision が低い場合、実際の詐欺をほとんど見つけるが、普通の取引も詐欺扱いされる
- 精度と再現率のトレードオフを表す
- Area Under Precision-Recall Curve AUPRC
- 精度-再現率曲線の下の面積
- * PR 曲線の下の面積
- モデルの Precision と Recall の全体的なバランスを評価する指標
- 高いほど、Precision と Recall のバランスが良くて良い
- 1 だと、完璧なモデルで、 0.5 だとランダムと同じ、0 なら無駄な予測
- データが不均衡(正例が少ない)場合に特に有用
- 実際のプロットと予測のプロット
- 実際のモデル値と、予測モデル値を示す
- 標準化残差プロット
- * 標準化残差:実際の観測値とモデルの予測値の差である残差を、データの標準偏差で割ったもの
- つまり、残差(予測誤差)がどのように分布しているかを視覚化する
- 残差が小さいほど、モデルの予測が良い
- 目的
- モデルの適合度を評価
- 残差がランダムに分布していれば、よく適合している。逆に、特定範囲に偏っていたりすると、モデルがデータに適合していない可能性がある
- 外れ値を見つける
- モデルが予測できていない異常なデータ
- モデルの適合度を評価
- * 標準化残差:実際の観測値とモデルの予測値の差である残差を、データの標準偏差で割ったもの
- 残差ヒストグラム
- * 残差がどのように分布しているかを示す棒グラフ
- 0 近辺に集まっていれば、モデルの予測が実際の値をよく一致していると言える
- * 残差がどのように分布しているかを示す棒グラフ

AutoML タスクを管理するための生成された Autopilot ノートブック(表形式データ)
- 候補モデルを生成するために、Autopilot が実行する計画を説明する 3 つのノートブックベースのレポートを作成する
- 候補モデルは、パイプラインとアルゴリズムのペアで構成
- データ探索ノートブック
- 学習した内容を説明
- 候補定義ノートブック
- データに関する情報を使用して候補を生成
- モデル分析レポート
- 実験のリーダーボードで最適なモデルのパフォーマンス特性を詳細に説明
- 例えば、ノートブックで次の項目を編集できる
- データに利用されるプリプロセッサ
- ハイパーパラメータ最適化の実行回数とその並列性
- 試すべきアルゴリズム
- ハイパーパラメータ最適化ジョブに使用されるインスタンスタイプ
- ハイパーパラメータの範囲

データ探索レポート(表形式データ)
- Autopilot はデータセットを自動的に前処理する
- データセットには、ドメイン知識がなければ自動的に修正できない問題がある
- 回帰問題でターゲット列に大きな外れ値がある場合、外れ値でない値の予測が最適ではなくなる可能性がある
- モデリングの目的によっては、外れ値を削除する必要がある
- ターゲット列が誤って入力特徴の 1 つに含まれる場合、予測にはほどんと価値がなくなる
- このような問題を検出できるように、潜在的な問題に関するインサイトを含むデータ探索レポートを提供
- ノートブックは、ジョブごとに生成される
- トレーニングプロセスの開始前にデータから生成される
- これにより、意味のない結果につながる可能性のあるジョブを停止できる
- 同様に、再実行する前に、データセットの問題や改善点に対処できる
- データセットの概要
- 行数、列数、重複行の割合、ターゲット値の欠落など、データセットを特徴付ける主要な統計を提供
- 問題を検出し、ユーザーの介入が必要になる可能性がある場合に、アラートを出すことを目的
- ターゲット分析
- ターゲット列の値の分布に関する、様々な分析情報が表示
- いくつかの例
- 外れ値のターゲット値
- ターゲットカーディナリティが高いか低いか
- 分類の対象となるクラスレベルの数が少ないか、一意のクラスが多数存在
- ターゲット値とその分布に関する複数の統計が表示
- 外れ値、無効な値、欠落した値も表示されるので、調査できる
- なお、Autopilot は無効なターゲットラベルを持つすべての観測を無視する
- データサンプル
- 実際のデータサンプルを表示
- Autopilot は予測力の測定値を計算する
- 0 はその特徴がターゲット変数を予測する際に予測値を持たない
- 1 はターゲット変数の予測力が最も高い
- なお、予測力を特徴の重要度の代用として利用することは推奨されない。ユースケースにとって適切な尺度であると確信できる場合にのみ利用する
- 重複行
- データセット内に重複行が存在する場合、それらのサンプルを表示
- 列間の相関
- 2 つの特徴間の線形相関の尺度であるピアソンの相関係数を使用して相関マトリックス(表)を作成する
- * 線形相関:2 つの特徴が、どの程度線形に関係しているかを示す。片方が増えると片方も増えるなど
- ピアソンの相関係数:上記の線形相関を数値で表す
- 1 片方が増えると、もう片方も増える
- -1 片方が増えると、もう片方は減る
- 0 線形な関係がない
- 2 つの特徴間の関係を数値で表し、それを表にするということ
- ピアソンの相関係数:上記の線形相関を数値で表す
- * 線形相関:2 つの特徴が、どの程度線形に関係しているかを示す。片方が増えると片方も増えるなど
- 相関マトリックスの情報を使用して、相関の高い特徴を削除できる
- * 相関が高い=片方の特徴が変化するともう片方も似たような変化をする、ということなので、どちらか一方だけを使用すれば良い
- 特徴の数が少ないほど、モデルの過剰適合の可能性が減り、製造コストを削減できる
- また、Autopilot の実行時間が短縮され、データ収集手順が安価になる
- 2 つの特徴間の線形相関の尺度であるピアソンの相関係数を使用して相関マトリックス(表)を作成する
- 異常な行
- どの行が異常であるかを検出
- 負の異常スコアを持つ行は異常とみなされる
- 欠損値、基数、記述統計
- データセットの個々の列のプロパティを調べてレポートする
- コンテンツが順番に並べられるので、最も「疑わしい」値を最初に確認できる
- カテゴリ値を含む列のカテゴリ値に関する幾つかの統計を計算
- 一意のエントリ数
- 数値を含む列に関する幾つかの標準統計を計算

候補定義ノートブックを実行(表形式データ)
- 提案された各前処理手順、アルゴリズム、ハイパーパラメータの範囲が含まれる
- トレーニングおよびチューニングする候補は 2 つの方法で選択できる
- ノートブックのセクションを実行すること
- ノートブック全体を実行してすべての候補を最適化し、最適な候補を特定すること。全体を実行すると、ジョブの完了後に最適な候補のみが表示される
- 候補定義ノートブックを開き(読み取り専用で開く)、ノートブックのインポートを実行すれば、新しいノートブックで実行できる

生成されたコンテナ内の推論出力を構成する(表形式データ)
- Autopilot は順序付き ContainerDefinition リストを生成し、これを利用してモデルを構築できる
- Autopilot は、トレーニングモードとジョブの問題タイプに固有の推論コンテナを生成する
- ハイパーパラメータ最適化モードのコンテナ定義
- 回帰 2つのコンテナを生成
- 元の特徴を回帰アルゴリズムがトレーニングできる特徴に変換する特徴エンジニアリングコンテナ
- 特徴を変換し、データセットの回帰スコアを生成するアルゴリズムコンテナ
- 分類 3 つのコンテナを生成
- 元の特徴を分類アルゴリズムがトレーニングできる特徴に変換する特徴エンジニアリングコンテナ
- 最も高い確率で predicated_label 生成するアルゴリズムコンテナ
- アルゴリズム予測の後処理をする特徴エンジニアリングコンテナ
- たとえば、予測されたラベルに対して逆変換を実行し、元のラベルに変更できる
- 回帰 2つのコンテナを生成
- アンサンブルモードのコンテナ定義
- 特徴を変換し、問題タイプに基づいて予測を生成する推論コンテナ 1 つ
- 分類モデルの推論応答
- 分類推論コンテナの場合、 4 つの定義済みキーを使用して推論応答の内容を選択できる
- predicated_label
- Autopilot によって決定された、正しいラベルを予測する確率の最も高いラベル
- probability
- ハイパーパラメータ最適化モデル:2値分類の true のクラスの確率。マルチクラス分類の predicated_label の確率
- アンサンブルモデル:バイナリとマルチクラス分類の predicated_label の確率
- probabilities
- すべての対応するクラスの確率のリスト
- labels
- すべてのラベルのリスト
- predicated_label
- デフォルトでは、推論コンテナは predicated_label のみを生成
- 追加の推論コンテンツを選択するには、inference_response_keys パラメータを更新して、次の 3 つの環境変数に含めることができる
- SAGEMAKER_INFERENCE_SUPPORTED
- SAGEMAKER_INFERENCE_INPUT
- SAGEMAKER_INFERENCE_OUTPUT
- 分類推論コンテナの場合、 4 つの定義済みキーを使用して推論応答の内容を選択できる
- ハイパーパラメータ最適化モードでの分類モデルの推論レスポンス
- 推論レスポンスの内容を選択するには、ハイパーパラメータ最適化モードで生成される 2 番目と 3 番目のコンテナに SAGEMAKER_INFERENCE_INPUT、SAGEMAKER_INFERENCE_OUTPUT 変数を追加する
- 2 番目のコンテナ(アルゴリズム)でサポートされているキーは predicated_label, probability, probabilities。 labels が SAGEMAKER_INFERENCE_SUPPORTED に意図的に追加されていない
- 3 番目のコンテナでサポートされているキーは predicated_label, labels, probability, probabilities。そのため、 SAGEMAKER_INFERENE_SUPPORTED にはこれらのキーが含まれている
- アンサンブルモードでの分類モデルの推論レスポンス
- 推論レスポンスの内容を選択するには、SAGEMAKER_INFERENCE_OUTPUT を更新する
- サポートするキーは predicted_label、labels、probability、probabilities。

AutoML API を利用して画像分類ジョブを作成
- CreateAutoMLJobV2 API を利用
- 必須パラメータ
- AutoMLJobName
- AutoMLJobInputDataConfig
- AutoMLProblemTypeConfig
- OutputDataConfig
- RoleaArn
- オプションパラメータ(いくつか)
- トレーニングセットと検証データセットを指定できる
- データソースが 1 つの場合
- デフォルトでトレーニングセットになり、そのうち 20 % が検証データセットになる
- ValidationFraction に 0 -1 の値が設定されていれば、その割合のデータが検証に使用される
- データソースが 2 つある場合
- それぞれトレーニングセット、検証データセットであるか指定する
- データソースが 1 つの場合
- AutoMLジョブの自動モデルデプロイ設定を指定する
- 自動デプロイを有効にするには、ModelDeployConfig を含める
- Autopilot にエンドポイント名を生成させるには、AutoGenerateEndpointName を True にする
- エンドポイントに独自の名前を指定するには、AutoGenerateEndpointName を False に設定し、EndpointName に任意の名前を指定する
- トレーニングセットと検証データセットを指定できる

画像分類のデータセット、形式、メトリクス
- png, jpg, jpeg
- データセットの画像がすべて png である場合は、image/png を使用
- jpg, jpeg であれば、image/jpeg
- 複数の画像形式が混在していれば、image/*を使用
- Accuracy
- 正しく分類された数の、正しく、誤って分類された項目の総数に対する比率
- 0 - 1 で、1 なら完全な精度

リアルテイム推論のためのモデルのデプロイ(画像分類)
- リアルタイム推論は、リアルタイム、インタラクティブ、低レイテンシーの要件があるワークロードに最適
- 最適な検証メトリックを生成したモデルを手動でデプロイできる
- 自動デプロイもできる
- デプロイの流れ
- DescribeAutoMLJobv2 API を実行し、InferenceContainers から推論コンテナ定義を取得
- CreateModel API でモデルを作成
- DescribeAutoMLJobv2 で取得した情報を利用
- CreateEndpointConfig API でエンドポイント設定作成
- モデル名を指定する
- CreateEndpoint API でエンドポイント作成し、デプロイ完了
- エンドポイント設定を利用
- あとは InvokeEndpoint でエンドポイントを呼び出す

説明可能性レポート(画像分類)
- 最適なモデル候補が、画像分類の問題に対してどのように予測を行うか説明する
- 視覚クラス活性化マップアプローチを使用し、各色の分布と強度が特定の予測に最も貢献する画像領域を強調するヒートマップを生成
- 説明可能性レポートを JSON として生成
- 検証データセットに基づく分析の詳細が含まれる
- レポートの生成に使用される画像には、次の情報が含まれる
- input_image_uri
- ヒートマップの入力として取得された画像への S3 URI
- heatmap_image_uri
- Autopilot によって生成されたヒートマップ画像への S3 URI
- predicated_label
- 最適なモデルによって予測されたラベルクラス
- probability
- predicated_label が予測される信頼度
- input_image_uri
- DescribeAutoMLJobV2 のレスポンスにある BestCandidate.CandidateProperties.CandidateArtifactLocations.Explainability で、最良の候補に対して生成された説明可能性成果物への S3 プレフィックスを見つけられる

モデルパフォーマンスレポート(画像分類)
- AutoML ジョブによって生成れた最適なモデル候補に関する洞察と品質情報を提供
- DescribeAutoMLJobV2のレスポンスのBestCandidate.CandidateProperties.CandidateArtifactLocations.ModelInsights で、モデル品質レポート成果物への S3 プレフィックスを見つけられる
- 2 つのセクションがある
- ジョブの詳細
- メトリックを含むレポート
- ジョブの詳細
- 最適なモデル候補の名前
- ジョブの名前
- 問題の種類
- 客観的なメトリック
- 最適化の方向
- モデル品質レポート
- 評価データセットに含まれていた行数と、評価が行われた時刻が指定される
- メトリクステーブル
- 問題の種類に適している
- グラフィカルなモデルパフォーマンス情報
- 混同行列

説明可能性レポート(テキスト分類)
- JSON として生成
- text
- 入力テキストの内容
- token_scores
- テキスト内のすべてのトークンのスコアのリスト
- attribution
- トークンの重要度を表すスコア
- description.partial_text
- トークンを表す部分的なサブ文字列
- predicated_label
- 最適なモデル候補によって予測されたラベルクラス
- probability
- predicated_label が予測された信頼度

API を使用して時系列予測用の AutoML ジョブを作成する
- 予測とは、過去のデータやパターンに基づいて将来の結果や傾向を予測するプロセスを指す
- 予測における目標は、入力変数とターゲット変数の関係を時間の経過とともに正確に把握できるモデルを開発すること
- CreateAutoMLJobV2 API により作成
- 前提条件
- 時系列データセットの準備
- ノイズや不整合を除去し、構造化された形式に整理することも含まれる
- 予測する将来のデータポイントにつき、少なくとも 3 - 5 個の履歴データポイントを提供することを推奨
- 7 日先を予測するには、21 - 35 日間の履歴データを提供
- 時系列データを S3 に配置
- SageMaker AI 実行ロールに、入力データを含む S3 へのフルアクセスを許可
- 時系列データセットの準備
- 必須パラメータ
- AutoMLJobName
- AutoMLJobInputDataConfig
- データを格納する S3 を指定
- 時系列予測ジョブの設定を構成する TimeSeriesForecastingJobConfig 型の AutoMLProblemTypeConfig
- 予測の精度
- 予測の希望する粒度(時間別、日別、月別など)
- 予測の予測期間
- モデルが予測するタイムステップの数
- 予測の長さとも呼ばれる
- 最大予測期間は、 500 タイムステップまたはデータセット内のタイムステップの 1/4 のいずれか小さい方
- TimeseriesConfig
- データセットのスキーマを定義し、列ヘッダーを予測にマッピングする
- TargetAttributeName
- 予測するターゲットフィールドの履歴データを含む列
- TiimestampAttributeName
- 特定の項目のターゲット値が記録された時点を含む列
- ItemIdentifierAttributeName
- ターゲット値を予測する項目識別子を含む列
- TargetAttributeName
- データセットのスキーマを定義し、列ヘッダーを予測にマッピングする
- 予測の精度
- OutputDataConfig
- ジョブのアーティファクトを保存する S3
- RoleArn
- オプションパラメータ
- アルゴリズムの指定方法
- デフォルトでは、事前定義されたアルゴリズムのリストをトレーニングする
- AutoMLAlgorithms にサポートしている時系列予測に使用できるアルゴリズムを指定できる
- カスタム分位数を指定する方法
- Autopilot はターゲットの時系列で 6 つのモデル候補をトレーニングし、スタッキングアンサンブルメソッドを使用してモデルを組み合わせ、特定のメトリクスに最適な予測モデルを作成する
- 予測モデルは、P1 と P99 の間の分位数で予測を生成することによって、確率予測を生成する
- デフォルトでは、p10, p50, p90 の予測が生成されるが、ForecastQuantiles を指定することで独自の分位数を最大 5 つまで指定できる
- 異なる予測頻度のデータを集計する方法
- 予測モデルを作成するには、予測頻度を指定する必要がある
- 予測頻度によって、予測に含まれる頻度が決定する
- 例:月次販売予測
- Autopilotの最適なモデルは、データが記録される頻度より高いデータ頻度の予測を生成できる
- トレーニング中、Autopilot は指定した予測頻度と一致しないデータを集約する
- 例えば、日次データはあるが、毎週予測頻度を指定する場合
- Autopilot は、そのデータが属する週に基づいて日次データを調整し、週ごとに 1 つのレコードにまとめる
- 集約時、デフォルトの変換メソッドはデータを合計すること
- この変換メソッドを、Transformations で変更できる
- avg, first, min, max
- 入力データセット内の欠損値を処理する方法
- Autopilot には時系列データセットのターゲット列やそのほかの数値列の欠損値を処理するための filling メソッドが用意されている
- Transformations 属性で filling 戦略を決定
- filling メソッドを設定するには、キーと値のペアが必要
- キー:filling メソッドを指定する列の名前
- 値:その列の filling 戦略を定義するオブジェクト
- 目標メトリクスの指定方法
- Autpilot はモデル候補を評価し、予測の生成に使用するモデルを選択するのに役立つメトリクスを生成する
- デフォルトでは平均重み付き分位損失を使用するが、MetricName 属性で目標メトリクスを設定できる
- データセットに祝日情報を組み込む方法
- Autopilot は 250 か国の祝祭日カレンダーをサポート
- 国を選択すると、トレーニング中にその国の祝祭日カレンダーをデータセット内のすべての項目に適用する
- これにより、モデルは特定の祝祭日に関連するパターンを特定できる
- HolidayConfigAttributes オブジェクトを渡すことで、祝祭日特徴量化を有効にできる
- 自動デプロイを有効にする方法
- 予測モデルをエンドポイントに自動でデプロイできる
- 大規模なデータセットに対して EMR Serverless でリモートジョブを開始するように AutoML を構成する方法
- EMR Serverless で自動的にリモートジョブを開始するように設定できる
- 30 GB を超える時系列データセットには、このオプションが推奨される
- アルゴリズムの指定方法

時系列データセットの形式と欠損値の補完方法
- 時系列データは、一定の時間間隔で記録された観測値・測定値の集合を指す
- 各観測値は特定のタイムスタンプ・期間に関連づけられる
- 少なくとも、次の 3 列のテーブルで構成される
- 特定の瞬間の値を参照するために個々の項目に割り当てられた一意の識別子
- 特定の時点における特定のアイテムの値を記録するためのポイントインタイムの値またはターゲット
- タイムスタンプ列
- データセット形式
- 数値、カテゴリ、テキスト、日時のデータ型をサポート
- ターゲット列は数値である必要がある
- CSV
- Parquet
- 欠損値の処理
- 時系列予測データでは、欠損値がよくある問題
- 欠損値を埋める方法( * 記載内容のイメージが湧かず、理解できない)
- Front filling
- すべての項目の中で最も早く記録されたデータポイントと各項目の開始点の間の欠損値を埋める
- これより、各項目のデータが完全であり、最も早く記録されたデータポイントからそれぞれの開始点まで及ぶことが保証される
- Middle filling
- データセット内の項目の開始日と終了日の間に欠落している値を埋める
- Back filling
- 各項目の最後のデータポイントとすべての項目の最後に記録されたデータポイントの間にある欠損値を埋める
- Future filling
- すべての項目の中で最後に記録されたデータポイントと予測期間の終了点の間の欠落値を入力
- Front filling
- 充填ロジック
- ターゲット列
- サポートされている入力方法:Middle and back filling
- デフォルトのロジック:0
- サポートされているロジック:0, value, nan, mean, mediam, min, max
- そのほかの数値列
- サポートされている入力方法:Middle back and future filling
- デフォルトのロジック:なし
- サポートされているロジック:0, value, nan, mean, mediam, min, max
- ターゲット列

メトリクス
- RMSE
- 二乗平均平方根誤差
- 予測値と実際値の二乗差の平均値を求め、その値の平方根を計算
- 大きなモデル誤差や外れ値の存在を示す重要なメトリクス
- 値は 0 - 無限大で、数値が小さいほどモデルがデータにより適合している
- 規模に依存するため、サイズが異なるデータセットの比較には使用しない
- wQL
- 重み付き分位点損失
- P10, P50, P90 の予測分位数と実際の分位数の重み付き絶対差を測定して予測の精度を評価
- 値が小さいほどモデルのパフォーマンスが良い
- Average wQL
- 平均重み付き分位点損失
- P10, P50, P90 の分位数で精度を平均して予測を評価
- MASE
- Mean Absolute Scaled Error
- 平均絶対スケーリング誤差
- 単純なベースライン予測法の平均絶対誤差で正規化された予測の平均絶対誤差
- 値が小さいほどモデルの精度が高い
- MASE < 1 はベースラインよりよく、MASE > 1 はベースラインよりも悪いと推定される
- MAPE
- Mean Absolute Percentage Error
- 平均絶対パーセント誤差
- すべての時間ポイントで平均したパーセンテージ誤差(平均予測値と実際値のパーセントの差)
- 値が小さいほどモデルの精度が高く、0 はエラーのないモデル
- WAPE
- 重み付き絶対パーセンテージ誤差
- 絶対ターゲットの合計で正規化された絶対誤差の合計
- 観測値からの予測値の全体的な偏差を特定
- 値が小さいほどモデルの精度が高くなる

アルゴリズム
- ターゲットの時系列を使用して、次の 6 つの組み込みアルゴリズムをトレーニングする
- 次に、スタッキングアンサンブル法使用して、これらのモデル候補を組み合わせて、特定のメトリクスに最適な予測モデルを作成
- Convolutional Neural Network - Quantile Regression( CNN-QR )
- 畳み込みニューラルネットワーク - 分位点回帰
- * 畳み込みニューラルネットワーク: 畳み込み層 + プーリング層 + 全結合層
- 畳み込み層:小さなフィルターを使って画像をスキャンし、特徴を抽出
- プーリング層:画像の情報を圧縮し、計算量を減らしつつ重要な情報を保持
- 全結合層:畳み込み層とプーリング層で抽出した特徴をもとに、最終的な分類を行う
- * 分位点回帰
- 通常の回帰分析は平均値を求めるのに対し、特定のパーセンタイルを推定する
- 上限値や下限値も予測できる
- * 畳み込みニューラルネットワーク: 畳み込み層 + プーリング層 + 全結合層
- 数百の時系列を含む大規模データセットで最適に機能する
- 畳み込みニューラルネットワーク - 分位点回帰
- DeepAR+
- 再帰型ニューラルネットワークを使用して時系列を予測
- * 中間層で出力されたデータを再帰的に入力し、過去の情報をもとに学習する
- 数百の特徴量時系列を含む大規模データセットで最適に機能する
- 再帰型ニューラルネットワークを使用して時系列を予測
- Prophet
- 非線形トレンドが年次、週次、日次の季節性に適合する加法モデルに基づく、局所的なベイズ構造時系列モデル
- * 非線形:時間と共にデータが直線的に増加・現象するのではなく、曲線的、または複雑なパターンを持つことを指す
- * 加法モデル:予測値を複数の要素の和として表現する。例 トレンド+季節性+祝日効果のように
- * ベイズ構造時系列モデル:ベイズ推論を使って時系列データをモデル化する。
- ベイズ推論:事前の知識(事前分布)をもとに、データから得られる情報を使って、モデルのパラメータを更新する
- 非線形トレンドが年次、週次、日次の季節性に適合する加法モデルに基づく、局所的なベイズ構造時系列モデル
- Non-Parametric Time Series( TPTS )
- ノンパラメトリック時系列
- スケーラブルで確率的なベースライン予測機能
- 過去の観測からサンプリングすることにより、特定の時系列の未来の価値分布を予測
- 断続的な時系列を使用する場合に特に役立つ
- Autoregressive Integrated Moving Average( ARIMA )
- 自己回帰和分移動平均
- 時系列予測に一般に利用される統計アルゴリズム
- データセットの標準的時間構造(時間のパターン化された編成)をキャプチャする
- 時系列が 100 未満の単純なデータセットに特に役立つ
- Exponential Smoothing( ETS )
- 指数平滑法
- 時系列予測に一般的に利用される統計アルゴリズム
- 時系列が 100 未満の単純なデータセット、季節性パターンのあるデータセットに特に役立つ
- データセット内のすべての観測値の加重平均を予測として平均し、時間の経過とともに重みを指数関数的に減少させる

モデルのデプロイ
- モデルをトレーニングした後、リアルタイム・バッチベースの予測用にデプロイ
- DescribeAutoMLJobV2 API のレスポンス BestCandidate で最適なモデル候補を見つけられる
- 考慮事項
- 予測の入力データは、トレーニングに利用されたデータ形式と同じである必要がある
- 列の数、列ヘッダー、データ型など
- モデルは、トレーニング時の入力リクエストで指定された将来の予測期間ポイント(ターゲット終了日からターゲット終了日+予測期間)を予測する
- 将来のデータポイントを予測する場合、提供される履歴データ量の最小値は設定されていない
- 時系列の季節的および反復的なパターンを捉えるのに十分なデータを含める
- 予測の入力データは、トレーニングに利用されたデータ形式と同じである必要がある

リアルタイム予測(時系列)
- エンドポイントのインスタンスには、m5.12xlarge の使用が推奨

バッチ予測(時系列)
- オフライン推論とも呼ばれる
- バッチ変換ジョブでは、汎用ワークロードには m5.12xlarge インスタンスを、ビッグデータ予測タスクには m5.24xlarge インスタンスが推奨
- 変換ジョブ:トレーニング済みモデルを使用して、データセットの推論を取得する

データ探索ノートブック
- Autopilot は、データセットを自動的にクリーンアップして前処理する
- ユーザーがデータを理解し、時系列に関するパターン、関係性、異常を発見できるように、ユーザーが参照できるノートブックの形式でデータ探索の静的レポートを生成する

レポート
- 説明可能性レポート
- インパクトスコアと呼ばれるメトリックを使用し、各属性の相対的な影響を定量化し、予測値が増加するか減少するかを判断する
- インパクトスコアは -1 - 1 で、0 の場合には影響がないことを示す
- 絶対的な影響ではなく、属性の相対的な影響を測定することに注意が必要
- 次の場合にのみ生成される
- データセットに追加の特徴量列が含まれているか、祝祭日カレンダーに関連づけられている
- ベースモデルの CNN-QR と DeepAR+ が最終的なアンサンブルに含まれている
- パフォーマンスレポート
- ジョブによって生成された最適なモデル候補に関する分析・品質情報を提供
- ジョブの詳細、目標関数、精度メトリクスに関する情報が含まれる
- バックテスト結果レポート
- 予測の精度と信頼性を評価することにより、時系列予測モデルのパフォーマンスに関するインサイトを提供
- 過去のデータに対するパフォーマンスを評価するのに役立ち、見えないデータに対する潜在的なパフォーマンスを理解するのに役立つ
- バックテストを使用してパラメータをチューニングし、精度メトリクスを生成
- バックテスト中、時系列データをトレーニングセットとテストセットに自動的に分割
- テストデータセットを利用して、予測値をテストセットの観測値と比較することにより、モデルの精度を評価する

時系列予測のリソース制限
- 制限項目
- デフォルトの制限
- 調整可能
- 入力データセットのサイズ
- 30 GB
- はい
- 単一の Parquet ファイルサイズ
- 2 GB
- いいえ
- データセット内の最大行数
- 30億
- はい
- グループ化列の最大数
- 5
- いいえ
- 数値特徴の最大数
- 13
- いいえ
- カテゴリ特徴の最大数
- 10
- いいえ
- データセット当たりの時系列の最大数
- 500万
- はい
- 最大予測期間
- 500
- はい

テキスト生成モデルを微調整する AutoML ジョブを作成する
- 大規模言語モデル(LLM)のパフォーマンスは、多様なデータセットやさまざまなタスクに対する広範なトレーニングに起因している
- ヘルスケアや金融サービスなど、特定のドメインでは独自のデータやユースケースに適応するためにカスタマイズされた微調整が必要になる
- Autopilot は、事前トレーニングされた生成テキストモデルを微調整できる
- 特に、JumpStart を使用した 汎用大規模言語モデルの指示ベースの微調整をサポート
- CreateAutoMLJobV2 API により、LLM を微調整するための実験を作成できる
- データセットを使用して、Autopilot がターゲットモデルを直接微調整し、デフォルトの目標指標であるクロスエントロピー損失を向上させる
- * クロスエントロピー
- 予測値と実際の値との誤差を見るための損失関数
- * クロスエントロピー
- LLM を微調整したら、DescribeAutoMLJobV2 API によりROUGE スコアにアクセスしてパフォーマンスを評価できる
- モデルは、トレーニングと検証の損失や、パープレキシティに関する情報も提供する
- * パープレキシティ(perplexity:困惑)
- 与えられたデータに対して、モデルがどれだけ自信を持って次の単語を予測できるかを測定
- * パープレキシティ(perplexity:困惑)
- 前提条件
- (オプション)事前トレーニング済みモデルを選択
- デフォルトでは、モデル Falcon7BInstruct を利用
- 命令のデータセットを作成
- データセットを S3 に配置
- 実験を実行するための SageMaker AI 実行ロールに、入力データを含む S3 へのフルアクセス権限
- JumpStart が使用するデフォルトのストレージ S3 にアクセスするために必要な権限を実行ロールに付与
- (オプション)事前トレーニング済みモデルを選択
- 必須パラメータ
- AUtoMLJobName
- AutoJobInputDataConfig 内で training タイプの AutoMLJobChannel
- 微調整データセットがある S3 を指定
- AutoMLProblemTypeConfig の TextGenerationJobConfig
- 微調整するモデルの名前を指定できる
- OutputDataConfig
- ジョブのアーティファクトを保存する S3
- RoleArn
- オプションパラメータ
- EULA への同意を設定する方法
- 微調整前にエンドユーザーライセンス契約への同意を必要とするモデルの場合、ModelAccessConfig の AcceptEula 属性を True にして EULA に同意できる
- モデルの学習プロセスを最適化するために、ハイパーパラメータを設定する方法
- epochCount
- batchSize
- learningRate
- learningRateWarmupSteps
- EULA への同意を設定する方法

微調整のための大規模言語モデルをサポート
- ユーザーは JumpStart を利用して LLM を微調整できる
- Dolly3B
- pythia-2.8b をベースにした 28 億パラメータの命令追従型 LLM
- 命令・応答微調整データセット databricks-dolly-15k で学習され、ブレーンストーミング、分類、質問・回答、テキスト生成、情報抽出、要約などのタスクを実行
- Dolly7B
- pythia-6.9b をベースにした 69 億パラメータの命令追従型 LLM
- 命令・応答微調整データセット databricks-dolly-15k で学習され、ブレーンストーミング、分類、質問・回答、テキスト生成、情報抽出、要約などのタスクを実行
- Dolly12B
- pythia-12b をベースとした 120 億パラメータの命令追従型大規模言語
- 命令・応答微調整データセット databricks-dolly-15k で学習され、ブレーンストーミング、分類、質問・回答、テキスト生成、情報抽出、要約などのタスクを実行
- Falcon7B
- 1兆5000億のトークンを用いて学習された 70 億パラメータの因果的大規模言語モデルで、キュレーションされたコーパスにより強化されている
- 英語とフランス語のデータのみで訓練されており、ほかの言語には適切に一般化されない
- 大量のウェブデータで訓練されているため、ネット上でよく見られるステレオタイプやバイアスが含まれている
- Falcon7BInstruct
- Falcon7B 上で構築され、2億5000万トークンのチャット・インストラクトデータセットで微調整された 70 億パラメータの因果的LLM
- 主に英語データでトレーニングされており、ほかの言語に一般化されていない
- Web を代表する大規模なコーパスでトレーニングされているため、ネットでよく見られるステレオタイプやバイアスが含まれている
- Falcon40B
- 1000億のトークンに 400 億のパラメータを持つ大規模LLMであり、キュレーションされたコーパスで強化されている
- 主に英語、ドイツ語、スペイン語、フランス語でトレーニングされ、イタリア語、ポルトガル語、ポーランド語、オランダ語、ルーマニア語、チェコ語、スウェーデン語では限定的な機能しか使えず、ほかの言語に対しては適切に一般化されない
- ウェブを代表する大規模なコーパスで学習されるため、ネット上でよくみられるステレオタイプやバイアスが含まれる
- Falcon40BInstruct
- Fracon40Bをベースに構築され、Baize の混合データで微調整された400億パラメータの因果的LLM
- 主に英語とフランス語でトレーニングされており、ほかの言語では適切に一般化されない
- ウェブを代表する大規模なコーパスで学習されるため、ネット上でよくみられるステレオタイプやバイアスが含まれる
- FlanT5L
- 複数のタスクで微調整され、さらに学習することができるLLM
- 言語翻訳、テキスト生成、文章補完、語義曖昧性解消、ようやく、質問応答などのタスクに適する
- 多数の言語で学習された7億8000万パラメータのLLM
- FlanT5XL
- 多数の言語で学習された 30 億パラメータのLLM
- それ以外は上記と同じ
- FlanT5XXL
- 110億パラメータのモデル
- それ以外は上記と同じ
- Llama2-7B
- 事前に学習され、微調整された生成テキストモデルのコレクション
- 英語用の70億パラメータモデルでさまざまな自然言語生成タスクに適応可能
- Llama2-7BChat
- 対話のユースケースに最適化された70 億パラメータの チャットモデル
- Llama2-13B
- 130 億のパラメータモデルで、英語での使用を目的としており、様々な自然言語生成タスクに適応させることができる
- Llama2-13BChat
- 対話のユースケースに最適化された 130 億パラメータの チャットモデル
- Mistral7B
- 70 億パラメータのコードと汎用英文テキスト生成モデル
- テキスト要約、分類、テキスト補完、コード補完など様々なユースケースで使用できる
- Mistral7BInstruct
- Mistral7B を会話ユースケース向けに微調整
- 一般に公開されている様々な英語の会話データセットを用いて特化されている
- MPT7B
- 67億個のパラメータを持つデコーダ形式の変換大規模言語モデル
- 1兆個の英文テキストとコードのトークンでゼロから事前に訓練されている。長い文脈を扱える
- MPT7BInstruct
- 短文命令追従タスクのためのモデル
- databricks-dolly-15k と Anthropic Helpful and Harmless データセットから派生したデータセット上で MPT7B を微調整した

データセットのファイルと入力データ形式(LLM微調整)
- 指示ベースの微調整では、ラベル付きデータセットを使用して、特定の自然言語処理タスクにおける事前トレーニング済みLLMのパフォーマンスを向上させる
- ラベル付きの例は、プロンプトと応答のペアとしてフォーマットされ、指示として表現される
- データセットファイルの種類
- CSV
- Parquet
- 命令ベースの微調整のための入力データ形式
- データセットには、コンマで区切られた名前付きの列 2 つ input, output だけが含まれている必要がある
- input 列にはプロンプトが含まれ、対応する output 列には想定される回答が含まれる
-
input,output "<prompt text>","<expected generated text>"
- 最適な学習とパフォーマンスを確保するために、1000行以上のデータセットを使用することが推奨
- Autopilot は、使用するモデルのタイプに基づいて、データセット内の行数とコンテキストの長さの上限を設定
- データセット内の行数の制限は、複数ファイルを含むデータセット内のすべてのファイルにわたる行の累積数に適用される
- 2 つのチャネルタイプが定義されている場合(1つはトレーニング、1つは検証用)、制限は両方のチャネルのすべてのデータセットの行の合計数に適用
- 行数が閾値を超えると、ジョブは検証エラーで失敗する
- データセット内の行の入力・出力の長さが言語モデルのコンテキストで設定された制限を超えると、自動的に切り捨てられる
- データセット内の行の60%以上が切り捨てられた場合、検証エラーで失敗する

テキスト生成モデルの学習プロセスを最適化するハイパーパラメータ
- エポック数
- トレーニングデータセット全体を学習する回数
- トレーニング期間に影響し、適切に設定するとオーバーフィットを防げる
- 多いと微調整ジョブの全体的なランタイム時間が長くなる可能性がある
- 微調整ジョブが途中で停止しないように、CompletionCriteria 内に大きな MaxAutoMLJobRuntimeInSecounds を設定することが推奨
- バッチサイズ
- トレーニングのイテレーションごとに使用されるデータサンプルの数
- 収束の速度とメモリ使用量に影響
- 大きいとメモリ不足エラーのリスクが増加し、Autopilot で内部エラーとして表示される場合がある
- トレーニングジョブの /aws/sagemaker/TrainingJobs ロググループから確認可能
- 1 から始め、メモリ不足エラーが発生するまで段階的に増やすことを推奨
- 参考として、10エポックの場合は通常完了まで最大 72 時間かかる
- 学習率
- トレーニング中にモデルのパラメータを更新するステップサイズを制御
- トレーニング中にパラメータが更新される速度が決まる
- 高いと、パラメータが大きなステップサイズで更新されるため、収束が早くなる可能性があるが最適解をオーバーシュートしてしまい、不安定になる可能性もある
- 低いと、パラメータが小さなステップサイズで更新されるため、収束はより安定する可能性はあるが、学習は遅くなる
- 学習率のウォームステップアップ
- 目標値または最大値に達するまで学習率を徐々に増加させるトレーニングステップの数を指定
- モデルがより効果的に収束し、初期の学習率が高い時に発生する可能性のある発散や、収束が遅くなるなどの問題を回避できる

大規模言語モデルを微調整するための指標
- Autopilot はデータセットを使用して、ターゲット LLM を直接微調整し、デフォルトの目標メトリクスであるクロスエントロピー損失を強化する
- クロスエントロピー損失は、予測された確率分布とデータ内の実際の分布との相違を評価する
- 最小限に抑えることで、特にテキスト生成に関連するタスクにおいて、より正確でコンテキストに適した予測を行うことを学習する
- LLM を微調整した後、ROUGE スコアを利用して品質を評価できる
- さらに、パープレキシティとクロスエントロピーのトレーニングおよび検証損失を分析できる
- パープレキシティ損失
- テキストシーケンス内の次の単語をどれだけ正確に予測できるかを測定
- 低いほど、言語とコンテキストをよりよく理解していることを示す
- ROUGE
- Recall Oriented Understudy for Gisting Evalution
- 機械生成テキストの品質評価
- 生成テキストと参照テキストとの類似性を評価
- システム生成テキストと参照テキストの n-gram(連続した単語のシーケンス)の精度と再現率など、テキストの類似性の様々な側面を評価するように設計
- 参照テキストに存在する情報をどれだけ適切にキャプチャしているか評価
- ROUGE-1, ROUGE-2
- システム生成テキストと参照テキスト間の n-gram の重なりを測定
- n-gram をどの程度正確にキャプチャしているか評価
- ROUGE-L
- システム生成テキストと参照テキスト間の最長共通サブシーケンスを計算
- ROUGE-L-Sum
- テキスト要約システムの評価用に設計

デプロイと予測(LLM微調整)
- より良いパフォーマンスを得るために、ml.g5.12xlarge でリアルタイム推論ジョブを実行することを推奨
- Falcon-7B-Instruct や MPT-7B-Instruct のタスクには ml.g5.8xlarge が適している
- 長時間のモデルダウンロードによるエンドポイント作成のタイムアウトを防ぐために、ModelDataDonwloadTimeoutInSeconds=3600とContainerStartupHealthCheckTimeoutInSeconds=3600を設定することが推奨
- リアルタイム推論のリクエストフォーマット
- 各モデルによって必要な入力データ形式と予測および出力に期待される形式が決まる
- いくつかのモデルの入力例と推奨コンテナ
- 推奨コンテナhuggingface-pytorch-tgi-inference:2.0.1-tgi1.0.3-gpu-py39-cu118-ubuntu20.04を搭載したFalconモデルの場合
-
payload = { "inputs": "Large language model fine-tuning is defined as", "parameters": { "do_sample": false, "top_p": 0.9, "temperature": 0.1, "max_new_tokens": 128, "stop": ["<|endoftext|>", "</s>"] } }
-
- 推奨コンテナdjl-inference:0.22.1-fastertransformer5.3.0-cu118を持つ他のすべてのモデルについて
-
payload= { "text_inputs": "Large language model fine-tuning is defined as" }
-
- 推奨コンテナhuggingface-pytorch-tgi-inference:2.0.1-tgi1.0.3-gpu-py39-cu118-ubuntu20.04を搭載したFalconモデルの場合

SageMaker JumpStart
- MLを始めるのに役立つ幅広い問題タイプに対応する事前トレーニング済みのオープンソースモデルを提供
- デプロイ前に段階的にトレーニング、調整可能
- 一般的なユースケースのインフラをセットアップするソリューションテンプレートと、サンプルノートブックを提供
- Studio のホームページから JumpStart ランディグページを開ける
- サードパーティのコンテンツをダウンロードまたは使用する前に、適用されるライセンス条項を遵守し、使用事例に適していることを確認する責任がある
- JumpStart ランディングページから、独自のモデルと公開されているモデルを探索できる
- 検索バーを使用して、特定のハブ・モデルを見つけられる
- モデルを選択すると、モデルの詳細カードが表示され、右上の微調整、デプロイ、評価を選択してワークフローを開始できる

JumpStart 基礎モデル
- 多くの下流タスクに適応可能な大規模事前トレーニング済みモデル
- より専門的なモデルを開発するための出発点として機能

Studio でモデルを微調整する
- 微調整では最初からトレーニングすることなく、新しいデータセットで事前トレーニング済みのモデルをトレーニングする
- 転移学習とも呼ばれるこのプロセスでは、より小さなデータセットとより短いトレーニング時間で正確なモデルを作成できる
- 一部の基礎モデルでは、微調整を行う前にエンドユーザー使用許諾契約(EULA)に同意する必要がある
- 任意のモデル詳細カードに移動したら、右上のトレーニングを選択する
- モデル設定
- モデルの成果物の場所はデフォルトで入力されている
- 変更できるが、すべてのモデルが変更をサポートしているわけではない
- データ設定
- トレーニングデータセットの場所を指す S3 URI を入力
- デフォルトではサンプルのトレーニングデータセットを指す
- ハイパーパラメータ
- モデルによって異なる
- 共通
- エポック
- データセット全体の1サイクル
- 学習率
- エポック間で値を変更する量
- バッチサイズ
- トレーニングのために GPU に送信するために各間隔で選択されるデータセットからのレコード数
- エポック
- デプロイ
- トレーニングジョブのインスタンスタイプと出力アーティファクトの場所を指定
- デフォルトの出力アーティファクトの場所は、SageMaker AI のデフォルトバケット
- 安全
- トレーニングジョブに使用するセキュリティ設定
- IAM ロール、VPC、暗号化キーなど

Studio でモデルのデプロイ
- モデル詳細カードに移動し、右上のデプロイを選択

Studio でモデルの評価
- JumpStart は SageMaker Clarify 基盤モデル評価と統合されている
- モデルに評価機能が組み込まれている場合、モデル詳細ページの右上「評価」を選択

Bedrock で JumpStart モデルを使用する
- JumpStart からデプロイしたモデルを Bedrock に登録できる
- モデル詳細カードに Bedrock Ready と表示されていたら Bedrock に登録できる
- Bedrock で使用するには、エンドポイントの詳細ページに移動し、Studio UI の右上にある Use with Bedrock を選択し、Register to Bedrock を選択する

公開されている基礎モデルを JumpStartEstimator クラスで微調整する
- SageMaker Python SDK を使用すると、数行のコードで微調整できる
- モデルIDを使用して、トレーニングジョブを JumpStartEstimator として定義
-
from sagemaker.jumpstart.estimator import JumpStartEstimator model_id = "huggingface-textgeneration1-gpt-j-6b" estimator = JumpStartEstimator(model_id=model_id)
-
- モデルで esitimator.fit()を実行し、微調整に使用するトレーニングデータを指定
-
estimator.fit( {"train": training_dataset_s3_path, "validation": validation_dataset_s3_path} )
-
- deploy メソッドを利用して、推論用にモデルを自動デプロイ
-
predictor = estimator.deploy()
-
- その後、predict メソッドを利用して、デプロイしたモデルで推論を実行できる
-
question = "What is Southern California often abbreviated as?" response = predictor.predict(question) print(response)
-
- JumpStartEstimator クラスを使用して微調整する時、モデルのバージョンやインスタンスタイプをオプションで指定できる
- デフォルトのハイパーパラメータや、メトリクス定義を確認できる

公開されている基盤モデルを JumpStartModel クラスでデプロイする
- 推論コンポーネントを使用して複数のモデルを共有エンドポイントにデプロイできる
- deploy メソッドのオプションで、endpoint_type に EndpointType.INFERENCE_COMPONENT_BASED を指定
- 推論の有効な入出力形式を確認できる
- Serializers・Deserializers クラスの retrive_options() メソッド
- サポート対象のコンテンツタイプと出力タイプを確認できる
- content_types・accept_types の retrive_options() メソッド

独自の基盤モデルを ModelPackage クラスでデプロイする
- 独自のモデルは、AWS Marketplace でモデルをサブスクライブした後、モデルパッケージ情報を使用してデプロイする必要がある

SageMaker AI コンソールから JumpStart 基盤モデルを見つける
- SageMaker AI コンソールの左側ナビゲーションパネルで JumpStart を見つけて、Foundation Model を選択

ライセンス
- JumpStart のモデルは、モデルソースによって指定された様々なライセンスのもとでリリースされる
- 使用する前に必ずライセンスを確認する
- 独自の基盤モデルのランセンスについて質問がある場合は、モデルプロバイダーに直接問い合わせる
- AWS Marketplace の各モデルページのサポートタブに連絡先情報あり
- 一部の JumpStart 基盤モデルでは、使用前にエンドユーザーライセンス契約(EULA)に明示的に同意する必要がある

基盤モデルのカスタマイズ
- 基盤モデルを特定のユースケースに合わせて最初にカスタマイズするには、プロンプトエンジニアリングの使用が推奨
- 適切に設計されたプロンプトを提供すると、微調整やモデルの重みの変更を行わなくても目的の結果を得られる
- プロンプトエンジニアリングだけで十分でない場合には、追加のドメイン固有のデータに基づいて微調整できる
- 再トレーニングなしでナレッジライブラリの情報を使用する場合は、検索拡張生成がある

基盤モデルのプロンプトエンジニアリング
- ゼロショット学習
- 未知のクラスやタスクに対して汎化して予測を行うモデルを学習
- ターゲットタスクと希望する出力形式に関する情報を明示的に提供するプロンプトを作成する
- 例:「次のテキストをスポーツ、政治、エンターテイメントのいずれかに分類してください: [入力テキスト]」
- フューショット学習
- 新しいクラスやタスクに対して限られた量のデータでモデルを学習
- 限られたラベル付き例を組み込み、ターゲットクラスを明示的に指定することで、最小限の学習データでもモデルが汎化して正確な予測を行うように導く
- 例:「[画像1]、[画像2]、[画像3]は[ターゲットクラス]の例です。 次の画像を[ターゲットクラス]に分類してください。」
- 推論パラメータ
- max_new_tokens
- 応答の最大出力長
- temperature
- 出力のランダム性を制御
- 高くすると低確率の単語からなる出力で、低くすると高確率の単語からなる出力
- top_p
- top_p の累積確率を持つ単語の可能な限り小さな集合からサンプリングする
- return_full_text
- True の場合、入力テキストは生成された出力テキストの一部になる
- max_new_tokens
- プロンプトエンジニアリングで不十分な場合は、追加データでモデルを微調整するか、RAGを使用するか検討できる

微調整のための基礎モデルとハイパーパラメータ
- 微調整は、基礎モデルの幅広い機能を活用しながら、独自の小規模なコーパスでモデルをカスタマイズするための手頃な方法
- 微調整は、さらなるトレーニングを伴うカスタマイズ方法であり、モデルの重みを変更する
- 主なアプローチ
- ドメイン固有のデータでモデルを微調整
- プロンプトと応答の例を使用した命令ベースの微調整
- 一般的にサポートされているハイパーパラメータ
- epoch
- モデルが微調整データセットを通過するパスの数
- learning_rate
- トレーニングサンプルの各バッチを終了した後で、モデルの重みをどの程度更新するか
- instrunction_tuned
- インストラクションチューニングを行うかどうか
- per_device_train_batch_size
- GPUコアまたはCPUあたりのトレーニングのバッチサイズ
- per_device_eval_batch_size
- GPUコアまたはCPUあたりの評価のバッチサイズ
- max_train_samples
- トレーニングのサンプルの数をこの値に切り詰める
- max_val_samples
- 検証のサンプル数をこの値に切り詰める
- max_input_length
- トークン化後の入力シーケンスの最大長
- validation_split_ratio
- 検証チャネルがない場合に、トレーニングデータをトレーニングと検証に分割する比率
- train_data_split_seed
- 検証データが存在しない場合に、トレーニングデータをトレーニングと検証にランダムに分割するためのシードを指定
- preprocessing_num_workes
- 前処理に使用するプロセスの数
- lora_r
- Low-Rank Adaptation の r 値。重みの更新のスケーリング係数として機能
- lora_alpha
- LoRA のアルファ値。重みの更新のスケーリング係数として機能
- lora_r のサイズの 2 - 4 倍にする
- lora_dropout
- LoRA 層のドロップアウト率
- int8_quantization
- True の場合、モデルはトレーニング用に 8 ビット精度でロードされる
- enable_fsdp
- True の場合、トレーニングでは Fully Sharded Data Parallelism が使用される
- epoch

ドメイン適応を使用してLLMを微調整する
- 事前トレーニング済みの基礎モデルを活用し、限られたドメイン固有のデータを使用して特定タスクに適応させることができる
- 微調整の方法
- トレーニングデータを準備する
- 微調整のトレーニングジョブを作成する
- 一部のモデルでは、微調整や推論実行前にライセンスに同意する必要がある
- トレーニングデータを準備する
- CSV、JSON、TXT
- すべてのトレーニングデータは、1つのフォルダ内の1つのファイルに含まれている必要がある
- トレーニングデータは、Text 列から取得される
- Text というラベルがついた列がない場合、最初の列から取得される
- トレーニングとテスト用にデータを分割する
- オプションで、検証データを含む別のフォルダを指定できる
- 検証データが指定されていない場合は、一定量のトレーニングデータが検証用に確保される
- ハイパーパラメータで検証に使用するトレーニングデータの割合を調整できる
- 微調整のためのトレーニングジョブを作成する
- データが S3 にアップされたら、JumpStart 基盤モデルを微調整してデプロイできる

プロンプト指示を使用して、LLMを微調整する
- ラベル付けされた例を使用して、特定タスクにおける事前トレーニング済みモデルのパフォーマンスを向上させる
- ラベル付けされた例は、プロンプトと応答のペアによりフォーマットされ、指示として表現される
- Fine-tuned LAnguage Net(FLAN)モデルは、命令の調整を使用して、モデルが一般的なダウンストリームNLPタスクを解決しやすくなる
- プロンプトと応答のペアのタスク指示でLLMを微調整する方法
- JSONで指示を準備
- 微調整トレーニングジョブを作成
- トレーニングデータを準備してアップロード
- JSON で提供
- すべてのトレーニングデータは 1 つのフォルダに格納し、フォルダには複数の JSON ファイルを含めることができる
- トレーニングフォルダの中に、データの入出力形式を記述した template.json を入れられる
- デフォルトでは、次のテンプレートファイルが使用される
-
{ "prompt": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{context}", "completion": "{response}" }
- 上記では、トレーニングデータには {instruction}、{context}、{response}フィールドが必要

検索拡張生成(RAG)
- RAGを利用すると、基盤モデルの外部からデータを取得し、取得したデータをコンテキストに追加することでプロンプトを拡張できる
- RAG は外部データをドキュメントリポジトリ、DB、API など複数のデータソースから取得できる
- 最初のステップは、関連性検索を実行するために、ドキュメントとユーザークエリを互換性のある形式に変換する
- ドキュメント、ユーザーが送信したクエリを、埋め込み言語モデルを使用して数値表現に変換する
- 埋め込みとは、ベクトル空間でテキストに数値表現を与えるプロセス
- RAG は、ライブラリのベクトル内にあるユーザークエリの埋め込みを比較する
- その後、元のユーザープロンプトに、ライブラリ内の類似ドキュメントからの関連コンテキストが追加される
- 次に、この拡張プロンプトが基盤モデルに送信される

テキスト生成モデルを評価する
- JumpStart は、SageMaker Clarify Foundation Model Evaluations と統合されている
- SageMaker Clarify Foundation Model Evaluations はプレビューリリース
- JumpStart Studio UI のモデル詳細ページの右上に「評価」がある場合は、評価機能が組み込まれている
- FMEval でモデル評価を利用すると、モデル間、同じモデルの異なるバージョン間でモデル品質と責任のメトリクスを比較して、モデルリスクを定量化できる
- FMEval では、次のタスクを実行するテキストベースのモデルを評価できる
- オープンエンド生成
- 構造が事前に定義されていないテキストに対して、自然な人間らしい応答を生成
- テキスト要約
- 質疑応答
- 分類
- オープンエンド生成
- FMEval を使用すると、特定のベンチマークに基づいてモデル応答を自動的に評価できる
- 評価には、2 つのインスタンスが必要
- ホスティングインスタンス
- LLMをホスト・デプロイするインスタンス
- 評価インスタンス
- ホスティングインスタンスでLLMの評価を促し、実行するために使用されるインスタンス
- ホスティングインスタンス
- アカウントにデプロイされていないJumpStart モデルを評価する場合、FMEval はアカウントに一時的なホスティングインスタンスを作成し、評価期間中のみデプロイされた状態を維持する
- 選択した LLM に対して、JumpStart が推奨するデフォルトのインスタンスをホスティングインスタンスとして使用する
- すべての評価では評価インスタンスを使用してLLMにプロンプトを提供し、LLMからの応答にスコアをつける
- 評価インスタンスのクォータとメモリ要件は、通常、ホスティングインスタンスに必要な要件よりも小さくなる
- ml.m5.2xlarge インスタンス推奨
- 自動評価を使用して、次の次元についてLLMにスコアをつけられる
- 精度
- テキストの要約、質疑応答、テキスト分類
- セマンティック堅牢性
- オープンエンド生成、テキスト要約テキスト分類タスク
- 事実に基づく知識
- オープンエンド生成
- プロンプトのステレオタイプ化
- オープンエンド生成
- 毒性
- オープンエンド生成、テキスト要約、質疑応答
- 精度
- 人間による評価を使用して、モデルの応答を手動で評価することもできる

JumpStart で基盤モデルへのアクセスを制御するためのプライベートハブ
- プライベートハブを使用して、JumpStart 基盤モデルを組織用に厳選し、承認されたモデルだけを組織でアクセスできるように管理する

プライベートモデルハブを作成する
- プライベートハブを作成するには、まず SageMaker Python SDK をインストールし、必要な Python パッケージをインポートする
# Install the SageMaker Python SDK
!pip3 install sagemaker --force-reinstall --quiet
# Import the necessary Python packages
import boto3
from sagemaker import Session
from sagemaker.jumpstart.hub.hub import Hub
- SageMaker AI セッションを初期化する
sm_client = boto3.client('sagemaker')
session = Session(sagemaker_client=sm_client)
session.get_caller_identity_arn()
- プライベートハブの詳細を構成する
HUB_NAME="Example-Hub"
HUB_DISPLAY_NAME="Example Hub UI Name"
HUB_DESCRIPTION="A description of the example private curated hub."
REGION="us-west-2"
- プライベートモデルハブを作成する
- ハブの作成時に S3 バケット名を指定しない場合、SageMaker AI がユーザーに代わって新しいバケットを作成する
- sagemaker-hubs-REGION-ACCOUNT_ID
- ハブの作成時に S3 バケット名を指定しない場合、SageMaker AI がユーザーに代わって新しいバケットを作成する
hub = Hub(hub_name=HUB_NAME, sagemaker_session=session)
try:
# Create the private hub
hub.create(
description=HUB_DESCRIPTION,
display_name=HUB_DISPLAY_NAME
)
print(f"Successfully created Hub with name {HUB_NAME} in {REGION}")
# Check that no other hubs with this internal name exist
except Exception as e:
if "ResourceInUse" in str(e):
print(f"A hub with the name {HUB_NAME} already exists in your account.")
else:
raise e

プライベートハブにモデルを追加する
- プライベートハブを作成したら、許可リストに登録されたモデルを追加できる
- hub.create_model_reference でモデルを追加

Resource Access Manager を使用したプライベートモデルハブのアカウント間共有
- 使用可能なアクセス権限は3つ
- 読み取り権限:AWSRAMPermissionSageMaker AIHubRead
- 読み取りおよび使用権限:AWSRAMPermissionSageMaker AIHubReadAndUse
- フルアクセス権限:AWSRAMPermissionSageMaker AIHubFullAccessPolicy
- 独自のモデルには、DeployHubModel の権限は必要ない

アカウント間のハブ共有を設定する
- RAMコンソールからリソース共有の作成
- リソース共有の詳細に SageMaker AI Hubs リソースタイプを選択し、共有するプライベートハブを 1 つ以上選択
- リソース共有に権限を関連づける
- 共有リソースへのアクセスを許可するアカウントを指定
- リソース共有の作成
- 指定されたアカウントは、リソース共有に参加するための招待を受け取り、共有リソースにアクセスするには正体を承諾する

プライベートハブからモデルを削除する
- hub.delete_model_reference() でモデル ARN を指定して削除

SageMaker AI パブリックモデルハブへのアクセスを削除する
- プライベートハブを追加するだけでなく、ユーザーのパブリックモデルハブへのアクセスを削除することもできる
- パブリックモデルハブは利用可能なすべての JumpStart 基盤モデルにアクセスできる
- パブリックモデルハブへのアクセスを削除し、ユーザーが 1 つのプライベートハブのみにアクセスできる場合、Studio の左ペインで JumpStart を選択すると、ユーザーはプライベートハブに直接移動する
- 複数のプライベートハブにアクセスできる場合、ハブメニューに移動する
- 次のポリシーにより、パブリックモデルハブへのアクセスを削除する
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Effect": "Deny",
"NotResource": [
"arn:aws:s3:::jumpstart-cache-prod-REGION/*.ipynb",
"arn:aws:s3:::jumpstart-cache-prod-REGION/*eula*",
"Additional-S3-bucket-ARNs-as-needed"
],
},
{
"Action": "sagemaker:*",
"Effect": "Deny",
"Resource": [
"arn:aws:sagemaker:REGION:aws:hub/SageMakerPublicHub",
"arn:aws:sagemaker:REGION:aws:hub-content/SageMakerPublicHub/*/*"
]
}
]
}

プライベートハブを削除する
- プライベートハブを削除する前に、ハブ内のすべてのコンテンツ(モデル)を削除する必要がある
- 削除後、hub.delete() でハブ削除