Aurora MySQL での機械学習 (ML) の使用 - Amazon Aurora

Aurora MySQL での機械学習 (ML) の使用

Aurora Machine Learning 機械学習を使用すると、SQL 言語を使用して、データベースアプリケーションに機械学習ベースの予測を追加できます。Aurora Machine Learning 機械学習は、Aurora データベースと AWS 機械学習(ML)サービス(Amazon SageMaker および Amazon Comprehend)との間の高度に最適化された統合を利用します。

Aurora Machine Learning には以下のような利点があります。

  • ML ベースの予測を既存のデータベースアプリケーションに追加できます。カスタム統合を構築したり、個別のツールを学んだりする必要はありません。ストアド関数の呼び出しとして、機械学習処理を SQL クエリに直接埋め込むことができます。

  • ML 統合は、ML サービスがトランザクションデータを処理できるようにするための高速な方法です。機械学習操作を実行するために、データベースからデータを移動する必要はありません。データベースアプリケーションで使用するために、機械学習操作の結果を変換または再インポートする必要はありません。

  • 既存のガバナンスポリシーを使用して、基になるデータおよび生成されたインサイトにアクセスできるユーザーを制御できます。

AWS ML サービスは、独自の本番環境でセットアップおよび実行されるマネージドサービスです。Aurora Machine Learning は現在、センチメント分析のために Amazon Comprehend と統合され、さまざまな ML アルゴリズムのために Amazon SageMaker と統合されています。

Amazon Comprehend の一般情報については、「Amazon Comprehend」を参照してください。Aurora と Amazon Comprehend を併用する方法の詳細については、「感情検出に Amazon Comprehend を使用」を参照してください。

Amazon SageMaker の一般情報については、「Amazon SageMaker」を参照してください。Aurora と Amazon SageMaker を併用する方法の詳細については、「Amazon SageMaker を使用して独自の ML モデルを実行」を参照してください。

Aurora Machine Learning の前提条件

Aurora Machine Learning では現在、クラスターで Aurora MySQL データベースエンジンを使用する必要があります。この機能は、Aurora MySQL 2.07.0 以降を実行する Aurora クラスターで使用できます。古い Aurora クラスターをこれらのリリースのいずれかにアップグレードし、このクラスターでこの機能を使用できます。

Aurora Machine Learning の有効化

ML 機能を有効にするには、以下の手順を実行します。

  • Aurora クラスターから、アプリケーションに必要な ML アルゴリズムの種類に応じて、Amazon 機械学習サービス Amazon SageMaker または Amazon Comprehend にアクセスできるようにします。

  • Amazon SageMaker の場合、Aurora CREATE FUNCTION ステートメントを使用して、推論機能にアクセスするストアド関数をセットアップします。

    注記

    Aurora Machine Learning には、感情分析のために Amazon Comprehend を呼び出す組み込み関数が含まれています。Amazon Comprehend のみを使用する場合は、CREATE FUNCTION ステートメントを実行する必要はありません。

Amazon Comprehend および Amazon SageMaker への IAM アクセスのセットアップ

Amazon SageMaker および Amazon Comprehend サービスにアクセスするには、まず Aurora MySQL クラスターから AWS ML サービスにアクセスできるようにします。Aurora MySQL DB クラスターがユーザーに代わって AWS ML サービスにアクセスするには、AWS Identity and Access Management(IAM)ロールを作成して設定します。これらのロールにより、Aurora MySQL データベースのユーザーは AWS ML サービスへのアクセスを許可されます。

AWS マネジメントコンソール を使用すると、AWS によって自動的に IAM セットアップが実行されます。次の情報をスキップして、「コンソールを使用して Aurora DB クラスターを Amazon S3、Amazon SageMaker、または Amazon Comprehend に接続」の手順に従うことができます。

