[云] 创建 Docker 镜像,将其推送到 Amazon Elastic Container Registry (ECR),并对已部署的应用程序进行负载测试

在此作业中,您将学习如何使用 AWS Lambda 和 API Gateway 将机器学习模型部署为无服务器应用程序。您将创建 Docker 镜像,将其推送到 Amazon Elastic Container Registry (ECR),并对已部署的应用程序进行负载测试。此外,您还将分析与无服务器函数相关的冷启动现象

我们将使用著名的 IRIS 数据集来简化机器学习模型,使其更专注于无服务器部署过程。该数据集包含四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度,并将样本分类为三类:Iris Setosa、Iris Versicolour 和 Iris Virginica。

 

具体来说,就是通过 AWS 的一些服务(比如 Lambda 和 API Gateway)来实现模型的预测功能。让我用更通俗的方式解释这些

步骤:

  1. Lambda 函数开发
    你需要编写一个核心函数 lambda_handler,这个函数负责接收从外部传来的输入数据(比如花萼和花瓣的长度和宽度等),然后用这个数据调用已经给你的 predict 函数(这个函数用的是你训练好的模型),最后把模型的预测结果返回给调用者。

    简单来说,这个步骤的任务是:写一个函数接收输入、调用模型、返回结果。

  2. 环境设置
    为了能完成开发和测试,你需要把开发环境设置好,确保自己的电脑上有几个关键工具:

    简单来说,这部分的要求就是让你安装好开发所需的工具,确保能顺利完成后续工作。

    • Docker:用于打包你的程序和模型,让它们可以在任何地方运行。
    • AWS CLI:这是用来和 AWS 进行通信的工具,比如上传代码、创建资源等。
    • Python 和 pip:Python 是用来开发代码的语言,pip 是它的包管理工具,确保你能安装需要的库。
    • Git(可选):方便管理代码版本和共享代码。
  3. Docker 镜像创建
    你需要创建一个 Docker 镜像,这个镜像是一个完整的“包裹”,里面包含你的代码、模型以及所有需要的环境。打包好后,它可以在任何支持 Docker 的地方运行,比如 AWS Lambda。

    通俗点讲,这个步骤就是把你的程序“打包”成一个可以在任何机器上运行的小盒子。

  4. ECR 仓库设置
    你需要在 AWS 上创建一个 ECR(Elastic Container Registry)仓库,这个仓库就像一个存放 Docker 镜像的地方。你把打包好的 Docker 镜像上传到这个仓库后,AWS Lambda 才能使用这个镜像运行你的预测模型。

    通俗来说,就是你得先把打包好的“盒子”放到 AWS 的仓库里,Lambda 才能拿来用。

  5. Lambda 函数创建
    接着,你要在 AWS Lambda 上创建一个函数,它会使用你上传的 Docker 镜像作为它的运行环境。这个函数就是你之前写的 lambda_handler,负责接收数据、调用模型、返回预测结果。

    这一步就是在 AWS 上“安装”你写好的模型程序,让它可以对外提供预测服务。

  6. API Gateway 配置
    为了让外界能够访问你的 Lambda 函数,你需要配置一个 API Gateway。API Gateway 就像一个“门口”,外部的请求通过这个门进来,访问 Lambda 函数,得到预测结果。

    通俗来说,这一步就是给你的预测服务配一个“入口”,方便别人访问。

  7. 负载测试与分析
    你需要使用 Locust 这款工具来进行负载测试,看看你的预测服务在不同情况下的表现,比如在高并发下会不会变慢。另外,你需要分析冷启动现象,也就是当 Lambda 函数刚启动时的响应速度和它连续运行时的响应速度有什么区别。

    这部分的要求是对你的服务进行测试,看它能处理多少请求,速度如何,以及分析第一次运行(冷启动)和后续请求(热请求)之间的差异。

1. Lambda 函数开发

你需要实现一个核心函数 lambda_handler,它的作用是接收从事件传来的输入数据,然后调用模型进行预测,最后返回预测结果。

