MLflow中tracking_uri与启动服务设置的backend_store_uri有何区别
MLflow中
backend_store_uri与tracking_uri的核心区别 这两个参数是MLflow服务部署、客户端交互中最容易混淆的配置项,核心差异围绕作用对象和存储范围展开:
1. 基础定义差异
tracking_uri:是客户端侧的配置参数,作用是告诉MLflow客户端「要把实验、运行的元数据发送到哪个MLflow追踪服务地址」- 如果你是在本地运行训练代码,这个地址就是你EC2上启动的MLflow服务的访问地址,比如
http://<EC2公网IP>:5000 - 客户端侧通常用
mlflow.set_tracking_uri("<地址>")来配置,或者设置环境变量MLFLOW_TRACKING_URI
- 如果你是在本地运行训练代码,这个地址就是你EC2上启动的MLflow服务的访问地址,比如
backend_store_uri:是服务端侧的配置参数,作用是告诉MLflow追踪服务本身「要把收到的所有元数据存在哪个位置」- 支持文件系统路径(比如
./mlruns)、数据库URI(比如postgresql://user:pass@host:port/db),EC2部署通常会搭配RDS或者S3兼容路径作为持久化存储 - 服务端启动时通过参数指定:
mlflow server --backend-store-uri <存储地址>
- 支持文件系统路径(比如
2. 存储逻辑差异
- 对应
tracking_uri的追踪服务只会处理元数据的转发、查询请求,本身不做持久化存储,所有数据最终都会落到backend_store_uri指定的位置 backend_store_uri存储的内容包括:实验名称/ID、运行参数、指标、标签、运行的起止时间等结构化元数据,注意它不存模型、工件这类大文件,大文件需要单独用--default-artifact-root参数配置存储位置
3. 实际使用示例
如果你在EC2上启动MLflow服务用的命令是:
mlflow server --backend-store-uri postgresql://mlflow:xxx@localhost:5432/mlflow_db --default-artifact-root s3://my-mlflow-artifacts/ --host 0.0.0.0
那本地训练代码的配置就是:
import mlflow mlflow.set_tracking_uri("http://<你的EC2公网IP>:5000") # 后续所有实验记录都会发送到这个tracking_uri对应的服务,再由服务写入到backend-store-uri指定的PostgreSQL中
常见误区提醒
不要把服务端的
backend_store_uri直接配置到客户端的tracking_uri里,除非你是本地开发直接用文件存储做测试,生产环境客户端只能访问MLflow服务的HTTP/HTTPS地址,不能直接访问服务端的后端存储。
内容的提问来源于stack exchange,提问作者Ali Tber
相关产品推荐
相关产品推荐