AWS CLI または RDS API を使用して Amazon SageMaker または Amazon Comprehend の IAM ロールをセットアップするには、以下の手順を実行します。

  1. IAM ポリシーを作成して、Aurora MySQL クラスターによって起動される Amazon SageMaker エンドポイントを指定するか、Amazon Comprehend へのアクセスを有効にします。

  2. IAM ロールを作成して、Aurora MySQL データベースクラスターから AWS ML サービスにアクセスできるようにします。上記で作成された IAM ポリシーは、IAM ロールにアタッチされます。

  3. Aurora MySQL データベースクラスターから AWS ML サービスにアクセスできるようにするには、上記で作成した IAM ロールをデータベースクラスターに関連付けます。

  4. データベースアプリケーションから AWS ML サービスを呼び出せるようにするには、さらに、特定のデータベースユーザーにアクセス権限を付与する必要があります。Amazon SageMaker の場合、エンドポイントの呼び出しはストアド関数内でラップされるため、エンドポイントを呼び出すデータベースユーザーに、ストアド関数の EXECUTE 権限も付与します。

Aurora MySQL DB クラスターがユーザーに代わって他の AWS サービスにアクセスできるようにする方法の一般情報については、「ユーザーの代わりに Amazon Aurora MySQL が AWS の他のサービスにアクセスすることを許可する」を参照してください。

コンソールを使用して Aurora DB クラスターを Amazon S3、Amazon SageMaker、または Amazon Comprehend に接続

Aurora Machine Learning では、DB クラスターが Amazon S3、Amazon SageMaker、および Amazon Comprehend を組み合わせて使用する必要があります。Amazon Comprehend は感情分析用です。Amazon SageMaker は、さまざまな機械学習アルゴリズム用です。Aurora Machine Learning の場合、Amazon S3 は Amazon SageMaker モデルのトレーニング専用です。Aurora Machine Learning で Amazon S3 を使用する必要があるのは、トレーニング済みのモデルがまだ利用可能でなく、トレーニングがユーザーの責任である場合のみです。DB クラスターをこれらのサービスに接続するには、Amazon サービスごとに AWS Identity and Access Management(IAM)ロールをセットアップする必要があります。IAM ロールにより、DB クラスターのユーザーは対応するサービスで認証できます。

Amazon S3、Amazon SageMaker、または Amazon Comprehend の IAM ロールを生成するには、必要なサービスごとに以下の手順を繰り返します。

DB クラスターを Amazon サービスに接続するには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択して、使用する Aurora MySQL DB クラスターを選択します。

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

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

  5. 接続するサービスをドロップダウンリストから選択します。

    • Amazon S3

    • Amazon Comprehend

    • Amazon SageMaker

  6. [Connect service (サービスの接続)] を選択します。

  7. [Connect cluster (クラスターの接続)] ウィンドウで特定のサービスに必要な情報を入力します。

    • Amazon SageMaker の場合、Amazon SageMaker エンドポイントの Amazonリソースネーム(ARN)を入力します。エンドポイントが表すものの詳細については、「Amazon SageMaker ホスティングサービスでモデルをデプロイする」を参照してください。

      Amazon SageMaker コンソールのナビゲーションペインで、[エンドポイント] を選択し、使用するエンドポイントの ARN をコピーします。

    • Amazon Comprehend の場合は、追加のパラメータを指定しません。

    • Amazon S3 の場合は、使用する Amazon S3 バケットの ARN を入力します。

      Amazon S3 バケット ARN の形式は arn:aws:s3:::bucket_name です。使用する Amazon S3 バケットが、Amazon SageMaker モデルをトレーニングするための要件を使用してセットアップされていることを確認します。モデルをトレーニングする場合、Aurora DB クラスターには、Amazon S3 バケットにデータをエクスポートする権限と、バケットからデータをインポートする権限が必要です。

      Amazon S3 バケットの ARN の詳細については、Amazon Simple Storage Service 開発者ガイドの「ポリシーでのリソースの指定」を参照してください。Amazon SageMaker で Amazon S3 バケットを使用する方法の詳細については、Amazon SageMaker 開発者ガイドの「ステップ 1:Amazon S3 バケットを作成する」を参照してください。

  8. [Connect service (サービスの接続)] を選択します。

  9. Aurora は新しい IAM ロールを作成し、DB クラスターのリスト [Current IAM roles for this cluster (このクラスターの現在の IAM ロール)] に追加します。IAM ロールのステータスは、最初は [進行中] です。IAM ロール名は、接続されたサービスごとに次のパターンで自動生成されます。

    • Amazon S3 IAM ロール名のパターンは rds-cluster_ID-S3-policy-timestamp です。

    • Amazon SageMaker IAM ロール名のパターンは rds-cluster_ID-SageMaker-policy-timestamp です。

    • Amazon Comprehend IAM ロール名のパターンは rds-cluster_ID-Comprehend-policy-timestamp です。

    また、Aurora は新しい IAM ポリシーを作成し、それをロールにアタッチします。ポリシー名は同様の命名規則に従い、タイムスタンプも保持します。