具体步骤:

  • 提取输入值:从传入的事件中获取预测所需的特征值。事件中的数据是 JSON 格式,需要将其解析为 Python 数据结构,并确保处理可能的错误情况(例如输入缺失或无效 JSON 数据)。
  • 调用 predict 函数:把提取到的特征值传给已经提供的 predict 函数,predict 会返回预测结果(如分类为哪种 Iris 花的类型)。
  • 返回结果:将预测结果以 JSON 格式返回给调用方。

你可以使用模拟的输入数据在 AWS Lambda 控制台上进行测试。

2. 环境设置

这一步是为了设置开发环境,确保你有完成任务所需的工具:

  • Docker:用于创建和运行容器,封装你的应用程序及其依赖项。
  • AWS CLI:用于与 AWS 交互,例如创建资源、推送 Docker 镜像等。
  • Python 3 和 pip:开发语言和包管理工具,确保你可以安装所需的 Python 库。
  • Git(可选):用于版本控制,方便管理代码。

确保你正确配置了 AWS 凭证,这样你的本地环境可以连接到 AWS。

3. Docker 镜像创建

你需要创建一个 Docker 镜像,把你的代码和模型封装到这个镜像中,然后在本地运行以确保它正常工作。

  • 构建镜像:通过 docker build -t iris_image . 命令构建 Docker 镜像。
  • 运行容器:使用 docker run -it --rm -p 8080:8080 iris_image:latest 来在本地启动容器,并映射端口 8080。
  • 测试镜像:通过执行测试文件 test.py,验证镜像是否正常工作。

4. ECR 仓库设置

为了让 AWS Lambda 使用你创建的 Docker 镜像,你需要把镜像上传到 AWS 的 ECR(Elastic Container Registry)仓库。

  • 创建仓库:使用 aws ecr create-repository --repository-name iris-registry 命令创建 ECR 仓库。
  • 登录 ECR:使用命令登录 ECR 仓库,允许 Docker 客户端与 ECR 交互。
  • 推送镜像:先给镜像打标签,然后推送到 ECR 仓库,以便 AWS Lambda 可以使用。

5. Lambda 函数创建

在 AWS 控制台上,你需要通过容器镜像创建一个 Lambda 函数,选择已经创建的 Docker 镜像作为函数的运行环境,并指定执行角色(LabRole),确保 Lambda 函数可以正确运行。

6. API Gateway 配置

你需要使用 API Gateway 为你的 Lambda 函数创建一个 REST API,这样外部用户可以通过这个 API 发送请求进行预测。

  • 测试 API:使用 curl 或 Windows 的 Invoke-WebRequest 来模拟发送请求,测试 API 是否能返回正确的预测结果。

7. 负载测试与分析

为了确保你的 API 在高并发场景下依然表现良好,你需要使用 Locust 进行负载测试,并分析冷启动与热请求的响应时间差异。

  • 负载测试:使用 Locust 工具向 API 发送大量请求,模拟多个用户同时访问,评估 API 的性能。你需要运行 locustfile.py 脚本,指定 API 的地址和测试参数。
  • 分析:在 Google Colab 上使用提供的性能分析 notebook,上传测试日志,生成冷启动和热请求的响应时间图表,并分析它们的差异。你需要提供线性图、冷启动响应时间的直方图、热请求响应时间的直方图,并为分析结果提供清晰的解释。

总结:这部分的要求是一步步引导你把机器学习模型通过 AWS 部署成无服务器应用,并且通过负载测试评估 API 的性能,尤其是冷启动现象的影响。

CSC4160 作业 3:

使用 AWS Lambda 和冷启动性能分析的模型服务 (6 分) 

概述 在这个作业中,你将学习如何使用 AWS Lambda 和 API Gateway 将机器学习模型部署为无服务器应用程序。你将创建 Docker 镜像,将它们推送到 Amazon Elastic Container Registry (ECR),并对你的部署应用程序进行负载测试。此外,你还将分析与无服务器函数相关的冷启动现象。

