杜克大学大规模云计算、数据工程与机器学习笔记(六) 📅 2026/8/10 6:29:46 在我的“边缘计算机视觉”相关代码中有大量此类示例。在AWS文档中也能找到很多编程调用案例。与其他云服务商的对比上一节我们介绍了AWS Rekognition的基本使用和API调用本节我们来对比一下不同云服务商的计算机视觉解决方案。以下是Google Cloud和Microsoft Azure的典型工作流程上传图像至云端。服务自动训练一个定制化模型。用户可以直接使用训练好的模型或将其下载到本地。特别值得一提的是Google的解决方案对本地模式有非常好的支持。而AWS的方案则侧重于用户将图像放入指定的S3存储桶中然后服务对该存储桶中的内容进行转换和标签检测。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_6.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_7.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_6.png总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a28c34c42ea277ed5b1b231d4703b1f0_7.png本节课我们一起学习了AWS Rekognition计算机视觉服务。我们了解了其无需自定义模型训练、通过拖拽或API即可进行图像分析的核心特点并通过对象检测实例演示了其使用过程。最后我们对比了AWS、Google Cloud和Azure在计算机视觉服务上不同的侧重点和工作流程认识到AWS方案在基于存储桶的批量处理方面具有优势。135GCP自动机器学习与自然语言处理https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_0.png在本节课中我们将学习如何利用Google Cloud PlatformGCP的云函数Cloud Functions和AI API构建一个能够执行自然语言处理NLP操作的生产级Web服务。我们将从创建一个简单的“Hello World”函数开始逐步将其扩展为一个能够调用维基百科API和GCP翻译服务的复杂应用。概述GCP的云函数允许开发者无需管理服务器即可部署代码。我们将创建一个云函数它首先作为一个简单的回声服务然后集成GCP的自然语言处理API实现从维基百科获取内容并自动翻译的功能。创建基础云函数上一节我们介绍了GCP云服务的概念本节中我们来看看如何创建一个基础的云函数端点。首先在GCP控制台中创建函数。我们将其命名为类似hello-serverless的名称。创建时需要指定一个运行时环境例如Python。系统会提示设置一个入口点这意味着当Web服务被远程调用时将首先执行这个函数。以下是创建函数的核心步骤代码框架# 这是一个云函数的基本结构defhello_serverless(request):# 函数逻辑将在这里编写returnResponse创建完成后GCP会提供一个唯一的URL端点全球用户都可以通过此URL访问该服务。测试与调用函数函数部署后我们可以立即进行测试。测试有两种主要方式通过控制台测试在GCP控制台的函数详情页有一个“测试”标签页。我们可以手动输入JSON格式的载荷Payload来触发函数。通过命令行调用使用gcloud命令行工具可以更灵活地从终端调用函数。例如通过命令行调用的格式如下gcloud functions call hello-serverless --data ‘{“message”: “Hello from Shell”}’通过测试我们确认函数可以接收请求并返回响应这构成了一个可用的Web服务基础。集成AI API构建复杂应用我们已经有了一个可工作的Web服务现在可以为其添加更强大的功能。接下来我们将把GCP的自然语言处理NLPAPI集成到云函数中。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_2.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_4.png我们将修改函数代码使其能够接收一个实体名称如“Google”、目标语言和句子数量作为输入。调用维基百科API获取该实体的摘要文本。使用GCP的翻译API将摘要翻译成目标语言。返回翻译后的结果。以下是实现此功能的核心代码逻辑fromgoogle.cloudimporttranslate_v2astranslateimportwikipediadeftranslate_wikipedia(request):request_jsonrequest.get_json()entityrequest_json[‘entity’]languagerequest_json[‘language’]sentencesrequest_json[‘sentences’]# 获取维基百科内容summarywikipedia.summary(entity,sentencessentences)# 使用GCP进行翻译translate_clienttranslate.Client()resulttranslate_client.translate(summary,target_languagelanguage)returnresult[‘translatedText’]部署这个新函数后我们再次通过控制台或命令行进行测试。例如我们可以请求将“Facebook”的维基百科摘要翻译成西班牙语。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_6.png通过这种方式我们快速构建了一个功能完整的、可扩展的NLP微服务而无需关心服务器运维、扩展性或网络基础设施。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_8.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/6e1da672b5eb32662723de1fef690ef2_10.png本节课中我们一起学习了如何利用GCP云函数构建无服务器应用。我们从创建一个简单的回声服务开始逐步将其增强为一个集成了外部API维基百科和GCP核心AI服务翻译API的复杂自然语言处理管道。整个过程展示了云函数的强大之处开发者只需专注于业务逻辑代码即可快速部署出健壮、可扩展的生产级服务。136GCP自动机器学习计算机视觉https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_0.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_2.png在本节课中我们将要学习Google Cloud PlatformGCP上的自动机器学习AutoML计算机视觉功能。我们将了解如何创建数据集、训练模型并探讨将模型部署到云端或移动设备边缘的两种主要方式。概述GCP提供了强大的自动机器学习计算机视觉能力。通过AutoML Vision用户可以轻松创建自定义的图像分类模型而无需深厚的机器学习专业知识。创建数据集首先我们需要创建一个数据集来训练模型。以下是创建数据集的步骤。在GCP的AutoML界面中点击“新建数据集”。你可以选择任务类型例如“单标签分类”。这种分类适用于为每张图像分配一个标签的场景比如区分“猫”或“狗”。接下来你需要提供训练数据。有两种主要方式从本地上传图像文件。提供一个CSV文件该文件指向存储在Google Cloud Storage中的一批图像。数据格式示例如下在CSV文件中每一行包含一个指向图像的URI例如gs://my-bucket/cat.jpg和对应的标签例如cat。你需要同时准备训练数据和测试数据。上传完成后所有数据会被存储起来。浏览与可视化数据上一节我们介绍了如何创建和上传数据集本节中我们来看看如何浏览这些数据。上传图像后你可以在界面中查看所有已上传的图像。该界面提供了优秀的可视化功能允许你通过筛选器切换来浏览不同类别的数据。这有助于在训练前直观地检查数据质量。训练模型浏览完数据后下一步就是训练模型。点击“训练”按钮即可开始训练一个新模型。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_4.png在训练设置中你有两个关键的部署选择云端部署模型将托管在GCP云上。如果你希望构建一个接收用户输入并进行预测的在线服务这是完全可行的选择。边缘部署模型可以下载并部署到移动设备等边缘设备上运行。模型部署选项边缘部署https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_6.png边缘部署的优势在于模型可以离线运行在终端设备上。在训练完成后进入“测试与使用”环节你可以直接下载模型文件。例如你可以选择“Android Quickstart”选项通过点击按钮在云端完成训练然后将模型下载并部署到物理安卓设备上。这种方式的最大优点是代码量极少最终你可以将训练好的模型直接集成到移动应用中。云端部署另一种选择是云端部署。如果选择将模型部署在云端在“测试与使用”环节系统会为你提供一个可调用的API端点。虽然调用它会启动服务器并产生费用但之后你就可以让用户通过这个端点提交数据例如手写样本图片。这意味着你可以将图像数据提交到Cloud Vision API点击训练后系统会快速启动一个端点。之后你的应用程序只需调用该端点并传入图像数据就能获得预测结果从而为计算机视觉应用构建一个完整的端到端流程。功能核心自定义训练无论是边缘还是云端部署AutoML Vision的核心功能都允许你从零开始使用自己的数据来定制和训练模型。这为你提供了高度的灵活性和所有权使得解决方案能完美契合你的特定业务需求。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_8.png总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/4d1b64d00b593d3705d715acfb61c722_10.png本节课中我们一起学习了GCP AutoML计算机视觉的基本工作流程。我们了解了如何创建数据集、可视化数据、训练模型并重点探讨了将模型部署到“边缘”设备或“云端”的两种不同方式及其适用场景。整个过程旨在降低机器学习应用的门槛实现低代码甚至无代码的模型开发与部署。137Azure自动机器学习AI预测 https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_0.png在本节课中我们将学习如何使用Azure机器学习服务中的自动机器学习功能来快速构建一个预测模型。我们将以一个NBA球员数据集为例预测球员的薪资并探索模型给出的有趣洞察。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_2.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_4.png访问Azure机器学习服务首先我们需要进入Azure门户。在主页找到并进入“机器学习”服务。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_6.png进入机器学习工作区后我们可以启动工作室。在工作室中有一个名为“自动ML”的功能我们将从这里开始。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_8.png准备与上传数据为了演示我将使用一个包含NBA球员信息的公开数据集。这个数据集包含球员、位置、三分球命中数、薪资以及维基百科页面浏览量等信息。以下是数据准备步骤下载数据集文件。在自动ML界面中点击“新建自动ML运行”。选择“从本地文件”创建数据集。将数据集命名为“NBA_salary”并选择“表格数据”类型。上传文件并使用文件第一行作为列标题。确认数据架构后创建数据集。上传完成后我们可以浏览数据集查看各列的统计摘要例如缺失值数量和数据分布。这有助于我们快速了解数据质量。配置并运行回归预测实验上一节我们准备好了数据本节中我们来看看如何配置一个预测任务。我们的目标是预测球员的薪资一个连续数值因此这是一个回归问题。以下是创建回归实验的步骤选择我们刚创建的“NBA_salary”数据集。点击“下一步”创建一个新实验命名为“predict_salary”。在配置中选择“salary”列作为我们要预测的目标。选择一个计算集群来运行实验。在任务类型中选择“回归”因为薪资是连续数值。点击“完成”开始自动训练。自动ML将自动尝试多种回归算法如决策树、随机森林、梯度提升等并组合成集成模型以找到最佳预测方案。分析模型结果与洞察实验运行完成后我们可以查看结果。系统会展示性能最佳的模型通常是一个“投票集成”模型。我们来看一下关键评估指标R平方约为56%说明模型能解释薪资变异的56%这是一个不错的结果。平均绝对误差约为3百万美元这是预测值与实际值的平均差距。但更有趣的是模型提供的特征重要性解释。它告诉我们哪些因素对预测薪资影响最大罚球命中率这是最重要的特征但可能并不直观。年龄第二重要的特征。上场时间比较符合直觉。防守篮板和社交媒体影响力令人惊讶的是Twitter粉丝数和维基百科页面浏览量比投篮尝试次数更重要。通过分析特征贡献我们发现罚球命中率与薪资呈正相关即罚球越准薪资倾向于越高。年龄对薪资的影响有正有负分布相对均衡。社交媒体影响力页面浏览量对薪资有显著的正面影响。这些洞察可能对球员经纪人很有价值例如他们可以建议球员重点提升罚球命中率和社交媒体曝光度。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_10.png通过代码调用模型https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_12.png上一节我们分析了模型结果本节中我们来看看如何通过编程方式与训练好的实验进行交互。我们可以使用Azure Machine Learning Python SDK来列出实验或部署模型为API。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_14.png以下是一个示例代码框架展示如何连接到工作区并列出实验# 导入必要的库fromazureml.coreimportWorkspacefromazureml.core.experimentimportExperiment# 从配置文件加载工作区wsWorkspace.from_config()# 列出工作区中的所有实验experiment_listExperiment.list(ws)forexpinexperiment_list:print(exp.name)# 假设我们的实验名为 predict_salary可以获取它salary_experimentExperiment(ws,namepredict_salary)# 接下来可以获取实验中的最佳运行并部署为Web服务等https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_16.png通过这种方式我们可以将训练好的模型集成到自己的应用程序例如Flask Web应用中实现自动化的预测流程。扩展实验尝试其他预测任务自动ML的灵活性在于可以快速针对不同目标进行实验。我们可以用同一份数据尝试预测其他变量。以下是两个额外的实验思路预测页面浏览量创建一个名为“predict_page_views”的新实验选择“page_views”作为目标列同样使用回归任务。这可以预测哪位球员最受公众关注。预测球员位置创建一个名为“position_prediction”的新实验选择“position”作为目标列。由于位置是类别如后卫、前锋这次我们选择分类任务。启动这些实验后自动ML会分别为我们构建合适的模型。这样无需手动编写和调优大量代码我们就能探索数据中多种不同的关系。总结本节课中我们一起学习了Azure自动机器学习的核心工作流程。我们从上传NBA数据集开始配置并运行了一个回归模型来预测球员薪资。通过分析结果我们获得了关于影响薪资因素的有趣洞察例如罚球命中率和社交媒体影响力的重要性。最后我们还了解了如何通过Python SDK以编程方式与实验交互并扩展了实验以尝试分类等其他预测任务。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_18.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/75a7bbef7b6a0048047f4df76241a480_19.png自动机器学习大大降低了机器学习的入门门槛让数据科学家和开发者能快速构建、评估和部署有效的预测模型。138Azure自动机器学习计算机视觉https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_0.png在本节课中我们将要学习Azure平台上的计算机视觉服务特别是其“自定义视觉”功能。我们将了解它如何与之前介绍的Google Cloud服务类似帮助用户无需深厚机器学习知识即可构建和训练图像识别模型。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_2.png概述https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_4.pngAzure提供了名为“认知服务”的套件其中包含实现计算机视觉自动化的功能。这项服务允许开发者便捷地构建视觉AI模型。Azure自定义视觉服务https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_6.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_7.png上一节我们介绍了云平台提供自动化机器学习工具的普遍概念。本节中我们来看看Azure的具体实现。Azure的计算机视觉API服务中有一个与Google Cloud的“自定义视觉”类似的功能同样名为“自定义视觉”。该服务承诺能在数分钟内创建一个模型。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_9.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_10.png其使用流程与在Google Cloud上进行操作基本相同。以下是使用Azure自定义视觉的核心步骤创建模型。上传用于训练的图像数据。为图像添加标签。点击按钮开始训练模型。使用训练好的模型进行预测。从界面来看Azure自定义视觉与Google Cloud的服务非常相似。用户上传图像、进行标注然后通过“训练”按钮启动模型训练过程最后可进行预测验证。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_12.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/a41223e709b233e253730c3cf00160c3_13.png本节课中我们一起学习了Azure的计算机视觉服务。我们了解到Azure通过其“自定义视觉”服务提供了与Google Cloud类似的、流程化的图像模型构建与训练功能使得自动化计算机视觉模型的开发变得简单高效。139云应用核心组件回顾 https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/dc33e7ceb460c548a6f651c087098463_0.png在本节课中我们将回顾构建现代云应用特别是机器学习应用时所需的核心组件。我们将这些组件比作烹饪的四种关键原料并了解如何将它们组合起来。上一节我们讨论了云计算的宏观架构本节中我们来看看构成具体应用的核心要素。想象你是一位主厨。要构建一个功能完整的现代云应用你至少需要准备好以下四种“原料”以下是构建云应用所需的四个核心组件列表DevOps这代表开发与运维的实践与工具链用于实现应用的自动化构建、测试、部署和监控。PaaS基础设施服务这是推荐的基础平台它提供了运行应用所需的计算、网络和存储环境开发者无需管理底层服务器。AI API或高级服务对于机器学习应用这指用于模型训练、推理或特定AI能力如视觉、语言识别的托管服务。平台服务当你需要持久化存储数据时应使用的数据库、数据仓库或其他数据管理服务。在应用开发的初始阶段你可以从PaaS和AI API开始。当你进展到需要存储和管理数据时就应引入平台服务。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/dc33e7ceb460c548a6f651c087098463_2.png本节课中我们一起学习了构建云应用尤其是机器学习应用的四个核心组件DevOps、PaaS基础设施服务、AI API和平台服务。理解并合理组合这些组件是成功在云端构建和部署应用的关键。140开发API的步骤https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_0.png在本节课中我们将要学习如何为Web服务开发API包括如何接收用户数据、如何部署服务以及如何通过工具如Postman来测试和规划后端功能而无需过早构建前端界面。概述如果你有一个Web服务你如何将数据传递给用户又如何处理用户的数据在我的职业生涯中我通常会构建一个Web服务。这个Web服务正如我们刚才讨论的可以基于Flask框架来构建。然后你需要做的就是将它部署到某个平台上。部署Web服务上一节我们介绍了构建Web服务的概念本节中我们来看看如何将其部署到云端。你可以将服务部署到任何云平台上。以下是几个主要的部署选项GCP通过App Engine部署。Azure通过App Services部署。AWS通过Elastic Beanstalk部署。这些都是部署Web服务的优秀方式。接收用户输入部署好服务后你可能会问如何实际获取用户的输入呢方法是为你的Flask服务添加一个POST方法。这是一个HTTP Web服务。HTTP Web服务有几个与之关联的“动词”或称方法。动词是你可以对特定路由执行的操作。最常见的两个动词是GET和POST。GET意味着你将接收数据。POST意味着你将向Web服务发送数据。要获取用户输入你只需要在Flask中创建一个路由并指定它只接受POST方法。例如你可以创建一个路由/input。用户将把内容“发布”到这个Web服务地址。这个过程可以分为两个阶段来理解。第一阶段计算机交互当你构建这类Web服务时你实际上是在构建一个让计算机能与你的服务交互的接口。你告诉计算机它将接收特定类型的JSON负载。这个JSON负载可以包含各种数据例如一张图片。{image:file.png}Web服务接收到这个图像后可以将其传递给你正在进行的任何处理流程比如图像识别。第二阶段人类交互然而普通用户通常不知道如何调用Web服务并放入JSON负载因为这需要使用POST方法发送数据。因此人们通常的做法是构建一个与后端交互的应用程序。这个应用程序可以是网页也可以是移动应用。无论是哪种形式它们的作用都是“包装”那个输入端点。例如应用程序会提供一个表单来提示用户输入数据用户将数据填入表单后表单数据会被发送到Web服务服务处理后再将结果返回。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_2.png所以关键的区别在于你需要Flask服务来处理逻辑之后如果你想让人类用户与之交互你还需要某种应用程序比如我们讨论过的单页Web应用、iOS或Android应用。开发流程建议https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_4.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_5.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_6.png我的建议是采用以下开发场景你完全可以先构建整个后端在构建任何图形用户界面之前就定义好所有的URL接口。我认为这样做实际上更好。但如果你与业务人员合作他们很多时候会强迫你先做界面这实际上非常危险。他们会对“让网站或应用看起来漂亮”的部分感到兴奋却不了解背后的技术顺序。这就像先粉刷墙壁但如果顺序错了你可能不得不拆掉墙壁来铺设管道。因此最好专注于明确你的应用程序要做什么然后先定义和调用这些API端点。你可能知道有一个叫Postman的服务它是一个非常好的工具能帮助你组织开发步骤。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_8.png无论你是构建电子商务公司、体育社交网络、推荐引擎还是其他任何东西如果你按部就班地开发可以使用像Postman这样的工具。你可以用它来收集所有的API端点。例如你可以模拟前端的行为向这些应用发送请求如cURL命令而无需实际编写前端代码。你可以收集一系列这样的操作。我的建议是如果你正在构建一个产品级应用并希望它成为一个软件即服务应用你应该首先使用Postman这样的工具来规划和测试。你可以创建一个新项目添加一个集合然后在集合中定义各种路由并调用它们。我认为在初期使用Postman比直接构建前端或移动应用更好因为这是“让它先工作”的阶段你需要确保能够完整地测试和运行你的后端逻辑。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/bfbc9876ad1626389eeddd25f9a6f35d_10.png本节课中我们一起学习了开发API的关键步骤。我们首先讨论了如何将基于Flask的Web服务部署到各大云平台。接着我们深入探讨了如何通过POST方法和特定路由来接收用户输入并区分了计算机直接交互与通过前端应用进行人类交互的不同场景。最后我们强调了先定义和测试后端API、再构建前端的开发流程的重要性并介绍了使用Postman工具来规划和测试API端点的最佳实践。遵循这些步骤可以帮助你更稳健、高效地构建可扩展的云计算解决方案。141使用Flask构建机器学习后端服务 https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_0.png在本节课中我们将学习如何从零开始为一个机器学习公司构建一个最小可行、可用于生产的后端服务。我们将以Flask框架为例规划出核心的API端点并讨论从后端到前端的完整开发流程。概述假设你需要从头构建一个机器学习公司。首要任务是确定需要构建的最小功能集合。一个基于Flask框架的后端服务是一个不错的起点。第一步规划核心后端端点 ️上一节我们提出了构建后端服务的想法本节中我们来看看具体需要哪些核心API端点。一个基础的机器学习后端服务至少需要以下几个端点。以下是构建一个简单但功能完整的后端服务所需的端点列表认证端点 (/auth): 此端点负责验证用户是否拥有有效账户。其实现可以与外部服务集成例如AWS Cognito或Firebase。用户通过此端点登录后才能访问其他受保护的资源。授权端点 (/authz): 此端点与认证服务如Cognito协同工作用于确定已登录用户可以访问哪些资源。例如它可以区分普通用户和管理员admin的权限。预测端点 (/predict): 这是服务的核心功能端点。以手写数字识别为例该端点接收图像作为输入运行机器学习模型进行预测并将结果例如识别的数字名称如name: 1返回给用户。注册端点 (/register): 允许新用户创建账户。同样可以集成Cognito等服务来处理用户注册流程。登出端点 (/logout): 用于处理用户会话的终止。通过构建这四到五个端点你就拥有了一个可运行的后端服务。用户可以注册、登录、使用预测功能然后登出。这是一个非常精简但可用于生产环境的后端架构。第二步使用Postman测试与持续交付 在第一步中我们规划了后端蓝图本节中我们来看看如何确保其可靠运行。在着手开发任何前端界面如单页Web应用或另一个Flask前端之前我的个人建议是不要先做那个。首先你应该使用像Postman这样的工具来测试你的API。确保每个端点都能被正确调用并且按预期返回结果。这是验证后端逻辑是否有效的关键步骤。同时第一步的实现过程隐含着另一个重要实践持续交付。我们之前讨论过它的重要性。这意味着每次你提交代码时都应该有自动化流程来检查代码风格、运行测试。我会将精力集中在这方面虽然需要一些前期工作但它能确保服务的稳定性和质量。第三步构建前端界面 如果你已经完成了第二步确保后端服务通过Postman测试并能稳定工作那么就可以进入第三步构建前端界面。此时前端可以是任何你想要的形态。事实上有些公司甚至不优先考虑Web端。例如微信WeChat就更侧重于移动端优先的策略。你可以选择开发移动应用或者构建Web应用。关键在于现在你拥有了一个坚实、可调用的后端服务前端可以自由地通过API与之交互。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_2.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/fac98dde3cce1d221e37e17400c97e32_4.png本节课中我们一起学习了构建机器学习后端服务的三步法。首先我们使用Flask规划了核心的认证、授权、预测等API端点。接着我们强调了使用Postman进行API测试和建立持续交付流程的重要性这是确保后端健壮性的关键。最后在拥有可靠的后端服务之后我们再根据需求选择开发Web或移动端前端界面。这个流程帮助我们从零开始系统地搭建一个可扩展的机器学习应用。142构建专业Web服务清单 https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_0.png在本节课中我们将学习如何构建一个专业的Web服务。核心在于建立一个系统化的检查清单以确保服务的自动化部署、弹性伸缩、监控与测试等关键环节都得到妥善处理。专业Web服务的检查清单构建专业Web服务时你需要一份检查清单。这份清单确保服务在开发、部署和运维的各个环节都符合高标准。以下是构建专业Web服务时必须考虑的关键项目自动化部署流程你必须拥有一个自动化的部署流程。这是专业云开发的必备条件。测试与代码检查你需要建立测试和代码检查机制。这非常重要且功能强大。弹性伸缩能力你需要确保你的服务具备弹性伸缩能力。监控与日志记录你需要添加监控和日志记录功能。例如当服务出现问题时你如何能及时知晓。上一节我们介绍了专业Web服务的核心检查项目本节中我们来看看如何将这些项目融入一个具体的工作流程。核心工作流程不要猜测始终验证核心建议是采用以下工作流程。在弹性方面我们的原则是不要猜测始终验证。猜测会让你陷入麻烦。具体流程如下代码提交开发者将代码提交到GitHub仓库。自动化部署与检查代码提交后系统自动将其部署到云端。在此过程中系统会执行代码检查、运行测试等任务。触发定期负载测试部署完成后我建议触发一个定期例如每晚的测试。这可以通过两种服务实现Loader.ioLocust你为什么要这样做因为任何事情都可能发生。即使你使用的是可以自动伸缩的平台即服务工具也不要猜测其表现。这就像你家里需要安装烟雾报警器一样——你不能假设今天安全明天就一定安全。因此在预发布环境中设置一个夜间负载测试可以验证你的应用性能而不是仅仅猜测它运行良好。如果你同时配置了像AWS CloudWatch这样的监控和日志服务你就能更好地掌握应用状态。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_2.png负载测试工具示例以下是两个可用于实施夜间负载测试的工具示例。示例一Flask Locust这里有一个使用Flask和Locust的示例。这是一个很好的参考展示了你可以如何实现。本质上你可以添加一个非常简单的测试来确保应用不会在负载下崩溃。部署过程中的测试可能关注业务逻辑而这种负载测试是更高层次的验证。为什么不设置它在夜间自动运行呢示例二Loader.io另一个我使用过的工具是Loader.io。我非常喜欢这个简单的基于云的负载测试工具。它的工作方式是你登录后可以配置测试让它发送大量请求。你可以安排它在夜间运行。测试完成后它会生成图表显示你的应用实际能处理多少流量。它基本上和前面提到的Flask Locust工具做同样的事情发起大量请求来测试你的应用。核心原则总结这不是一个二选一的问题。即使你构建在具有优秀弹性能力的服务之上你仍然需要验证它。我的建议是在预发布环境中设置夜间测试这样你就能始终了解你应用程序的性能能力。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_4.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_6.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/duke-lgscl-cldcomp-dtengi-ml/img/b6ff5921aa6fbd9fe33b50e3fa7b8424_7.png本节课中我们一起学习了构建专业Web服务的核心检查清单并探讨了通过自动化工作流程和定期负载测试来“验证而非猜测”服务性能的重要性。掌握这些实践是确保Web服务具备专业性、可靠性和可扩展性的关键。