写点什么

开始 Azure 机器学习的最佳方式

  • 2020-03-14
  • 本文字数:3290 字

    阅读完需:约 11 分钟

开始 Azure 机器学习的最佳方式

我知道许多数据科学家,包括我自己,都通过 Jupyter Notebooks 或某些 Python IDE 在支持 GPU 的计算机上,包括本地或在云中完成大部分工作。近两年来,作为 AI/ML 软件工程师,我正在做的事情是——在一台没有 GPU 的机器上准备数据,然后在云中使用 GPU 虚拟机做训练。


另一方面,您可能已经听说过Azure 机器学习——一个特殊的用于机器学习的平台服务。但是,如果您开始寻找一些入门教程,您将意识到,使用 Azure 的 ML 会创建很多不必要的开销,并且这个过程不是很理想。例如,在前面提到的例子中训练脚本是作为一个 Jupyter Cell 的文本文件创建的,没有代码补全,也没有任何方便地在本地执行或调试的方式。这些额外的开销也是我们并没有在我们的项目中尽可能多的使用它的原因。


不过,最近我发现有一个Visual Studio Code Extension for Azure ML。有了这个扩展,您可以在 VS Code 中直接开发您的的训练代码,并在本地运行,然后将相同的代码提交到集群上进行训练,只需点击几下按钮。这样的方式有几个重要的优势:


  • 您可以将大部分的时间花在本地机器上,并 仅为训练使用强大的 GPU 资源。训练集群可以根据需求自动调整大小,通过将机器的最小量设置为 0,可以根据需要调整 VM。

  • 将训练的所有结果 维护在一个中心位置,包括指标和创建模型——没有必要为手工为每个实验保留精确度记录。

  • 如果 几个人在同一项目上工作——他们可以使用同一个集群(所有实验将进行排队),并且可以查看彼此的实验结果。例如,您可以使用 教室环境中的 Azure ML,创建一个集群供所有人使用,而不是给每个学生创建一个单独的 GPU 机器,并促进学生之间为模型精确度进行竞争。

  • 如果您需要进行大量训练,例如用于 超参数优化 ——所有这些可以通过几个命令来完成,无需手动运行一系列的实验。


我希望已经说服您来尝试一下 Azure ML!下面是如何开始使用的最佳方式:


Azure ML 的工作区和门户

Azure ML 中的一切都围绕着一个 工作区 进行组织。这是您提交实验、存储数据和结果模型的中心位置。还有一个特殊的Azure ML Portal,为您的工作区提供 Web 界面,从这里您可以执行很多操作,如监视您的实验和指标等等。


您可以通过 Azure Portal 的 Web 界面创建一个工作区(可参考步骤说明),或使用 Azure CLI(介绍)。


az extension add -n azure-cli-mlaz group create -n myazml -l northeuropeaz ml workspace create -w myworkspace -g myazml
复制代码


工作区包含了一些 计算 资源。一旦您有了一个训练脚本,可以 提交实验 到工作区,并指定 计算目标 ——这将确保实验在指定的位置运行,并将实验的所有结果存储在工作区,以供将来参考。

MNIST 训练脚本

在我们的示例中,我们将展示如何使用 MNIST 数据集来解决非常传统的手写数字识别问题。以同样的方式,您将能够运行其他任何训练脚本。


我们的样本库包含简单的 MNIST 训练脚本 train_local.py。这个脚本从 OpenML 下载 MNIST 数据集,然后使用 SKLearn 逻辑回归 训练模型并打印结果精确度:


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(它比上面呈现的代码更复杂一些),它既可以在本地运行(不使用 Azure ML),也可以运行在远程计算资源上。


为了从 VS Code 中将其运行在 Azure ML 上,请遵循这些步骤:


  1. 确保您的 Azure 扩展连接到您的云帐户。选择左侧菜单的 Azure 图标。如果您没有连接,您会看到在右下角显示一个通知以便您连接(见图)。点击它,并通过浏览器登录。您也可以按下 Ctrl-Shift-P,将弹出命令面板,输入 Azure Sign In 进行登录。

  2. 然后,您应该能够在 Azure 栏部分的 MACHINE LEARNING 中看见您的工作区:


  3. 在这里,您会看到工作区中的不同对象:计算资源,实验等。

  4. 回到文件列表,并用鼠标右键点击 train_universal.py 并选择 Azure ML: Run as experiment in Azure


  5. 确认您的 Azure 订阅和您的工作区,然后选择创建新实验




  6. 创建新的 Computecompute configuration

  7. Compute 定义了用于训练/推理的计算资源。您可以使用本地计算机或任何云资源。在我们的示例中,我们将使用 AmlCompute 集群。请建立 STANDARD_DS3_v2 机器的可扩展群集,节点配置为 min=0 和 max=4。您可以从 VS Code 中,或从ML 门户中进行配置。


  8. Compute Configuration 定义远程资源上创建的用于执行训练的容器选项。特别是,它指定所有要安装的库。在我们的例子中,选择 SkLearn,并确认库列表。VS Code 中的 Azure ML 工作区


  9. 然后您会看到一个窗口,显示下一个实验的 JSON 描述。您可以在其中编辑信息,例如改变实验或集群名称,并调整一些参数。当您准备好后,点击 Submit Experiment


  10. 在 VS Code 中成功提交实验后,您会得到一个链接,指向Azure ML 门户中的实验进度和结果。


  11. 您还可以从 Azure ML 门户 中的 Experiments 选项卡,或 VS Code 中的 Azure Machine Learning 栏找到您的实验:


  12. 在您的代码调整一些参数后,如果要再次运行实验,这个过程会更快、更容易。用鼠标右键单击您的训练文件,您会看到一个新的菜单选项 Repeat last run ——只需选择它,实验将立即被提交。


  13. 然后,您将在 Azure ML 门户中看到所有运行的指标结果,如上面的截图所示。