我们将使用著名的 IRIS 数据集,以保持机器学习模型简单,专注于无服务器部署过程。该数据集包括四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度,并将样本分类为三个类别:Iris Setosa、Iris Versicolour 和 Iris Virginica。

组件 Lambda 函数开发

实现 lambda_handler 函数。 环境设置

设置你的本地开发环境。 Docker 镜像创建

制作一个 Docker 镜像,该镜像将使用训练好的模型生成预测。 ECR 仓库设置

创建一个 AWS ECR 仓库,并将你的 Docker 镜像推送到 AWS ECR。 在 AWS 控制台中创建 Lambda 函数

使用容器镜像创建 Lambda 函数。 API Gateway 配置

使用 API 网关访问预测 API 负载测试和分析

使用 Locust 对你的部署 API 进行负载测试。 绘制结果以观察冷启动趋势。 分析冷启动和热请求响应时间之间的差异。 说明

  1. Lambda 函数开发 你将获得 predict 函数和模型文件;你的任务是实现 lambda_handler 函数。

lambda_handler 函数执行以下任务:

提取值:它从传入的事件中检索用于进行预测的特征值。 调用 predict 函数:它调用 predict 函数,传递提取的值以根据机器学习模型生成预测。 返回预测结果:最后,它将预测结果格式化为 JSON 响应并返回给调用者。 实现 lambda_handler 的步骤 测试函数 2. 环境设置 在你的机器上设置本地开发环境:

为你的操作系统安装 Docker Desktop:Docker: Accelerated Container Application Development

安装 AWS CLI:Installing or updating to the latest version of the AWS CLI - AWS Command Line Interface

确保你已安装 Python 3 和 pip。

(可选但推荐)安装 Git:https://git-scm.com/downloads

配置你的 AWS 凭据:

AWS 凭据配置 3. Docker 镜像创建 在构建 Docker 镜像之前,请确保 Docker 守护进程正在运行(在 Windows/macOS 上启动 Docker Desktop,或在 Linux 上使用 sudo systemctl start docker)。

在你的本地机器上:

使用提供的 Dockerfile 创建 Docker 镜像:

docker build -t iris_image .

在本地运行 Docker 容器:

docker run -it --rm -p 8080:8080 iris_image:latest

这里,我们映射了端口 8080。

通过执行 test.py 验证镜像是否正常工作。

  1. ECR 仓库设置 首先,启动你的 AWS Academy Learner Lab 并确保你的 AWS 凭据配置正确。然后,在你的本地计算机上,按照以下步骤进行。

创建一个 ECR 仓库:

aws ecr create-repository --repository-name iris-registry

使用 ECR 认证你的 Docker 客户端:

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com

获取镜像 ID:

docker image ls

标记并推送你的 Docker 镜像:

docker tag <image_id> <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/iris-registry:latest
docker push <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/iris-registry:latest
  1. Lambda 函数创建 在 AWS 控制台中,使用你构建的现有容器镜像创建 Lambda 函数,并选择 LabRole 作为执行角色。

  2. API Gateway 配置 通过 AWS 控制台使用 API Gateway 为你的 Lambda 函数创建一个 REST API。

使用 curl(Linux)在你的本地机器上测试你的 API:

curl --header "Content-Type: application/json" --request POST --data "{\"values\": [[<value1>, <value2>, <value3>, <value4>]]}" https://<your_api_id>.execute-api.<region>.amazonaws.com/default/<your_lambda_function>

或使用 Invoke-WebRequest(Windows):

powershell

Invoke-WebRequest -Method Post -Uri "https://<your_api_id>.execute-api.<region>.amazonaws.com/default/<your_lambda_function>" `-Headers @{ "Content-Type" = "application/json" } `-Body '{"values": [[<value1>, <value2>, <value3>, <value4>]]}'
  1. 负载测试和分析 负载测试 在你的本地机器上,使用提供的 Locust 负载测试脚本来评估你的部署 API 的性能。

