MLFLow工件日志记录和在远程服务器上检索



我正在尝试在远程机器上设置MLFlow跟踪服务器作为系统服务。我有一个正在运行的sftp服务器,并创建了一个SSH密钥对。

一切似乎都很好,除了工件日志记录。MLFlow似乎没有权限列出保存在mlruns目录中的工件。

我以这种方式创建一个实验并记录工件:

uri = 'http://192.XXX:8000' 
mlflow.set_tracking_uri(uri)
mlflow.create_experiment('test', artifact_location='sftp://192.XXX:_path_to_mlruns_folder_')
experiment=mlflow.get_experiment_by_name('test')
with mlflow.start_run(experiment_id=experiment.experiment_id, run_name=run_name) as run:
mlflow.log_param(_parameter_name_, _parameter_value_)     
mlflow.log_artifact(_an_artifact_, _artifact_folder_name_)

我可以看到UI中的指标和远程机器上正确的目标文件夹中的工件。然而,在UI中,当我试图查看工件时,我收到以下消息:

无法列出已存储的工件在sftp://192。XXX:path_to_mlruns_folder/run_id/工件对于当前运行。请与您的跟踪服务器管理员联系通知他们此错误,这可能发生在跟踪时服务器缺乏在当前运行的根目录下列出工件的权限工件目录。

我不明白为什么mlruns文件夹有drwxrwxrwx权限和所有子文件夹有drwxrwxr-x。我错过了什么?


更新用新鲜的眼光看它,它试图通过sftp://192.XXX:列出文件似乎很奇怪,它应该只看文件夹_path_to_mlruns_folder_/_run_id_/artifacts。然而,我仍然不知道如何规避。

问题似乎是默认情况下systemd服务是由root运行的。指定一个用户并为该用户创建ssh密钥对以访问同一远程计算机。

[Unit]
Description=MLflow server
After=network.target 
[Service]
Restart=on-failure
RestartSec=20
User=_user_
Group=_group_
ExecStart=/bin/bash -c 'PATH=_yourpath_/anaconda3/envs/mlflow_server/bin/:$PATH exec mlflow server --backend-store-uri postgresql://mlflow:mlflow@localhost/mlflow --default-artifact-root sftp://_user_@192.168.1.245:_yourotherpath_/MLFLOW_SERVER/mlruns -h 0.0.0.0 -p 8000' 
[Install]
WantedBy=multi-user.target

_user__group_应该是ls -lamlruns目录下列出的相同的。

最新更新