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

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

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

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

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

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

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

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

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

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

Aurora Machine Learning の前提条件

Aurora Machine Learning は、Aurora Machine Learning をサポートしている AWS リージョンにおいて、Aurora MySQL 2.07.0 以降のバージョンを実行しているすべての Aurora クラスターで使用できます。そのクラスターで Aurora Machine Learning を使用する場合、Aurora MySQL の古いバージョンで実行している Aurora クラスターを新しいバージョンにアップグレードします。詳細については、「Amazon Aurora MySQL のデータベースエンジンの更新」を参照してください。

リージョンと Aurora バージョンの可用性については、「Aurora Machine Learning」を参照してください。

Aurora Machine Learning の有効化

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

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

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

    注記

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

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

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

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

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

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

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

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

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

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

コンソールを使用して Aurora DB クラスターを Amazon S3、SageMaker、Amazon Comprehend のいずれかに接続する

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

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

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

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

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

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

  4. [IAM ロールの管理] セクションで、[このクラスターに接続するサービスを選択] をクリックして、接続するサービスを選択します。

    • Amazon S3

    • Amazon Comprehend

    • SageMaker

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

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

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

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

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

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

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

      Amazon S3 バケット ARN の詳細については、Amazon Simple Storage Service ユーザーガイド の「Specifying resources in a policy」を参照してください。SageMaker で Amazon S3 バケットを使用する方法の詳細については、Amazon SageMaker 開発者ガイド の「ステップ 1: Amazon Amazon S3 バケットを作成する」を参照してください。

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

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

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

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

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

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

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

注記

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

次のポリシーは、Aurora MySQL がユーザーに代わって SageMaker 関数を呼び出すために必要なアクセス権限を追加します。データベースアプリケーションが単一のポリシーで Aurora MySQL クラスターからアクセスする必要があるすべての SageMaker エンドポイントを指定できます。このポリシーにより、SageMaker エンドポイントの AWS リージョンを指定します。ただし Aurora MySQL クラスターは、クラスターと同じ AWS リージョンにデプロイされた 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 Management Console を使用すると、Aurora によって自動的に IAM ポリシーが作成されます。その場合、このセクションはスキップできます。

次のポリシーは、Aurora MySQL がユーザーに代わって 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. ナビゲーションペインで、[Policies (ポリシー)] を選択します。

  3. [ポリシーの作成] を選択します。

  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 ロールの作成」の手順を完了します。

SageMaker と Amazon Comprehend にアクセスするための IAM ロールを作成する

IAM ポリシーを作成した後、Aurora MySQL クラスターがデータベースユーザーに代わって ML サービスにアクセスできるようにするための IAM ロールを作成します。IAM ロールを作成するには、AWS Management Console または 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 Management Console を使用すると、Aurora によって自動的に IAM ポリシーが作成されます。その場合、このセクションはスキップできます。

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

  1. AWS Management Console、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 クラスターの新しいパラメータグループを作成するには、以下に示すように、create-db-cluster-parameter-group から AWS CLI コマンドを呼び出します。

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 のサービスを呼び出すための SQL 権限の付与

必要な IAM ポリシーとロールを作成し、ロールを Aurora MySQL DB クラスターに関連付けた後、個々のデータベースユーザーが 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

SageMaker の場合、ユーザー定義関数は、推論を生成するためにモデルに送信されるパラメータを定義し、呼び出されるエンドポイント名を設定します。エンドポイントを呼び出すデータベースユーザーごとに、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 の他のサービスへのネットワーク通信の有効化

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

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

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

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

SageMaker モデルをトレーニングするには、データを Amazon S3 バケットにエクスポートします。Amazon S3 バケットは、モデルをデプロイする前にトレーニングする目的で 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'] ]

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

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

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

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

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

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

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

推論のために SageMaker にデプロイされたモデルを使用するには、よく使用されるストアド関数の MySQL データ定義言語(DDL)ステートメントを使用して、ユーザー定義関数を作成します。各ストアド関数は、モデルをホストする SageMaker エンドポイントを表します。そのような関数を定義するときには、モデルへの入力パラメータ、呼び出す特定の SageMaker エンドポイント、および戻り値の型を指定します。この関数は、モデルを入力パラメータに適用した後、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 ステートメントのバリエーションです。SageMaker 関数を定義する CREATE FUNCTION ステートメントでは、関数本体を指定しません。代わりに、関数本体が通常実行される新しいキーワード ALIAS を指定します。Aurora Machine Learning は現在、この拡張構文の aws_sagemaker_invoke_endpoint のみをサポートしています。endpoint_name パラメータを指定する必要があります。オプションのパラメータ max_batch_size は、SageMaker への実際のバッチリクエストで処理される入力の最大数を制限します。SageMaker エンドポイントは、モデルごとに異なる特性を持つことができます。max_batch_size パラメータを使用すると、大きすぎる入力によって引き起こされるエラーを回避したり、SageMaker からレスポンスが返される時間を短縮したりすることができます。max_batch_size パラメータは、ML リクエスト処理に使用される内部バッファのサイズに影響します。max_batch_size に指定する値が大きすぎると、DB インスタンスでかなりの規模のメモリオーバーヘッドが発生する可能性があります。

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

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

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

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

感情検出に Amazon Comprehend を使用する

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

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

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

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

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

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

-- 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 リージョンを確認するには、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 サービスへの呼び出しを 1 つのバッチに結合することで、このオーバーヘッドを最小限に抑えることができます。Aurora Machine Learning は、すべての入力行に対する応答を受け取り、その応答を一度に 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 Machine Learning 関数を評価するためのバッチ最適化は、以下の場合に適用されます。

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

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

  • SET ステートメントの UPDATE 値の 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 機能から呼び出される 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 のドキュメントを参照してください。