教程:在 IoT Edge 上设置机器学习环境

适用于:“是”图标 IoT Edge 1.1

重要

IoT Edge 1.1 终止支持日期为 2022 年 12 月 13 日。 请查看 Microsoft 产品生命周期,了解此产品、服务、技术或 API 的受支持情况。 有关更新到最新版本IoT Edge的详细信息,请参阅更新IoT Edge

本文将帮助你准备好用于开发和部署的环境。 首先,在开发计算机上设置好所有必需工具。 然后,在 Azure 中创建必要的云资源。

本教程的此部分介绍了如何:

  • 设置用于开发的虚拟机。
  • 设置 IoT 中心和云存储以供开发环境使用。

先决条件

有一系列教程介绍如何在 IoT Edge 上使用 Azure 机器学习,本文是其中的一篇。 这一系列中的每篇文章都环环相扣,后一篇以前一篇为基础。 如果你是直接转到本文的,请访问本系列的第一篇文章

设置开发 VM

此步骤通常由云开发人员执行。 其中一些软件也可能对数据科学家有所帮助。

我们创建了一个 PowerShell 脚本,用于创建已配置多个先决条件的 Azure 虚拟机。 创建的 VM 必须能够处理嵌套虚拟化,因此我们要选择 Standard_D8s_v3 虚拟机大小。

为开发 VM 设置以下项:

开发人员 VM 并非绝对必要 - 所有开发工具都可以在本地计算机上运行。 但是,强烈建议使用 VM,以确保公平的竞争环境。

创建和配置虚拟机大约需要 30 分钟的时间。

  1. 机器学习和 IoT Edge 示例存储库克隆或下载到本地计算机。

  2. 以管理员身份打开 PowerShell,导航到代码所下载到的根目录中的 \IoTEdgeAndMlSample\DevVM 目录。 我们将源的根目录称为 srcdir

    cd c:\srcdir\IoTEdgeAndMlSample\DevVM
    

    DevVM 目录包含创建适合完成本教程的 Azure 虚拟机所需的文件。

  3. 运行以下命令,以允许执行脚本。 系统出现提示时,请选择“全部同意”

    Set-ExecutionPolicy Bypass -Scope Process
    
  4. 运行 Create-AzureDevVM.ps1。

    .\Create-AzureDevVm.ps1
    

    系统出现提示时,请提供以下信息:

    • Azure 订阅 ID:你的订阅 ID,可在门户中的“Azure 订阅”中找到。
    • 资源组名称:Azure 中新的或现有的资源组的名称。
    • 位置:选择将在其中创建虚拟机的 Azure 位置。 例如“美国西部 2”或“北欧”。 有关详细信息,请参阅 Azure 位置
    • 用户名:为 VM 的管理员帐户提供一个易记的名称。
    • 密码:为 VM 的管理员帐户设置密码。

    脚本在执行以下步骤时,会运行几分钟:

    1. 安装 Azure PowerShell Az 模块
    2. 系统会提示你登录到 Azure。
    3. 确认用于创建 VM 的信息。 按 yEnter 继续操作。
    4. 创建资源组(如果不存在)。
    5. 部署虚拟机。
    6. 在 VM 上启用 Hyper-V。
    7. 安装开发所需的软件并克隆示例存储库。
    8. 重启 VM。
    9. 在桌面上创建 RDP 文件以连接到 VM。

    如果系统提示输入 VM 的名称以将其重启,可以从脚本输出中复制其名称。 输出中还显示了用于连接到 VM 的 RDP 文件的路径。

设置自动关机计划

为了帮助降低成本,创建开发 VM 时设置了自动关闭计划,将在太平洋标准时间 (PST) 19:00 自动关闭。 根据你的位置和计划,可能需要更新此设置。 若要更新关机计划,请执行以下操作:

  1. 在 Azure 门户中,导航到脚本创建的 VM。

  2. 在左侧窗格菜单中的“操作”下,选择“自动关闭”。

  3. 根据需要调整“计划的关闭”和“时区”,然后选择“保存”。

连接到开发 VM

我们现已创建 VM,需要安装完成教程所需软件。

  1. 在桌面上双击脚本创建的 RDP 文件。

  2. 系统将显示一个对话框,其中显示远程连接的发布者未知。 这是正常情况,因此请选择“连接”。

  3. 提供创建 VM 时所提供的管理员密码,然后单击“确定”。

  4. 系统将提示你是否接受 VM 的证书。 请选择“是”。

安装 Visual Studio Code 扩展

