0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何从notebook实验过渡到云中部署

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2022-07-10 15:47 次阅读

当您开始研究一个新的机器学习问题时,我猜您首先会使用的环境便是 notebook。也许您喜欢在本地环境中运行 Jupyter、使用 Kaggle Kernel,或者我个人比较喜欢使用的 Colab。有了这些工具,创建并进行机器学习实验变得越来越便利。尽管在 notebooks 中进行实验时一切顺利,但在您将实验提升到生产环境时,很容易碰壁。突然间,您的关注点不再只是追求准确度上的高分。

如果您有长时间运行的作业,如进行分布式训练或是托管一个在线预测模型,这时该怎么办?亦或您的用例需要有关安全性和数据隐私的更细粒度的权限,您的数据在使用期间会是怎样的?您将如何处理代码更改,或者如何随着时间推移监控模型的表现?

要打造生产级应用或训练大型模型,您需要额外的工具来帮您实现扩缩,而不仅仅是在 notebook 中编写代码。使用云服务提供商可以帮助解决这个问题,但这一过程可能会让人感到有点望而生畏。如果浏览一下 Google Cloud 产品的完整列表,您可能完全不知道该从何入手。

因此,为了让您的旅程更轻松,我将向您介绍从实验性 notebook 代码到云中部署模型的快速路径。

2e559454-f609-11ec-ba43-dac502259ad0.png

您可以在此处获取本示例中使用的代码。此 notebook 在 TF Flowers 数据集上训练了一个图像分类模型。您将看到如何在云中部署该模型,并通过 REST 端点获取对新花卉图像的预测。

请注意,为了遵循此教程进行实验,您需要有一个启用计费功能的 Google Cloud 项目。如果您以前从未使用过 Google Cloud,可以按照此处的说明设置一个项目,并免费获得 300 美元赠金以进行实验。

以下是您需要采取的 5 个步骤:

1.创建一个 Vertex AI Workbench 代管式 notebook

2.上传 .ipynb 文件

3.启动 notebook 执行

4.部署模型

5.获取预测

创建一个 Vertex AI Workbench 代管 notebook

要训练和部署该模型,您将使用 Google Cloud 的代管式机器学习平台 Vertex AI。Vertex AI 包含许多不同的产品,可以在 ML 工作流的整个生命周期中为您提供帮助。今天,您将使用其中的一些产品,让我们先从代管式 notebook 产品 Workbench 开始。

在 Cloud Console 的“Vertex AI”部分下,选择“Workbench”。请注意,如果这是您首次在项目中使用 Vertex AI,系统将提示您启用 Vertex API 和 Notebooks API。因此,请务必点击界面中的按钮来执行此操作。

2e93bc2a-f609-11ec-ba43-dac502259ad0.png

接下来,选择“MANAGED NOTEBOOKS”,然后选择“NEW NOTEBOOK”

2ea0e102-f609-11ec-ba43-dac502259ad0.png

Advanced Settings”下,您可以通过指定机器类型和位置、添加 GPU、提供自定义容器以及启用终端访问来自定义 notebook。目前,请保留默认设置,只需为 notebook 命名即可。然后点击“CREATE”。

2ebd2150-f609-11ec-ba43-dac502259ad0.png

OPEN JUPYTERLAB 文本变为蓝色时,表示您的 notebook 已准备就绪。首次打开 notebook 时,系统会提示您进行身份验证,您可以按照界面中的步骤操作。

2edd8792-f609-11ec-ba43-dac502259ad0.png

打开 JupyterLab 实例后,您会看到几种不同的 notebook 选项。Vertex AI Workbench 提供了不同的内核(TensorFlow、R、XGBoost 等),这些内核是预安装了通用数据科学库的代管式环境。如果您需要向内核中添加其他库,和在 Colab 中一样,您可以在 notebook 单元中使用 pip install。

2eeb2ee2-f609-11ec-ba43-dac502259ad0.png

第 1 步已完成!您已经创建了代管式 JupyterLab 环境。

上传 .ipynb 文件

现在,将 TensorFlow 代码放入 Google Cloud 中。如果您一直在使用不同的环境(Colab、本地等),则可以将任何需要的代码工件上传到您的 Vertex AI Workbench 代管式 notebook,甚至可以与 GitHub 集成。在未来,您可以直接在 Workbench 中完成所有的开发工作,但现在让我们假设您一直在使用 Colab。

Colab notebooks 可以导出为 .ipynb 文件。

2f27988c-f609-11ec-ba43-dac502259ad0.png

您可以点击“上传文件”图标,将文件上传到 Workbench。

2f471f7c-f609-11ec-ba43-dac502259ad0.png