Amazon SageMaker にアクセスするための IAM ポリシーの作成(AWS CLI のみ)

注記

AWS マネジメントコンソール を使用すると、Aurora によって自動的に IAM ポリシーが作成されます。その場合、このセクションはスキップできます。

次のポリシーは、Aurora MySQL がユーザーに代わって Amazon SageMaker 関数を呼び出すために必要なアクセス権限を追加します。データベースアプリケーションが単一のポリシーで Aurora MySQL クラスターからアクセスする必要があるすべての Amazon SageMaker エンドポイントを指定できます。このポリシーにより、Amazon SageMaker エンドポイントの AWS リージョンを指定できます。ただし Aurora MySQL クラスターは、クラスターと同じ AWS リージョンにデプロイされた Amazon SageMaker モデルのみを呼び出すことができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" } ] }

次のコマンドは、AWS CLI を介して同じ操作を実行します。

aws iam put-role-policy --role-name role_name --policy-name policy_name --policy-document '{"Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeRCFEndPoint", "Effect": "Allow", "Action": "sagemaker:InvokeEndpoint", "Resource": "arn:aws:sagemaker:region:123456789012:endpoint/endpointName" }]}'

Amazon Comprehend にアクセスするための IAM ポリシーの作成(AWS CLI のみ)

注記

AWS マネジメントコンソール を使用すると、Aurora によって自動的に IAM ポリシーが作成されます。その場合、このセクションはスキップできます。

次のポリシーは、Aurora MySQL がユーザーに代わって AWS Amazon Comprehend を呼び出すために必要なアクセス権限を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeComprehendDetectSentiment", "Effect": "Allow", "Action": [ "comprehend:DetectSentiment", "comprehend:BatchDetectSentiment" ], "Resource": "*" } ] }

次のコマンドは、AWS CLI を介して同じ操作を実行します。

aws iam put-role-policy --role-name role_name --policy-name policy_name --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAuroraToInvokeComprehendDetectSentiment", "Effect": "Allow", "Action": [ "comprehend:DetectSentiment", "comprehend:BatchDetectSentiment" ], "Resource": "*" }]}'

Amazon Comprehend へのアクセスを許可する IAM ポリシーを作成するには

  1. IAM マネジメントコンソールを開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [Create policy] を選択します。

  4. [Visual editor (ビジュアルエディタ)] タブで、[Choose a service (サービスの選択)] を選択し、[Comprehend] を選択します。

  5. [アクション] で、[Detect Sentiment (感情の検出)] および [BatchDetectSentiment] を選択します。

  6. [ポリシーの確認] を選択します。

  7. [ 名前] に IAM ポリシーの名前を入力します。IAM ロールを作成して Aurora DB クラスターに関連付ける際に、この名前を使用します。オプションで [Description] 値を追加することもできます。

  8. [Create policy] を選択します。

  9. Amazon Aurora から AWS のサービスにアクセスすることを許可する IAM ロールの作成」の手順を完了します。

