在Kubeflow中使用CustomContainerTrainingJobRunOp如何给自定义容器传参
问题解决方案
你遇到的参数传递错误本质是参数类型不匹配导致的:CustomContainerTrainingJobRunOp的args参数要求列表内所有元素均为字符串类型,你当前代码中传入的数值28为整数类型,Kubeflow流水线序列化参数时不会自动做类型转换,导致容器接收到的参数格式异常,最终运行失败。
修复方法
- 把数值参数显式转为字符串即可,修改后的代码片段如下:
import kfp from kfp.v2 import compiler from kfp.v2.dsl import component from kfp.v2.google import experimental from kfp.v2.google.client import AIPlatformClient from google_cloud_pipeline_components import aiplatform as gcc_aip @kfp.dsl.pipeline(name=pipeline_name, pipeline_root='gs://a-gcs-bucket') def pipeline(): subclass_training_job_run_op = gcc_aip.CustomContainerTrainingJobRunOp( project=project_id, display_name=model_display_name, container_uri=subclass_container_uri, args=["--my_argument", "28"], # 仅需把整数28改为字符串格式"28" staging_bucket=staging_bucket, base_output_dir=base_output_uri, #dataset=dataset_create_op.outputs["dataset"] )
- 如果后续要使用流水线动态参数(比如上游组件输出、流水线入参)作为参数值,也需要确保参数被转换为字符串类型,数值类参数可以用
str()方法包裹转换。
验证说明
修改后参数传递逻辑和你本地测试的docker run $IMAGE_URI --my_argument 28逻辑完全一致,所有参数都会以字符串形式传递给容器入口程序,不会出现格式异常问题。
内容的提问来源于stack exchange,提问作者v_loves_avocados
相关产品推荐
相关产品推荐

