モジュール機構の導入
モジュール機構のマシン構成
モジュール機構を使用するためには、xData Edgeとモジュールワーカーを動作させる必要があります。 xData Edgeとモジュールワーカーを実行するマシンの構成として、以下が考えられます。
- xData Edgeとモジュールワーカーを共に同じマシンに配置
- xData Edgeとモジュールワーカーを別々のマシンに配置
このガイドではxData Edgeとモジュールワーカーを共に同じマシンに配置する場合の導入方法について説明します。
モジュールワーカーのマシン環境
モジュールワーカーのマシンは以下の要件を満たす必要があります。
- SSH 接続(パスワードもしくは公開鍵認証)が可能となっていること
- コンテナ上で GPU を利用する場合、NVIDIA Container Toolkit および、NVIDIA GPU ドライバーが導入されていること
モジュールワーカーのインストール
xdata-edge-base/toolsディレクトリに移動し、module-exec-configure.shを実行してください。
sudo ./module-exec-configure.sh
スクリプトを実行すると、いくつか入力する項目が出てきます。
1. IPアドレスまたはホスト名の確認
スクリプトのメッセージ:
Auto detected IP address of this host: <検出されたIPアドレス>
It must be an IP address or hostname that can be resolved from the network to which this host belongs.
Is the above IP address/hostname correct? [y/n]:
- スクリプトがホストのIPアドレスを自動で検出します
- 検出されたIPアドレスが正しい場合は「y」を入力してください
- 検出されたIPアドレスが正しくない場合は「n」を入力し、手動で正しいIPアドレスやホスト名を入力してください
手動で入力した例:
Enter the IP address or hostname of this host: 192.168.254.1
Confirmation: 192.168.254.1
2. モジュール実行ユーザ名の入力
スクリプトのメッセージ:
Enter the module executor username (new or existing user):
- モジュールを実行するためのユーザ名を入力してください
- 既存のユーザ名を入力すると、そのユーザが使用されます
- 新しいユーザ名を入力すると、そのユーザが作成されます
- 特に理由がなければ、新しいユーザを作成することを推奨します
確認例:
Confirmation: <入力したユーザ名>
Is the above username correct? [y/n]:
- 入力したユーザ名に問題なければ「y」を入力してください
- 修正する場合は「n」を入力してユーザ名を再入力してください
新規ユーザ作成の場合:
User <入力したユーザ名> does not exists. Are you sure you want to create it? [y/n]:
- 入力したユーザ名が存在しない場合、新しいユーザを作成するか確認されます
- 新規作成を行う場合は「y」を入力してください
- 作成を中止する場合は「n」を入力してください
モジュールワーカーの動作確認
情報資産リポジトリのcalculate-moduleを利用して、モジュール機構が正しく導入されているかを確認します。
calculate-moduleを入手後、README.mdの「モジュールの導入」に従い、モジュールをインストールしてください。
モジュール機構およびモジュールが正しく導入されているか、curl コマンドを使って動作検証することができます。 以下の手順で、入力データの作成からモジュール実行、結果の取得まで確認できます。
- 入力テーブルを作成
- データを2件登録
- Citation を作成 (入力データセット用)
- add メソッドを実行
- Citation を作成 (出力データセット用)
- 出力テーブルのデータを取得
手順 1 から 6 は、Citation 作成も含めてすべて必須です。飛ばさずに実行してください。
Citation を作成せずにモジュール実行やデータ取得を行うとエラーになります。
また、以下curl コマンドを実際に実行する際、APIKey と Secret は具体的な値で置き換え、API が稼働しているホストが異なる場合 http://localhost/api/v2/dataset/jsonrpc を書き換えてください。
1. 入力テーブルを作成
curl -X POST http://localhost/api/v2/dataset/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "dataset.create",
"params": {
"dataset_name": "in_sample_dataset",
"columns": [
{"column_name": "id", "data_type": "int"},
{"column_name": "num1", "data_type": "int"},
{"column_name": "num2", "data_type": "int"}
]
},
"id": "1"
}'
正常に実行できた場合、データセットの情報を含む JSON レスポンスが返されます。
2. データを2件登録
curl -X POST http://localhost/api/v2/dataset/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "dataset.record.put",
"params": {
"dataset_name": "in_sample_dataset",
"records": [[1, 3, 5], [2, 12, 88]]
},
"id": "2"
}'
3. Citation を作成 (入力データセット用)
curl -X POST http://localhost/api/v2/dataset/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "dataset.citation.create",
"params": {
"citation_label": "in_sample_dataset",
"source": "in_sample_dataset"
},
"id": "3"
}'
正常に実行できた場合、citation の情報を含む JSON レスポンスが返されます。
4. add メソッドを実行
curl -X POST http://localhost/api/v2/module/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "module.exec",
"params": {
"module": "calculate-module",
"method": "add",
"input": {
"numbers": {
"data_ddc": "in_sample_dataset"
}
},
"output": {
"result": {
"data_ddc": "out_sample_result",
"output_mode": "append"
}
}
},
"id": "4"
}'
正常に実行できた場合、{"result": true, "id": "4", "jsonrpc": "2.0"} のようなレスポンスが返されます。
5. Citation を作成 (出力データセット用)
curl -X POST http://localhost/api/v2/dataset/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "dataset.citation.create",
"params": {
"citation_label": "out_sample_result",
"source": "out_sample_result"
},
"id": "5"
}'
6. 出力テーブルのデータを取得
curl -X POST http://localhost/api/v2/dataset/jsonrpc \
-H "Content-Type: application/json" \
-H "APIKey: <API_KEY>" \
-H "Secret: <API_SECRET>" \
-d '{
"jsonrpc": "2.0",
"method": "dataset.record.get",
"params": {
"citation_label": "out_sample_result"
},
"id": "6"
}'
正常に実行できた場合、以下のような結果が返されます。
{"result": [{"id": 1, "result": 8}, {"id": 2, "result": 100}], "id": "6", "jsonrpc": "2.0"}
手順 2 で入力テーブルに登録した以下 2 件のデータに対して、result の配列の要素として 3 + 5 = 8 (id=1)、12 + 88 = 100 (id=2) という計算結果が出力されていることが確認できます。
| id | num1 | num2 |
|---|---|---|
| 1 | 3 | 5 |
| 2 | 12 | 88 |
詳細な API 仕様については、以下の xData のドキュメントを参照してください。