安装 Locust

pip install locust

导航到包含 locustfile.py 的目录。

使用以下命令运行 Locust 测试:

locust -f locustfile.py --host https://<your_api_gateway_id>.execute-api.us-east-1.amazonaws.com  --users 10 --spawn-rate 5 --run-time 60s --csv "locust_logs/test" --csv-full-history --html "locust_logs/test_locust_report.html" --logfile "locust_logs/test_locust_logs.txt" --headless

对于 Windows 用户,设置 locust 的 PATH,或直接使用 locust.exe,指定其路径,例如:

c:\users\user\appdata\roaming\python\python39\scripts\locust.exe -f locustfile.py --host https://<your_api_gateway_id>.execute-api.us-east-1.amazonaws.com  --users 10 --spawn-rate 5 --run-time 60s --csv "locust_logs/test" --csv-full-history --html "locust_logs/test_locust_report.html" --logfile "locust_logs/test_locust_logs.txt" --headless

分析 使用 Google Colab 上的性能分析笔记本分析结果。上传你的日志并运行笔记本 performance_analysis.ipynb。在绘制直方图比较冷启动和热请求响应时间之前,填写估计的冷启动时间(在 <FILL IN>)。

你将在你的 .ipynb 中包含所需的图表以获得 1 分:一条线图,一个冷启动直方图,以及一个热请求直方图。此外,如果你提供清晰的分析解释,将额外获得 0.5 分。

问题 理解 AWS Lambda、API Gateway 和 ECR AWS Lambda 函数 (0.5 分):

Lambda 函数在无服务器部署中扮演什么角色?lambda_handler 函数如何处理请求?

答案: <你的答案在这里>。

API Gateway 和 Lambda 集成 (0.5 分):

解释 API Gateway 在此部署过程中的目的。它如何将请求路由到 Lambda 函数?

答案: <你的答案在这里>。

ECR 角色 (0.5 分):

ECR 在此部署中扮演什么角色?它如何与 Lambda 集成以管理容器化应用程序?

答案: <你的答案在这里>。

冷启动现象分析 冷启动与热请求 (1 分):

提供你的分析,比较在冷启动期间与热请求的性能(基于你在 performance_analysis.ipynb 中获得的线图和直方图)。讨论响应时间的差异以及在负载测试期间观察到的任何显著模式。

答案: <你的答案在这里>。

影响和策略 (0.5 分):

讨论冷启动对无服务器应用程序的影响及其对性能的影响。可以采用哪些策略来减轻这些影响?

答案: <你的答案在这里>。

API Gateway 和 Lambda 集成 (0.5 分):

解释 API Gateway 在此部署过程中的目的。它如何将请求路由到 Lambda 函数?

答案: <你的答案在这里>。

ECR 角色 (0.5 分):

ECR 在此部署中扮演什么角色?它如何与 Lambda 集成以管理容器化应用程序?

答案: <你的答案在这里>。

冷启动现象分析 冷启动与热请求 (1 分):

提供你的分析,比较在冷启动期间与热请求的性能(基于你在 performance_analysis.ipynb 中获得的线图和直方图)。讨论响应时间的差异以及在负载测试期间观察到的任何显著模式。

答案: <你的答案在这里>。

影响和策略 (0.5 分):

讨论冷启动对无服务器应用程序的影响及其对性能的影响。可以采用哪些策略来减轻这些影响?

答案: <你的答案在这里>。

提交要求

请将你的作业通过 BlackBoard 提交为一个 .zip 文件,包括以下文件:

README.md(回答所有问题)(3 分)

lambda_function.py(你的 Lambda 函数实现)(1 分)

提取值 调用 predict 函数 返回预测结果 提供你的 Lambda 函数调用的一个 CloudWatch 日志事件。 (0.5 分)