Amazon SageMaker および Amazon Comprehend にアクセスするための IAM ロールの作成

IAM ポリシーを作成した後、Aurora MySQL クラスターがデータベースユーザーに代わって ML サービスにアクセスできるようにするための IAM ロールを作成します。IAM ロールを作成するには、AWS マネジメントコンソール または AWS CLI を使用できます。IAM ロールを作成し、前述のポリシーをロールにアタッチするには、「Amazon Aurora から AWS のサービスにアクセスすることを許可する IAM ロールの作成」で説明している手順に従います。IAM ロールの詳細については、AWS Identity and Access Management ユーザーガイドの「IAM ロール」を参照してください。

認証にはグローバル IAM ロールのみを使用できます。データベースユーザーまたはセッションに関連付けられた IAM ロールは使用できません。この要件は、Lambda および Amazon S3 サービスとの Aurora 統合の場合と同じです。

IAM ロールと Aurora MySQL DB クラスターの関連付け(AWS CLI のみ)

注記

AWS マネジメントコンソール を使用すると、Aurora によって自動的に IAM ポリシーが作成されます。その場合、このセクションはスキップできます。

最後の手順では、IAM ポリシーがアタッチされた IAM ロールを、Aurora MySQL DB クラスターに関連付けます。IAM ロールを Aurora DB クラスターに関連付けるには、2 つのことを行います。

  1. AWS マネジメントコンソール、add-role-to-db-cluster AWS CLI コマンド、または AddRoleToDBCluster RDS API オペレーションを使用して、DB クラスターの関連付けられたロールのリストにロールを追加します。

  2. 関連する AWS ML サービスのクラスターレベルのパラメータを、関連付けられた IAM ロールの ARN に設定します。Aurora クラスターで使用する予定の AWS ML サービスに応じて、aws_default_sagemaker_roleaws_default_comprehend_role、または両方のパラメータを使用します。

クラスターレベルのパラメータは、DB クラスターパラメータグループにグループ化されます。上記のクラスターパラメータを設定するには、既存のカスタム DB クラスターグループを使用するか、新しいクラスターグループを作成します。DB クラスターの新しいパラメータグループを作成するには、以下に示すように、AWS CLI から create-db-cluster-parameter-group コマンドを呼び出します。

PROMPT> aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --db-parameter-group-family aurora-mysql5.7 --description "Allow access to Amazon S3, AWS Lambda, AWS SageMaker, and AWS Comprehend"

以下に示すように、適切なクラスターレベルの単一あるいは複数のパラメータと関連する IAM ロールの ARN 値を DB クラスターのパラメータグループに設定します。

PROMPT> aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name AllowAWSAccessToExternalServices \ --parameters "ParameterName=aws_default_s3_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraS3Role,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_sagemaker_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraSageMakerRole,ApplyMethod=pending-reboot" \ --parameters "ParameterName=aws_default_comprehend_role,ParameterValue=arn:aws:iam::123456789012:role/AllowAuroraComprehendRole,ApplyMethod=pending-reboot"

新しい DB クラスターパラメータグループを使用するように DB クラスターを変更します。次に、クラスターを再起動します。以下にその方法を示します。

PROMPT> aws rds modify-db-cluster --db-cluster-identifier your_cluster_id --db-cluster-parameter-group-nameAllowAWSAccessToExternalServices PROMPT> aws rds failover-db-cluster --db-cluster-identifier your_cluster_id

インスタンスが再起動すると、IAM ロールが DB クラスターに関連付けられています。

Aurora Machine Learning Services を呼び出すための SQL 権限の付与

必要な IAM ポリシーとロールを作成し、ロールを Aurora MySQL DB クラスターに関連付けた後、個々のデータベースユーザーが Amazon SageMaker の Aurora Machine Learning ストアド関数と Amazon Comprehend の組み込み関数を呼び出せるように許可します。

