部署ML/DL 模型到一个consolidated AI演示

关键字:IRIS,IntegratedML,Flask,FastAPI,TensorFlow Serving,HAProxy,Docker,Covid-19

目的:

过去几个月里,我们提到了一些深度学习和机器学习的快速演示,包括一个简单的 Covid-19 X 射线图像分类器和一个用于可能的 ICU 入院的 Covid-19 实验室结果分类器。  我们还介绍了 ICU 分类器的 IntegratedML 演示实现。  虽然“数据科学”远足仍在继续,但从“数据工程”的角度来看,或许也是尝试一些 AI 服务部署的好时机 - 我们能否将目前所接触到的一切都封装成一套服务 API?  我们可以利用哪些常用的工具、组件和基础架构,以最简单的方式实现这样的服务堆栈?

范围

范围内:

作为快速入门,我们可以使用 docker-compose 将以下 docker 化组件部署到 AWS Ubuntu 服务器中

  • HAProxy  - 负载均衡器
  • Gunicorn vs. Univorn  - Web 网关****服务器
  • Flask vs. FastAPI - Web 应用 UI 的应用服务器、服务 API 定义和热图生成等
  • TensorFlow Model Serving vs. TensorFlow-GPU Model Serving - 图像等分类的应用后端服务器
  • IRIS IntegratedML - 带有 SQL 界面的统一 App+DB AutoML
  • Jupyter Notebook 中模拟客户端进行基准测试的 Python3
  •  Docker 和 docker-compose
  • 配备 Tesla T4 GPU 的 AWS Ubuntu 16.04 

:配备 GPU 的 TensorFlow Serving 仅用于演示目的 - 您只需关闭 GPU 相关镜像(在 dockerfile 中)和配置(在 docker-compose.yml 中)。

