Aurora MySQL で Amazon Aurora 機械学習を使用する - Amazon Aurora

Aurora MySQL で Amazon Aurora 機械学習を使用する

Aurora MySQL DB クラスターで Amazon Aurora 機械学習を使用することで、必要に応じて Amazon Comprehend、Amazon SageMaker のいずれかまたは両方を使用できます。Amazon Comprehend と SageMaker は、次のようにそれぞれ異なる機械学習のユースケースをサポートしています。

Amazon Comprehend

Amazon Comprehend は、ドキュメントからインサイトを抽出するために使用されるマネージド型自然言語処理 (NLP) サービスです。Amazon Comprehend により、エンティティ、キーフレーズ、言語などの特徴を分析することで、ドキュメントの内容から感情を推測できます。詳細については、「Amazon Comprehend デベロッパーガイド」の「Amazon Comprehend とは」を参照してください。

SageMaker

Amazon SageMaker は、フルマネージド型の機械学習サービスです。データサイエンティストやデベロッパーは Amazon SageMaker を使用して、不正検出や製品レコメンデーションなど、さまざまな推論タスク用の機械学習モデルの構築、トレーニング、テストを行っています。機械学習モデルが本番環境で使用できるようになったら、Amazon SageMaker のホスト環境にデプロイできます。詳細については、「Amazon SageMaker デベロッパーガイド」の「Amazon SageMaker とは」を参照してください。

Amazon Comprehend を Aurora DB クラスターで使用すると、SageMaker を使用するよりも事前設定が少なくて済みます。AWS 機械学習と Aurora 機械学習が初めての場合は、Amazon Comprehend から始めることをお勧めします。

Aurora 機械学習は、特定の AWS リージョン と Aurora MySQL の一部のバージョンでのみサポートされています。Aurora 機械学習を設定する前に、Aurora MySQL で利用できるバージョンとリージョンを確認してください。詳細については、「Aurora MySQL を使用した Aurora Machine Learning」を参照してください。

Aurora 機械学習 を Aurora MySQL で使用するための要件

AWS 機械学習サービスは、お客様の本番環境で設定し、実行するマネージドサービスです。Aurora 機械学習は、Amazon Comprehend と SageMaker との統合をサポートしています。Aurora MySQL DB クラスターを設定して Aurora 機械学習を使用開始する前に、次の要件と前提条件を理解していることを確認してください。

Aurora Machine Learning の前提条件

そのクラスターで Aurora 機械学習を使用する場合は、Aurora MySQL の下位バージョンを実行している Aurora クラスターをサポートされている上位バージョンにアップグレードできます。(詳しくは、「Amazon Aurora MySQL のデータベースエンジンの更新」を参照してください。)

リージョンとバージョンの可用性

利用できる機能とそのサポートは、各 Aurora データベースエンジンの特定のバージョン、および AWS リージョン によって異なります。Aurora MySQL と Aurora 機械学習で利用できるバージョンとリージョンの詳細については、「Aurora MySQL を使用した Aurora Machine Learning」を参照してください。

Aurora 機械学習の有効化

ML 機能を有効にするには、以下のステップを実行します。

  • Amazon Comprehend と SageMaker のサービスは、お使いの Aurora MySQL DB クラスターと同じ AWS リージョン で実行する必要があります。別のリージョンにある Aurora MySQL DB クラスターから Amazon Comprehend または SageMaker サービスは使用できません。

  • Aurora MySQL DB クラスターが Amazon VPC サービスに基づく Amazon Comprehend や SageMaker サービスとは異なる仮想パブリッククラウド (VPC) にある場合、VPC のセキュリティグループが対象の Aurora 機械学習サービスへのアウトバウンド接続を許可する必要があります。(詳しくは、「Amazon Aurora MySQL から他の AWS のサービスへのネットワーク通信の有効化」を参照してください。)

  • Aurora MySQL DB クラスターは、カスタム DB クラスターパラメータグループを使用する必要があります。使用する各 Aurora 機械学習サービスの設定プロセスの最後で、サービス用に作成された関連する IAM ロールの Amazon リソースネーム (ARN) を追加します。事前に Aurora MySQL 用のカスタム DB クラスターパラメータグループを作成し、それを使用するように Aurora MySQL DB クラスターを設定することで、設定プロセスの最後に変更できるようにしておくことをお勧めします。

  • SageMaker では、推論に使用する機械学習コンポーネントが設定され、使用できる状態になっている必要があります。Aurora MySQL DB クラスターの設定プロセス時に、SageMaker エンドポイントの Amazon リソースネーム (ARN) を用意する必要があります。SageMaker と連携してモデルを準備し、その他のタスクを処理するのは、チームのデータサイエンティストが最も適任だと考えられます。Amazon SageMaker を使い始めるには、「Amazon SageMaker の使用を開始する」を参照してください。推論とエンドポイントの詳細については、「リアルタイム推論」を参照してください。

  • SageMaker を独自のトレーニングデータで使用するには、Aurora 機械学習用に、Amazon Simple Storage Service (Amazon S3) バケット を Aurora MySQL の設定の一部として設定する必要があります。これを行うには、SageMaker の統合設定の場合と同じ一般的なプロセスに従います。このオプションの設定プロセスの概要については、「SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)」を参照してください。

  • Aurora グローバルデータベースでは、Aurora グローバルデータベースを構成するすべての AWS リージョン で使用する Aurora 機械学習サービスを設定します。例えば、Aurora グローバルデータベースで Aurora 機械学習を SageMaker で使用する場合は、すべての AWS リージョン にある Aurora MySQL DB クラスターごとに次のことを行います。

    • 同じ SageMaker トレーニングモデルとエンドポイントで、Amazon SageMaker サービスを設定します。これらには同じ名前を使用する必要があります。

    • Aurora 機械学習を使用するように Aurora MySQL DB クラスターを設定する」の説明のとおりに IAM ロールを作成します。

    • すべての AWS リージョン にある 各 Aurora MySQL DB クラスターのパラメータグループに、IAM ロールの ARN を追加します。

    これらのタスクでは、Aurora グローバルデータベースを構成するすべての AWS リージョン にある Aurora MySQL のバージョンで Aurora 機械学習を利用できる必要があります。

