Skip to content

アプリケーション内で をクリックすると、お使いのDataRobotバージョンに関する全プラットフォームドキュメントにアクセスできます。

カスタムタスクの作成

本機能の提供について

Custom tasks (also referred to as custom code) are not supported for on-premise installations. Custom blueprints are available for both on-premise and Managed AI Cloud environments.

DataRobotでは数百個の組み込みタスクが提供されますが、現在、初期状態でサポートされていない事前処理またはモデリング方法が必要です。 このギャップを埋めるには、欠損メソッドが含まれているカスタムタスクを持ち込み、DataRobot内のブループリントにプラグインして、DataRobot生成ブループリントと同じ方法でトレーニング、評価、デプロイできます。 (プロセスがどのように機能するかをこちらから確認できます。)

以下のセクションでは、カスタムタスクの作成と適用、および結果として生成されるカスタムブループリントの操作について説明します。

カスタムタスクの理解

以下の内容は、タスクとは何か、およびその使い方の概要を理解するのに役立ちます。 また、タスクコンテンツの概要を把握できます。

カスタムタスクのコンポーネント

タスクを持ち込み使用するには、2つのコンポーネント(タスクコンテンツとタスクのコンテンツが実行するコンテナ環境)を定義する必要があります。

  • (ここに記載する)タスクコンテンツは、PythonまたはRで書かれたコードです。 DataRobotで正しく解析するには、コードは特定の条件に従う必要があります。 任意で、アップロードしてタスクのコードとともに使用するファイルを追加できます(たとえば、カスタムタスクにテキスト前処理が含まれている場合、別のファイルに辞書を追加したい場合があります)。

  • コンテナ環境は、Dockerファイルと追加のファイルを使用して定義されます。この機能により、DataRobotはタスクが実行されるイメージを構築できます。 さまざまなビルトイン環境があります。ユーザーはLinuxパッケージをインストールする必要がある場合にのみ独自の環境を構築する必要があります。

高レベルで、カスタムタスクを定義するステップには以下が含まれます。

  1. ローカル(コンピューター)でタスクコンテンツを定義してテストします。
  2. 任意で、タスクを実行するコンテナ環境を作成します。
  3. タスクコンテンツと環境(該当する場合)をDataRobotにアップロードします。

タスクのタイプ

タスクを作成する際、プロジェクトに最も適切なものを選択する必要があります。 DataRobotは、sklearnと同様の2種類のタスク(推定器と変換)を活用します。 これらのタスクの機能についてはブループリント変更ページを参照してください。

カスタムタスクの使用

タスクがアップロードされたら、次のことができます。

  • そのカスタムタスクを含むブループリントを作成してトレーニングします。 その後、プロジェクトのリーダーボードにブループリントが表示されます。数回クリックするだけで、他のモデルと比較し、モデルに依存しないインサイトにアクセスし、結果となるモデルをデプロイ、監視、管理できます。

  • 環境の共有と同じように組織内で明示的にタスクを共有します。 将来のプロジェクトでタスクを再使用する場合、これは特に有用です。 さらに、受信者はタスクのコードを読み取り、理解する必要がないため、より少ない技術者で適用できます。 プロジェクトまたはブループリントが共有される場合、カスタムタスクも暗黙の共有となります。

タスクコンテンツの理解

カスタムタスクを定義するには、以下のテーブルにリストされているファイルを含むローカルフォルダーを作成します(詳細については表を参照してください)。

ヒント

これらのファイルの例は、GitHubのDataRobotタスクテンプレートリポジトリで入手できます。

ファイル 説明 必須
custom.pyまたはcustom.R DataRobotがトレーニングと予測で実行するタスクコード。 可能
model-metadata.yaml 入力/出力データ要件を含むタスクのメタデータを説明するファイル。 カスタムタスクが非数値データを出力する場合のカスタム変換タスクに必要です。 提供しない場合、デフォルトスキーマが使用されます。
requirements.txt 基本環境に追加するPythonまたはRパッケージのリスト。 いいえ
追加ファイル タスクで使用するその他のファイル(たとえば、custom.py内で使用するヘルパー関数を定義するファイル)。 いいえ

custom.py/custom.R

custom.py/custom.Rファイルはカスタムタスクを定義します。 DataRobotがコードを正しく実行し、他の機能と統合できるようにするフック(関数)が含まれている必要があります。