现在你已连接到开发计算机,请为 Visual Studio Code 添加一些有用的扩展,以使开发体验更加轻松。

  1. 连接到开发 VM,打开 PowerShell 窗口,然后导航到 C:\source\IoTEdgeAndMlSample\DevVM 目录。 此目录是创建 VM 的脚本所创建的。

    cd C:\source\IoTEdgeAndMlSample\DevVM
    
  2. 运行以下命令,以允许执行脚本。 系统出现提示时,请选择“全部同意”

    Set-ExecutionPolicy Bypass -Scope Process
    
  3. 运行 Visual Studio Code 扩展脚本。

    .\Enable-CodeExtensions.ps1
    
  4. 该脚本将运行几分钟以安装以下 VS 代码扩展:

    • Azure IoT Edge
    • Azure IoT 中心
    • Python
    • C#
    • Docker
    • PowerShell

设置 IoT 中心和存储

这些步骤通常由云开发人员执行。

Azure IoT 中心是任何 IoT 应用程序的核心,它会处理 IoT 设备和云之间的安全通信。 它是 IoT Edge 机器学习解决方案运行的主要协调点。

  • IoT 中心使用路由将来自 IoT 设备的传入数据直接传送到其他下游服务。 我们将利用 IoT 中心路由将设备数据发送到 Azure 存储。 Azure 机器学习使用 Azure 存储中的设备数据来训练剩余的使用寿命 (RUL) 分类器。

  • 在本教程的后面部分,我们将使用 IoT 中心来配置和管理 Azure IoT Edge 设备。

在本部分中,你要使用脚本来创建 Azure IoT 中心和 Azure 存储帐户。 然后,在 Azure 门户中配置路由,将中心收到的数据转发到 Azure 存储容器。 完成这些步骤大约需要 10 分钟。

  1. 连接到开发 VM,打开 PowerShell 窗口,然后导航到 IoTHub 目录。

    cd C:\source\IoTEdgeAndMlSample\IoTHub
    
  2. 运行创建脚本。 使用创建开发 VM 时所用的订阅 ID、位置和资源组值。

    .\New-HubAndStorage.ps1 -SubscriptionId <subscription id> -Location <location> -ResourceGroupName <resource group>
    
    • 系统会提示登录到 Azure。
    • 该脚本会确认信息来创建中心和存储帐户。 按 yEnter 继续操作。

运行该脚本需要大约 2 分钟。 完成后,脚本将输出 IoT 中心和存储帐户的名称。

查看 IoT 中心存储的路由

我们在上一节中运行脚本以创建 IoT 中心时,该脚本还创建了自定义终结点和路由。 IoT 中心路由包含查询表达式和终结点。 如果消息与表达式匹配,则数据将沿路由发送到关联的终结点。 终结点可以是事件中心、服务总线队列和主题。 在本例中,终结点是存储帐户中的 Blob 容器。 让我们使用 Azure 门户来查看脚本创建的路由。

  1. 打开 Azure 门户,并转到本教程所用的资源组。

  2. 在资源列表中,选择脚本创建的 IoT 中心。 其名称以随机字符结尾,例如 IotEdgeAndMlHub-jrujej6de6i7w

  3. 在左侧窗格菜单中的“中心设置”下,选择“消息路由”。

  4. 在“消息路由”页上,选择“自定义终结点”选项卡。

  5. 展开“存储”部分:

    IoT 中心门户的自定义终结点列表中名为 turbofanDeviceStorage 的存储的屏幕截图。

    我们会看到 turbofanDeviceStorage 在自定义终结点列表中。 请注意有关此终结点的以下特征:

    • 它指向你创建的名为 devicedata 的 Blob 存储容器,如“容器名称”所示。
    • 其“文件名格式”的名称中包含“partition”一词。 我们发现,对于将在本教程后面部分使用 Azure Notebooks 执行的文件操作,此格式更为方便。
    • 其状态应为“正常”。
  6. 选择“路由”选项卡

  7. 选择名为“turbofanDeviceDataToStorage”的路由

  8. 在“路由详细信息”页上,请注意,路由的终结点是 turbofanDeviceStorage 终结点。

    显示有关 turbofanDeviceDataToStorage 路由的详细信息的屏幕截图。

  9. 查看设置为“true”的“路由查询”。 此设置意味着所有设备遥测消息都将与此路由匹配,因此所有消息将发送到 turbofanDeviceStorage 终结点。

  10. 由于我们未进行任何编辑,因此请直接关闭此页。

清理资源

本教程是一系列文章的一部分,其中每篇文章都基于前一篇文章中介绍的内容。 在完成最后一个教程之前,请等待清理所有资源。

后续步骤

在本文中,我们创建了 IoT 中心,并配置了 Azure 存储帐户的路由。 接下来,我们将通过 IoT 中心将来自一组模拟设备的数据发送到存储帐户。 在本教程的后面部分,在配置 IoT Edge 设备和模块之后,我们将再次关注路由并详细了解路由查询。

继续阅读下一篇文章,创建模拟设备以进行监视。