4

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

4

4 回答 4

8

有一个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)

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

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

单击它将导致 MLfLow GUI 屏幕。

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

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

于 2020-09-09T12:59:34.500 回答
4

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

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

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

片段#1

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

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

片段#2

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

如果您按照上面附加的 gif 文件进行操作,我会experiment_name在其末尾复制。请做同样的事情并将你的传递experiment_nameset_experiment()函数。

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

顺便说一句,我已经写了一个中等故事,请检查一下:MLflow 简介 — 与 Colab — 第 1/2 部分

于 2021-06-16T08:34:41.943 回答
3

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

TL;博士:

我会总结说你有两个选择:

选项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 步变得更加简单。上面的代码片段变成如下(在相关平台上创建帐户和项目后):

!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")

如您所见,这要短得多。它还具有坚持不懈的好处。

于 2021-04-13T13:53:57.003 回答
-1

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

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

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

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

于 2020-06-12T16:18:56.980 回答