Aurora MySQL で Aurora 機械学習を使用する場合にサポートされている機能と制限事項

Aurora MySQL を Aurora 機械学習と合わせて使用する場合、次の制限事項が適用されます。

  • サポートしている SageMaker アルゴリズム形式 — Aurora MySQL では、ContentTypetext/csv でカンマ区切り値 (CSV) 形式を読み書きする SageMaker エンドポイントをサポートしています。現在、この形式は以下の組み込みの SageMaker アルゴリズムで受け入れられています。

    • 線形学習

    • ランダムカットフォレスト

    • XGBoost

    これらのアルゴリズムの詳細については、「Amazon SageMaker デベロッパーガイド」の「アルゴリズムの選択」を参照してください。

  • Aurora MySQL ストアド関数の制限 — Aurora の機械学習関数はバイナリログ (binlog) 形式と互換性がありません。これは 次のように Aurora の機械学習の統合に影響します。

    • 常に生成される列を持つテーブルを呼び出すストアド関数はサポートされていません。これはすべての Aurora MySQL ストアド関数に適用されます。このカラムタイプの詳細については、MySQL ドキュメントの「CREATE TABLE と生成された列」を参照してください。

    • 設定 --binlog-format=STATEMENT は、Aurora Machine Learning 関数の呼び出しに対して例外をスローします。Aurora の機械学習関数はすべて非決定的であり、非決定的なストアド関数がこの binlog 形式と互換性がないためです。

    binlog 形式の詳細については、MySQL ドキュメントの「バイナリログ形式」を参照してください。

Aurora 機械学習を使用するように Aurora MySQL DB クラスターを設定する

Aurora MySQL で Amazon Aurora 機械学習を使用する」で説明したように、Amazon Comprehend と SageMaker では異なる機械学習のユースケースをサポートしています。以下のトピックでは、これらの Aurora 機械学習サービスごとに個別の設定手順を参照できます。

Amazon Comprehend を使用するように Aurora MySQL DB クラスターを設定する

Aurora 機械学習では、Aurora MySQL DB クラスターが Amazon Comprehend サービスにアクセスして使用できるように、AWS Identity and Access Management ロールとポリシーに依存します。以下の手順では、クラスターで Amazon Comprehend を使用できるように、IAM ロールとポリシーを自動的に作成します。

