私は、典型的な ML パイプラインのさまざまなコンポーネントをデプロイして接続するためのオプションとして、Kubeflow を検討しています。Docker コンテナを Kubeflow コンポーネントとして使用していますが、これまでContainerOp.file_outputs
オブジェクトを使用してコンポーネント間で結果を渡すことができませんでした。
この機能についての私の理解に基づいて、コンポーネントの 1 つとして宣言されたファイルを作成して保存すると、そのファイルがfile_outputs
永続化され、次のコンポーネントによる読み取りにアクセスできるようになります。
これは、パイプラインのPythonコードでこれを宣言しようとした方法です:
import kfp.dsl as dsl
import kfp.gcp as gcp
@dsl.pipeline(name='kubeflow demo')
def pipeline(project_id='kubeflow-demo-254012'):
data_collector = dsl.ContainerOp(
name='data collector',
image='eu.gcr.io/kubeflow-demo-254012/data-collector',
arguments=[ "--project_id", project_id ],
file_outputs={ "output": '/output.txt' }
)
data_preprocessor = dsl.ContainerOp(
name='data preprocessor',
image='eu.gcr.io/kubeflow-demo-254012/data-preprocessor',
arguments=[ "--project_id", project_id ]
)
data_preprocessor.after(data_collector)
#TODO: add other components
if __name__ == '__main__':
import kfp.compiler as compiler
compiler.Compiler().compile(pipeline, __file__ + '.tar.gz')
コンポーネントの python コードでdata-collector.py
、データセットを取得してから に書き込みますoutput.txt
。同じコンポーネント内のファイルから読み取ることはできますがdata-preprocessor.py
、FileNotFoundError
.
の使用はfile_outputs
コンテナベースの Kubeflow コンポーネントでは無効ですか、それともコードで間違って使用していますか? 私の場合はオプションではない場合、パイプライン宣言の Python コード内でプログラムで Kubernetes ボリュームを作成し、代わりに使用することは可能file_outputs
ですか?