范围外或者在下一个愿望清单上:

  • NginxApache 等 Web 服务器在演示中暂时省略。
  • RabbitMQ 和 Redis - 用于可靠消息传递的队列代理,可由 IRIS 或 Ensemble 替代。   
  • IAM (Intersystems API Manger) 或 Kong 在愿望清单上IAM (Kong 在愿望清单上
  • SAM (Intersystems System Alert & Monitoring) SAM (Intersystems
  • ICM (Intersystems Cloud Manager) 与 Kubernetes Operator - 诞生以来一直是我的最爱ICM (Kubernetes Operator - 诞生以来一直是我的最爱
  • FHIR(基于 Intesystems IRIS 的 FHIR R4 服务器和 FHIR Sandbox,用于 FHIR 应用上的 SMART)
  • CI/CD devop 工具或 Github Actions

“机器学习工程师”必然会动手遍历这些组件,在服务生命周期内提供一些生产环境。 随着时间的推移,我们可以扩大范围。

GitHub 仓库

完整源代码位于 https://github.com/zhongli1990/covid-ai-demo-deployment

integratedML-demo-template 仓库也与新仓库一同重用。  

部署模式

以下为此“Docker 中的 AI 演示”测试框架的逻辑部署模式。

出于演示目的,我特意创建了 2 个独立的堆栈,用于深度学习分类以及 Web 渲染,然后使用 HAProxy 作为软负载均衡器,以无状态方式在这 2 个堆栈之间分配传入的 API 请求。

  • Guniorn + Flask + TensorFlow Serving
  • Univcorn + FaskAPI + TensorFlow Serving GPU

IRIS 与 IntegratedML 用于机器学习演示示例,即 ICU 预测的前一篇文章中。

在目前的演示中,我省略了一些生产服务需要或考虑的常用组件:

  • Web 服务器:Nginx 或 Apache 等 HAProxy 和 Gunicorn/Uvicorn 之间需要它们,以进行正确的 HTTP 会话处理,即避免 DoS 攻击等。
  • 队列管理器和数据库:RabbitMQ 和/或 Redis 等,在 Flask/FastAPI 和后端服务之间,用于可靠的异步服务和数据/配置持久性等。  
  • API 网关:IAM 或 Kong 集群,在 HAProxy 负载均衡器和 Web 服务器之间进行 API 管理,不创建单点故障。
  • 监视和警报:SAM 很不错。
  • 为 CI/CD DevOps 进行配置:云中立的部署和管理以及带有其他常见 devops 工具的 CI/CD 将需要带 K8s 的 ICM。

其实,IRIS 本身当然可以作为企业级队列管理器以及用于可靠消息传递的高性能数据库。 在模式分析中,很明显 IRIS 可以代替 RabbitMQ/Redis/MongoDB 等队列代理和数据库,得到更好的整合,大幅减少延迟,并提高整体性能。  还有,IRIS Web Gateway(先前为 CSP Gateway)当然可以代替 Gunicorn 或 Unicorn 等,对吧?  

环境拓扑

在全 Docker 组件中实现上述逻辑模式有几种常见选项。 首先:  

  • docker-compose
  • docker swarm 等
  • Kubernetes 等 
  • 带 K8s 操作的 ICM

这个演示从功能性 PoC 和一些基准测试的“docker-compose”开始。 当然,我们很想使用 K8s,也有可能随着时间的推移使用 ICM。 

如 docker-compose.yml 文件中所述,它的环境拓扑在 AWS Ubuntu 服务器上的物理实现最终将是:  

上图显示了如何将所有 Docker 实例的服务端口映射并直接暴露于 Ubuntu 服务器以进行演示。 在生产中应该全部经过安全加固。 纯粹出于演示目的,所有容器都连接到同一个 Docker 网络中;而在生产中,它将被分为外部可路由和内部不可路由。

Docker 化组件 

下面显示了主机中的那些存储卷如何按照这个 docker-compose.yml 文件的指示挂载到各个容器实例: 存储卷如何按照这个

ubuntu@ip-172-31-35-104:/zhong/flask-xray$ tree ./ -L 2

./
├── covid19                             (Flask+Gunicorn container and Tensorflow Serving container will mount here)
   ├── app.py                                (Flask main app:  Both web application and API service interfaces are defined and implemented here)
   ├── covid19_models               (Tensorflow models are published and versioned here for image classification Tensorflow Serving container with CPU)
   ├── Dockerfile                          (Flask server with Gunicorn:      CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:5000", "--workers", "4", "--threads", "2"])
   ├── models                               (Models in .h5 format for Flask app and API demo of heatmap generation by grad-cam on X-Rays)
   ├── __pycache__
   ├── README.md
   ├── requirements.txt             (Python packages needed for the full Flask+Gunicorn apps) 
   ├── scripts
   ├── static                                  (Web static files)
   ├── templates                         (Web rendering templates)
   ├── tensorflow_serving        (Config file for tensorflow serving service)
   └── test_images
├── covid-fastapi                   (FastAPI+Uvicorn container and Tensorflow Serving with GPU container will mount here)
   ├── covid19_models            (Tensorflow serving GPU models are published and versioned here for image classification)
   ├── Dockerfile                       (Uvicorn+FastAPI server are started here: CMD ["uvicorn", "main:app", "--h

相关推荐

参赛通道开启!欢迎参加InterSystems编程大奖赛

继2月1日,InterSystems多模型数据库竞赛优胜者决出后,又一场赛事正式启动!2月8日InterSystems编程大奖赛正式开启 奖项设置 此次大奖赛时间为2021年2月8日-3月8日,我们提升了现金奖励力度,奖金总额高达16000美元!除内部员工外,任何开发者社区的成员均可参加。新用户扫码建账号此次竞赛设置两类奖项:专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出第一名,奖金6,000美元第二名,奖金3,000美元第三

InterSystems的博客 736

InterSystems开发者社区中文版第二届技术征文大赛正式启动!

InterSystems开发者社区中文版第二届技术征文大赛正式启动!时间从2023年9月19日至2023年10月24日,欢迎参加!

InterSystems的博客 368

为社区成员提供的全新在线分析仪表板(Analytics Dashboard)!

开发者们大家好!我们非常激动地与您分享我们为每个社区成员提供的在线分析仪表板(Online Analytics Dashboard)这一全新的强大功能????从现在开始,您可以看到您自己的当周、月和所有时间的详细统计数据,包括:浏览量,点赞量,评论量,关注量时间轴图——针对浏览量、点赞、关于您的帖子的行动、评论包含关于您的每个帖子的浏览量、评论和点赞信息的表此外,现在您可以很容易地看到您...

InterSystems的博客 536

荣誉!InterSystems被独立研究机构Forrester评为“事务分析型数据平台领导者”

2022 年 12 月 1 日,中国,北京——致力于帮助客户解决最关键的可扩展性、互操作性和速度问题的创新数据技术提供商InterSystems今天宣布,在Forrester日前公布的《The Forrester Wave™:事务分析型数据平台(2022年第4季度)》报告中,InterSystems IRIS® 数据平台被评为领导者。2022 年 12 月 1 日,中国,北京——致力于帮助...

InterSystems的博客 550

ZPM介绍(3)

建立私服(Porxy-Registry)这张图解释了您的私服是怎么工作的, 整篇文章在这里: Proxy-Registry搭建私服您需要有一台自己的的服务器, 在上面安装IRIS, zpm, 然后用zpm去下载另一个软件包“zpm-registry"。象这样zpm:DEMO>search -r zpm-registryregistry https://pm.community....

InterSystems的博客 959

ObjectScript的命名规范

命名规范,英文叫"name convention", 是对写代码取名字的一些”共识“。也就是说, 你可以不遵守,但大家都选择了遵守,照者一个规范来。为什么呢?因为有社区,大家要共享代码, 你不照着规矩来, 别人会鄙视你, 懒的用你的代码。ObjectScript以前没什么社区,大家各写各的, 使用ObjectScript的大公司也没谁把自己的代码拿出来共享。因此,个人开发者基本就是参考官方In...

InterSystems的博客 433

ZPM介绍(2)

发布您自己的软件首先:要发布您的软件,您要支持这个”命名规范。其中和zmp最相关的是包名和l类名的设计,你要定义成这样:company.project.subpackage.TheClass.cls如果您的Package Name定义是: Company.Project, 有大写字母,对不起,是无法用zpm打包的。这个链接给了最简单的例子,但还不详细,我来总结一下:发布您的软件前,有几...

InterSystems的博客 882

创意社区新闻摘要 | InterSystems Ideas News!

Hi 开发者社区的成员们,大家好!欢迎关注我们第一期InterSystems Ideas News!最重要的消息是我们第一次非常成功的创意马拉松。我们收到了75个有趣的新想法。以下是创意社区(Ideas Portal)一些数据:✓ 上月,我们收到了42条新创意✓ 上月,我们迎来了147位新用户✓ 迄今为止,我们共收到142 条新创意✓ 迄今为止,共有 273 位用户加入我们以下...

InterSystems的博客 353

ZPM介绍(1)

ZPM介绍有Developer听闻了InterSystems的包管理器ZPM, 希望我能介绍一下。正好刚刚看到一个开发者论坛的新闻: Open Exchange ZPM is now InterSystems Package Manager , 觉得更有必要了。zpm是什么简单说:zpm, 全称InterSystems ObjectScript Package Manager, 是一个包管...

InterSystems的博客 2244

欢迎第500名社区会员!

Hi!大家好!我们迎来了第500名开发者社区会员!欢迎@Min Lu!请关注站内私信,领取你的幸运礼品哟(^U^)ノ~YO

InterSystems的博客 352

InterSystems开发者关系主管Dean:集成FHIR,改变游戏规则

作为开发者社区的一员,多年来我亲眼目睹了访问和共享数据的障碍是如何阻碍创新的。在与医疗科技领域的初创公司和大企业合作时,我看到了封闭的数据是如何阻碍了我们的合作,那种我们都意识到的对提供高质量医疗服务至关重要的合作。随着我对FHIR®(快速医疗互操作性资源)标准的了解,我开始相信这是医疗创新的前进之路。我希望全世界的开发人员——包括我们全球InterSystems开发社区的1.1万余名开发人员...

InterSystems的博客 1026

广而告之!寻找第500名InterSystems开发者社区(中文版)会员!

Hi!大家好!截至11月3日中午,我们的开发者社区会员共495人!我们准备了一份惊喜礼品,准备送给第500名开发者社区会员!那么,谁是第500名幸运的开发者社区成员呢?我们拭目以待!(*^▽^*)...

InterSystems的博客 363

礼品全部寄出,大赛落下帷幕!一起期待下一次InterSystems开发者社区精彩活动!...

各位开发者社区的同学们,大家好!在各位社区同学的大力支持下,我们的“首届技术征文大赛”圆满完赛!在过去一周多的时间里,我们整理了各类奖项及礼品,目前已经全部寄出!最新寄出的是开发者征文大赛获奖者的奖品,请以下同学留意查收,如未收到快递信息,请及时与我们联系:@Zhe Wang@姚 鑫@聆严 周@John Pan@he hf@sun yao@Meng Cao@lizw ...

InterSystems的博客 353

【动画视频】要想运维功夫硬,日常应该怎么做?

构建系统夯基础,日常运维是保障。运维工作杂又细,业务连续是关键。等保评级都看它,日常练兵保安全。日常运维很重要,想要干好不容易。要想运维功夫硬,日常应该怎么做?...

InterSystems的博客 356

【动画视频】医院需要什么样的互联互通平台?

医院管理者、信息中心、业务骨干,每个角色都有独特的业务诉求,InterSystems IRIS医疗版互联互通套件专为国内用户设计,截至2021年,InterSystems技术已助力一百余家医院通过四级及以上医院信息互联互通标准化成熟度评级,其中,五乙用户占全国30%以上。...

InterSystems的博客 397

【重要】恭喜1024活动中奖者!请获奖者及时提交信息,以便我们及时与您沟通奖品领取...

各位开发者社区的同学们,大家好!10月24日晚,我们成功举办了“首届技术征文大赛线上分享会”,我们在这次活动中邀请了多位征文大赛的参赛同学分享技术心得,同期举办了多轮抽奖,以下是各个奖品的获奖名单,我们恭喜这些获奖者,同时提醒获奖者请务必通过二维码登记奖品领取信息(如已登记请忽视)。各类奖品将于近日陆续寄出,感谢大家对社区活动的支持与积极参与!期待下一个1024!...

InterSystems的博客 424

获奖名单公布!一起来关注InterSystems开发者社区中文版首届技术征文大赛

各位开发者社区的同学们,大家好!我们的????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与!????????(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自20名参赛者的30篇参赛文章,感谢大家的积极参与!以下是获奖名单!1. 专家提名奖:活动期间发...

InterSystems的博客 423

Happy 1024!欢迎参加“首届技术征文大赛线上分享会”

开发者社区的同学们,1024快乐!今晚19:30,我们将通过“InterSystems首届技术征文大赛线上分享会”发布获奖名单、进行征文作品分享&点评、探讨热门话题,同期还将举办多轮抽奖!欢迎参会,锁定#腾讯会议会议主题:InterSystems首届技术征文大赛线上分享会会议时间:2022/10/24 19:30-21:00 (GMT+08:00) 中国标准时间 - 北京点击链接...

InterSystems的博客 417

12小时后投票截止!获奖名单将于10月24日晚发布(附腾讯会议邀请)

各位开发者社区的同学们,大家好!经过一个多月的赛期,我们举办的????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)即将步入尾声!????????(←点击链接进入参赛页面,浏览所有参赛文章)即将步入尾声!InterSystems开发者社区(中文版)首届技术征文大赛的“征文&投票”环节将于12小时后结束(截至10月23日24:00)!抓住最后的时间...

InterSystems的博客 425

【最新排名(按点赞)】投票倒计时三天:继续为你喜欢的征文作品投票吧!...

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是优秀作品获得“开发者社区奖”的关键!我们先来看看目前作品排名情况吧!距离投票截止还有三天(截止至10月23日),我们暂时无法获得专家评审分数,以下根据作品“点赞”进行排名(排名截至10月21日...

InterSystems的博客 372

【目前点赞排名】投票倒计时五天:继续为你喜欢的征文作品投票吧!

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是优秀作品获得“开发者社区奖”的关键!我们先来看看目前作品排名情况吧!距离投票截止还有五天(截止至10月23日),我们暂时无法获得专家评审分数,以下根据作品“点赞”进行排名。2022年9月5日-...

InterSystems的博客 294

技能帖:更好地利用开发者社区的发帖功能!

各位开发者社区的同学们,大家好!您想更好地获得帮助、讨论有趣的功能、发布公告或分享您的知识吗?在这篇文章中,我们将告诉你如何做到这一切。我们将通过以下几部分来分享“如何做”:一般发帖步骤问题文章或公告讨论一般发帖步骤一般发帖步骤首先,你需要点击开发者社区网站顶部菜单中的“发布新帖”按钮:之后,您将看到编辑器中显示创建一个问题、一则公告、一篇文章或一个讨论。不同类型的帖子有自己...

InterSystems的博客 568

四则优秀案例分享:医疗数据大规模集成

在美国各地,当需要实现大规模的应用集成时,医疗行业的领导者会使用InterSystems HealthShare Health Connect®。无论是为了连接电子病历,还是为了提升床边护理决策能力,无论是为了创新远程医疗和远程护理,还是为了业务增长,亦或是为未来做准备,InterSystems和Health Connect随时准备好帮助您和您的组织实现目标。我们在此提供几个InterSyste...

InterSystems的博客 1056

IRIS镜像状态监控

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。尽管IRIS内部API提供了丰富的集群配置、成员状态等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用,但在IRIS上开...

InterSystems的博客 443

如何为你喜欢的征文投票?来帮助你喜欢的作者赢得“开发者社区奖”!

2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你的支持与喜爱,是作者获得“开发者社区奖”的关键!如何为你喜欢的作品投票呢?2022年9月5日-10月24日(北京时间),我们正在举办????????(←点击链接进入参赛页面,浏览所有参赛文章)!投票截止至10月23日,你...

InterSystems的博客 188

首届InterSystems Idea创意马拉松

社区成员们,大家好!我们开心地宣布一种全新类型的比赛——寻找最聪明的创意比赛!欢迎了解:????InterSystems Idea 创意马拉松????在9月26日至10月16日期间提出一个与InterSystems产品和服务相关的想法,即可获得达成奖。最重要的是,此次赛事InterSystems的员工和社区成员都可以参与!>>点击提交你的想法吧!<<规则In...

InterSystems的博客 278

【腾讯会议邀请】InterSystems开发者社区中文版首届技术征文大赛线上见面会

亲爱的社区同学们!2022年9月5日-10月24日,我们正在举办InterSystems开发者社区中文版首届技术征文大赛!????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!????????(←点击链接进入参赛页面,浏览所有参赛文章)!2022年9月27日(下周二)11:00-11:30,我们将进行一次针对此次征文大赛的线上宣讲,欢迎您通过腾讯会议...

InterSystems的博客 181

InterSystems开发者社区中文版首届技术征文大赛专家评审团亮相!

中文社区的同学们大家好!如你所知,从2022年9月5日-10月24日(北京时间),我们正在举办????InterSystems开发者社区中文版首届技术征文大赛????(←点击链接进入参赛页面,浏览所有参赛文章)!从2022年9月5日-10月24日(北京时间),我们正在举办????????(←点击链接进入参赛页面,浏览所有参赛文章)!截至目前,我们已收获了20余篇佳作作为此次大赛重要奖项“专家提名奖”评比的重要部分...

InterSystems的博客 161

Production 中调用 web service 组件时有关超时参数的设置

我在这里和大家分享下在 Interoperability 的接口开发中,调用Web Service接口的几个超时参数的设置经验。赶时间的同学可以直接拉到文章最下面看结论就好。1.实验过程首先我设计了一个Web service的服务器端,强制在接收到请求后 8s 返回结果。在客户端我设置了响应超时7s, 重试间隔5s, 故障超时23s,如图:在客户端、服务器端均设置了SOAP Lo...

InterSystems的博客 267

轻而易举!来InterSystems Ideas为你的想法分类吧!

开发者社区的同学们,大家好!在之前的公告中,我们向大家介绍了InterSystems官方反馈门户InterSystems Ideas! 今天想给大家介绍更多,尤其是涉及到的主题。InterSystems Ideas! 今天想给大家介绍更多,尤其是涉及到的主题。你可以按以下主题类别提交你的想法:????InterSystems Products(InterSystems产品)在这里,您...

InterSystems的博客 193
上一篇: 基于Docker的一体化集成AI环境中部署机器学习/深度学习模型
下一篇: 精华文章---基于Docker的一体化集成AI环境中部署机器学习/深度学习模型
InterSystems
博客等级 码龄7年 272粉丝 430原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值