Amazon Comprehend を使用するように Aurora MySQL DB クラスターを設定には
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. Amazon RDS のナビゲーションメニューから [Databases] (データベース) を選択して、Amazon Comprehend サービスに接続する Aurora MySQL DB クラスターを選択します。

  3. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  4. [Manage IAM roles] (IAM ロールの管理) セクションまでスクロールして、[Select a service to connect to this cluster] (このクラスターに接続するサービスの選択) を選択します。セレクタから [Amazon Comprehend]を選択し、[Connect service] (サービスに接続する) を選択します。

    
                Aurora MySQL DB クラスターによって選択された Amazon Comprehend を示す画像。
  5. [Connect cluster to Amazon Comprehend] (クラスターを Amazon Comprehend に接続する) ダイアログには、追加情報は必要ありません。ただし、Aurora と Amazon Comprehend の統合が現在プレビュー中であることを通知するメッセージが表示される場合があります。次に進む前に、そのメッセージを必ずお読みください。続行しない場合は、[Cancel] (キャンセル) を選択できます。

  6. [Connect service] (サービスに接続する) を選択して統合プロセスを完了します。

    Aurora は IAM ロールを作成します。また、Aurora MySQL が Amazon Comprehend サービスを使用することを許可するポリシーを作成し、そのポリシーをロールにアタッチします。プロセスが完了すると、次の画像に示すように、このクラスターの現在の IAM ロールリストにロールが表示されます。

    
              Aurora MySQL で Amazon Comprehend を使用して IAM 統合が完了し、アクティブなロールが表示されるようになりました。

    この IAM ロールの ARN を Aurora MySQL DB クラスターの aws_default_comprehend_role パラメータに追加する必要があります。Aurora MySQL DB クラスターでカスタム DB クラスターパラメータグループを使用していない場合は、Aurora MySQL DB クラスターで使用するパラメータグループを作成して、統合を完了させる必要があります。(詳しくは、「DB クラスターパラメータグループを使用する」を参照してください。)

    カスタム DB クラスターパラメータグループを作成し、Aurora MySQL DB クラスターに関連付けると、以下の手順の実行を継続できます。

    クラスターがカスタム DB クラスターパラメータグループを使用している場合は、以下のようにします。

    1. Amazon RDS コンソールで、Aurora MySQL DB クラスターの [Configuration] (設定) タブを開きます。

    2. クラスター用に設定された DB クラスターパラメータグループを検索し、リンクを選択してカスタム DB クラスターパラメータグループを開きます。[パラメータの編集] を選択します。

    3. DB クラスターパラメータグループから aws_default_comprehend_role パラメータを検索します。

    4. [Value] (値) フィールドで、IAM ロールの ARN を入力します。

    5. [Save changes] (変更の保存) を選択して設定を保存します。次の画像に、その例が示されています。

      
              Aurora MySQL のカスタム DB クラスターのパラメータグループに、IAM ロールの ARN を追加します。

    このパラメータ設定を有効にするために、Aurora MySQL DB クラスターのプライマリインスタンスを再起動します。

Amazon Comprehend の IAM 統合が完了しました。適切なデータベースユーザーにアクセス権を付与して、Amazon Comprehend と連携するように Aurora MySQL DB クラスターの設定を続けてください。

SageMaker を使用するように Aurora MySQL DB クラスターを設定する

以下の手順では、Aurora MySQL DB クラスターで SageMaker を使用できるように、IAM ロールとポリシーを自動的に作成します。この手順を実行する前に、SageMaker エンドポイントが使用可能であることを確認し、必要なときに入力できるようにしてください。通常、チームのデータサイエンティストによって Aurora MySQL DB クラスターから使用できるエンドポイントを作成する作業を行います。このようなエンドポイントは SageMaker コンソールにあります。ナビゲーションペインで [Inference] (推論) メニューを開き、[Endpoints] (エンドポイント) を選択します。次の画像に、その例が示されています。


      Aurora MySQL DB クラスターによって選択された SageMaker を示す画像。
SageMaker を使用するように Aurora MySQL DB クラスターを設定するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. Amazon RDS のナビゲーションメニューから [Databases] (データベース) を選択して、SageMaker サービスに接続する Aurora MySQL DB クラスターを選択します。

  3. [Connectivity & security] (接続とセキュリティ) タブを選択します。

  4. [Manage IAM roles] (IAM ロールの管理) セクションまでスクロールして、[Select a service to connect to this cluster] (このクラスターに接続するサービスの選択) を選択します。セレクタから [SageMaker] を選択します。

    
              Aurora MySQL DB クラスターによって選択された SageMaker を示す画像。
  5. [Connect service (サービスの接続)] を選択します。

  6. [Connect cluster to SageMaker] (クラスターを SageMaker に接続する) ダイアログで、SageMaker エンドポイントの Amazon リソースネーム (ARN) を入力します。

    
            設定プロセス時に入力した SageMaker エンドポイントの Amazon リソースネーム (ARN) を示す画像。
  7. Aurora は IAM ロールを作成します。また、Aurora MySQL が SageMaker サービスを使用することを許可するポリシーを作成し、そのポリシーをロールにアタッチします。プロセスが完了すると、このクラスターの現在の IAM ロールリストにロールが表示されます。

  8. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  9. AWS Identity and Access Management ナビゲーションメニューの [Access management] (アクセス管理) セクションから [Roles] (ロール) を選択します。

  10. リストの中からロールを検索します。その名前は、次のパターンを使用しています。

    rds-sagemaker-your-cluster-name-role-auto-generated-digits
  11. ロールの [Summary] (概要) ページを開いて ARN を検索します。ARN をメモするか、コピーウィジェットでコピーします。

  12. Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  13. Aurora MySQL DB クラスターを選択して、その [Configuration] (設定) タブを選択します。

  14. DB クラスターパラメータグループを検索し、リンクを選択してカスタム DB クラスターパラメータグループを開きます。aws_default_sagemaker_role パラメータを検索し、[Value] (値) フィールドに IAM ロールの ARN を入力して、[Save] (保存) で設定を保存します。

  15. このパラメータ設定を有効にするために、Aurora MySQL DB クラスターのプライマリインスタンスを再起動します。

IAM の設定が完了しました。適切なデータベースユーザーにアクセス権を付与して、SageMaker と連携するように Aurora MySQL DB クラスターの設定を続けてください。

