【问题标题】:Setting-up MLflow on Google Colab在 Google Colab 上设置 MLflow
【发布时间】:2020-08-20 06:31:20
【问题描述】:

我经常使用 Google Colab 来训练 TF/PyTorch 模型,因为 Colab 为我提供了 GPU/TPU 运行时。此外,我喜欢使用 MLflow 来存储和比较训练好的模型、跟踪进度、共享等。将 MLflow 与 Google Colab 结合使用的可用解决方案有哪些?

【问题讨论】:

    标签: google-colaboratory mlflow mlops


    【解决方案1】:

    对此有一个Github issue,尽管在撰写本文时它仍然开放[编辑:刚刚关闭],贡献者dmatrix 很友好地为notebook 提供了一个完整的解决方案,利用@ 987654327@.

    这里是代码(打算在 Colab 笔记本上运行),在此处转发并带有隐式 permission of the author

    !pip install mlflow --quiet
    !pip install pyngrok --quiet
    
    import mlflow
    
    with mlflow.start_run(run_name="MLflow on Colab"):
      mlflow.log_metric("m1", 2.0)
      mlflow.log_param("p1", "mlflow-colab")
    
    # run tracking UI in the background
    get_ipython().system_raw("mlflow ui --port 5000 &") # run tracking UI in the background
    
    
    # create remote tunnel using ngrok.com to allow local port access
    # borrowed from https://colab.research.google.com/github/alfozan/MLflow-GBRT-demo/blob/master/MLflow-GBRT-demo.ipynb#scrollTo=4h3bKHMYUIG6
    
    from pyngrok import ngrok
    
    # Terminate open tunnels if exist
    ngrok.kill()
    
    # Setting the authtoken (optional)
    # Get your authtoken from https://dashboard.ngrok.com/auth
    NGROK_AUTH_TOKEN = ""
    ngrok.set_auth_token(NGROK_AUTH_TOKEN)
    
    # Open an HTTPs tunnel on port 5000 for http://localhost:5000
    ngrok_tunnel = ngrok.connect(addr="5000", proto="http", bind_tls=True)
    print("MLflow Tracking UI:", ngrok_tunnel.public_url)
    

    其输出将是 pyngrok 生成的 URL,例如:

    MLflow Tracking UI: https://0a23d7a7d0c4.ngrok.io
    

    点击会进入 MLfLow GUI 屏幕。

    (感谢pyngrok创建者,Alex Laird对原代码稍作修改)

    使用 MLflow 版本 1.10.0 和 1.11.0 测试。

    【讨论】:

      【解决方案2】:

      您可以使用 databricks-community 提供的免费 MLflow 跟踪服务器并将其与 Google Colab 一起使用。以下 gif 详细说明了如何在数据块上设置 MLflow 跟踪服务器:

      现在,关于从 Google Colab 访问上述设置 MLflow。只需按照下面的代码 sn-p(s):

      片段 #1

      !pip install mlflow
      !databricks configure --host https://community.cloud.databricks.com/
      

      运行上面的 sn-p 后,它会提示您输入刚刚创建的 databricks 帐户的用户名和密码。请这样做。

      片段 #2

      import mlflow
      mlflow.set_tracking_uri("databricks")
      mlflow.set_experiment("<Enter your copied experiment name here>")
      

      如果您按照上面附加的 gif 文件进行操作,我会在其末尾复制 experiment_name。请执行相同的操作并将您的 experiment_name 传递给 set_experiment() 函数。

      按照上述步骤,您可以确定在 Google Colab 上配置了 MLflow!

      顺便说一句,我已经写了一个关于同一方面的中等故事,请检查一下:Intro to MLflow — With Colab — Part 1/2

      【讨论】:

        【解决方案3】:

        给出了一些很好的答案,但也有一些缺点 - 主要是您需要设置自己的 MLflow 服务器才能使其工作。

        TL;DR:

        总结一下,你有两个选择:

        选项 1:自己做所有事情

        对于这个选项,我从desertnaut 的答案中获取了一些代码(感谢dmatrix)。基本上,如果我们使用 ngrok,我们可以将过程分为 3 个步骤:

        1. 设置 MLflow 服务器: 无论是在本地、在 Colab 上还是在其他地方。
        pip install mlflow --quiet
        mlflow ui --port 5000
        

        或在笔记本中运行时:

        !pip install mlflow --quiet
        get_ipython().system_raw("mlflow ui --port 5000 &")
        

        这将初始化一个 MLflow 服务器。在 Colab 中这样做的缺点是您的运行时是短暂的,这意味着当您关闭会话时,所有实验信息都将丢失。您可以在本地运行该命令,但使用 ngrok 进行隧道化可能会更复杂。

        1. 使其可供 Colab 访问并可选择添加身份验证 这可以通过 ngrok 完成。代码如下:
        !pip install pyngrok --quiet
        
        from pyngrok import ngrok
        from getpass import getpass
        
        # Terminate open tunnels if exist
        ngrok.kill()
        
        # Setting the authtoken (optional)
        # Get your authtoken from https://dashboard.ngrok.com/auth
        NGROK_AUTH_TOKEN = getpass('Enter the ngrok authtoken: ')
        ngrok.set_auth_token(NGROK_AUTH_TOKEN)
        
        # Open an HTTPs tunnel on port 5000 for http://localhost:5000
        ngrok_tunnel = ngrok.connect(addr="5000", proto="http", bind_tls=True)
        print("MLflow Tracking UI:", ngrok_tunnel.public_url)
        

        这里我修改了代码以使用getpass,因为不推荐使用明文访问令牌。

        1. 记录实验详情 最后,我假设您已经有了使用 MLflow 记录的代码,但上面的示例只是简单展示了如何创建实验:
        import mlflow
        
        with mlflow.start_run(run_name="MLflow on Colab"):
          mlflow.log_metric("m1", 2.0)
          mlflow.log_param("p1", "mlflow-colab")
        

        这也已使用当前版本的 MLflow – 1.15.0 进行了测试

        选项 2:使用托管服务器

        此选项保存 ngrok 的设置和隧道。它还提供了团队访问控制和改进的 UI 的好处。我知道有两个主要选项:DatabricksDAGsHub

        Databricks 是托管的企业解决方案,而 DAGsHub 是免费的社区选项。

        在使用 DAGsHub 的情况下,您可以跳过第 1 步,第 2 步会变得更加简单。上面的sn-p变成如下(在相关平台上创建账号和项目后):

        !pip install mlflow --quiet
        
        import mlflow
        import os
        from getpass import getpass
        
        os.environ['MLFLOW_TRACKING_USERNAME'] = input('Enter your DAGsHub username: ')
        os.environ['MLFLOW_TRACKING_PASSWORD'] = getpass('Enter your DAGsHub access token: ')
        os.environ['MLFLOW_TRACKING_PROJECTNAME'] = input('Enter your DAGsHub project name: ')
        
        mlflow.set_tracking_uri(f'https://dagshub.com/' + os.environ['MLFLOW_TRACKING_USERNAME'] + '/' + os.environ['MLFLOW_TRACKING_PROJECTNAME'] + '.mlflow')
        
        with mlflow.start_run(run_name="MLflow on Colab"):
          mlflow.log_metric("m1", 2.0)
          mlflow.log_param("p1", "mlflow-colab")
        

        如您所见,这要短得多。它还具有持久性的好处。

        【讨论】:

          【解决方案4】:

          试试这个。但最大的问题是如何进入 UI

          https://github.com/dmatrix/mlflow-tests/blob/master/mllfow_test.ipynb

          一种选择是将 /drive/mlruns 目录下载到本地主机上,然后在本地主机上启动 mlflow ui。

          不确定 DISPLAY localhost:0:0 是否可以让远程服务器在本地显示到本地主机。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-16
          • 2019-03-27
          • 2019-04-17
          • 2022-11-03
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多