mlflow server:--default-artifact-root与--artifacts-destination的差异及优先级
MLflow
--default-artifact-root 与 --artifacts-destination:核心区别及优先级 一、两个选项的设计初衷(核心差异)
这两个参数对应MLflow追踪服务器的两种artifact存储模式,各司其职:
1. --default-artifact-root:为新实验指定默认artifact根
- 作用:给所有新建实验设置默认的artifact存储位置,不依赖服务器是否托管artifact传输流程。
- 适用场景:
- 使用SQL类后端(如PostgreSQL)时必须指定——因为SQL后端仅存储元数据,无法保存实际的artifact文件。
- 服务器关闭artifact代理(添加
--no-serve-artifacts参数)时,客户端会直接将artifacts上传到该参数指定的URI(比如你示例中的S3桶),服务器不参与artifact的传输过程。
- 注意:该参数不会修改已创建实验的artifact配置。
2. --artifacts-destination:服务器代理模式下的实际存储地
- 作用:仅当服务器开启artifact代理(默认开启,除非添加
--no-serve-artifacts),且实验的artifact根为mlflow-artifacts:/或HTTP类URI时生效,是服务器用来解析上传/下载请求的实际存储位置。 - 适用场景:
- 希望客户端通过服务器代理访问artifacts(无需客户端直接持有存储服务的凭证)时,客户端使用
mlflow-artifacts:/作为artifact根,服务器会将实际数据存储到该参数指定的位置(比如示例中的S3桶)。
- 希望客户端通过服务器代理访问artifacts(无需客户端直接持有存储服务的凭证)时,客户端使用
- 本质:它是服务器代理功能的"后端存储配置",和客户端直接指定的artifact根无关,只处理通过代理流转的artifact请求。
你提供的两个示例正好对应这两种模式:
- 第一个示例用了
--no-serve-artifacts:客户端直接上传到--default-artifact-root的S3桶,--artifacts-destination在此场景下无效。 - 第二个示例未加
--no-serve-artifacts:服务器开启代理,客户端用mlflow-artifacts:/作为artifact根,实际数据存在--artifacts-destination的S3桶,无需客户端管理S3凭证。
二、同时指定时的优先级规则
同时设置两个参数时,优先级取决于服务器的运行模式:
- 服务器开启artifact代理(默认模式):
- 如果实验使用默认的
mlflow-artifacts:/作为artifact根,实际存储位置由--artifacts-destination决定,--default-artifact-root仅负责将新实验的artifact根默认设为mlflow-artifacts:/。
- 如果实验使用默认的
- 服务器关闭artifact代理(
--no-serve-artifacts):--artifacts-destination完全失效,客户端直接使用--default-artifact-root指定的URI存储artifacts。
- 实验手动配置了专属artifact根:
- 无论上述两个参数如何设置,都会优先使用实验自身配置的artifact根。
内容的提问来源于stack exchange,提问作者wavingtide
相关产品推荐
相关产品推荐

