当我将所有模型和参数记录到mlflow中时,我认为用用户名和密码保护它是一个好主意。

我使用以下代码运行mlflow服务器

mlflow server --host 0.0.0.0 --port 11111
工作完美,在我的浏览器中,我键入myip:11111,我看到了一切(最终是问题所在)

如果我理解了文档并且此处的https://groups.google.com/forum/#!topic/mlflow-users/E9QW4HdS8a8链接正确无误,则应使用nginx创建身份验证。

我安装了nginx open sourcreapache2-utils

创建了sudo htpasswd -c /etc/apache2/.htpasswd user1用户和密码。

我将/etc/nginx/nginx.conf编辑为以下内容:

server {
        listen 80;
        listen 443 ssl;

        server_name my_ip;
        root NOT_SURE_WHICH_PATH_TO_PUT_HERE, THE VENV?;
        location / {
            proxy_pass                      my_ip:11111/;
            auth_basic                      "Restricted Content";
            auth_basic_user_file /home/path to the password file/.htpasswd;
        }
    }


但没有身份验证出现。

如果我更改conf以收听listen 11111
我收到一个错误,指出该端口已在使用中(当然,mlflow服务器....)

我的愿望是拥有一个身份验证窗口,然后任何人都可以使用mlflow通过浏览器进入。

很高兴听到任何建议。

最佳答案

这里的问题是mlflownginx都试图在同一端口上运行...


首先让我们处理nginx:

/ etc / nginx / sites-enable中的1.1创建一个新文件sudo nano mlflow并删除存在的默认文件。

mlflow文件中的1.2:


server {
    listen YOUR_PORT;
    server_name YOUR_IP_OR_DOMAIN;
    auth_basic           “Administrator’s Area”;
    auth_basic_user_file /etc/apache2/.htpasswd; #read the link below how to set username and pwd in nginx

    location / {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
        proxy_redirect off;
    }
}


1.3。重新启动nginx sudo systemctl restart nginx


在您的服务器上运行mlflow mlflow server --host localhost --port 8000


现在,如果您尝试在浏览器中访问YOUR_IP_OR_DOMAIN:YOUR_PORT,则会出现auth弹出窗口,请输入主机并通过,现在进入mlflow


现在有2个选项可以告知mlflow服务器:

3.1将用户名和密码设置为环境变量
export MLFLOW_TRACKING_USERNAME=user export MLFLOW_TRACKING_PASSWORD=pwd

3.2在您的/venv/lib/python3.6/site-packages/mlflowpackages/mlflow/tracking/_tracking_service/utils.py中编辑功能


def _get_rest_store(store_uri, **_):
    def get_default_host_creds():
        return rest_utils.MlflowHostCreds(
            host=store_uri,
            username=replace with nginx user
            password=replace with nginx pwd
            token=os.environ.get(_TRACKING_TOKEN_ENV_VAR),
            ignore_tls_verification=os.environ.get(_TRACKING_INSECURE_TLS_ENV_VAR) == 'true',
        )


在使用mlflow的.py文件中:

import mlflow
remote_server_uri = "YOUR_IP_OR_DOMAIN:YOUR_PORT" # set to your server URI
mlflow.set_tracking_uri(remote_server_uri)
mlflow.set_experiment("/my-experiment")
with mlflow.start_run():
    mlflow.log_param("a", 1)
    mlflow.log_metric("b", 2)


指向nginx身份验证文档https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/的链接

08-28 07:47