ネイティブ関数を呼び出すデータベースユーザーには、INVOKE SAGEMAKER または INVOKE COMPREHEND 権限が付与されている必要があります。ユーザーにこの権限を付与するには、DB インスタンスにマスターユーザーとして接続し、以下のステートメントを実行します。データベースユーザーの適切な詳細に置き換えます。

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

Amazon SageMaker の場合、ユーザー定義関数は、推論を生成するためにモデルに送信されるパラメータを定義し、呼び出されるエンドポイント名を設定します。エンドポイントを呼び出すデータベースユーザーごとに、Amazon SageMaker 用に設定されたストアド関数に EXECUTE 権限を付与します。

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

Aurora MySQL から他の AWS サービスへのネットワーク通信の有効化

Amazon SageMaker と Amazon Comprehend は外部 AWS サービスであるため、さらに、ターゲット AWS サービスへのアウトバウンド接続を許可するように、Aurora DB クラスターを設定する必要があります。詳細については、「Amazon Aurora MySQL から AWS の他のサービスへのネットワーク通信の有効化」を参照してください。

VPC エンドポイントを使用して Amazon S3 に接続できます。現時点では、AWS PrivateLink を使用して Aurora を AWS 機械学習サービスまたは Amazon S3 に接続することはできません。

Amazon SageMaker モデルトレーニングのためにデータを Amazon S3 にエクスポート

チームが機械学習タスクを分割する方法に応じて、このタスクを実行しない場合もあります。他ユーザーが Amazon SageMaker モデルを提供する場合は、このセクションをスキップできます。

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

Aurora Machine Learning は、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'] ]

Amazon SageMaker を使用して独自の ML モデルを実行

Amazon SageMaker は、完全マネージド型の機械学習サービスです。Amazon SageMaker を使用すると、データサイエンティストと開発者は、機械学習モデルをすばやく簡単に構築してトレーニングできます。その後、モデルを本番環境対応のホスト環境に直接デプロイできます。Amazon SageMaker では、統合された Jupyter オーサリングノートブックインスタンスを提供されるため、データソースに簡単にアクセスできます。これにより、サーバーのハードウェアインフラストラクチャを管理することなく、調査と分析を実行できます。また、一般的な機械学習アルゴリズムも使用できます。そうしたアルゴリズムは、分散環境できわめて大容量のデータセットに対しても効率良く実行できるよう最適化されています。独自のアルゴリズムやフレームワークもネイティブでサポートされるため、Amazon SageMaker は、特定のワークフローに適応する柔軟な分散トレーニングオプションを提供します。

Aurora Machine Learning は現在、ContentType として text/csv を使用してカンマ区切り値形式を読み書きできる Amazon SageMaker エンドポイントをサポートしています。現在この形式を受け入れている組み込みの Amazon SageMaker アルゴリズムは、Random Cut Forest、Linear Learner、1P、XGBoost、および 3P です。アルゴリズムが項目ごとに複数の出力を返す場合、Aurora Machine Learning 関数は最初の項目のみを返します。この最初の項目は代表的な結果であることが予期されます。

Aurora Machine Learning は、Aurora クラスターと同じ AWS リージョンで常に Amazon SageMaker エンドポイントを呼び出します。したがって、単一リージョンの Aurora クラスターの場合は、常に Aurora MySQL クラスターと同じ AWS リージョンにモデルをデプロイします。