使用 curl 或 Invoke-WebRequest 显示正确预测输出的成功请求和响应的屏幕截图。 (0.5 分)

performance_analysis.ipynb,包括: 线图、冷启动直方图和热请求直方图的图表。 (0.5 分)

test_locust_logs.txt(Locust 负载测试日志)(0.5 分)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454802.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【KEIL那些事 4】CMSIS缺失!!!!导致不能编译!!!!软件自带芯片下载缓慢!!!!!!快速下载芯片包!!!!!

安装了keli发现emmm&#xff0c;CMSIS缺失&#xff01;&#xff01;&#xff01;&#xff01;不能编译&#xff0c;&#xff0c;&#xff0c;自带下载芯片缓慢&#xff0c;&#xff0c;&#xff0c;官网下载emmm&#xff0c;竟然不带动的&#xff01;&#xff01;&#xff01;&…

数据库集群

主从复制 作用&#xff1a; 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xff0c;可切换到从数据库继续工作&#xff0c;避免数据丢失。 2.架构的扩展。业务量越来越大&#xff0c;I/O访问频率过高&#xff0c;单机无法满足&#xff0c;此…

基于node.js宜家宜业物业管理系统【附源码】

基于node.js宜家宜业物业管理系统 效果如下&#xff1a; 系统首页界面 业主登录界面 停车位页面 小区公告页面 管理员登录界面 管理员功能界面 物业管理员管理界面 缴费信息管理界面 物业管理员功能界面 研究背景 近年来互联网技术飞速发展&#xff0c;给人们的生活带来了极…

《云计算网络技术与应用》实训6-1:配置KVM虚拟机使用NAT网络

任务1、计算节点基础环境准备 1. 使用VMware安装CentOS 7虚拟机&#xff0c;安装时记得开启CPU虚拟化&#xff0c;命名为“KVMC6”。 2. &#xff08;网卡配置和之前的一样&#xff0c;都用100网段&#xff09;网关设置为192.168.100.1&#xff0c;地址段为192.168.100.10-25…

excel将文本型数字转变为数值型数字

问题导入&#xff1a;复制数字到excel表格中&#xff0c;但是表格中数字显示为文本&#xff0c;且无法通过常规方法转变为可进行四则运算的数字。例如&#xff1a;在i3单元格中输入常规的转换方法仍然报错。在j3单元格中输入ISTEXT(H3)显示h3单元格确实为文本。 解决办法&#…

Chrome DevTools 三: Performance 性能面板扩展—— 性能优化

Performance 性能 &#xff08;一&#xff09;性能指标 首次内容绘制 (First Contentful Paint&#xff0c;FCP)&#xff1a; 任意内容在页面上完成渲染的时间 最大内容绘制 (Largest Contentful Paint&#xff0c;LCP)&#xff1a; 最大内容在页面上完成渲染的时间 第一字节…

【经管】比特币与以太坊历史价格数据集(2014.1-2024.5)

一、数据介绍 数据名称&#xff1a;比特币与以太坊历史价格数据集 频率&#xff1a;逐日 时间范围&#xff1a; BTC&#xff1a;2014/9/18-2024/5/1 ETH&#xff1a;2017/11/10-2024/5/1 数据格式&#xff1a;面板数据 二、指标说明 共计7个指标&#xff1a;Date、Open…

天润融通大模型文本机器人,让客服迈入“无人化”的第一步

明明很着急&#xff0c;但客服机器人总是答非所问&#xff1f; 相信很多人都经历过这样的尴尬时刻&#xff0c;问题的关键&#xff0c;是传统文本机器人还在通过关键词和基础语义分析回答问题。 △传统机器人处理问题流程示意 要知道在客户咨询与服务过程中&#xff0c;用户的…

架构师备考-背诵精华(系统架构评估)