model-metadata.yaml

カスタムタスクでは、ブループリントを構築してトレーニングする際にタスクを検証するために使用できるスキーマを供給できます。 スキーマを使用してカスタムタスクがサポートするか出力するかを指定できます。

  • 特定のデータ型
  • 個の値が欠損しています
  • スパースデータ
  • 特定の列数

requirements.txt

requirements.txtファイルを使用して、カスタムタスクが使用しているが基本環境には含まれていないPythonまたはRパッケージを事前にプレインストールします。

Pythonでは、バージョン(行に1つのパッケージ)でパッケージのリストを提供します。 例:

numpy>=1.16.0, <1.19.0
pandas==1.1.0
scikit-learn==0.23.1
lightgbm==3.0.0
gensim==3.8.3
sagemaker-scikit-learn-extension==1.1.0 

Rでは、バージョン(行に1つのパッケージ)でパッケージのリストを提供します。 例:

dplyr
stats 

タスクコードの定義

DataRobotのフレームワークを使用してカスタムタスクを定義するには、コードが特定の条件を満たす必要があります。

  • custom.pyまたはcustom.Rファイルがある必要があります。

  • custom.py/custom.Rファイルに、fit()score()transform()などのフック(関数)が含まれている必要があります。フックは、タスクがどのようにトレーニングされているか、およびどのように新しいデータをスコアリングするかを定義します。 DataRobotは各フックを自動的に呼び出し、プロジェクトおよびブループリントの設定に基づいてパラメーターを渡します。 しかし、各フック内で実行するロジックを定義できる柔軟性があります。

中央値を使用して欠損値補完を実行するタスクのGitHub上の例を表示します。

備考

GitHubにログインしてからこれらのGitHubリソースにアクセスしてください。

次の表にフックがリストされます。 ほとんどのタスクには2つのフック(推定器タスク用のfit()score()、変換タスク用のfit()transform())のみ必要です。 その他のフックは省略できます。

フック(機能) 目的
init() Rライブラリとファイルをロードします(Rのみ。Pythonでは省略できます)。
fit() 推定器/変換タスクをトレーニングし、それをアーティファクトファイルに保存します。
load_model() アーティファクトファイルからトレーニングされた推定器/変換をロードします。
score() 予測を生成するカスタム推定器で使用するロジックを定義します。
transform() 変換されたデータを生成するカスタム変換で使用するロジックを定義します。

以下のスキーマは、カスタムタスクでフックがどのように連携するかを示しています。 トレーニング中は必ずfit()が必要ですが、場合によって一部のフックは省略できます。

次のセクションでは、例とともに各フックについて説明します。

init()

initフックを使用すると、タスクは他のフックで使用するためのライブラリと追加ファイルをロードできます。 これはRを使用する場合に必要ですが、Pythonの場合は通常スキップできます。

init()

以下に、init()を使用した簡単なコードスニペットを紹介します。より完全な例についてはこちらを参照してください。

init <- function(code_dir) {
   library(tidyverse)
   library(caret)
   library(recipes)
   library(gbm)
   source(file.path(code_dir, 'create_pipeline.R'))
} 

init() 入力

入力パラメーター 説明
code_dir コードが保存されるフォルダーへのリンク。

init() 出力

init()フックは何も返しません。

fit()

fit()はカスタムタスクに実装する必要があります。

fit()

以下に、fit()を使用した簡単なコードスニペットを紹介します。より完全な例についてはこちらを参照してください。

以下は、Pythonでロジスティック回帰を実装したfit()の例です。

def fit(X, y, output_dir, class_order, row_weights):
 estimator = LogisticRegression()
 estimator.fit(X, y)

 output_dir_path = Path(output_dir)
 if output_dir_path.exists() and output_dir_path.is_dir():
     with open("{}/artifact.pkl".format(output_dir), "wb") as fp:
         pickle.dump(estimator, fp) 

以下は、Rでの連続値モデルの作成例です。

fit <- function(X, y, output_dir, class_order=NULL, row_weights=NULL){
   model <- create_pipeline(X, y, 'regression')

  model_path <- file.path(output_dir, 'artifact.rds')
  saveRDS(model, file = model_path)
} 

fit()の機能