当您在 Workbench 中打开此 notebook 时,系统会提示您选择内核,即 notebook 的运行环境。有几种不同的内核可供选择,但由于此代码示例使用 TensorFlow,因此需要选择 TensorFlow 2 内核。

2f63bff6-f609-11ec-ba43-dac502259ad0.png

选择内核后,在 notebook 中执行的任何单元都将在此代管式 TensorFlow 环境中运行。例如,如果执行导入单元,则可以导入 TensorFlow、TensorFlow Datasets 和 NumPy。这是因为所有这些库都包含在 Vertex AI Workbench TensorFlow 2 内核中。当然,由于 XGBoost 内核中没有安装 TensorFlow,如果您尝试在该内核中执行相同的 notebook 单元,则会看到一条错误消息。

启动 notebook 执行

虽然我们可以手动运行其余的 notebook 单元,但对于需要长时间训练的模型而言,notebook 并不总是最方便的选择。如果使用 ML 构建应用,通常来说您需要对模型进行多次训练。随着时间的推移,您会想要重新训练模型,以确保其保持实时更新,并不断产生有价值的结果。

如果您要开始处理一个新的机器学习问题,手动执行 notebook 单元可能是不错的选择。但是,如果您想要大规模进行自动化实验,或者为生产应用重新训练模型,代管式 ML 训练选项将大大简化您的工作。

启动训练作业最快的方法是使用 notebook 执行功能,该功能将在 Vertex AI 代管式训练服务上逐个运行 notebook 单元。

notebook 执行功能

启动训练作业后,它将在作业完成后您无法访问的机器上运行。因此,您不希望将 TensorFlow 模型工件保存到本地路径。您想要将其保存到 Google Cloud 的对象存储空间 Cloud Storage 中,以便您可在其中存储图像、csv 文件、txt 文件和保存的模型工件。几乎包括任何类型的内容。

Cloud Storage 涉及“存储分区”的概念,它用于存放数据。您可以通过界面创建存储分区。Cloud Storage 中存储的所有内容都必须包含在存储分区中。在存储分区中,您可以创建文件夹来组织数据。

通过界面创建存储分区

Cloud Storage 中的每个文件都有一个路径,就像本地文件系统上的文件一样,只是 Cloud Storage 路径始终以gs:// 开头

您需要更新训练代码,以便将内容保存到 Cloud Storage 存储分区而非本地路径中。

