コンテンツにスキップ

モジュール機構の導入

モジュール機構のマシン構成

モジュール機構を使用するためには、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 コマンドを使って動作検証することができます。 以下の手順で、入力データの作成からモジュール実行、結果の取得まで確認できます。

  1. 入力テーブルを作成
  2. データを2件登録
  3. Citation を作成 (入力データセット用)
  4. add メソッドを実行
  5. Citation を作成 (出力データセット用)
  6. 出力テーブルのデータを取得

手順 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 のドキュメントを参照してください。