構築済みの SageMaker コンポーネントを使用せず、SageMaker モデルをトレーニングに使用する場合は、次の「SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)」の説明のように Amazon S3 バケットを Aurora MySQL DB クラスターに追加する必要もあります。

SageMaker に Amazon S3 を使用するように Aurora MySQL DB クラスターを設定する (オプション)

SageMaker が提供する構築済みコンポーネントを使用せず、独自のモデルで SageMaker を使用するには、Aurora MySQL DB クラスターが使用する Amazon Simple Storage Service (Amazon S3) バケットを設定する必要があります。Amazon S3 バケットの作成の詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットの作成」を参照してください。

SageMaker に Amazon S3 バケットを使用するように Aurora MySQL DB クラスターを設定するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. Amazon RDS のナビゲーションメニューから [Databases] (データベース) を選択して、SageMaker サービスに接続する Aurora MySQL DB クラスターを選択します。

  3. [Connectivity & security (接続とセキュリティ)] タブを選択します。

  4. [Manage IAM roles] (IAM ロールの管理) セクションまでスクロールして、[Select a service to connect to this cluster] (このクラスターに接続するサービスの選択) を選択します。セレクタから [Amazon S3] を選択します。

    
          Aurora MySQL DB クラスターと統合するサービスとして Amazon S3 を選択します。
  5. [Connect service (サービスの接続)] を選択します。

  6. [Connect cluster to Amazon S3] (クラスターを Amazon S3 に接続する) ダイアログで、以下の画像のように Amazon S3 バケットの Amazon リソースネーム (ARN) を入力します。

    
          Aurora MySQL DB クラスターに指定された Amazon S3 バケットの ARN の画像。
  7. [Connect service] (サービスに接続する) を選択してこのプロセスを完了します。

SageMaker で Amazon S3 バケットを使用する方法の詳細については、「Amazon SageMaker デベロッパーガイド」の「トレーニングデータセットのアップロードと出力データの保存に Amazon S3 バケットを指定する」を参照してください。SageMaker の使用方法の詳細については、「Amazon SageMaker デベロッパーガイド」の「Amazon SageMaker ノートブックインスタンスの使用開始」を参照してください。

データベースユーザーに Aurora 機械学習へのアクセスを許可する

Aurora 機械学習 には、Amazon Comprehend および SageMaker と連携するための組み込み関数が含まれています。データベースユーザーには、これらの組み込み関数を呼び出す権限を付与する必要があります。権限の付与方法は、以下の説明のように、Aurora MySQL DB クラスターに使用する MySQL のバージョンによって異なります。その方法は、Aurora MySQL DB クラスターが使用する MySQL のバージョンによって異なります。

  • Aurora MySQL 3 (MySQL 8.0 互換) の場合、データベースユーザーに適切なデータベースロールを付与する必要があります。MySQL 3 データベースロールの詳細については、「MySQL 8.0 リファレンスマニュアル」の「ロールの使用」を参照してください。

  • Aurora MySQL 2 (MySQL 5.7 互換) の場合、データベースユーザーに権限が付与されます。詳細は、「MySQL 5.7 リファレンスマニュアル」の「アクセスコントロールおよびアカウントマネジメント」を参照してください。

次の表に、データベースユーザーが Amazon Comprehend と SageMaker の関数を使用する際に必要なロールまたは権限を示しています。

Aurora MySQL 3 (MySQL 8.0) (ロール) Aurora MySQL 2 (MySQL 5.7) (権限)

AWS_COMPREHEND_ACCESS

INVOKE COMPREHEND

AWS_SAGEMAKER_ACCESS

INVOKE SAGEMAKER

Amazon Comprehend 関数へのアクセスを許可する

データベースユーザーが Amazon Comprehend 関数にアクセスできるようにするには、Aurora MySQL バージョンに適合した適切なステートメントを使用します。

  • Aurora MySQL バージョン 3 (MYSQL 8.0 互換)

    GRANT AWS_COMPREHEND_ACCESS TO user@domain-or-ip-address
  • Aurora MySQL バージョン 2 (MYSQL 5.7 互換)

    GRANT INVOKE COMPREHEND ON *.* TO user@domain-or-ip-address

Amazon Comprehend 関数が使用可能になりました。使用例については、「Aurora MySQL DB クラスターで Amazon Comprehend を使用する」を参照してください。

SageMaker 関数へのアクセス権の付与

データベースユーザーが SageMaker 関数にアクセスできるようにするには、Aurora MySQL バージョンに適合した適切なステートメントを使用します。

  • Aurora MySQL バージョン 3 (MYSQL 8.0 互換)

    GRANT AWS_SAGEMAKER_ACCESS TO user@domain-or-ip-address
  • Aurora MySQL バージョン 2 (MYSQL 5.7 互換)

    GRANT INVOKE SAGEMAKER ON *.* TO user@domain-or-ip-address