例如,在这里,我从 model.save('model_ouput"). 更新了 notebook 的最后一个单元,将工件保存到我在项目中创建的名为 nikita-flower-demo-bucket 的存储分区中,而不是保存到本地。

2f976f9a-f609-11ec-ba43-dac502259ad0.png

现在,我们可以启动执行了。

选择“Execute”按钮,为您的执行命名,然后添加 GPU。在“环境”下方,选择 TensorFlow 2.7 GPU 映像。该容器预安装了 TensorFlow 和许多其他数据科学库。

2fa6c242-f609-11ec-ba43-dac502259ad0.png

然后,点击SUBMIT”

您可以在“EXECUTIONS”标签页中跟踪训练作业的状态。作业完成后,您可以在“VIEW RESULT”下查看 notebook 和每个单元的输出,它们存储在 GCS 存储分区中。这意味着,您始终可以将模型运行与执行的代码关联在一起。

2fbb0324-f609-11ec-ba43-dac502259ad0.png

训练完成后,您将能够在存储分区中看到 TensorFlow 保存的模型工件。

2fddc1d4-f609-11ec-ba43-dac502259ad0.png

部署到端点

现在,您已经了解到如何在 Google Cloud 上快速启动无服务器训练作业。但 ML 不仅仅只是用于训练。如果我们不使用模型来实际完成一些任务,那么所有这些工作有什么意义呢?

就像训练一样,我们可以通过调用 model.predict 直接从 notebook 执行预测。但是,如果我们想要获取对大量数据的预测,或在运行中获取低延迟预测,则需要比 notebook 更强大的工具。

让我们回到 Vertex AI Workbench 代管式 notebook。您可以将下面的代码粘贴到一个单元中,该单元会使用 Vertex AI Python SDK 将您刚刚训练的模型部署到 Vertex AI Prediction 服务。将模型部署到端点会将保存的模型工件与物理资源相关联,从而确保低延迟预测。

首先,导入 Vertex AI Python SDK。

Vertex AI Python SDK

然后,将您的模型上传到 Vertex AI Model Registry。您需要为模型命名,并提供一个用于传送的容器映像,这是将用于运行您的预测的环境。Vertex AI 提供了用于传送的预构建容器,在本例中,我们使用的是 TensorFlow 2.8 映像。

Vertex AI Model Registry

预构建容器

您还需要将 artifact_uri 替换为存储保存的模型工件的存储分区路径。对我来说,该路径是“nikita-flower-demo-bucket”。您还需要将 project 替换为您的项目 ID。

然后,将模型部署到端点。我目前使用的是默认值,但如果您想详细了解流量分配和自动扩缩,请务必查看相关文档。请注意,如果您的用例不需要低延迟预测,则无需将模型部署到端点,而是可以使用批量预测功能。

流量分配

自动扩缩

批量预测功能


部署完成后,您可以在控制台中看到您的模型和端点。

30070c60-f609-11ec-ba43-dac502259ad0.png

获取预测

现在,该模型已部署到端点,您可以像使用任何其他 REST 端点一样使用它。也就是说,您可以将模型集成到下游应用中并获取预测。

现在,我们直接在 Workbench 中测试该模型。

首先,打开一个新的 TensorFlow notebook。

3036fda8-f609-11ec-ba43-dac502259ad0.png

在此 notebook 中,导入 Vertex AI Python SDK。

然后,创建端点,替换 project_number 和 endpoit_id。

您可以在 Cloud Console 的“Endpoints”部分找到端点 ID。

304acba8-f609-11ec-ba43-dac502259ad0.png

您可以在控制台首页找到项目编号。注意,该编号与项目 ID 不同。

305c8c76-f609-11ec-ba43-dac502259ad0.png

当您向在线预测服务器发送请求时,HTTP 服务器会接收该请求。HTTP 服务器会从 HTTP 请求内容正文中提取预测请求。提取的预测请求会被转发到传送函数。在线预测的基本格式是数据实例列表。此类列表可以是普通的值列表,也可以是 JSON 对象成员,具体取决于您如何在训练应用中配置输入。

为了测试端点,我首先将一张花卉图像上传到 Workbench 实例。

307deeca-f609-11ec-ba43-dac502259ad0.png

下面的代码使用 PIL 打开图像并调整其大小,然后将其转换为 NumPy 数组。

接下来,我们将 NumPy 数据转换为 float32 类型和列表。我们将其转换为列表,是由于 NumPy 数据不支持 JSON 序列化,因此我们不能在请求的正文中发送这些数据。请注意,不需要将数据扩缩 255,因为该步骤已通过 tf.keras.layers.Rescaling(1./255). 包含在我们的模型架构中。为了避免调整图像的大小,可以将 tf.keras.layers.Resizing 添加到模型中,而不是将其作为 tf.data 流水线的一部分。

然后,调用 predict

所得到的结果是模型的输出,这是一个包含 5 个单元的 softmax 层。看起来索引 2 的类(郁金香)得分最高。

提示:为了节省成本,如果您不打算使用端点,请务必取消部署端点!要取消部署,转到控制台的“Endpoints”部分,选择端点,然后选择“Undeploy model form endpoint”选项。如果需要,您可以随时在未来重新部署。

30b821c6-f609-11ec-ba43-dac502259ad0.png

在更加实际的例子中,您可能希望直接将图像发送到端点,而不是先将其加载到 NumPy 中。如果您想查看相关示例,可以参阅此 notebook 。

开始您的探索吧!

现在您已了解到如何从 notebook 实验过渡到云中部署。有了这一框架,您可以开始思考如何使用 notebooks 和 Vertex AI 构建新的 ML 应用啦。

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4417

    浏览量

    126705
  • Notebook
    +关注

    关注

    0

    文章

    19

    浏览量

    8540
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9358

原文标题:从 notebook 到部署模型的 5 个步骤

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问cortex-M7核单片机主要应用在哪些领域?

    看到st和nxp的M7核单片机,动不动几百兆的主频,有的还要外置DDR,还有的成本低于1刀。想知道这些单片机的目标应用场合是哪些? 单片机发展,51过渡到cortex m3,现在又要从cortex m3过渡到corte m7吗
    发表于 04-17 07:49

    DeepSleep模式过渡到活动模式时,IMO和ECO时钟在唤醒过程中是如何运行的呢?

    我正在使用 CYT2B95。 我在主动模式下使用 ECO 作为 FLL/PLL 参考时钟。 DeepSleep 模式过渡到活动模式时,IMO 和 ECO 时钟在唤醒过程中是如何运行的? 问题 1
    发表于 01-24 07:52

    kofax过渡到基于云的安全打印管理软件

    这就是问题所在:本地打印服务器需要大量的管理工作。相关成本非常高。IT面临着繁重的工作量和耗时的问题,比如及时部署更新——这可能并不总是会发生。这一失误可能会在关键硬件中留下安全漏洞。同时,驱动程序管理也很耗时。
    的头像 发表于 12-26 16:42 415次阅读

    ESP32的接口不能随便用,如何快速从Arduino过渡到ESP32的新手指南-进阶篇

    进阶篇 接续如何快速从Arduino过渡到ESP32的新手指南-基础篇,继续了解ESP32的各种引脚接口吧! 内容介绍 1. SPI引脚 2. I2C引脚 3. UART引脚 4. RTC引脚 5.
    的头像 发表于 12-12 15:54 7570次阅读
    ESP32的接口不能随便用,如何快速从Arduino<b class='flag-5'>过渡到</b>ESP32的新手指南-进阶篇

    英特尔未来2年内将出货超过1亿台AI PC

    格尔辛格表示近年来服务器行业相对平淡,不过随着 AI 的加速发展,AI 行业已经从训练阶段过渡到部署阶段,各行各业都将会围绕着 AI 展开,促进了服务器行业的发展。
    的头像 发表于 11-23 16:13 266次阅读

    如何快速从Arduino过渡到ESP32的新手指南-基础篇

    。 本文将为你提供 从Arduino到ESP32 GPIO引脚平稳过渡的指南 ,让你轻松解决各种问题。 基础篇内容 引脚使用注意事项 电源引脚 ADC引脚 DAC引脚 PWM引脚 Touch引脚 学会
    的头像 发表于 11-21 08:36 999次阅读
    如何快速从Arduino<b class='flag-5'>过渡到</b>ESP32的新手指南-基础篇

    什么是 Jupyter Notebook

    Jupyter Notebook 是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码、数学方程、可视化和 Markdown,其用途包括数据清理和转换、数值模拟、统计建模、机器学习
    的头像 发表于 10-16 11:15 1903次阅读
    什么是 Jupyter <b class='flag-5'>Notebook</b>

    从硬件定义汽车过渡到软件定义汽车的主要趋势

    耦合。2.0阶段标志着用例和软件应用程序呈指数级增长的过渡阶段。3.0阶段是终局,这时的汽车主要由软件设置来定义,从而达到完全可编程状态[1]。这听起来像是一种自然进化,但也意味着有若干挑战需要面对。毕竟,我们讨论的不是手机,而是一种具有潜在危险性、技术高度复杂且生命周期可能长达数十年的可移动物体。
    的头像 发表于 09-22 15:40 559次阅读
    从硬件定义汽车<b class='flag-5'>过渡到</b>软件定义汽车的主要趋势

    赛门铁克在Oracle云中实现安全性

    电子发烧友网站提供《赛门铁克在Oracle云中实现安全性.pdf》资料免费下载
    发表于 09-07 10:21 0次下载
    赛门铁克在Oracle<b class='flag-5'>云中</b>实现安全性

    STM32L4系统架构及移植介绍

    STM32L0轻松过渡到STM32L4: •VLCD被VBAT取代(VLCD现在与PC3多路复用) •PH9/PH10被VSS/VDD取代 •引脚73和75交换(VDD/VDDUSB) •引脚功能映射接近100%兼容通用功能
    发表于 09-07 07:38

    在OpenVINO trade笔记本电脑上导入notebook_utils时报错怎么解决?

    在导入 notebook_utils时遇到错误: ERROR: Import \"notebook_utils\" could not be resolvedPylancereportMissingImports
    发表于 08-15 06:37

    如何在RDKx3部署docker镜像?

    一种在RDKx3部署docker镜像跑tros历程的方法 为了保持主系统环境干净整洁,有在docker中部署代码的习惯。 docker pull ningcong/rdkx3:v0.1 在资源中心
    发表于 08-02 11:02

    Jupyter Notebook 7重磅发布,新增多个特性!

    Jupyter Notebook 7新增了来自JupyterLab的交互式调试器 (interactive debugger),它使您能够逐个代码单元格地执行代码,也可以设置断点并检查变量。
    的头像 发表于 08-01 15:01 837次阅读
    Jupyter <b class='flag-5'>Notebook</b> 7重磅发布,新增多个特性!

    超越X86 AWS自研Arm芯片正式走向HPC

    当谈到在云中部署 Arm 时,最近的很多讨论都集中在效率、核心密度或性能可预测性等方面。
    发表于 06-27 17:29 355次阅读
    超越X86 AWS自研Arm芯片正式走向HPC

    ipv4中ip分为几类 ipv4到ipv6的过渡技术有哪些

    双协议栈:即在IPv4和IPv6之间同时部署一个双协议栈,使得IPv4和IPv6可以共存。双协议栈过渡技术适用于IPv4和IPv6共存的情况,可以平滑过渡到IPv6,但需要占用更多的地址空间和网络带宽。
    发表于 05-15 18:15 2427次阅读