【问题标题】:MLFLow artifact logging and retrieve on remote serverMLF在远程服务器上记录和检索工件
【发布时间】:2021-06-08 11:19:26
【问题描述】:

我正在尝试在远程计算机上设置 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 中,我在尝试查看工件时收到此消息:

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

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


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

【问题讨论】:

    标签: python mlflow


    【解决方案1】:

    问题似乎是默认情况下 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 目录中列出的相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多