データベースユーザーには、SageMaker と連携するために作成した関数の EXECUTE 権限も付与する必要があります。SageMaker エンドポイントのサービスを呼び出すために、db1.anomoly_scoredb2.company_forecasts という 2 つの関数を作成したとします。以下に示すように実行権限を付与します。

GRANT EXECUTE ON FUNCTION db1.anomaly_score TO user1@domain-or-ip-address1 GRANT EXECUTE ON FUNCTION db2.company_forecasts TO user2@domain-or-ip-address2

これで SageMaker 関数が使用できるようになりました。使用例については、「Aurora MySQL DB クラスターで SageMaker を使用する」を参照してください。

Aurora MySQL DB クラスターで Amazon Comprehend を使用する

Aurora MySQL の場合、Aurora 機械学習には Amazon Comprehend とテキストデータを操作するために、次のような 2 つの組み込み関数が用意されています。分析するテキスト (input_data) と言語 (language_code) を指定します。

aws_comprehend_detect_sentiment

この関数は、テキストの感情的な姿勢がポジティブ、中立、ネガティブ、または混合かを識別します。この関数のリファレンスドキュメントは次のとおりです。

aws_comprehend_detect_sentiment( input_text, language_code [,max_batch_size] )

詳細については、「Amazon Comprehend デベロッパーガイド」の「感情」を参照してください

aws_comprehend_detect_sentiment_confidence

この関数は、特定のテキストについて検出された感情の信頼度を測定します。aws_comprehend_detect_sentiment 関数によってテキストに割り当てられた感情の信頼度を示す値 (タイプ double) を返します。信頼度は 0 ~ 1 の間の統計的メトリクスです。信頼度が高いほど、その結果に与える重みが増えます。関数のドキュメントの概要は次のとおりです。

aws_comprehend_detect_sentiment_confidence( input_text, language_code [,max_batch_size] )

いずれの関数 (aws_comprehend_detect_sentiment_confidence、aws_comprehend_detect_sentiment) において、指定がない場合は max_batch_size にはデフォルト値である 25 を使用します。バッチサイズは常に 0 より大きい必要があります。max_batch_size を使用すると、Amazon Comprehend 関数呼び出しのパフォーマンスを調整しやすくなります。バッチサイズを大きくすると、Aurora MySQL DB クラスターでのメモリ使用量が増えるため、パフォーマンスが加速します。(詳しくは、「Aurora MySQL で Aurora 機械学習を使用した場合のパフォーマンスに関する考慮事項」を参照してください。)

Amazon Comprehend の感情検出関数のパラメータと戻り値のタイプについては、「DetectSentiment」を参照してください。

例: Amazon Comprehend 関数を使用する簡単なクエリ

ここでは、この 2 つの関数を呼び出して、サポートチームに対する顧客満足度を確認する簡単なクエリの例を示します。ヘルプをリクエストするたびに顧客からのフィードバックを保存するデータベーステーブル (support) があるとします。このクエリ例では、両方の組み込み関数をテーブルの feedback 列のテキストに適用し、結果を出力します。この関数によって返される信頼値は、0.0 ~ 1.0 の間の倍数です。出力の読みやすさを向上させるため、このクエリでは小数点以下を 6 桁に丸めて結果を出力します。比較しやすいように、このクエリでは信頼度が最も高い結果から降順で結果をソートします。

SELECT feedback AS 'Customer feedback', aws_comprehend_detect_sentiment(feedback, 'en') AS Sentiment, ROUND(aws_comprehend_detect_sentiment_confidence(feedback, 'en'), 6) AS Confidence FROM support ORDER BY Confidence DESC; +----------------------------------------------------------+-----------+------------+ | Customer feedback | Sentiment | Confidence | +----------------------------------------------------------+-----------+------------+ | Thank you for the excellent customer support! | POSITIVE | 0.999771 | | The latest version of this product stinks! | NEGATIVE | 0.999184 | | Your support team is just awesome! I am blown away. | POSITIVE | 0.997774 | | Your product is too complex, but your support is great. | MIXED | 0.957958 | | Your support tech helped me in fifteen minutes. | POSITIVE | 0.949491 | | My problem was never resolved! | NEGATIVE | 0.920644 | | When will the new version of this product be released? | NEUTRAL | 0.902706 | | I cannot stand that chatbot. | NEGATIVE | 0.895219 | | Your support tech talked down to me. | NEGATIVE | 0.868598 | | It took me way too long to get a real person. | NEGATIVE | 0.481805 | +----------------------------------------------------------+-----------+------------+ 10 rows in set (0.1898 sec)
例: 特定の信頼度を超えるテキストの平均感情を判別する。

一般的な Amazon Comprehend クエリは、感情が特定の値であり、かつ信頼レベルが特定の数値より大きい行を検索します。例えば、次のクエリは、データベース内のドキュメントの平均感情を判別する方法を示しています。クエリでは、評価の信頼度が 80% 以上のドキュメントのみが考慮されます。

