SimplePipeline は、ワークフローに高コストな要素が最大 1 つしかない場合(単一の DataFit または Validation)に、完全な Pipeline の軽量な代替手段として使用できます。ファイア・アンド・フォーゲット方式で実行され、parameter_values、cost、そしてオプションの summary_stats を含むフラットな結果を返します。
使用するタイミング
| SimplePipeline を使用 | Pipeline を使用 |
|---|
DataFit または Validation が最大 1 つ | 複数の DataFit / Validation 要素 |
| ファイア・アンド・フォーゲット実行 | 要素ごとのステータス追跡 |
フラットな parameter_values の結果 | 累積的なパラメータの引き継ぎ |
設定の構築
型付きで検証済みの設定を構築するには ionworks_schema を使用します。SimplePipeline は Pipeline からすべてを継承し、高コストな要素を複数含む設定を拒否するクライアントサイドの検証を追加します。
import ionworks_schema as iws
objective = iws.objectives.CurrentDriven(data_input="path/to/discharge.csv")
pipeline = iws.SimplePipeline(
elements={
"initial_params": iws.direct_entries.DirectEntry(
parameters={"Negative particle diffusivity [m2.s-1]": 2e-14},
),
"fit": iws.DataFit(
objectives={"cycle": objective},
parameters={
"Negative particle diffusivity [m2.s-1]": iws.Parameter(
"Negative particle diffusivity [m2.s-1]",
bounds=(1e-14, 1e-13),
initial_value=2e-14,
)
},
cost=iws.costs.RMSE(),
optimizer=iws.parameter_estimators.ScipyDifferentialEvolution(
maxiter=10
),
),
},
name="My Fit",
)
config = pipeline.to_config()
複数の DataFit または Validation 要素を渡すと、SimplePipeline は即座に ValueError を発生させます。サーバー側で拒否されるのを待つ必要はありません。
送信とポーリング
from ionworks import Ionworks
client = Ionworks()
# 設定を送信
sp = client.simple_pipeline.create(config, name=pipeline.name)
# sp.status == "pending"
# 完了を待機(自動的にポーリング)
result = client.simple_pipeline.wait_for_completion(sp.id, timeout=600)
# 結果を読み取り
print(result.result["parameter_values"])
# {"Negative particle diffusivity [m2.s-1]": 5.3e-14}
print(result.result["cost"])
検証パイプライン
SimplePipeline は単一の Validation 要素もサポートします。結果には parameter_values に加えて summary_stats が含まれます。
objective = iws.objectives.CurrentDriven(data_input="path/to/cycle.csv")
validation_pipeline = iws.SimplePipeline(
elements={
"validate": iws.Validation(
objectives={"cycle": objective},
),
},
name="Validate fitted model",
)
sp = client.simple_pipeline.create(
validation_pipeline.to_config(), name=validation_pipeline.name
)
result = client.simple_pipeline.wait_for_completion(sp.id, timeout=600)
print(result.result["summary_stats"])
API リファレンス
完全なスキーマ API については、ionworks-schema ドキュメントを参照してください。