Amazon Auroraで機械学習サービスを直接呼び出す機能がサポートされました!

どうも、DA事業本部の大澤です。

Auroraで機械学習サービスとの連携機能がサポートされました!

概要

今回サポートされたこの機能は、クエリでDB内のレコードを機械学習サービスに投げて利用できるというものです。SageMakerとComprehendの2つの機械学習サービスに対応しています。

  • SageMakerとの連携によって、SageMakerで作成したモデルもしくはマーケットプレイスでサブスクライブしたモデルを使って推論することができます。
  • Comprehendとの連携では自然言語の感情分析が可能です。

SageMakerとの連携機能は一般利用可能(GA)ですが、Comprehendとの連携機能はプレビューです。

対応エンジン

  • MySQL互換のAurora 2.07.0以上

対応リージョン

Auroraと連携するサービスが対応しているリージョンであれば使用可能です。 2019年11月27日現在において、東京リージョンであればSageMakerとの連携機能が利用できます。

やってみる

SageMakerエンドポイントを使ったAuroraのテーブル内のレコードの推論を試してみたので、その様子をご紹介します。
次のような流れで進めました。

  • SageMaker: Irisの品種を推論するためのモデルパッケージからエンドポイントを作成する
  • Aurora: DBクラスタを作成する
  • Aurora: テーブルを作成し、レコードを挿入する
  • Aurora: Irisの品種推論を行う関数を作成する
  • Aurora: テーブルのデータをselectして各レコードの品種を推論する

SageMakerのエンドポイント準備

まずは今回使用するモデルパッケージをマーケットプレイスでサブスクライブします。今回は決定木を使ってIrisの品種の推論用に学習済みのモデルパッケージを使用します。

サブスクライブが完了したら、モデルパッケージ一覧から対象を選び、エンドポイントを作成します。

DBクラスタの作成

続いて、AuroraのDBクラスタを作成します。エンジンタイプはAurora MySQLを選択し、バージョンは機械学習連携機能に対応しているを2.07.0以上のものを選択します。それ以外の項目については用途や環境に応じて設定してください。

クラスタ作成後はSageMakerのエンドポイントへのアクセスの際にクラスタが使用するIAMロールを設定します。 クラスタの詳細画面から必要となるIAMロールを作成&設定できます。

パラメータグループを編集し、先ほど設定したIAMロールのARNをaws_default_sagemaker_roleに設定します。

レコード作成

ここからはDB操作のため、クラスタにアクセスします。

mysql -h ホスト -P 3306 -u ユーザ名 -p

検証用にDBを作成します。

CREATE DATABASE test; USE test;

テーブルを作成し、レコードを挿れます。

CREATE TABLE iris (
  `class` varchar(10),
  `sepal_length` real,
  `sepal_width` real,
  `petal_length` real,
  `petal_width` real
);

INSERT INTO iris (
    `class`,
    `sepal_length`,
    `sepal_width`,
    `petal_length`,
    `petal_width`
  )
VALUES
  ('setosa', 5.1, 3.8, 1.6, 0.2),
  ('setosa', 4.6, 3.2, 1.4, 0.2),
  ('setosa', 5.3, 3.7, 1.5, 0.2),
  ('setosa', 5, 3.3, 1.4, 0.2),
  ('versicolor', 7, 3.2, 4.7, 1.4),
  ('versicolor', 6.4, 3.2, 4.5, 1.5),
  ('versicolor', 6.9, 3.1, 4.9, 1.5),
  ('versicolor', 5.5, 2.3, 4, 1.3),
  ('versicolor', 6.5, 2.8, 4.6, 1.5),
  ('versicolor', 5.7, 2.8, 4.5, 1.3),
  ('versicolor', 6.3, 3.3, 4.7, 1.6),
  ('versicolor', 4.9, 2.4, 3.3, 1),
  ('versicolor', 6.6, 2.9, 4.6, 1.3),
  ('versicolor', 5.2, 2.7, 3.9, 1.4),
  ('virginica', 6.5, 3, 5.8, 2.2),
  ('virginica', 7.6, 3, 6.6, 2.1),
  ('virginica', 4.9, 2.5, 4.5, 1.7),
  ('virginica', 7.3, 2.9, 6.3, 1.8),
  ('virginica', 6.7, 2.5, 5.8, 1.8);

推論用関数の作成

SageMakerのエンドポイントにリクエストを投げる関数を作成します。ALIASキーワードで定義済みの関数AWS_SAGEMAKER_INVOKE_ENDPOINTを指定し、作成したエンドポイントの名前を設定します。 これによって作成した関数に引数を渡すと、その値をSageMakerのエンドポイントに投げて推論結果を受け取ってくれます。

詳しい説明についてはドキュメントをご覧ください。

CREATE FUNCTION detect_iris(sepal_length real, sepal_width real, petal_length real, petal_width real) RETURNS VARCHAR(10) CHARSET utf8mb4
  ALIAS AWS_SAGEMAKER_INVOKE_ENDPOINT ENDPOINT NAME 'エンドポイント名';

推論する

では、作成したIrisの種類の推論用関数を使ってみます。次のように通常の関数と同じ感じで使うことができます。

select
  *,
  detect_iris(
    sepal_length,
    sepal_width,
    petal_length,
    petal_width
  ) as pred_class
from iris;

次のように推論結果が表示されます。

片付け

使用したRDSのクラスタとSageMakerのエンドポイントは不要になり次第、削除しましょう。起動時間に応じて課金されます。

さいごに

Auroraの機械学習サービスとの連携機能を使って、SageMakerで推論してみた様子をご紹介しました。現在のところMySQL互換のAuroraのみの対応ですが、AWS公式ブログによるとPostgreSQL(10と11)互換のAuroraでの対応に向けて現在開発中のようです。今後のアップデートに期待です!