如何配置Mlflow的SQLite后端存储与Azure Blob Storage制品存储
MLflow + Azure Data Lake Storage Gen2 完整配置步骤
一、基础概念澄清
先明确两个容易混淆的概念,解答你对依赖安装要求的疑问:
- 服务端:运行
mlflow server命令启动跟踪服务的设备 - 客户端:运行训练代码、执行
mlflow run/kedro run命令提交任务的设备
要求两端都安装依赖的原因是:MLflow的制品上传是客户端直接写入Azure存储,不会经过跟踪服务器中转,因此两端都需要存储访问依赖和权限凭证。azure-identity的作用是实现无密钥身份认证,比如通过Azure CLI登录、托管身份等方式获取存储访问权限,避免硬编码密钥泄露,个人使用场景直接用连接字符串即可,不需要额外配置。
二、前置依赖安装
在服务端和客户端的Python环境中分别安装以下包(如果服务端和客户端是同一台本地电脑,在同一个环境安装一次即可):
pip install mlflow azure-storage-blob azure-identity
三、修正并配置环境变量
你之前的核心错误是AZURE_STORAGE_ACCESS_KEY配置错误,该变量应该存储Azure存储账户的密钥字符串,不是Blob存储路径,实际使用时只需配置连接字符串一个变量即可,避免多个凭证冲突。
Windows 10环境变量配置步骤:
- 按下
Win+R输入sysdm.cpl打开系统属性面板,切换到「高级」选项卡,点击「环境变量」 - 在用户变量或系统变量区域点击「新建」:
- 变量名:
AZURE_STORAGE_CONNECTION_STRING - 变量值:从Azure门户存储账户→访问密钥页面复制的完整连接字符串,格式为
DefaultEndpointsProtocol=https;AccountName=你的存储账户名;AccountKey=你的访问密钥;EndpointSuffix=core.windows.net
- 变量名:
- 删除你之前错误配置的
AZURE_STORAGE_ACCESS_KEY变量 - 配置完成后重启所有打开的命令提示符/终端窗口,新的环境变量才会生效
四、后端存储配置
- 手动创建本地SQLite存储的文件夹路径:
C:\sqlite\db\ - 不需要提前创建
mlruns.db文件,MLflow启动时会自动生成初始化
五、启动MLflow跟踪服务器
打开新的终端窗口,执行以下启动命令(注意路径用正斜杠避免转义问题):
mlflow server --backend-store-uri sqlite:///C:/sqlite/db/mlruns.db --default-artifact-root wasbs://你的容器名@你的存储账户名.blob.core.windows.net/mlartifacts -h 0.0.0.0 -p 8000
启动后检查终端无报错即可,访问http://localhost:8000可以打开MLflow UI。
六、客户端运行配置
通用MLflow配置
在执行训练任务的终端中先设置跟踪服务器地址:
# Windows cmd终端 set MLFLOW_TRACKING_URI=http://localhost:8000 # PowerShell终端 $env:MLFLOW_TRACKING_URI = "http://localhost:8000"
Kedro适配配置
在Kedro项目的conf/base/mlflow.yml中修改跟踪地址配置:
tracking_uri: "http://localhost:8000"
七、功能验证
先跑一个极简测试脚本验证配置是否生效,不需要先跑Kedro任务:
import mlflow import os # 确认配置读取正常 print("跟踪地址:", os.getenv("MLFLOW_TRACKING_URI")) print("存储连接字符串是否存在:", os.getenv("AZURE_STORAGE_CONNECTION_STRING") is not None) mlflow.set_tracking_uri("http://localhost:8000") with mlflow.start_run(run_name="azure_blob_test"): # 测试写入参数、指标到SQLite mlflow.log_param("test_params", 123) mlflow.log_metric("test_metric", 0.987) # 测试上传制品到Azure存储 with open("test_artifact.txt", "w", encoding="utf-8") as f: f.write("测试制品内容") mlflow.log_artifact("test_artifact.txt") print("测试完成,请打开MLflow UI查看run记录,同时检查Azure Blob的mlartifacts目录下是否生成对应run的制品文件")
常见问题排查
- 启动服务器/运行任务无响应:首先检查Azure存储账户的防火墙设置,是否允许你本地IP访问
- 制品无法上传:确认客户端的环境变量已经生效,重启终端后再运行任务
- SQLite空表:确认训练代码中已经正确设置
tracking_uri指向你的跟踪服务器,不是默认的本地./mlruns目录
内容的提问来源于stack exchange,提问作者Downforu
相关产品推荐
相关产品推荐

