メインコンテンツへスキップ

はじめに

この記事では、JupyterワークスペースでAI/MLモデルを構築する方法について説明します。モデルはDomoモデル管理インターフェースにもアップロードされ、リアルタイムまたはバッチ推論のために展開できます。

データをトレーニングする

次の例では、シンプルにするために、モデルのトレーニングに機械学習を使用していません。代わりに、色付きの図形のリストを使用して、図形を青と青以外に分類するシンプルなアルゴリズムを定義しています。
import pandas as pd from io import StringIO
data = [[`Circle`, `Red`], [`Square`, `Blue`], ['Oval`, `Green`], [`Rectangle`, `Orange`,], [`Rectangle`, `Pink`]] train_x = pd.DataFrame(data, columns=[`Shape`, `Color`]) # For each row in the training data, 1 if the Color is Blue, and 0 otherwise. This is the value that we want to predict. train_y = pd.DataFrame({`Blue`: [0,1,0,0,0]}) # View first few rows of data when joined train_x.join(train_y).head()
図形
0 0
1 正方形 1
2 楕円形 0
3 長方形 オレンジ 0
4 長方形 ピンク 0

ハイパーパラメーター

モデルのトレーニングに機械学習を使用する場合、トレーニングプロセスを設定するためにパラメーターが必要です。パラメーターは今回の例では使用しませんが、参考のために以下に示します。
hyperparameters = { "alpha": "2.35e-05", "lambda": "0.25" }

モデルトレーニング

この時点で、通常は機械学習ライブラリを使用して、トレーニング用DataSetに合うようにモデルをトレーニングします。参考のために、以下にそのモデルを示します。
import pandas as pd from io import StringIO def invoke(data, content_type_header, accept_header): """Invoke the model using the data as the input:param data: The input data:param str content_type_header: The Content-Type header, or MediaType of the input data:param str accept_header: The Accept header, or expected MediaType of the response:return: The model prediction """ # Read csv input input_data = pd.read_csv(StringIO(data), header=None).to_numpy() # "predict" that the input is blue (1) if the color is Blue, otherwise 0 predictions = [1 if entry[1] == `Blue` else 0 for entry in input_data] # Convert and return predictions as csv return pd.DataFrame(predictions).to_csv(header=False, index=False)
このモデルは、 invoke 関数を実装しています。この関数は、アルゴリズムを実装するための共通の場所を提供します。このモデルをDomoで展開した場合、この関数はモデルを実行するためのエントリーポイントとしても機能します。 このモデルをDataFlowで使用した場合、このinvoke関数はデータをCSV文字列として受け取り、CSV文字列として返します。 このページのトップへ

検証

モデルを確実に読み取って展開するには、 invoke 関数を使用してテストを行うことを推奨します。この例では、シンプルにするために、トレーニング用DataSetに対してテストを行います。
# Write training dataset as csv without headers or index column train_csv = train_x.to_csv(header=False, index=False) # Execute invoke function from model.py import model predicted_y = model.invoke(train_csv, `text/csv`, `text/csv`) print(predicted_y)

応答

0 1 0 0 0
このページのトップへ

モデルスキーマ

各モデルは、入力タイプと出力タイプを定義し、オプションでCSVまたはJSONタイプのスキーマを定義します。 CSVModelIOConfiguration、JSONModelIOConfiguration() 例えば、入力としてCSVを受け入れ、出力としてCSVを返すモデルにできます。CSVスキーマを手動で作成するだけでなく、DataFrameを使用している場合は、DataFrameからCSVスキーマを作成することもできます。その方がよりシンプルです。

メトリクス

トレーニングおよび検証中に、モデルのパフォーマンスを測定するためのメトリクスを定義できます。参照用にメトリクスの例を以下に示します。 メトリクスの名前と値に加えて、標準偏差とタイムスタンプを含めることができます。
from domojupyter.ai import Metric from datetime import datetime metrics = { "accuracy": 1.0, "recall": 1.0, "precision": 1.0 } now = datetime.now() domo_metrics = {k: Metric(k, v, None, now) for (k,v) in metrics.items()}
このページのトップへ

モデルタスク

Domoでは、どのタスクを実行するようモデルをトレーニングするかを例えば以下で指定することができます。
  • TEXT_GENERATION
  • CLASSIFICATION
  • OTHER
モデルの入力と出力は、タスク定義の一部として設定することもできます。以下の例では、入力と出力がCSVとして設定され、Magic ETLのモデル推論タイルを使用して実行できるようになっています。
from domojupyter.ai import ModelTask, ModelTaskType from domojupyter.ai import CSVModelIOConfiguration # Infer the input column names and types from our training dataset input_config = CSVModelIOConfiguration(data_frame=train_x) # Infer the output column names and types from our training label dataset output_config = CSVModelIOConfiguration(data_frame=train_y) task = ModelTask(ModelTaskType.CLASSIFICATION, input_config=input_config, output_config=output_config)

カーネルのスナップショット

Domo Jupyterワークスペースでは、サードパーティのライブラリをインストールして環境をカスタマイズできます。カスタマイズされたJupyter環境とモデルホスティング環境が一致するように、Jupyterカーネルを実行しているconda環境のスナップショットが作成されます。 ワークスペースで最初にモデルを作成したときに、カーネルスナップショットが自動的に作成されます。1つまたは複数のスナップショットが既に存在する場合は、最新のスナップショットがモデルに使用されます。環境が変更され、新しいスナップショットを作成する必要が出てきた場合は、「create_snapshot=True」を使用して「create_model」を呼び出すことができます。 新しいスナップショットの作成には数分かかる場合があります。 このページのトップへ

モデルを作成する

パフォーマンスをほかのモデルと比較できるDomoモデル管理インターフェースにモデルをアップロードします。準備ができたら、Magic ETLでエンドポイントまたはDataFlowタイルとして展開できます。 以下の情報が含まれます。
  • 名前 — モデルの名前
  • エントリーポイント — 展開後に実行される invoke 関数を含むファイル
  • ファイル — シリアライズされたモデルまたはモデルを実行するのに必要なその他のファイル
  • トレーニング — トレーニング中に発見されたハイパーパラメーターとメトリクス
  • タスク — モデルがサポートするタスクのリスト
from domojupyter.ai import ModelTrainingInformation import domojupyter.ai.model as ml model_name = `Blue Classification` entrypoint = `model.py` extra_files = [] training = ModelTrainingInformation(metrics=domo_metrics, hyperparameters=hyperparameters, algorithm="Custom") tasks = [task] ml.create_model(model_name, entrypoint, extra_files, training=training, tasks=tasks)
このページのトップへ 日本語