现在您已了解,将运行提交到 Azure ML 并不复杂,而且一些功能(如从您的运行、模型等存储所有的统计数据)是免费的。


您可能已经注意到,对我们的示例来说,在集群上运行脚本所花费的时间比本地运行要长——它甚至可能需要几分钟。当然,还有一些开销,如将脚本和所有环境打包到容器中,并将其发送到云端。如果群集被设置为自动缩放到 0 节点——可能还会有一些额外的开销,如虚拟机的启动,并且当这个示例脚本小到仅需要几秒钟来执行的时候,这些开销都是显而易见的。然而,在现实的场景中,当训练需要几十分钟,有时甚至更多的时候——这种开销变得几乎不再重要,尤其是对从集群中获得的速度提升来说。

下一步是什么?

现在您已经了解了如何将脚本提交到远程群集上来执行,可以开始在您的日常工作中使用 Azure ML 了。您可以在普通 PC 上开发脚本,然后在 GPU 虚拟机或集群上自动计划执行,并在一个地方保存所有的结果。


不过,使用 Azure ML 不仅仅只有这两个优势。Azure ML 也可用于数据存储和数据集处理——使用不同的训练脚本来访问相同的数据会更加方便。另外,您还可以通过 API 自动提交实验、改变参数——从而进行一些超参数优化。此外,Azure ML 中内置的称为Hyperdrive的特定技术,能够进行更聪明的超参数搜索。我将在下一篇文章中讨论这些功能和技术。


原文链接


https://azureselected.com/zh-cn/content/cloud-advocate/2020-02/the-best-way-to-start-with-azure-machine-learning.html#在-azure-ml-中运行脚本


2020-03-14 14:067418

评论

发布
暂无评论
发现更多内容

native关键字作用到底是什么?

秦怀杂货店

Java 源码 源码刨析 native

第五周作业一

lithium

架构师训练营第五周作业

李日盛

架构师训练营第 1 期第九周作业

Leo乐

极客大学架构师训练营

微服务手册:分库分表从分析到实践,不再停留只会说分库分表

互联网应用架构

分库分表

Java核心基础——动态代理、静态代理

老农小江

java基础 代理模式

Python进阶——如何实现一个装饰器?

Kaito

Python

架构作业--第九周

Nick~毓

斐波那契查找

ilovealt

算法和数据结构

架构一期第九周作业

Airs

架構師訓練營第 1 期 - 第 09 周總結

Panda

架構師訓練營第 1 期

JVM垃圾回收及秒杀系统

天天向上

极客大学架构师训练营

架构师入门学习感悟五

笑春风

架构师3期3班-week1-作业

zbest

作业 week1

Week5 - 技术选型 - 缓存,队列,负载均衡

evildracula

学习 架构

架构师训练营第 1 期 - 第 9 周学习总结

Anyou Liu

极客大学架构师训练营

架构师训练营第五周学习笔记

李日盛

笔记

架构师训练营第五周作业

丁乐洪

深入理解r2dbc-mysql

程序那些事

响应式编程 R2DBC 程序那些事 响应式数据库 r2dbc-myql

第九周课后练习

knight

架构师3期3班-week1-总结

zbest

总结 week1

一致性HASH算法和相关测试

DL

第五周作业

小兵

极客时间架构师训练营 1 期 - 第 9 周总结

Kaven

架构师训练营第 1 期第九周总结

Leo乐

极客大学架构师训练营

架构师训练营第 1 期 - 第 9 周课后练习

Anyou Liu

极客大学架构师训练营

架構師訓練營 week9 總結

ilake

架构师训练营第九周总结

_

极客大学架构师训练营 第九周总结

首次排查 OOM 实录

AI乔治

Java 架构 OOM

架構師訓練營第 1 期 - 第 09 周作業

Panda

架構師訓練營第 1 期

架構師訓練營 week9 作業

ilake

开始 Azure 机器学习的最佳方式_AI&大模型_Dmitry Soshnikov_InfoQ精选文章