カスタム推定器/変換がトレーニングされている場合、DataRobotはfit()を実行します。 それは、トレーニングされたsklearnモデルなどのトレーニング済みのオブジェクトが保存されるアーティファクトファイル(.pklファイルなど)を作成します。 トレーニングされたオブジェクトはアーティファクトからロードされ、データをスコアリングする際に、score()transform()にパラメーターとして渡されます。

fit()の使用方法

オブジェクトを使用して、トレーニングし、.pkl関数内のアーティファクトファイル(例:fit())にトレーニング済みオブジェクトを入力する方法。 トレーニング済みのオブジェクトに新しいデータをスコアリングする際に使用する情報またはロジックが含まれている必要があります。 トレーニング済みオブジェクトの例:

  • 適合するsklearn推定器
  • 中央値を使用する欠損値補正のトレーニングデータの中央値。 新しいデータをスコアリングすると、それによってが欠損値が置き換えられます。

DataRobotはプロジェクト設定に基づいてトレーニング/検定/ホールドアウトのパーティションが自動的に使用します。

fit() 入力パラメーター

fit()タスクは以下のパラメーターを取ります。

入力パラメーター 説明
X トレーニング中にタスクが受信するデータを含むPandasのDataFrame(Python)またはR data.frame(R)。
y プロジェクトのターゲットデータを含むPandasシリーズ(Python)またはRベクトル/ファクター(R)。
output_dir 出力フォルダーへのパス。 トレーニング済みオブジェクトを含むアーティファクトはこのフォルダーに保存する必要があります。 そこにその他のファイルも保存できます。ブループリントがトレーニングされると、アーティファクトのダウンロードを使用してUIを介してモデルfit内のフォルダーに追加されたすべてのファイルがダウンロード可能になります。
class_order 二値分類推定器にのみ渡されます。 クラス名を含むリスト。 最初のエントリはDataRobotのプロジェクト内で負のクラスとみなされます。2番目のクラスは正とみなされます。
row_weights 推定器タスクでのみ渡されます。 プロジェクトが加重またはスマートダウンサンプリングを使用する場合に渡される加重のリスト。
**kwargs 現在使用されていませんが、将来の互換性のために維持されます。

fit() 出力

fit()出力に関する備考:

  • fit()は何も返しませんが、トレーニング済みのオブジェクトを含むアーティファクトを作成します。

  • トレーニング済みのオブジェクトが必要ない場合は(たとえば、ログ変換を実行する変換タスク)、アーティファクトファイルに数または文字列を保存することにより、「人工」アーティファクトを作成します。 それ以外の場合(fit()がアーティファクトを出力しない場合)、load_modelを使用する必要があり、タスクがより複雑になります。

  • アーティファクトはoutput_dirフォルダーに保存する必要があります。

  • アーティファクトはどの形式でも使用できます。

  • 一部の形式はネイティブでサポートされています。 output_dirにネイティブでサポートされている形式で1つのアーティファクトファイルが含まれている場合、DataRobotはデータをスコアリング/変換する際、そのアーティファクトを自動的に選択します。 この場合、カスタムload_modelフックを記述する必要はありません。

  • ネイティブでサポートされている形式は以下のとおりです。

    • Python:.pkl.pth.h5.joblib
    • Java:.mojo
    • R:.rds

load_model()

load_model()フックは、アーティファクトから1つまたは複数のトレーニング済みのオブジェクトをロードします。 トレーニング済みのオブジェクトがサポートされていない形式を使用するアーティファクトに保存されている場合、または複数のアーティファクトが使用される場合にのみ必要です。 サポートされている形式の1つに1つのアーティファクトが存在する場合、load_model()は必要ありません。

  • Python:.pkl.pth.h5.joblib
  • Java:.mojo
  • R:.rds

load_model()

以下に、load_model()を使用した簡単なコードスニペットを紹介します。より完全な例についてはこちらを参照してください。

以下の例では、deserialize_artifactをアーティファクトの解析に使用する実際の関数に置き換えます。

def load_model(code_dir: str):
    return deserialize_artifact(code_dir) 
  load_model <- function(code_dir) {
     return(deserialize_artifact(code_dir))
  } 

load_model() 入力

入力パラメーター 説明
code_dir アーティファクトが保存されるフォルダーへのリンク。

load_model() 出力

load_model()フックは、トレーニング済みのオブジェクト(あらゆる型)を返します。

score()

score()フックは、カスタム推定器の出力を定義し、出力データに予測を返します。 変換タスクにこのフックは使用しないでください。

