如何克服恐惧并开始使用 Azure 机器学习

我认识很多数据科学家 - 我自己可能也是其中之一 - 他们在位于云中的本地或虚拟 GPU 机器上工作,或者通过 Jupyter Notebook 或通过某种 Python 开发环境。 作为一名专家 AI/ML 开发人员工作了 2 年,我正是这样做的,同时在常规服务器或工作站上准备数据,并在 Azure 中具有 GPU 的虚拟机上运行训练。

当然,我们都听说过 Azure机器学习 — 专门的机器学习云平台。 然而,第一眼看到之后 介绍性文章看来,Azure ML 会给你带来的问题比它解决的问题还要多。 例如,在上面提到的教程中,Azure ML 的训练是从 Jupyter Notebook 启动的,而训练脚本本身建议作为文本文件在其中一个单元格中创建和编辑 - 同时不使用自动完成、语法突出正常开发环境的其他优势。 为此,我们很长一段时间没有在工作中认真使用Azure ML。

然而,我最近发现了一种在工作中开始有效使用 Azure ML 的方法! 对细节感兴趣吗?

如何克服恐惧并开始使用 Azure 机器学习

主要秘密是 适用于 Azure ML 的 Visual Studio Code 扩展。 它允许您直接在 VS Code 中开发训练脚本,充分利用环境 - 您甚至可以在本地运行脚本,然后只需单击几下即可将其发送到 Azure ML 集群中的训练。 方便不是吗?

这样做,您可以通过使用 Azure ML 获得以下好处:

  • 您大部分时间都可以在本地计算机上使用方便的 IDE 进行工作,并且 仅使用 GPU 进行模型训练。 同时,训练资源池可以自动调整到所需的负载,并且通过将最小节点数设置为0,可以在存在训练任务的情况下自动“按需”启动虚拟机。
  • 你可能 将所有学习成果存储在一处,包括实现的指标和生成的模型 - 无需提出某种系统或命令来存储所有结果。
  • 在这种情况下, 几个人可以从事同一个项目 - 他们可以使用相同的计算集群,所有的实验都会排队,并且他们还可以看到彼此的实验结果。 一种这样的场景是 在深度学习教学中使用 Azure ML您可以创建一个可供所有人集中使用的集群,而不是为每个学生提供一台带有 GPU 的虚拟机。 此外,具有模型准确性的结果通用表可以作为一个很好的竞争元素。
  • 使用 Azure ML,您可以轻松地进行一系列实验,例如 超参数优化 - 这只需几行代码即可完成,无需手动进行一系列实验。

我希望我说服您尝试 Azure ML! 以下是如何开始:

Azure ML 工作区和 Azure ML 门户

Azure ML 是围绕这一概念组织的 工作区域 — 工作区。 数据可以存储在工作区中,实验发送到其中进行训练,训练结果也存储在那里 - 生成的指标和模型。 您可以通过以下方式查看工作空间内的内容 Azure 机器学习门户 - 从那里您可以执行许多操作,从加载数据到监控实验和部署模型。

您可以通过 Web 界面创建工作区 Azure 门户 (见。 分步说明),或使用 Azure CLI 命令行(指示):

az extension add -n azure-cli-ml
az group create -n myazml -l northeurope
az ml workspace create -w myworkspace -g myazml

与工作空间相关的还有一些 计算资源 (计算). 创建训练模型的脚本后,您可以 发送实验以执行 到工作区,并指定 计算目标 - 在这种情况下,脚本将被打包,在所需的计算环境中运行,然后所有实验结果将保存在工作区中以供进一步分析和使用。

MNIST 学习脚本

考虑经典问题 手写数字识别 使用 MNIST 数据集。 同样,将来您可以运行任何训练脚本。

我们的存储库中有一个脚本 train_local.py,我们使用 SkLearn 库训练最简单的线性回归模型。 当然,我知道这不是解决问题的最佳方法 - 我们用它作为例子,作为最简单的。

该脚本首先从 OpenML 下载 MNIST 数据,然后使用该类 LogisticRegression 训练模型,然后打印结果的准确性:

mnist = fetch_openml('mnist_784')
mnist['target'] = np.array([int(x) for x in mnist['target']])

shuffle_index = np.random.permutation(len(mist['data']))
X, y = mnist['data'][shuffle_index], mnist['target'][shuffle_index]

X_train, X_test, y_train, y_test = 
  train_test_split(X, y, test_size = 0.3, random_state = 42)

lr = LogisticRegression()
lr.fit(X_train, y_train)
y_hat = lr.predict(X_test)
acc = np.average(np.int32(y_hat == y_test))

print('Overall accuracy:', acc)

您可以在计算机上运行该脚本并在几秒钟内获得结果。

在 Azure ML 中运行脚本

如果我们通过 Azure ML 运行训练脚本,我们将有两个主要优势:

  • 在任意计算资源上运行训练,通常比本地计算机更有效率。 同时,Azure ML 本身将负责将我们的脚本与当前目录中的所有文件打包到 Docker 容器中,安装所需的依赖项,并将其发送以供执行。
  • 将结果写入 Azure ML 工作区内的单个注册表。 为了利用此功能,我们需要在脚本中添加几行代码来记录结果的准确性:

from azureml.core.run import Run
...
try:    
    run = Run.get_submitted_run()
    run.log('accuracy', acc)
except:
    pass

对应版本的脚本称为 train_universal.py (它比上面写的要狡猾一点,但不多)。 该脚本既可以在本地运行,也可以在远程计算资源上运行。

要从 VS Code 在 Azure ML 中运行它,您需要执行以下操作:

  1. 确保 Azure 扩展已连接到你的订阅。 从左侧菜单中选择 Azure 图标。 如果您未连接,右下角会出现一条通知(而已),点击即可通过浏览器进入。 您还可以点击 Ctrl-Shift-P 调用 VS Code 命令行,然后输入 Azure 登录.

  2. 之后,在 Azure 部分(左侧图标)中,找到该部分 机器学习:

如何克服恐惧并开始使用 Azure 机器学习
在这里,您应该看到工作区中不同的对象组:计算资源、实验等。

  1. 转到文件列表,右键单击脚本 train_universal.py 然后选择 Azure ML:在 Azure 中作为实验运行.

如何克服恐惧并开始使用 Azure 机器学习

  1. 随后 VS Code 的命令行区域中将出现一系列对话框:确认您正在使用的订阅和 Azure ML 工作区,然后选择 创建新实验:

如何克服恐惧并开始使用 Azure 机器学习
如何克服恐惧并开始使用 Azure 机器学习
如何克服恐惧并开始使用 Azure 机器学习

  1. 选择创建新的计算资源 创建新计算:

    • 计算 确定进行训练的计算资源。 您可以选择本地计算机,也可以选择 AmlCompute 云集群。 我建议创建一个可扩展的机器集群 STANDARD_DS3_v2,最小机器数量为 0(最大机器数量为 1 或更多,具体取决于您的喜好)。 这可以通过 VS Code 界面完成,或者之前通过 机器学习门户.

    如何克服恐惧并开始使用 Azure 机器学习

  2. 接下来,您需要选择一个配置 计算配置,它定义了为训练而创建的容器的参数,特别是所有必要的库。 在我们的例子中,由于我们使用的是 Scikit Learn,因此我们选择 SKLearn,然后按 Enter 确认建议的库列表。 如果您使用任何其他库,则必须在此处指定它们。

    如何克服恐惧并开始使用 Azure 机器学习
    如何克服恐惧并开始使用 Azure 机器学习

  3. 这将打开一个窗口,其中包含描述实验的 JSON 文件。 在其中,您可以更正一些参数 - 例如实验的名称。 之后点击链接 提交实验 就在这个文件里面:

如何克服恐惧并开始使用 Azure 机器学习

  1. 通过 VS Code 成功提交实验后,在通知区域的右侧,您将看到一个链接 Azure 机器学习门户,您可以在其中跟踪实验的状态和结果。

如何克服恐惧并开始使用 Azure 机器学习
随后,您始终可以在该部分中找到它 实验 Azure 机器学习门户,或在部分 Azure机器学习 在实验列表中:

如何克服恐惧并开始使用 Azure 机器学习

  1. 如果之后您对代码进行了一些更正或更改了参数,重新启动实验将会更快更容易。 右键单击文件,您将看到一个新的菜单项 重复上次运行 - 只要选择它,实验就会立即开始:

如何克服恐惧并开始使用 Azure 机器学习
您始终可以在 Azure ML 门户上找到所有启动的指标结果,无需将其写下来。

现在您知道使用 Azure ML 运行实验既简单又轻松,并且这样做可以带来许多好处。

但你也可以看到缺点。 例如,运行脚本花费的时间明显更长。 当然,将脚本打包到容器中并部署到服务器上需要时间。 如果同时将集群削减为 0 个节点的大小,则启动虚拟机将需要更多时间,当我们对像 MNIST 这样的简单任务进行实验时,这一切都非常明显,这些任务在几秒钟内就可以解决。 然而,在现实生活中,当训练持续几个小时,甚至几天或几周时,这个额外的时间就变得微不足道了,特别是在计算集群可以提供更高性能的背景下。

接下来是什么?

我希望读完本文后,您能够并且将会在工作中使用 Azure ML 来运行脚本、管理计算资源并集中存储结果。 然而,Azure ML 可以为您带来更多好处!

在工作区中,您可以存储数据,从而为所有任务创建一个易于访问的集中存储库。 此外,您可以不从 Visual Studio Code 运行实验,而是使用 API - 如果您需要执行超参数优化并需要使用不同参数多次运行脚本,这会特别有用。 此外,Azure ML中内置了特殊技术 超光速,它允许您对超参数进行更棘手的搜索和优化。 我将在下一篇文章中讨论这些可能性。

有用的资源

要了解有关 Azure ML 的更多信息,您可能会发现以下 Microsoft Learn 课程很有帮助:

来源: habr.com

添加评论