コンテンツにスキップ

モジュールスクリプトと xData FL との間のデータの受け渡し

ファイルによる受け渡し

モジュールスクリプトと xData FL との間でのデータの受け渡しはファイルにて行います。

基本的なディレクトリ・ファイル構造

xData FL がモジュールスクリプトを実行した際のカレントディレクトリーに下記の構造のフォルダ階層が作成される。

./xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
   +- configuration.json
   +- input/
   +- output/
   +- work/
   +- session/
   +- application/

トップディレクトリはのディレクトリ名は UUID となる。UUID はスクリプトを実行する度に異なる。 トップディレクトリ以下の各ディレクトリは下記の通りである。

ディレクトリ・ファイル名 概要
input xData FL からモジュールスクリプトに渡すファイル群を格納するディレクトリ。xData FL は、モジュールスクリプトの実行開始前に、本ディレクトリ内に、definitions.json の中に書かれた script の input 定義にそってディレクトリを掘り、ファイルを配置する。本ディレクトリ内のディレクトリおよびファイルはスクリプト終了後に破棄される。
output モジュールスクリプトから xData FL に返すファイル群を格納するディレクトリ。モジュールスクリプトは、本ディレクトリ内に、definitions.json の中に書かれた script の output 定義にそってディレクトリを掘り、出力ファイルを配置しなければならない。スクリプト終了後に xData FL は、本ディレクトリ内のファイルの永続化等の処理を実行し、その後に破棄する。
work モジュールスクリプトの作業用ディレクトリ。スクリプトはこのディレクトリの下を自由に使ってよい。xData FL はディレクトリの作成のみ行い、中身のファイルの作成や読み込み等は行わない。本ディレクトリ内のディレクトリおよびファイルはスクリプト終了後に破棄される。
session 本ディレクトリの中身は、情報資産等から xData FL に対して同一セッション内で行われたモジュール API 呼び出しに対して、内容が維持される。また同一モジュール内の異なるスクリプトの実行時であっても(セッションが同じであれば)内容は維持される。xData FL はディレクトリの作成のみ行い、中身のファイルの作成や読み込み等は行わない。本ディレクトリ内のディレクトリ、ファイル等の管理はモジュール側にて行うこと。また、xData FL に対してモジュール API が同時に呼ばれた場合、モジュールスクリプトが並行実行されることがあるので、ファイルの読み書きの排他制御についてもモジュールスクリプト側で意識する必要がある。本ディレクトリ内のディレクトリおよびファイルはセッション終了後に破棄される。
application 本ディレクトリの中身は、対象のモジュールのスクリプト実行に対して、内容が維持される。また同一モジュール内の異なるスクリプトの実行時であっても内容は維持される。xData FL はディレクトリの作成のみ行い、中身のファイルの作成や読み込み等は行わない。本ディレクトリ内のディレクトリ、ファイル等の管理はモジュール側にて行うこと。また、xData FL に対してモジュール API が同時に呼ばれた場合、モジュールスクリプトが並行実行されることがあるので、ファイルの読み書きの排他制御についてもモジュールスクリプト側で意識する必要がある。本ディレクトリ内のディレクトリおよびファイルは xData FL の停止時に破棄される。
configuration.json 任意に xData Edge と通信するための API接続情報。実行時に、環境設定に応じたデータが配置される。

input / output 以下に作成するディレクトリおよびファイルの構造

input ディレクトリ以下のディレクトリおよびファイルは、モジュールの definitions.json の input 定義に基づいて xData FL が作成する。また、output ディレクトリ以下のディレクトリおよびファイルは、同様に definitions.json の output 定義にそった形でモジュールスクリプト側で作成する。

definitions.json のインプット定義との対応の例を以下に示す。

例1

出力としてデータのファイルを 1 つ出力する場合

definitions.json の scripts 以下の output 定義は下記の通りとする。

{
  "output": {
    "output_data_1": {
      "decription": "出力例1",
      "path": "output_1.csv",
      "paramtype": {
        "description": "出力ファイルの形式の定義",
        "definition": {
          "type": "CSV",
          "structure": {
            "lineseparator": "CR LF",
            "delimiter": ",",
            "columns": []
          }
        }
      }
    }
  }
}

上記の例の場合、アウトプットディレクトリ内に直接ファイルを 1 つ生成する。ディレクトリ構成は下記の通り(UUIDのディレクトリは省略)。

output/
   +- output_1.csv

例2

出力として、ディレクトリ内にモデルのメタデータと state_dict のファイルを 1 つずつ出力する場合

definitions.json の scripts 以下の output 定義は下記の通りとする。