Aurora グローバルデータベースを使用している場合は、グローバルデータベースの一部である各 AWS リージョンのサービス間で同じ統合を設定します。特に、グローバルデータベース内のすべての AWS リージョンで以下の条件が満たされていることを確認してください。

  • 各 AWS リージョンにあるグローバルデータベースクラスターの外部サービス(Amazon SageMaker、Amazon Comprehend、Lambda など)にアクセスするための適切な IAM ロールを設定します。

  • すべての AWS リージョンに、同じトレーニング済み Amazon SageMaker モデルが同じエンドポイント名でデプロイされていることを確認します。これは、プライマリ AWS リージョンで Aurora Machine Learning 機能の CREATE FUNCTION ステートメントを実行する前に行います。グローバルデータベースでは、プライマリ AWS リージョンで実行するすべての CREATE FUNCTION ステートメントは、すべてのセカンダリリージョンでもすぐに実行されます。

推論のために Amazon SageMaker にデプロイされたモデルを使用するには、よく使用されるストアド関数の MySQL データ定義言語(DDL)ステートメントを使用して、ユーザー定義関数を作成します。各ストアド関数は、モデルをホストする Amazon SageMaker エンドポイントを表します。そのような関数を定義するときには、モデルへの入力パラメータ、呼び出す特定の Amazon SageMaker エンドポイント、および戻り値の型を指定します。この関数は、入力パラメータでモデルを実行した後、Amazon SageMaker エンドポイントによって計算された推論を返します。すべての Aurora Machine Learning ストアド関数が、数値型または VARCHAR を返します。BIT 以外の数値型を使用できます。JSONBLOBTEXTDATE などの他の型は使用できません。モデルのトレーニングのために Amazon S3 にエクスポートした入力パラメータと同じモデル入力パラメータを使用します。

CREATE FUNCTION function_name (arg1 type1, arg2 type2, ...) -- variable number of arguments [DEFINER = user] -- same as existing MySQL CREATE FUNCTION RETURNS mysql_type -- For example, INTEGER, REAL, ... [SQL SECURITY { DEFINER | INVOKER } ] -- same as existing MySQL CREATE FUNCTION ALIAS AWS_SAGEMAKER_INVOKE_ENDPOINT -- ALIAS replaces the stored function body. Only AWS_SAGEMAKER_INVOKE_ENDPOINT is supported for now. ENDPOINT NAME 'endpoint_name' [MAX_BATCH_SIZE max_batch_size]; -- default is 10,000

これは、既存の CREATE FUNCTION DDL ステートメントのバリエーションです。Amazon SageMaker 関数を定義する CREATE FUNCTION ステートメントでは、関数本体を指定しません。代わりに、関数本体が通常実行される新しいキーワード ALIAS を指定します。Aurora Machine Learning は現在、この拡張構文の aws_sagemaker_invoke_endpoint のみをサポートしています。endpoint_name パラメータを指定する必要があります。オプションのパラメータ max_batch_size は、Amazon SageMaker への実際のバッチリクエストで処理される入力の最大数を制限します。Amazon SageMaker エンドポイントは、モデルごとに異なる特性を持つことができます。max_batch_size パラメータを使用すると、大きすぎる入力によって引き起こされるエラーを回避したり、Amazon SageMaker からレスポンスが返される時間を短縮したりすることができます。max_batch_size パラメータは、ML リクエスト処理に使用される内部バッファのサイズに影響します。max_batch_size に指定する値が大きすぎると、DB インスタンスでかなりの規模のメモリオーバーヘッドが発生する可能性があります。

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

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

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

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

以下は、Amazon SageMaker エンドポイントを呼び出して異常を検出する使用例です。Amazon 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;

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

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

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

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

感情検出に Amazon Comprehend を使用

Amazon Comprehend では、機械学習を使用してテキストデータでインサイトや関係性を検出できます。機械学習の経験や専門知識がなくても、この AWS 機械学習サービスを使用できます。Aurora Machine Learning では、データベースに保存されているテキストの感情分析に Amazon Comprehend が使用されます。たとえば、Amazon Comprehend を使用すると、コンタクトセンターのコールインドキュメントを分析して感情を検出し、発信者とエージェントのダイナミクスをより深く理解できます。詳細については、AWS 機械学習ブログの「Analyzing contact center calls」を参照してください。

