我们正在使用一个托管Kubeflow Pipeline (KFP)实例,它是用GCP的AI Platform Pipeline创建的,还有一个托管MySQL实例,是用Cloud SQL创建的。我们还使用Cloud Build来构建和运行我们的KFP管道。我们想要添加一个云构建步骤,在KFP管道运行完成后,运行一个脚本,该脚本使用MLMD API来查询该管道运行的元数据。我们有一个MLMD脚本,当在GCP VM上手动运行时,它可以成功地查询元数据。问题一直是让该脚本在Cloud Build中运行。
第一种方法是使用mlmd.metadata_store.MetadataStore连接信息来创建MySQL对象,例如,
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.mysql.host = [IP address]
connection_config.mysql.port = 3306
connection_config.mysql.database = "kubeflow_experiments_metadata_metadata"
connection_config.mysql.user = [user]
connection_config.mysql.password = [password]
store = mlmd.metadata_store.MetadataStore(connection_config)这在VM上运行得很好。然而,似乎需要Cloud SQL代理才能在Cloud Build中工作。以这个Cloud Functions codelab为例,我能够在Cloud Build中运行一个脚本,该脚本使用sqlalchemy通过代理连接到MySQL。但是,用于连接sqlalchemy和代理的方法似乎与上面的MLMD API不兼容。它看起来像这样:
driver_name = "mysql+pymysql"
query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})
db = sqlalchemy.create_engine(
sqlalchemy.engine.url.URL(drivername=driver_name, username=[user], password=[password], database="kubeflow_experiments_metadata_metadata", query=query_string),
pool_size=5,
max_overflow=2,
pool_timeout=30,
pool_recycle=1800,
)第二种方法使用与KFP一起部署的MLMD gRPC服务。首先,我用端口转发服务:
kubectl port-forward svc/metadata-grpc-service 8080:8080然后使用MLMD gRPC接口创建mlmd.metadata_store.MetadataStore:
connection_config = metadata_store_pb2.MetadataStoreClientConfig(
host="127.0.0.1",
port=8080,
)
store = mlmd.metadata_store.MetadataStore(connection_config)同样,这在VM上工作得很好。然而,我不确定如何从Cloud Build连接到gRPC服务。我使用gRPC和Kubernetes的经验有限,所以如果有一个简单的解决方案,我不会感到惊讶。
任何建议都将不胜感激!
发布于 2021-02-19 10:00:53
通过其他途径,我被指向了这个article,其中包含了如何在云构建中转发KFP的ml管道服务的示例。我必须做一个小的修改,那就是删除kubectl port-forward命令的"-n"和"kubeflow"参数。这将指定kubectl以使用"kubeflow"命名空间。然而,GCP的AI平台管道似乎在部署您的"default"实例时创建了一个KFP名称空间。
https://stackoverflow.com/questions/66246693
复制相似问题