{
  "output": {
    "output_model_1": {
      "decription": "出力例2",
      "path": "ouptut_model",
      "paramtype": {
        "description": "モジュールスクリプトが出力したモデル",
        "definition": {
          "type": "model",
          "form": "directory",
          "files": [
            {
              "name": "model_data",
              "path": "model.dat.xdata_meta",
              "form": "file",
              "format": {
                "type": "json",
                "structure": ""
              }
            },
            {
              "name": "model_file",
              "path": "model.dat",
              "form": "file",
              "format": {
                "type": "state_dict",
                "structure": ""
              }
            }
          ]
        }
      }
    }
  }
}

上記の例の場合、アウトプットディレクトリ内に直接ファイルを 1 つ生成する。ディレクトリ構成は下記の通り(UUIDのディレクトリは省略)。

output/
   +- ouptut_model/
        +- model.dat.xdata_meta
        +- model.dat

例3

入力として、ディレクトリを内に、モデル用のディレクトリを複数作成し、その中にメタデータと state_dict を配置して、モデル群を提供する場合

definitions.json の scripts 以下の input 定義は下記の通りとする。

{
  "input": {
    "input_model_1": {
      "decription": "入力例2",
      "path": "intut_models",
      "paramtype": {
        "type": "model_set",
        "form": "directory",
        "paramtype": {
          "description": "モジュールスクリプトに提供するモデル群",
          "definition": {
            "type": "model",
            "form": "directory",
            "files": [
              {
                "name": "model_data",
                "path": "model.dat.xdata_meta",
                "form": "file",
                "format": {
                  "type": "json",
                  "structure": ""
                }
              },
              {
                "name": "model_file",
                "path": "model.dat",
                "form": "file",
                "format": {
                  "type": "state_dict",
                  "structure": ""
                }
              }
            ]
          }
        }
      }
    }
  }
}

上記の例の場合、インプットディレクトリ内に直接ファイルを 1 つ生成する。ディレクトリ構成は下記の通り。 type が model_set になっている場合は、その下に任意の名前のディレクトリ(input の場合は xData FL が UUID 名のディレクトリを作成)をモデルの数の分、作成する。

input/
  +- intut_models/
       +- xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
       |    +- model.dat.xdata_meta
       |    +- model.dat
       +- xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
       |    +- model.dat.xdata_meta
       |    +- model.dat
       :
       +- xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
            +- model.dat.xdata_meta
            +- model.dat

configuration.json

ワーカー上でタスクが実行される際、xData のAPI接続情報が配置されます。 このAPI接続情報を使用して、xData と任意に通信を行うことができます。

提供バージョン: 3.0-alpha.1-mic

{
  "default": {
    "apikey": "xxx",
    "secret": "xxx"
  }
}

提供バージョン: 3.0-alpha.2-mic

{
  "default": {
    "proxies": {
      "no_proxy": "localhost,nginx,webapi-endpoint"
    }
  },
  "provenance": {
    "endpoint": "http://localhost/api/v1/provenance/jsonrpc",
    "apikey": "xxx",
    "secret": "xxx",
    "proxies": {
      "no_proxy": "localhost,nginx,webapi-endpoint"
    }
  },
  "fl": {
    "endpoint": "http://localhost/api/v1/fl/jsonrpc",
    "apikey": "xxx",
    "secret": "xxx",
    "proxies": {
      "no_proxy": "localhost,nginx,webapi-endpoint"
    }
  },
  "dataproc": {
    "endpoint": "http://localhost/api/v1/dataproc/jsonrpc",
    "apikey": "xxx",
    "secret": "xxx",
    "proxies": {
      "no_proxy": "localhost,nginx,webapi-endpoint"
    }
  }
}

DDCに投入するCSVファイルのdatetime型データのフォーマット

CSVファイル経由でDDCにdatetime型のデータを投入する場合、タイムゾーン付きのISO形式(YYYY-MM-DDThh:mm:ss+09:00)で投入する必要があります。 以下がDDCに投入可能なdatetime型のデータを含むCSVファイルのサンプルです。

id,name,email,created_at
1,石塚 洋次,WzxKRGR6J@sample.com,2022-09-15T01:01:00+09:00
2,近藤 恭之,KefD6KU@test.net,2022-09-15T01:02:00+09:00
3,玉井 真帆,cTC6Gu7a@test.com,2022-09-15T01:03:00+09:00
4,井内 賢三,mIn0c2oY@sample.net,2022-09-15T01:04:00+09:00
5,澤田 洋一郎,SCZVtNh9f@sample.net,2022-09-15T01:05:00+09:00
6,佐田 真穂,CvWolLw_G@test.com,2022-09-15T01:06:00+09:00
7,米山 立哉,ADDwGnHX@sample.co.jp,2022-09-15T01:07:00+09:00
8,尾崎 素子,HUrn81dq@test.co.jp,2022-09-15T01:08:00+09:00