RDS SQLFlow は AliSQL ベースの AI ソリューションです。フルマネージドサービスを提供し、機械学習の実装を簡素化します。組み込みの機械学習サービスと SQL 拡張により、RDS SQLFlow は AliSQL を AI エンジンに接続し、最小限の SQL コードでアプリケーションの背後にあるデータフローと AI 構造を記述できます。
ステップ 1: rds_sqlflow サービスの設定
-
以下のパラメーター設定で RDS Custom インスタンスを作成します。詳細な手順については、「RDS Custom インスタンスの作成」をご参照ください。
-
インスタンスタイプ セクションで、アーキテクチャ を AI ノード に設定します。
-
イメージ には、デフォルトイメージ 配下の [SQLFlow] を選択します。
-
-
RDS Custom インスタンスと同じリージョンおよび VPC 内の Elastic Compute Service (ECS) インスタンスを使用して、
sshコマンドで接続します。詳細な手順については、「RDS Custom インスタンスへの接続」をご参照ください。 -
/home/script ディレクトリに移動し、
start_sqlflow.shスクリプトを実行します。このスクリプトは、ローカルの MySQL プロセスを作成し、RDS SQLFlow コンテナを起動します。cd /home/script ./start_sqlflow.sh -P 50054 -u aliyun_rds -p aliyun_rdsパラメーター:
パラメーター
説明
-PRDS SQLFlow コンテナ内のポートにマッピングされるホストポート。デフォルト値は 50054 です。
-uMySQL プロセスのユーザー名。デフォルト値は aliyun_rds です。
-pMySQL ユーザーのパスワード。このパラメーターを指定しない場合、ランダムなパスワードが生成されます。
出力:
-
トランスポート層セキュリティ (TLS) 証明書。証明書の内容をコピーし、クライアント側に
ca.crtファイルとして保存します。 -
クライアント接続コマンド。このコマンドを使用して RDS SQLFlow ノードに接続し、機械学習用のデータソースを指定できます。
クライアント側で、以下の内容を ca.crt として保存してください: -----BEGIN CERTIFICATE----- xxx -----END CERTIFICATE----- 次のコマンドを使用して SQLFlow に接続してください: sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun_rds@tcp(172.xxx.xxx.xxx:3306)/mysql?maxAllowedPacket=0' -s172.xxx.xxx.xxx:xxx:50054 また、MySQL の設定を変更して、独自の MySQL に接続することもできます。結果の確認:次のコマンドを実行して、スクリプトの実行ステータスを確認します。
-
ps -ef | grep mysqlコマンドを実行して、MySQL プロセスのステータスを確認します。[root@rc-xxx script]# ps -ef | grep mysql mysql 22669 1 0 09:52 ? 00:00:02 /home/u01/mysql80_current/bin/mysqld --defaults-file=/etc/my.cnf root 22811 21833 0 09:57 pts/0 00:00:00 grep --color=auto mysql -
docker psコマンドを実行して、RDS SQLFlow コンテナのステータスを確認します。[root@rc-xxx script]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS b8af67093420 rds-sqlflow:latest "bash /start.sh" About a minute ago Up About a minute 50051/tcp, 0.0.0.0:50054->50052/tcp, [::]:50054->50052/tcp
-
ステップ 2: rds_sqlflow サービスへの接続
-
RDS Custom インスタンスと同じリージョンおよび VPC 内の ECS インスタンスに RDS SQLFlow クライアントをインストールし、クライアントに実行権限を付与します。
-
次のいずれかの方法で RDS SQLFlow クライアントを取得できます。
-
RDS Custom インスタンスから、/home ディレクトリの RDS SQLFlow クライアントファイルをターゲット ECS インスタンスにコピーします。このチュートリアルでは、/home ディレクトリを例として使用します。
scp /home/sqlflow root@<ECS_インスタンスのプライベートIPアドレス>:/home -
ターゲット ECS インスタンスで、クライアントをダウンロードします。
wget -O sqlflow "https://forsharelogs.oss-cn-beijing.aliyuncs.com/sqlflow?Expires=1729065153&OSSAccessKeyId=TMP.3KhXUKdnV6VCQmT15btm1k2tLRdWeBh26vq78fg2zJDLLfMAmrXYP2hWJKw64Wq7VWmLQLiMuCPCDiTv5ERnhL7a9e****&Signature=mgbW6Vh5q%2FP8aGxrzz0QtglBUxQ%3D"
-
-
ターゲット ECS インスタンスで、
sqlflowファイルを実行可能にします。cd /home chmod +x sqlflow -
ターゲット ECS インスタンスで
ca.crtファイルを作成し、ステップ 1 で生成した TLS 証明書の内容を貼り付けます。vim ca.crt
-
-
ステップ 1 で
start_sqlflow.shスクリプトを実行したときに生成されたクライアント接続コマンドを使用して、rds_sqlflow サービスに接続します。たとえば、sqlflowクライアントが /home ディレクトリにインストールされている場合は、次のコマンドを実行します。/home/sqlflow -c ca.crt -d'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0' -ssqlflowHost:sqlflowPortパラメーター:
パラメーター
説明
-cステップ 1 で生成された証明書ファイル。
-dRDS SQLFlow の MySQL データソースを指定します。例:
'mysql://user:password@tcp(mysqlHost:mysqlPort)/mysql?maxAllowedPacket=0'。-
user: MySQL データソースのユーザー名。 -
password: MySQL データソースユーザーのパスワード。 -
mysqlHost: MySQL データソースのエンドポイント。 -
mysqlPort: MySQL データソースのポート番号。
説明デフォルトでは、ステップ 1 で生成されたクライアント接続コマンドは、RDS SQLFlow サーバーで実行されている MySQL サービスを使用します。データソースとして、別の MySQL サービスのエンドポイントを指定することも可能です。
-sRDS SQLFlow サーバーのエンドポイントを指定します。例:
sqlflowHost:sqlflowPort。-
sqlflowHost: RDS SQLFlow サーバーのエンドポイント。これは RDS Custom インスタンスのプライベート IP アドレスです。 -
sqlflowPort: RDS SQLFlow サーバーのポート番号。
例:
/home/sqlflow -c ca.crt -d'mysql://aliyun_rds:aliyun@tcp(47.XXX.XXX.153:3306)/mysql?maxAllowedPacket=0' -s172.XXX.XXX.180:50054Welcome to SQLFlowというメッセージは、接続に成功し、SQLFlow CLI が起動したことを示します。 -
ステップ 3: データの準備
RDS SQLFlow では、機械学習のために MySQL データソースが必要です。
MySQL データソースは、RDS SQLFlow サーバーで実行されている MySQL データベース、または ApsaraDB RDS for MySQL インスタンスなどの別の MySQL データベースを使用できます。
このチュートリアルでは、RDS SQLFlow サーバー上の MySQL データベースを使用して Iris データセットを構築し、TensorFlow DNNClassifier アルゴリズムをトレーニングします。DNNClassifier は、1 次元のデータを入力として使用し、解釈が困難な複雑な内部パターンを持つ大規模なデータセットの分類に適しています。
このチュートリアルの Iris データセットには、4 つの特徴と 1 つのラベルが含まれています。4 つの特徴は、各アヤメの花の植物形態を記述し、浮動小数点数として表されます。ラベルは、各アヤメの花の亜種を 0、1、または 2 の整数で表します。TensorFlow では、特徴列は、データ内の列と、モデルのトレーニングに使用される特徴との間の橋渡しとして機能します。TensorFlow は、複数のタイプの特徴列を提供します。詳細については、「TensorFlow の公式ドキュメント」をご参照ください。以下の表は、Iris データセットの列を説明しています。
|
名前 |
タイプ |
説明 |
|
sepal_length |
FLOAT |
特徴。がくの長さ。単位:cm。 |
|
sepal_width |
FLOAT |
特徴。がくの幅。単位:cm。 |
|
petal_length |
FLOAT |
特徴。花びらの長さ。単位:cm。 |
|
petal_width |
FLOAT |
特徴。花びらの幅。単位:cm。 |
|
class |
int |
ラベル。亜種のカテゴリー。有効値:0、1、2。 |
SQLFlow CLI で、次の SQL ステートメントを実行して、機械学習用のトレーニングデータセットと評価データセットを作成します。
ステップ 4: モデルのトレーニング
SQLFlow CLI で、次の SQL ステートメントを実行して、3 クラスの DNNClassifier モデルをトレーニングします。このモデルには、それぞれ 100 個のノードを持つ 2 つの隠れ層があります。オプティマイザの学習率は 0.1 で、トレーニングは 10 エポック実行されます。
CREATE DATABASE IF NOT EXISTS sqlflow_models;
SELECT * FROM iris.train -- iris.train をトレーニングデータセットとして指定します。
TO TRAIN DNNClassifier WITH
model.n_classes = 3, -- クラス数を 3 に設定します。
model.hidden_units = [100, 100], -- それぞれ 100 ユニットを持つ 2 つの隠れ層を指定します。
optimizer.learning_rate=0.1, -- 学習率を 0.1 に設定します。
train.epoch = 10 -- トレーニングエポック数を 10 に設定します。
COLUMN sepal_length, sepal_width, petal_length, petal_width -- 特徴列を指定します。
LABEL class -- ラベル列を class として指定します。
INTO sqlflow_models.my_dnn_model; -- 学習済みモデルを指定されたテーブルに保存します。
ステップ 5: モデルの評価
-
iris.testデータセットを使用してsqlflow_models.my_dnn_modelモデルを評価します。評価結果はsqlflow_models.evaluate_result_tableテーブルに保存されます。SELECT * FROM iris.test TO EVALUATE sqlflow_models.my_dnn_model WITH validation.metrics = Accuracy LABEL class INTO sqlflow_models.evaluate_result_table; -
評価が完了したら、次の SQL ステートメントを実行して結果を表示します。これらの結果に基づいて、モデルのパラメーターを微調整できます。
SELECT * FROM sqlflow_models.evaluate_result_table;結果:
+----------------------+----------+ | LOSS | ACCURACY | +----------------------+----------+ | 0.035312581807374954 | 1 | +----------------------+----------+
ステップ 6: 予測の実行
-
sqlflow_models.my_dnn_modelモデルを使用して予測を実行します。結果はiris.predictテーブルのclass列に書き込まれます。予測ステートメントは次のとおりです。SELECT * FROM iris.test TO PREDICT iris.predict.class USING sqlflow_models.my_dnn_model; -
予測が完了したら、次の SQL ステートメントを実行して結果を表示します。
SELECT * FROM iris.predict LIMIT 5;結果:
+--------------+-------------+--------------+-------------+-------+ | SEPAL LENGTH | SEPAL WIDTH | PETAL LENGTH | PETAL WIDTH | CLASS | +--------------+-------------+--------------+-------------+-------+ | 6.3 | 2.7 | 4.9 | 1.8 | 2 | | 5.7 | 2.8 | 4.1 | 1.3 | 1 | | 5 | 3 | 1.6 | 0.2 | 0 | | 6.3 | 3.3 | 6 | 2.5 | 2 | | 5 | 3.5 | 1.6 | 0.6 | 0 | +--------------+-------------+--------------+-------------+-------+