SELECT AVG(CASE aws_comprehend_detect_sentiment(productTable.document, 'en') WHEN 'POSITIVE' THEN 1.0 WHEN 'NEGATIVE' THEN -1.0 ELSE 0.0 END) AS avg_sentiment, COUNT(*) AS total FROM productTable WHERE productTable.productCode = 1302 AND aws_comprehend_detect_sentiment_confidence(productTable.document, 'en') >= 0.80;

Aurora MySQL DB クラスターで SageMaker を使用する

Aurora MySQL DB クラスターから SageMaker 関数を使用するには、SageMaker エンドポイントとその推論機能への呼び出しを埋め込むストアド関数を作成する必要があります。そのためには、Aurora MySQL DB クラスターの他の処理タスクと同じように MySQL の CREATE FUNCTION を使用します。つまり、ストアド関数でよく使用される MySQL データ定義言語 (DDL) ステートメントを使用して、ユーザー定義関数を作成します。

推論のために SageMaker にデプロイされたモデルを使用するには、よく使用されるストアド関数の MySQL データ定義言語 (DDL) ステートメントを使用して、ユーザー定義関数を作成します。各ストアド関数は、モデルをホストする SageMaker エンドポイントを表します。そのような関数を定義するときには、モデルへの入力パラメータ、呼び出す特定の SageMaker エンドポイント、および戻り値の型を指定します。この関数は、モデルを入力パラメータに適用した後、SageMaker エンドポイントによって計算された推論を返します。

すべての Aurora 機械学習ストアド関数が、数値型または VARCHAR を返します。BIT 以外の数値型を使用できます。JSONBLOBTEXTDATE などの型は使用できません。

次の例では、SageMaker と連携するための CREATE FUNCTION の構文パターンを示しています。

CREATE FUNCTION function_name ( arg1 type1, arg2 type2, ...) [DEFINER = user] RETURNS mysql_type [SQL SECURITY { DEFINER | INVOKER } ] ALIAS AWS_SAGEMAKER_INVOKE_ENDPOINT ENDPOINT NAME 'endpoint_name' [MAX_BATCH_SIZE max_batch_size];

これは通常の CREATE FUNCTION DDL ステートメントの拡張です。SageMaker 関数を定義する CREATE FUNCTION ステートメントでは、関数本体を指定しません。代わりに、関数本体が通常実行されるキーワード ALIAS を指定します。Aurora 機械学習は現在、この拡張構文の aws_sagemaker_invoke_endpoint のみをサポートしています。endpoint_name パラメータを指定する必要があります。SageMaker エンドポイントは、モデルごとに異なる特性を持つことができます。

注記

CREATE FUNCTION の詳細については、「MySQL 8.0 リファレンスマニュアルの」の「CREATE PROCEDURE および CREATE FUNCTION ステートメント」を参照してください。

max_batch_size パラメータはオプションです。デフォルトでは、最大バッチサイズは 10,000 です。このパラメータを関数で使用すると、SageMaker へのバッチリクエストで処理される入力の最大数を制限できます。max_batch_size パラメータを使用すると、大きすぎる入力によって引き起こされるエラーを回避したり、SageMaker からレスポンスが返される時間を短縮したりすることができます。このパラメータは、SageMaker リクエスト処理に使用される内部バッファのサイズに影響します。max_batch_size に指定する値が大きすぎると、DB インスタンスでかなりの規模のメモリオーバーヘッドが発生する可能性があります。

MANIFEST の設定はデフォルト値 OFF のままにすることをお勧めします。MANIFEST ON オプションを使用できますが、一部の SageMaker 機能では、このオプションでエクスポートされた CSV を直接使用できません。マニフェスト形式は、SageMaker から期待されるマニフェスト形式と互換性がありません。

SageMaker モデルごとに個別のストアド関数を作成します。エンドポイントが特定のモデルに関連付けられ、各モデルは異なるパラメータを受け入れるため、このように関数をモデルにマッピングする必要があります。モデル入力とモデル出力タイプに SQL タイプを使用すると、AWS サービス間でデータをやり取りするタイプ変換エラーを回避できます。モデルを適用できるユーザーを制御できます。また、ランタイム特性を制御するには、最大バッチサイズを表すパラメータを指定します。

現在、すべての Aurora 機械学習関数に NOT DETERMINISTIC プロパティがあります。このプロパティを明示的に指定しなかった場合は、Aurora によって自動的に NOT DETERMINISTIC に設定されます。この要件は、データベースに通知せずに SageMaker モデルを変更できることで実現しています。その場合、Aurora 機械学習関数を呼び出すと、単一のトランザクション内の同じ入力に対して異なる結果が返される可能性があります。

CONTAINS SQL ステートメントで、特性 NO SQLREADS SQL DATAMODIFIES SQL DATA、または CREATE FUNCTION を使用することはできません。