系统架构评估是在对架构分析、评估的基础上&#xff0c;对架构策略的选取进行决策。它利用数学或逻辑分析技术&#xff0c;针对系统的一致性、正确性、质量属性、规划结果等不同方面&#xff0c;提供描述性、预测性和指令性的分析结果。 重要概念 敏感点&#xff1a;敏感点是…

Linux系统基础-进程间通信(4)_模拟实现进程池

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(4)_模拟实现进程池 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f4…

Claude 3.5 Sonnent(new)发布,编程能力反超o1

目录 1、近期OpenAI的重磅更新2、Claude 3.5深夜迎来重磅升级3、为什么这么大的更新却连模型版本号都不改一下&#xff1f;4、升级后的Claude 3.5 Sonnet&#xff1a;不只是“更快更强”5、Claude 3.5 Sonnet&#xff08;new&#xff09;适配更多场景&#xff08;1&#xff09;…

[实时计算flink]作业开发上线流程及规范

随着数据量的爆炸性增长和业务需求的日益复杂化&#xff0c;企业对实时数据处理能力的需求愈发迫切。Flink作为一种强大的流处理框架已经成为实时计算标准&#xff0c;其规范化的开发和运维流程对于企业提升数据处理效率、确保系统稳定性至关重要&#xff0c;旨在提升研发效率&…

力扣困难题汇总(16道)

题4&#xff08;困难&#xff09;&#xff1a; 思路&#xff1a; 找两数组中位数&#xff0c;这个看起来简单&#xff0c;顺手反应就是数第(mn)/2个&#xff0c;这个难在要求时间复杂度为log(mn)&#xff0c;所以不能这样搞&#xff0c;我的思路是&#xff1a;每次切割长度为较…

pdf怎么合并在一起?pdf合并的简单方法

pdf怎么合并在一起&#xff1f;在现代办公和学习环境中&#xff0c;PDF&#xff08;便携式文档格式&#xff09;文件因其兼容性强、易于分享和保持格式稳定而广泛应用。然而&#xff0c;在日常工作中&#xff0c;我们经常会遇到需要处理多个PDF文件的情况&#xff0c;例如&…

【uniapp】实现触底加载数据

前言&#xff1a;实现界面触底数据加载。后端接口得支持翻页传参&#xff08;本案例使用django&#xff09; 1、后端接口 1.1 封装翻页公共方法standardPagination.py # -*- coding: utf-8 -*- # Time : 2024/10/15 13:15 # Author : super # File : standardPaginat…

[Hbase]一 HBase基础

1. HBase简介 1.1 HBase定义 HBase数据模型的关键在于 稀疏、分布式、多维、排序 的映射。其中映射 map指代非关系型数据库的 key-Value结构。 1.2 HBase数据模型 1)Name Space 命名空间,类似于关系型数据库的database 概念,每个命名空间下有多个表。HBase 两个自…

MFC工控项目实例二十五多媒体定时计时器

承接专栏《MFC工控项目实例二十四模拟量校正值输入》 用多媒体定时器实现0.1秒计时器 1、在SEAL_PRESSUREDlg.h文件中添加代码 #include<MMSystem.h> #pragma comment(lib,"winmm.lib")class CSEAL_PRESSUREDlg : public CDialog { public:CSEAL_PRESSUREDlg(…

Redis实现全局ID生成器

全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…

css刮刮卡效果(附源码!!!)

这个刮刮卡PC端和移动端都可以用使用 首发的公众号[小白讲前端]欢迎大家关注浏览 PC端展现 移动端展示 源码(PC和移动端直接复制运行) <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content&quo…

宣恩文旅微短剧双作开机,融合创新助力城市经济发展

近日&#xff0c;宣恩文旅微短剧《弥彰》与《新年恋爱申请&#xff0c;请通过》正式开机。这两部作品由常斌、徐子琁、常喆宽、李果、况琪儿、梅凯杰、刘书赫等实力派演员领衔主演&#xff0c;不仅汇聚了众多演艺界的佼佼者&#xff0c;更承载着宣恩县文化旅游事业的创新与发展…