我经常使用 Google Colab 来训练 TF/PyTorch 模型,因为 Colab 为我提供了 GPU/TPU 运行时。此外,我喜欢使用 MLflow 来存储和比较训练的模型、跟踪进度、共享等。将 MLflow 与 Google Colab 一起使用的可用解决方案有哪些?
4 回答
有一个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 进行测试。
您可以使用 databricks-community 提供的免费 MLflow 跟踪服务器并将其与 Google Colab 一起使用。以下 gif 详细说明了如何在数据块上设置 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_name
给set_experiment()
函数。
按照上述步骤,您可以确定在 Google Colab 上配置了 MLflow!
顺便说一句,我已经写了一个中等故事,请检查一下:MLflow 简介 — 与 Colab — 第 1/2 部分
给出了一些好的答案,但也有一些缺点——主要是您需要设置自己的 MLflow 服务器才能使其工作。
TL;博士:
我会总结说你有两个选择:
选项1:自己做所有事情
对于这个选项,我从desertnaut
的答案中获取了一些代码(归功于dmatrix
)。基本上,如果我们使用 ngrok,我们可以将过程分为 3 个步骤:
- 设置 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 进行隧道传输可能会更复杂。
- 使其可供 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
因为不推荐使用明文访问令牌。
- 记录实验详细信息 最后,我假设您已经有了使用 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 的好处。我知道有两个主要选项:Databricks和DAGsHub。
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")
如您所见,这要短得多。它还具有坚持不懈的好处。
尝试这个。但最大的问题是如何进入 UI
https://github.com/dmatrix/mlflow-tests/blob/master/mllfow_test.ipynb
一种选择是将 /drive/mlruns 目录下载到本地主机上,然后在本地主机上启动 mlflow ui。
不确定 DISPLAY localhost:0:0 是否适用于远程服务器在本地显示到本地。