以下は、SageMaker エンドポイントを呼び出して異常を検出する使用例です。SageMaker エンドポイント random-cut-forest-model があります。対応するモデルは、random-cut-forest アルゴリズムによって既にトレーニングされています。モデルは、入力ごとに異常スコアを返します。この例は、スコアが平均スコアから 3 スタンダード偏差 (約 99.9 パーセンタイル) より大きいデータポイントを示しています。

CREATE FUNCTION anomaly_score(value real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'random-cut-forest-model-demo'; set @score_cutoff = (select avg(anomaly_score(value)) + 3 * std(anomaly_score(value)) from nyc_taxi); select *, anomaly_detection(value) score from nyc_taxi where anomaly_detection(value) > @score_cutoff;

文字列を返す SageMaker 関数の文字セット要件

文字列値を返す SageMaker 関数の戻り値の型として、文字セット utf8mb4 を指定することをお勧めします。それが実用的でない場合は、文字セット utf8mb4 で表される値を保持できるよう、戻り値の型に十分な長さの文字列長を使用します。次の例は、関数の文字セット utf8mb4 を宣言する方法を示しています。

CREATE FUNCTION my_ml_func(...) RETURNS VARCHAR(5) CHARSET utf8mb4 ALIAS ...

現在、文字列を返す各 SageMaker 関数は、戻り値に文字セット utf8mb4 を使用します。SageMaker 関数がその戻り値の型に対して暗黙的または明示的に異なる文字セットを宣言している場合でも、戻り値はこの文字セットを使用します。SageMaker 関数が戻り値に別の文字セットを宣言している場合、長さが十分でないテーブル列に格納すると、返されたデータが暗黙的に切り捨てられる可能性があります。例えば、DISTINCT 句を含むクエリは、テンポラリテーブルを作成します。したがって、クエリ実行中に文字列が内部的に処理される方法が原因で、SageMaker 関数の結果が切り捨てられる場合があります。

SageMaker モデルトレーニング用のデータを Amazon S3 にエクスポートする (高度)

提供されているいくつかのアルゴリズムを使用して、Aurora 機械学習と SageMaker を使い始めることをお勧めします。また、チームのデータサイエンティストによって SQL コードで使用できる SageMaker エンドポイントを提供することをお勧めします。以下に、独自の Amazon S3 バケットを独自の SageMaker モデルと Aurora MySQL DB クラスターで使用する方法についての最低限必要な情報を示します。

機械学習は、トレーニングと推論という 2 つの主要な手順で構成されます。SageMaker モデルをトレーニングするには、データを Amazon S3 バケットにエクスポートします。Amazon S3 バケットは、モデルをデプロイする前にトレーニングする目的で SageMaker ノートブックインスタンスによって使用されます。SELECT INTO OUTFILE S3 ステートメントを使用すると、Aurora MySQL DB クラスターからデータをクエリし、Amazon S3 バケットに保存されているテキストファイルに直接保存できます。これにより、ノートブックインスタンスは、トレーニングのために Amazon S3 バケットからデータを消費します。

Aurora 機械学習は、Aurora MySQL の既存の SELECT INTO OUTFILE 構文を拡張して、データを CSV 形式にエクスポートします。生成された CSV ファイルは、トレーニング目的で、この形式を必要とするモデルで直接使用できます。

SELECT * INTO OUTFILE S3 's3_uri' [FORMAT {CSV|TEXT} [HEADER]] FROM table_name;

このエクステンションは、スタンダードの CSV 形式をサポートしています。

  • TEXT 形式は、既存の MySQL エクスポート形式と同じです。これがデフォルトの形式です。

  • CSV 形式は、RFC-4180 の仕様に従って新しく導入された形式です。

  • オプションのキーワード HEADER を指定すると、出力ファイルに 1 つのヘッダー行が含まれます。ヘッダー行のラベルは、SELECT ステートメントの列名に対応します。

  • キーワード CSV および HEADER を引き続き識別子として使用できます。

SELECT INTO の拡張構文と文法は次のとおりです。

INTO OUTFILE S3 's3_uri' [CHARACTER SET charset_name] [FORMAT {CSV|TEXT} [HEADER]] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]

Aurora MySQL で Aurora 機械学習を使用した場合のパフォーマンスに関する考慮事項

Amazon Comprehend と SageMaker のサービスは、Aurora の機械学習関数によって呼び出された際には、ほとんどの作業を行います。つまり、これらのリソースを必要に応じて個別にスケーリングできることになります。Aurora MySQL DB クラスターでは、関数呼び出しを最大限効率的に行うことができます。以下に、Aurora 機械学習を使用する際に注意すべきパフォーマンスに関する考慮事項をいくつか示します。

クエリキャッシュ

Aurora MySQL クエリキャッシュは、Aurora 機械学習関数では機能しません。Aurora MySQL は、Aurora 機械学習関数を呼び出す SQL ステートメントのクエリ結果を、クエリキャッシュに保存しません。

Aurora 機械学習関数呼び出しのバッチ最適化

