在 Google Colab 上设置 MLflow

SvG*_*vGA 3 google-colaboratory mlflow mlops

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

Dea*_*ean 8

给出了一些很好的答案,但也有一些缺点 \xe2\x80\x93\xc2\xa0 主要是您需要设置自己的 MLflow 服务器才能正常工作。

\n

长话短说:

\n\n

我总结说你有两个选择:

\n

选择一:一切都自己做

\n

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

\n
    \n
  1. 设置 MLflow 服务器:\n本地、Colab 或其他地方。
  2. \n
\n
pip install mlflow --quiet\nmlflow ui --port 5000\n
Run Code Online (Sandbox Code Playgroud)\n

或者在笔记本中运行时:

\n
!pip install mlflow --quiet\nget_ipython().system_raw("mlflow ui --port 5000 &")\n
Run Code Online (Sandbox Code Playgroud)\n

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

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

这里我修改了要使用的代码getpass,因为不建议使用明文访问令牌。

\n
    \n
  1. 记录实验详细信息\n最后,我假设您已经有了使用 MLflow 记录的代码,但上面的示例简单展示了如何创建实验:
  2. \n
\n
import mlflow\n\nwith mlflow.start_run(run_name="MLflow on Colab"):\n  mlflow.log_metric("m1", 2.0)\n  mlflow.log_param("p1", "mlflow-colab")\n
Run Code Online (Sandbox Code Playgroud)\n

这也已使用当前版本的 MLflow \xe2\x80\x93 1.15.0 进行了测试

\n

选项 2:使用托管服务器

\n

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

\n

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

\n

如果您使用 DAGsHub,则可以跳过步骤 1,步骤 2 会变得简单得多。上面的代码片段变成如下(在相关平台上创建帐户和项目后):

\n
!pip install mlflow --quiet\n\nimport mlflow\nimport os\nfrom getpass import getpass\n\nos.environ[\'MLFLOW_TRACKING_USERNAME\'] = input(\'Enter your DAGsHub username: \')\nos.environ[\'MLFLOW_TRACKING_PASSWORD\'] = getpass(\'Enter your DAGsHub access token: \')\nos.environ[\'MLFLOW_TRACKING_PROJECTNAME\'] = input(\'Enter your DAGsHub project name: \')\n\nmlflow.set_tracking_uri(f\'https://dagshub.com/\' + os.environ[\'MLFLOW_TRACKING_USERNAME\'] + \'/\' + os.environ[\'MLFLOW_TRACKING_PROJECTNAME\'] + \'.mlflow\')\n\nwith mlflow.start_run(run_name="MLflow on Colab"):\n  mlflow.log_metric("m1", 2.0)\n  mlflow.log_param("p1", "mlflow-colab")\n
Run Code Online (Sandbox Code Playgroud)\n

正如您所看到的,这明显更短。它还具有坚持不懈的好处。

\n


des*_*aut 6

有一个Github的问题在此,虽然在写它的时候仍然是开放的[编辑:刚刚结束],贡献者dmatrix是一种足以提供笔记本电脑与一个完整的解决方案,利用pyngrok

这是代码(旨在在 Colab 笔记本上运行),在作者的隐式许可下重新发布

!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)
Run Code Online (Sandbox Code Playgroud)

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

MLflow Tracking UI: https://0a23d7a7d0c4.ngrok.io
Run Code Online (Sandbox Code Playgroud)

单击这将导致 MLfLow GUI 屏幕。

(感谢pyngrok创建者 Alex Laird对原始代码的轻微修改)

使用 MLflow 版本 1.10.0 和 1.11.0 进行测试。


小智 5

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

\n

在 databricks 上设置 MLflow 跟踪服务器的步骤

\n

现在,关于从 Google Colab 访问上述设置的 MLflow。只需按照下面的代码片段操作即可:

\n

片段#1

\n
!pip install mlflow\n!databricks configure --host https://community.cloud.databricks.com/\n
Run Code Online (Sandbox Code Playgroud)\n

运行上面的代码片段后,它会提示您输入刚刚创建的 databricks 帐户\xe2\x80\x99s 用户名和密码。请这样做。

\n

片段 #2

\n
import mlflow\nmlflow.set_tracking_uri("databricks")\nmlflow.set_experiment("<Enter your copied experiment name here>")\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

通过执行上述步骤,您可以确保 MLflow 在 Google Colab 上配置完毕!

\n

顺便说一句,我已经写了一篇关于同样内容的媒体故事,请查看:Intro to MLflow \xe2\x80\x94 With Colab \xe2\x80\x94 Part 1/2

\n


Jul*_*les -1

尝试这个。但最大的问题是如何进入用户界面

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

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

不确定 DISPLAY localhost:0:0 是否适用于远程服务器以在本地主机上显示。