また、単一のクエリを使用して、感情分析をデータベース内の他の情報の分析と組み合わせることができます。たとえば、以下を組み合わせた問題について、コールインセンタードキュメントの平均感情を検出できます。

  • 30 日以上営業している。

  • 特定の製品または機能について。

  • ソーシャルメディアの影響が最も大きい顧客が作成。

Aurora Machine Learning の Amazon Comprehend の使用は、SQL 関数を呼び出すのと同じくらい簡単です。Aurora Machine Learning は、Amazon Comprehend を介して感情分析を実行するために、2 つの組み込み Amazon Comprehend 関数(aws_comprehend_detect_sentiment() および aws_comprehend_detect_sentiment_confidence())を提供します。分析するテキストフラグメントごとに、これらの関数は感情と信頼水準を判断するのに役立ちます。

-- Returns one of 'POSITIVE', 'NEGATIVE', 'NEUTRAL', 'MIXED' aws_comprehend_detect_sentiment( input_text ,language_code [,max_batch_size] -- default is 25. should be greater than 0 ) -- Returns a double value that indicates confidence of the result of aws_comprehend_detect_sentiment. aws_comprehend_detect_sentiment_confidence( input_text ,language_code [,max_batch_size] -- default is 25. should be greater than 0. )

max_batch_size は、Amazon Comprehend 関数呼び出しのパフォーマンスを調整するのに役立ちます。バッチサイズを大きくすると、Aurora クラスターでのメモリ使用量が増えるため、パフォーマンスが加速します。詳細については、「Aurora Machine Learning のパフォーマンスに関する考慮事項」を参照してください。

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

一般的な 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;
注記

Amazon Comprehend は現在、一部の AWS リージョンでのみ使用可能です。Amazon Comprehend を使用できる AWS リージョンを確認するには、「リージョン表」を参照してください。

Aurora Machine Learning のパフォーマンスに関する考慮事項

Aurora Machine Learning 関数呼び出しのほとんどの作業は、外部 ML サービスで行われます。この分離により、Aurora クラスターから独立した機械学習サービスのリソースをスケーリングできます。Aurora 内では主に、関数呼び出しを可能な限り効率化することに焦点を当てています。

クエリキャッシュ

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

Aurora Machine Learning 関数呼び出しのバッチ最適化

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

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

バッチモードの最適化を Amazon SageMaker 関数に適用できる場合は、EXPLAIN PLAN ステートメントによって生成された実行プランを確認することで判断できます。この場合、実行計画の extra 列には Batched machine learning が含まれます。次の例は、バッチモードを使用する Amazon 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 Machine Learning 関数を評価するためのバッチ最適化は、以下の場合に適用されます。

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

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

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

    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 Machine Learning のモニタリング

Aurora Machine Learning バッチ実行のパフォーマンスをモニタリングするために、Aurora MySQL には、次のようにクエリ可能なグローバル変数があります。

show status like 'Aurora_ml%';

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

Aurora_ml_logical_response_cnt

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

Aurora_ml_actual_request_cnt

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

Aurora_ml_actual_response_cnt

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

Aurora_ml_cache_hit_cnt

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

Aurora_ml_single_request_cnt

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

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

Aurora Machine Learning の制約事項

Aurora Machine Learning には以下の制限が適用されます。

常時生成される列に Aurora Machine Learning 関数を使用することはできません。同じ制限は、Aurora MySQL ストアド関数にも適用されます。これらの関数は、このバイナリログ(binlog)形式と互換性がありません。生成された列については、MySQL のドキュメントを参照してください。

設定 —binlog-format=STATEMENT は、Aurora Machine Learning 関数の呼び出しに対して例外をスローします。このエラーは、Aurora Machine Learning がすべての ML 関数を非決定的であると見なし、非決定的ストアド関数がこの binlog 形式と互換性がないことが原因で発生します。この binlog 形式については、MySQL のドキュメントを参照してください。