Aurora クラスターの影響を受ける可能性がある Aurora 機械学習のパフォーマンスの主な側面は、Aurora 機械学習ストアド関数を呼び出すためのバッチモード設定です。通常、機械学習関数はかなりのオーバーヘッドを必要とするため、行ごとに外部サービスを個別に呼び出すことは現実的ではありません。Aurora 機械学習では、多くの行の外部 Aurora 機械学習サービスへの呼び出しを 1 つのバッチに結合することで、このオーバーヘッドを最小限に抑えることができます。Aurora 機械学習は、すべての入力行に対する応答を受け取り、その応答を一度に 1 行ずつ実行中のクエリに返送します。この最適化により、結果を変更せずに Aurora クエリのスループットとレイテンシーが改善されます。

SageMaker エンドポイントに接続されている Aurora ストアド関数を作成するときに、バッチサイズパラメータを定義します。このパラメータは、基礎となる SageMaker の呼び出しごとに転送される行数に影響します。多数の行を処理するクエリの場合、行ごとに個別の SageMaker 呼び出しを行うオーバーヘッドが大規模化する可能性があります。ストアドプロシージャによって処理されるデータセットが大きいほど、バッチサイズを大きくすることができます。

バッチモードの最適化を SageMaker 関数に適用できる場合は、EXPLAIN PLAN ステートメントによって生成されたクエリプランを確認することで判断できます。この場合、実行計画の extra 列には Batched machine learning が含まれます。次の例は、バッチモードを使用する SageMaker 関数の呼び出しを示しています。

mysql> CREATE FUNCTION anomaly_score(val real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'my-rcf-model-20191126'; Query OK, 0 rows affected (0.01 sec) mysql> explain select timestamp, value, anomaly_score(value) from nyc_taxi; +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ | 1 | SIMPLE | nyc_taxi | NULL | ALL | NULL | NULL | NULL | NULL | 48 | 100.00 | Batched machine learning | +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+ 1 row in set, 1 warning (0.01 sec)

組み込みの Amazon Comprehend 関数の 1 つを呼び出す場合、バッチサイズを制御するには、オプションの max_batch_size パラメータを指定します。このパラメータは、各バッチで処理される input_text 値の最大数を制限します。複数の項目を一度に送信することにより、Aurora と Amazon Comprehend 間の往復回数を減らします。バッチサイズの制限は、LIMIT 句を使用したクエリなどで役立ちます。max_batch_size に小さい値を使用することで、入力テキストより Amazon Comprehend を呼び出す回数が増えるのを回避できます。

Aurora 機械学習関数を評価するためのバッチ最適化は、以下の場合に適用されます。

  • 選択リストまたは WHERE ステートメントの SELECT 句に含まれる関数呼び出し。以下に説明するように、いくつかの例外があります。

  • VALUES および INSERT ステートメントの REPLACE リストに含まれる関数呼び出し。

  • SET ステートメントの UPDATE 値の SageMaker 関数。

    INSERT INTO MY_TABLE (col1, col2, col3) VALUES (ML_FUNC(1), ML_FUNC(2), ML_FUNC(3)), (ML_FUNC(4), ML_FUNC(5), ML_FUNC(6)); UPDATE MY_TABLE SET col1 = ML_FUNC(col2), SET col3 = ML_FUNC(col4) WHERE ...;

Aurora 機械学習のモニタリング

次に示すように、複数のグローバル変数をクエリすることで、Aurora 機械学習のバッチオペレーションをモニタリングできます。

show status like 'Aurora_ml%';

このステータス変数をリセットするには、FLUSH STATUS ステートメントを使用します。したがって、可変の最後のリセット以降のすべての数値は、合計、平均などを表します。

Aurora_ml_logical_request_cnt

前回のステータスリセット以降、DB インスタンスが Aurora 機械学習サービスに送信されると評価した論理リクエストの数。バッチ処理が使用されているかどうかによっては、この値が Aurora_ml_actual_request_cnt より高くなることがあります。

Aurora_ml_logical_response_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取るレスポンスの集計カウント。

Aurora_ml_actual_request_cnt

DB インスタンスのユーザーによって実行されたすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスに対して行ったリクエストの集計カウント。

Aurora_ml_actual_response_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取るレスポンスの集計カウント。

Aurora_ml_cache_hit_cnt

DB インスタンスのユーザーが実行したすべてのクエリで、Aurora MySQL が Aurora 機械学習サービスから受け取る内部キャッシュヒットの集計カウント。

Aurora_ml_retry_request_cnt

前回のステータスリセット以降、DB インスタンスが Aurora 機械学習サービスに送信した再試行リクエストの数。

Aurora_ml_single_request_cnt

DB インスタンスのユーザーが実行するすべてのクエリで、非バッチモードで評価される Aurora 機械学習関数の集計カウント。

Aurora 機械学習機能から呼び出される SageMaker オペレーションのパフォーマンスのモニタリングについては、Amazon SageMaker のモニタリングを参照してください。