如何在您的移动设备上监控机器学习项目

353 阅读7分钟

如果你能在手机上监控你的Colab、Kaggle或AzureML机器学习项目,会怎么样?你将能够在飞行中检查你的模型--甚至在散步的时候🚶。

如果你是一个ML开发人员,你知道训练模型可以很容易地花费很长的时间。如果从你的手机上监控这一切,那该有多酷?

嗯,你可以做到这一点--而且是在<5行代码中。

为什么远程监控你的模型会有帮助

在开始教程并向你展示它是如何工作的之前,让我简单介绍一下你可以用TF Watcher做什么,这是一个开源项目,我们将用来监控我们的ML工作:

  • 与你的ML工作流无缝集成,所以你不需要改变你工作流中的任何其他代码就可以使其发挥作用
  • 你所有的可视化和仪表盘都是实时的
  • 你可能想与你的同事分享你的实时仪表盘或之前运行的仪表盘,这也允许你创建可共享的链接。
  • 这是一个PWA,可以让你在有限的能力范围内离线监控你的模型
  • 你还可以精确控制你想记录指标的时间

如何在手机上监控你的ML项目

现在让我们来看看如何用谷歌Colab在移动设备上监控你的模型的教程。我将向你展示如何在Google Colab中使用这个工具,所以任何人都可以尝试,但你几乎可以在任何地方(甚至在你的本地机器上)复制这个。

请随时关注这个colab笔记本

安装tf-watcher Python包

为了监测移动设备上的机器学习作业,你需要安装tf-watcher Python包。这是我建立的一个开源的Python包,你可以在这个GitHub repo中找到源代码。

要从PyPI安装Python包,在你的笔记本单元中运行以下命令:

 !pip install tf-watcher

如何创建一个简单的模型

在这个例子中,我们将看到如何监控一个训练工作--但你也可以用这个包来监控你的评估或预测工作。你很快就会看到你如何轻松地指定你想要监控的指标。

在这个例子中,我们将使用时尚MNIST,一个由10个时尚类别的60,000张灰度图像组成的简单数据集。我们首先加载数据集,然后做一些简单的预处理以进一步加快我们的例子。

然而,你可以在你更复杂的实验中使用我们在本文中谈到的一切。

让我们来获取数据集:

import tensorflow as tf

# Load example MNIST data and pre-process it
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

x_train = x_train.reshape(-1, 784).astype("float32") / 255.0
x_test = x_test.reshape(-1, 784).astype("float32") / 255.0

# Limit the data to 1000 samples to make it faster
x_train = x_train[:1000]
y_train = y_train[:1000]
x_test = x_test[:1000]
y_test = y_test[:1000]

取出时尚MNIST数据集

现在我们将创建一个简单的神经网络,它只有一个Dense 层。我将向你展示如何使用TensorFlow的Sequential API,但这在使用Functional API或子类化模型时也以完全相同的方式运作:

# Define the Keras model
def get_model():
    model = keras.Sequential()
    model.add(keras.layers.Dense(1, input_dim=784))
    model.compile(
        optimizer=keras.optimizers.RMSprop(learning_rate=0.1),
        loss="mean_squared_error",
        metrics=["accuracy"],
    )
    return model

创建一个简单的模型

你可能已经注意到,在编译我们的模型时,我们还指定了metrics ,让我们指定我们需要监测的指标。

这里我提到了 "准确性",所以我应该能够在我的移动设备上监测准确性。默认情况下,我们记录了 "损失",所以在这种情况下,我们将监测2个指标:损失和准确性。

你可以根据你的需要添加任意多的指标。你也可以使用TensorFlow的内置指标或添加你自己的自定义指标。

如何创建一个回调类的实例

现在你将导入TF Watcher并创建其一个类的实例:

import tfwatcher

MonitorCallback = tfwatcher.callbacks.EpochEnd(schedule = 1)

创建一个TF观察者类的实例

在这个例子中:

  • 我们使用 TF Watcher 中的EpochEnd 类来指定我们对在纪元水平上的操作感兴趣。有很多这样的类,你可以根据自己的需要来使用--在文档中找到所有关于其他类的信息。
  • 我们把schedule ,以便在每1个纪元后进行监测。你可以传入3(每3个纪元后进行监测),或者你也可以传入一个你想监测的特定纪元号码的列表。

当你运行这段代码时,你应该看到类似这样的东西被打印出来:

你的会话的唯一ID

这包括你的会话的一个独特的7个字符的ID。一定要记下这个ID,因为你将用它来监测你的模型。

如何开始监控你的模型 🚀

现在我们将训练我们建立的模型,并监测移动设备上训练的实时指标:

model = get_model()

history = model.fit(
    x_train,
    y_train,
    batch_size=128,
    epochs=100,
    validation_split=0.5,
    callbacks = [MonitorCallback]
)

训练你的模型

在这段代码中,我们开始训练我们的模型,训练100个epochs(在这种情况下应该是相当快的)。我们还添加了我们在前面步骤中制作的对象作为callback

如果在你的案例中,你是监测预测而不是训练,你会在预测方法中添加callbacks = [MonitorCallback]

一旦你运行了上述代码,你就可以从移动设备的网络应用中开始监测。

进入www.tfwatcher.tech/,输入你上面创建的唯一ID。这是一个PWA,这意味着你也可以把它安装在你的移动设备上,也可以把它作为一个本地的安卓应用来使用。

安装网络应用程序

一旦你添加了你的会话ID,你应该能够通过图表看到你的日志的实时进展。除了指标之外,你还应该能够看到每个纪元所花费的时间。在其他情况下,这可能也是一个批次所花的时间:

监测仪表板

如何分享仪表板

由于ML是高度协作的,你可能想与同事分享你的实时仪表盘。要做到这一点,只需点击共享链接按钮,该应用程序就会创建一个可共享的链接,供任何人查看你的实时进度或存储的仪表板:

以下是我在本教程中创建的仪表板的可共享链接

你还能用 TF Watcher 做什么?

虽然我刚才展示的例子看起来很酷,但我们还可以用这个工具做很多事情。现在我将简要地谈一谈其中的两种情况。分布式训练和非急迫执行。

分布式训练

你可能经常将你的机器学习训练分布在多个GPU、多个机器或TPU上。你可能正在用 [tf.distribute.Strategy](https://www.tensorflow.org/api_docs/python/tf/distribute/Strategy)TensorFlow API。

你可以用与大多数分布式策略完全相同的方式来使用它,同时在自定义的训练循环中使用ParameterServer

分布式训练

你可以在这里找到一些关于如何用TensorFlow Keras使用这些策略的好例子。

非急迫执行

在TensorFlow 2中,默认开启了急切执行。但你经常想用 tf.function来制作你的程序的图形。它是一个转换工具,可以从你的Python代码中创建独立于Python的数据流图。

这个项目最早的一个版本使用了一些Numpy调用,但你猜怎么着,现在你也可以在非急迫模式下以同样的方式使用代码。

谢谢你的阅读!

谢谢你坚持到最后。你现在可以在任何地方通过移动设备监控你的机器学习项目,并将它们提升到新的水平。我希望你能像我一样兴奋地开始使用它。

如果你学到了新的东西或喜欢读这篇文章,请分享它,以便其他人能看到它。在那之前,请在下一篇文章中看到你!