新知一下
海量新知
5 9 7 0 4 4 3

AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

品览Pinlan | AI物品识别商业服务领先者 2021/11/26 15:18
新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

CAD施工图,是表示通过AutoCAD软件将工程项目总体布局,建筑物的外部形状、内部布置、结构构造、内外装修、材料作法以及设备、施工等制作的图样。CAD施工图具有图纸齐全、表达准确、要求具体的特点,是进行工程施工、编制施工图预算和施工组织设计的依据,也是进行技术管理的重要技术文件。一套完整的CAD施工图一般包括建筑施工图、结构施工图、给排水、采暖通风施工图及电气施工图等专业图纸。

在建筑AI智能设计云平台 AlphaDraw「筑绘通」上进行AI自动出图 时,需要先对图纸进行识别,识别过程中会建立诸多任务项,那么不可避免的就会面临 任务过多导致排队超时,引起任务长时间无响应的状况,worker弹性伸缩和pod优雅退出 就能很好的解决这些问题。今天的AI论技就来和大家聊聊如何利用 弹性伸缩AI算法 运行容器使识图服务性能更加优化?


识图服务架构


识图服务中 flask 后端采用 pika 库作为与 rabbitmq 进行交互的客户端,再由队列给 worker 发任务 这个合作关系就类似于工厂, worker 就是流水线,任务就是流水线上的货物。

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

△识图服务架构


例如worker数预先设置为3,就如同工厂中三个工人进行作业,任务数量均衡增加时,三个工人的作业效率是足以支撑工厂正常运作的。

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?


但是任务数巨增时,例如双十一期间,快递数量将倍增,这个增值可能还是指数级别的增加,那么三个工人则是远远不够的,甚至于造成工人崩溃,工厂瘫痪。


那么如何解决这个问题呢?弹性伸缩及优雅退出就可以很好的解决这一状况。


什么是弹性伸缩和优雅退出?


worker弹性伸缩的目标正是在于处理worker数量固定时会产生大量任务排队耗时长等问题,pod优雅退出则是在于处理伴随worker数骤减时任务状态丢失问题。


弹性伸缩是将工人转化为机械手臂,由于 需要考虑到资源配置, 需要预设好最大的worker数及最小worker数 ,也就是一个工厂资源最多容纳多少机械手臂同时工作,以及任务量少的时候至少需要几个机械手臂进行工作,以防漏检任务。


工作量变多时,所有机械手臂将同时进行工作;工作量变少时,将慢慢减少工作的机械手臂, 优雅退出就是当一个机械手臂被下达停止工作指令后,他将不会再收到任何任务 ,同时他还会继续工作10分钟(预设的一个完整任务需要的时间),将他手上正在工作的任务完成, 这是为了避免突然断电导致这个任务做了一半没做完的情况。


新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?



如何实现?


弹性伸缩可基于什么特性? 弹性伸缩可基于系统负载指标、CPU、内存使用率、磁盘读写速度;业务日志指标,通过日志进行服务即时压力监控;资源请求,如服务在某段时间内需要的资源数超出当前pod资源量,则需实现垂直扩缩容;依据事件,如指标时间内的请求数,当前消费队列的消息数等


如图是一个rabbitmq的队列信息:

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

说明:

· recog3队列是识图任务主队列,所有的识图任务都会进入到这个队列

· recog3@retry是重试队列,是recog3队列的死信队列,如果recog3中的任务有未被捕获的异常(如识图子进程被系统kill掉),则这个任务会被推到这个队列再次执行

· Ready 准备被消费的任务数

· Unacked 执行中的任务数

· Total 队列里的总任务数


基于事件进行弹性伸缩,按时段监控消费队列ready message的任务数, 任务数大于预设值,则进行worker增 加,增加幅度将依据预设上限值进行计算,需注意同时段worker增加应在服务器承压范围内。 反之无任务时将进行worker缩减


下图中因ready任务数为0,rabbitmq的消费者数缩减到预设最小值1:

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?


现在新建任务之后,ready任务数变为1:

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?


经过预设监控时间30s后可以看到consumers数量增加为2,ready任务变为0:

新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?


由于worker直接缩减将导致worker内正在跑的任务丢失,pod优雅退出则可解决进程被强制杀死后导致的任务丢失问题 ,kubernetes有一个最后宽限时间参数,在pod被关闭时,kubernetes将会向pod发出SIGTERM信号,然后宽限默认30s后发SIGKILL信号强制杀死,将宽限时间设置为一个任务完成上限时间,并在收到SIGTERM信号时候取消监听,保障最后一个任务完成后再进行完全关闭,若有任务未完成也会被强行kill,重新进入队列,这将避免任务丢失。


worker弹性伸缩主要是识图的一个性能优化,通过worker弹性伸缩可以解决识图过程中任务过多时面临任务排队超时等问题,也可以对无任务时空闲资源进行释放,避免资源占用。


AI识图的目的是为 更优更好的输出建筑施工图所 需图纸,保证水、电、暖、建筑、结构各专业的出图成功 利用弹性伸缩AI算法运行容器可以使识图服务性能更加优化,助力建筑AI智能设计云平台 AlphaDraw「筑绘通」 出图更加快速、精准,实现效率质量双提升。



AI论技系列全新来袭

干货预警,敬请期待


在全面数字化趋势之下,品览将紧跟行业发展,以数字化、智慧化的视角,发掘行业转型之路,以AI算法研发,展望建筑行业的未来科技变革,助力行业实现“人造”到“智造”的转化。


作为国内率先研发施工图AI自动出图的企业,品览将于近期邀约设计院同行,参与“筑绘通0.3.3版本”的测试。也欢迎感兴趣的设计师同仁,点击 阅读原文 扫码 申请试用。


扫码预约体验筑绘通



新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

品览是AI建筑设计智造者,专注于建筑设计AI服务,致力于为地产企业和设计院客户提供AI设计出图服务。自主研发的建筑AI智能设计云平台AlphaDraw「筑绘通」,基于计算机视觉技术,建筑设计知识库和生成式强化学习算法帮助客户自动完成施工图设计。仅需上传建筑方案图纸就可以自动完善成套施工图,并符合各地设计规范,助力企业标准化出图、效率质量双提升。


新知达人, AI论技 | 如何利用弹性伸缩AI算法运行容器使识图服务性能更加优化?

新知精选

更多新知精选