MLFLow 工件在远程服务器上记录和检索
MLFLow artifact logging and retrieve on remote server
我正在尝试在远程计算机上将 MLFlow 跟踪服务器设置为 systemd 服务。
我有一个 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 中,我在尝试查看工件时收到此消息:
Unable to list artifacts stored
under sftp://192.XXX:path_to_mlruns_folder/run_id/artifacts
for the current run. Please contact your tracking server administrator
to notify them of this error, which can happen when the tracking
server lacks permission to list artifacts under the current run's root
artifact directory.
我不明白为什么 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_
应该与 mlruns
目录中 ls -la
列出的相同。
我正在尝试在远程计算机上将 MLFlow 跟踪服务器设置为 systemd 服务。 我有一个 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 中,我在尝试查看工件时收到此消息:
Unable to list artifacts stored under sftp://192.XXX:path_to_mlruns_folder/run_id/artifacts for the current run. Please contact your tracking server administrator to notify them of this error, which can happen when the tracking server lacks permission to list artifacts under the current run's root artifact directory.
我不明白为什么 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_
应该与 mlruns
目录中 ls -la
列出的相同。