score()

以下に、score()を使用した簡単なコードスニペットを紹介します。より完全な例についてはこちらを参照してください。

連続値または異常推定器のPythonの例:

def score(data: pd.DataFrame, model, **kwargs) -> pd.DataFrame:
      return pd.DataFrame(data=model.predict(data), columns = ['Predictions']) 

二値または多クラス推定器のPythonの例:

def score(data: pd.DataFrame, model, **kwargs) -> pd.DataFrame:
      return pd.DataFrame(data=model.predict_proba(data), columns = model.classes_) 

連続値または異常推定器のRの例:

score <- function(data, model, ...) {
  return(data.frame(Predictions = predict(model, newdata=data, type = response")))
} 

二値推定器のRの例:

score <- function(data, model, ...) {
  scores <- predict(model, data, type = "response")
  scores_df <- data.frame('c1' = scores, 'c2' = 1- scores)
  names(scores_df) <- c("class1", "class2")
  return(scores_df)
} 

score() 入力

入力パラメーター 説明
data カスタムタスクがスコアリングするデータを含むPandasのDataFrame(Python)またはR data.frame(R)。
model アーティファクトからロードされたトレーニング済みのオブジェクト。
**kwargs 現在使用されていませんが、将来の互換性のために維持されます。 (Rの場合、score(data, model, …)

score() 出力

score()出力に関する備考:

  • PandasのDataFrame(またはR data.frame/tibble)を返します。

  • 連続値または異常検知プロジェクトの場合、出力に予測という単一の数値列が必要です。

  • 二値または多クラスプロジェクトについては、出力にはクラスごとに1つの列があり、クラス名を列名として使用する必要があります。 各セルには各クラスの確率が含まれている必要があります。また、各行の合計が1.0になる必要があります。

transform()

transform()フックはカスタム変換の出力を定義し、変換されたデータを返します。 推定器タスクにこのフックを使用しないでください。

transform()

以下に、transform()を使用した簡単なコードスニペットを紹介します。より完全な例についてはこちらを参照してください。

変換を作成し、データフレームに出力するPythonの例:

def transform(X: pd.DataFrame, transformer) -> pd.DataFrame:
  return transformer.transform(X) 
transform <- function(X, transformer, ...){
   X_median <- transformer

   for (i in 1:ncol(X)) {
   X[is.na(X[,i]), i] <- X_median[i]
   }
     X
} 

transform() 入力

入力パラメーター 説明
X カスタムタスクが変換する必要があるデータを含むPandasのDataFrame(Python)またはR data.frame(R)。
transformer アーティファクトからロードされたトレーニング済みのオブジェクト(通常、トレーニング済みの変換機能)。
**kwargs 現在使用されていませんが、将来の互換性のために維持されます。

transform() 出力

transform()フックは、データが変換されたPandasのDataFrameまたはR data.frameを返します。

タスクメタデータを定義

メタデータを定義するには、model-metadata.yamlファイルを作成して、タスクまたはモデルのディレクトリのトップレベルに置きます。 ファイルはカスタムタスクに関する追加情報を指定し、こちらに詳細が記述されます。

タスク環境を定義

カスタムタスクが実行される環境を定義するための複数のオプションがあります。 以下を実行することが可能です。

  • さまざまなビルトイン環境から選択します。

  • ビルトイン環境でPythonまたはRパッケージが欠損している場合、タスクのrequirements.txtファイルで指定して、不足しているパッケージを追加します。 提供された場合、requirements.txtをタスクコンテンツ内のcustom.pyまたはcustom.Rと共にアップロードする必要があります。 タスクコンテンツにサブフォルダーが含まれている場合、上部フォルダーに置く必要があります。

  • Linuxパッケージをインストールする必要がある場合、独自の環境を構築できます。

タスクをローカルでテスト

DataRobotにアップロードする前にタスクをローカルでテストする要件はありませんが、強く推奨されます。 機能を事前に検証すると、将来、多くの時間とデバッグを節約できます。

カスタムタスクを正しく行うには、以下の基本要件を満たす必要があります。

  • タスクはDataRobot要件と互換性があり、ブループリントの構築に使用できます。
  • タスクは意図したとおりに機能します(たとえば、変換が必要な出力を生成します)。

コマンドラインでdrum fitを使用して、タスクを迅速に実行してテストします。 タスクがDataRobot要件を満たしていることを自動的に検証します。 タスクが意図したとおりに機能するかをテストするには、ターミナルまたはファイルへの出力の印刷などその他の一般的なデバッグ方法とdrum fitを組み合わせます。

必要条件

タスクをテストするには:

  • タスクのコンテンツを単一のフォルダーに置きます。

  • DRUMをインストールします。 DRUMがインストールされたPython環境がアクティブ化されていることを確認します。 できれば、Docker Desktopもインストールしてください。

  • タスクをテストする際に使用できるテストデータでCSVファイルを作成します。

  • コマンドラインを使用してテストを実行するため、ターミナルウィンドウを開きます。

DataRobotとの互換性をテスト

以下は、DataRobotブループリントと互換性があるかどうかをテストするためにdrum fitを使用する例です。 drum fitの使用について詳細を確認するには、コマンドラインにdrum fit --helpを入力します。

カスタムタスク(推定器または変換)については、ターミナルで以下の基本コマンドを使用します。 < >ブラケット内のプレースホルダー名を実際のパスと名前に置き換えます。 以下のオプションがTARGET_TYPEで使用可能であることに注意してください。

  • 推定器の場合:二値、多クラス、連続値、異常
  • 変換の場合:変換
drum fit --code-dir <folder_with_task_content> --input <test_data.csv>  --target-type <TARGET_TYPE> --target <target_column_name> --docker <folder_with_dockerfile> --verbose 

トレーニング中に使用されない場合、targetパラメーターを省略してください(異常検知推定器または一部の変換タスクの場合など)。 その場合、コマンドが以下のように見える場合があります。

drum fit --code-dir <folder_with_task_content> --input <test_data.csv>  --target-type anomaly --docker <folder_with_dockerfile> --verbose 

タスクロジックをテスト

タスクが意図したとおりに機能することを確認するには、タスクのコードへの"print"ステートメントの追加などのその他のデバッグ方法とdrum fitを組み合わせます。

  • いずれかのフックにprint(msg)を追加します。drum fitを使用してタスクを実行する際、DataRobotはターミナル内のメッセージを印刷します。
  • 以降の調査のため中間または最後の結果をローカルファイルに書き込みます。それは、カスタムタスクが期待通りに機能することを確認するために役立つ可能性があります。

タスクをアップロード

タスクのコンテンツが定義された後、DataRobotにアップロードして、ブループリントを構築してトレーニングするために使用します。 DataRobotにカスタムタスクをアップロードするには、3つのステップが必要です。

  1. モデルレジストリで新しいタスクを作成します。
  2. タスクを実行するコンテナ環境を選択します。
  3. タスクコンテンツをアップロードします。

アップロードされたら、ブループリントエディターで使用できるタスクのリストにカスタムタスクが表示されます。

コードの更新

更新されたコードを常にアップロードできます。 競合を回避するために、DataRobotはコードがアップロードされるたびに新しいバージョンを作成します。 ブループリントを作成する際、ブループリントで使用する特定のタスクバージョンを選択できます。

ブループリントを作成してトレーニング

カスタムタスクが作成されると、タスクを使用するブループリントを構成するための2つのオプションがあります。

  • 作成したタスクのみ(推定器のみ)を使用して、シングルタスクのブループリントを構成します。
  • ブループリントエディターを使用してマルチタスクブループリントを作成します。

シングルタスクのブループリント

カスタム推定器タスクに必要なすべてのトレーニングコードが含まれている場合、シングルタスクのブループリントを構築してトレーニングできます。 その場合は、モデルレジストリ > カスタムモデルワークショップ > タスクに移動します。 タスクを選択し、新しいモデルのトレーニングをクリックします。

完了したら、プロジェクトのリーダーボードに選択されたタスクを含むブループリントが表示されます。

マルチタスクブループリント

複数のタスクを含むブループリントを構成するには、ブループリントエディターを使用します。 以下は、ステップのサマリーです。完全な詳細については、ドキュメントを参照してください。

  1. AIカタログのプロジェクトリーダーボード、リポジトリ、またはブループリントタブから、ブループリントを選択して、新しいブループリントのテンプレートとして使用します。

  2. ブループリントビューに移動し、選択したブループリントの編集を開始します。

  3. 既存のタスクを選択するか、新しいタスクを追加し、ビルトインおよびカスタムタスクのドロップダウンからカスタムタスクを選択します。

  4. トレーニングをクリックしてブループリントを保存してトレーニングします。 プロジェクトのリーダーボードに選択されたたタスクを含むモデルが表示されます。

インサイトを取得

DataRobotインサイトを使用すると、カスタムブループリントから結果として得られるモデルを評価する上で役立ちます。

ビルトインインサイト

ブループリントがトレーニングされたら、他のモデルと精度を簡単に比較できるプロジェクトリーダーボードに表示されます。 指標とモデルに依存しないインサイトは、DataRobotモデルの場合と同じように利用できます。

カスタムインサイト

トレーニング中にアーティファクトを作成することにより、カスタムインサイトを生成できます。 さらに、リーダーボードモデルの場合と同じように、予測APIを使用してインサイトを生成できます。

ヒント

カスタムインサイトは、モデルの機能を理解するために役立つ追加ビューです。 ビジュアライゼーションまたはCSVファイルの形式となる場合があります。 たとえば、LIMEのモデルに依存しないインサイトを活用したい場合、そのパッケージをインポートして、custom.pyまたはその他のヘルパーファイル内のトレーニング済みのモデルで実行し、結果として得られるモデルのインサイトを書くことができます。

デプロイ

カスタムタスクを含むモデルをトレーニングしたら、DataRobotモデルの場合と同様にデプロイ、監視、管理できます。

トレーニングアーティファクトのダウンロード

カスタムタスクでブループリントをトレーニングする場合、DataRobotはダウンロードできるアーティファクトを作成します。 カスタムタスクのfit()内のoutput_dirに置かれているファイルはアーティファクトの一部になります。 アーティファクトを使用して、以下の操作が可能です。

  • トレーニング中にカスタムインサイトを生成します。 この場合、fit()関数の一部としてファイル(イメージファイルやテキストファイルなど)を生成し。 output_dirに書き込みます。

  • 追加インサイトを生成するか、DataRobotの外部にデプロイするためにローカルにロードできるトレーニング済みのモデル(たとえば、.pklファイルとして)をダウンロードします。

モデルのアーティファクトをダウンロードするには、予測 > ダウンロード > アーティファクトのダウンロードに移動します。

アクセス可能な任意の環境のコードをダウンロードすることもできます。 ダウンロードするには、環境をクリックして、バージョンを選択し、ダウンロードをクリックします。

暗黙の共有

タスクまたは環境は、明示的に共有されていない限り、モデル登録で他のユーザーが利用することはできません。 しかし、それは、ユーザーがそのタスクを含むブループリントを使用することを制限するものではありません。 これは 暗黙の共有 です。

たとえば、ユーザーAとユーザーBが共有しているプロジェクトを考えてみましょう。 ユーザーAが新しいタスクを作成し、そのタスクを使用したブループリントを作成した場合、ユーザーBはそのブループリント内のカスタムタスクへの 読み取り アクセスを有しているかどうかにかかわらず、そのブループリントを操作(クローン、修正、再実行など)することができます。 すべてのタスクは環境に関連付けられているため、暗黙の共有は環境にも適用されます。 また、ユーザーAは必要に応じて、タスクまたは環境のみを明示的に共有することもできます 。

暗黙の共有は、カスタムタスク作成者の組織内の全員に、 実行 へのアクセスを許可する独自の許可モデルです。 ユーザーがブループリントにアクセスできる場合(ただし、そのブループリントのカスタムタスクへの明示的なアクセス権を持っているとは限りません) 実行 へのアクセスで以下が許可されます:

  • 結果として生じるモデルとの相互作用。 たとえば、再トレーニング、特徴量のインパクトおよび特徴量ごとの作用の実行、デプロイ、バッチ予測の作成などです。

  • 共有プロジェクトからブループリントをクローンおよび編集してから、ブループリントを独自のものとして保存。

  • リーダーボードログの表示とダウンロード。

実行へのアクセスで許可されない機能には、次のものがあります。

  • カスタムタスクアーティファクトのダウンロード。

  • モデルレジストリからカスタムタスクを表示、修正、または削除。

  • 別のブループリントでタスクを使用。 (代わりに、タスクを含むブループリントのクローンを作成し、ブループリントやタスクを編集します。)


更新しました December 21, 2022
Back to top