CN111831463B - 用于人工智能检测的电子装置及方法 - Google Patents
用于人工智能检测的电子装置及方法 Download PDFInfo
- Publication number
- CN111831463B CN111831463B CN202010687231.XA CN202010687231A CN111831463B CN 111831463 B CN111831463 B CN 111831463B CN 202010687231 A CN202010687231 A CN 202010687231A CN 111831463 B CN111831463 B CN 111831463B
- Authority
- CN
- China
- Prior art keywords
- intelligent detection
- artificial intelligent
- detection instance
- mutual exclusion
- instance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种用于实现人工智能检测的电子装置及方法。装置包括:处理器用于控制所述装置中的组件;后台组件用于在启动后初始化交互接口,初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;当交互接口接收到来自前台组件的调用请求指令时,响应于调用请求指令,获取互斥锁的状态,判断人工智能检测实例当前是否可用;若可用则通过交互接口接入人工智能检测实例;人工智能检测实例进行运算并将运算结果通过交互接口反馈到前台组件。本申请的装置能实现人工智能检测实例的按序调用安排机制,能确保多个交互接口按照顺序有序调用人工智能检测实例,解决了多个交互接口同时调用同一个人工智能检测实例的时候发生资源争抢的问题。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种用于实现人工智能检测的电子装置及方法。
背景技术
目前,AI(人工智能)算法已经广泛应用于图像识别、语音识别、文本分析、搜索引擎排序、推荐系统排序等方面。随着各种深度学习框架的出现和流行,现在越来越多企业会选择逐渐将自身研发的AI算法应用化、工程化,但不同的深度学习框架使用方法却各不相同,如谷歌公司开源的TensorFlow就自带TFServer组件,而PyTorch、MXNET等框架更多地只是面向了算法研究人员进行研发工作,这样使得想要工程化一些AI应用,得考虑很多兼容性的因素。现在业内最常见的AI功能应用化、工程化的方案就是将其打包成面向HTTP请求的web应用服务,对外提供可以的HTTP接口访问。
但是,AI算法有别于普通的算法,一般AI算法都会依赖于自身的模型和初始化配置文件,这使得每次运行AI算法,都会有一个较长时间的初始化阶段,用于将AI模型及配置加载到GPU计算设备上,这使得每次接收到HTTP请求都不得不重新执行一次初始化工作,从而增大了HTTP接口的服务时延,降低了工作效率,增大了故障发生率。
发明内容
本申请的目的是提供一种用于实现人工智能检测的电子装置及方法。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
根据本申请实施例的一个方面,提供一种用于实现人工智能检测的电子装置,包括:
处理器,用于控制所述装置中的组件;
后台组件,用于在启动后,初始化交互接口,及初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;
所述后台组件还用于当交互接口接收到来自前台组件的调用请求指令时,响应于所述调用请求指令,获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;
所述后台组件还用于若所述人工智能检测实例当前可用,则通过交互接口接入与所述交互接口相对应的人工智能检测实例,调用该人工智能检测实例;
所述后台组件还用于所述人工智能检测实例根据所述调用请求指令进行运算,并将运算结果通过所述交互接口反馈到前台组件;
前台组件,用于接收来自外部客户端的调用请求指令,并发送给后台组件;以及,接收来自后台组件的反馈,发送给客户端;
存储器,与所述处理器相耦合,用于存储所述人工智能检测模型和所述人工智能检测实例。
进一步地,在所述人工智能检测实例根据所述调用请求指令进行运算之前,所述后台组件还用于实现:
若所述人工智能检测实例当前不可用,则所述互斥访问组件重复获取对应于所述交互接口的所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,直至对应于所述交互接口的人工智能检测实例当前可用为止。
进一步地,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
以人工智能检测实例本身的实例名为键值去判断所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用。
进一步地,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
为所述调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过所述超时时间则继续尝试抢占,尝试以人工智能检测实例的名称为键值和所述识别符作为值执行赋值操作,如果赋值失败,则证明所述人工智能检测实例当前不可用;否则,所述人工智能检测实例当前可用。
进一步地,所述后台组件进一步包括互斥访问组件,所述互斥访问组件用于获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,所述互斥访问组件为远程字典服务。
根据本申请实施例的另一个方面,提供一种用于实现人工智能检测的方法,包括:
后台组件启动后,初始化交互接口,初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;
当交互接口接收到来自前台组件的调用请求指令时,响应于所述调用请求指令,获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;
若所述人工智能检测实例当前可用,则通过交互接口接入与所述交互接口相对应的人工智能检测实例,调用该人工智能检测实例;
所述人工智能检测实例根据所述调用请求指令进行运算,并将运算结果通过所述交互接口反馈到前台组件;
前台组件接收来自后台组件的反馈,发送给客户端。
进一步地,在所述人工智能检测实例根据所述调用请求指令进行运算之前,所述方法还包括:
若所述人工智能检测实例当前不可用,则重复获取对应于所述交互接口的所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,直至对应于所述交互接口的人工智能检测实例当前可用为止。
进一步地,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
以人工智能检测实例本身的实例名为键值去判断所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用。
进一步地,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
为所述调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过所述超时时间则继续尝试抢占,通过互斥访问组件尝试以人工智能检测实例的名称为键值和所述识别符作为值执行赋值操作,如果赋值失败,则证明所述人工智能检测实例当前不可用;否则,所述人工智能检测实例当前可用。
根据本申请实施例的另一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现上述的用于人工智能检测的方法。
本申请实施例的其中一个方面提供的技术方案可以包括以下有益效果:
本申请实施例提供的用于实现人工智能检测的电子装置,能够实现确保每个HTTP接口都具有一个与其相对应的、具有独立性排他性的人工智能检测实例,同时结合互斥访问组件获取人工智能检测实例当前是否可用的信息,能够实现人工智能检测实例的按序调用安排机制,能够确保多个HTTP接口按照顺序有序调用相对应的人工智能检测实例,从而解决了多个HTTP接口同时调用同一个人工智能检测实例的时候会发生资源争抢的问题,提高了工作效率,避免了调用混乱,降低了故障发生率。
本申请的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者,部分特征和优点可以从说明书中推知或毫无疑义地确定,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请的一个实施例的用于实现人工智能检测的电子装置的处理器与存储器的连接关系图;
图2示出了本申请的一个实施例的后台组件与前台组件的连接关系图;
图3示出了本申请的一个实施例的用于实现人工智能检测的方法的流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,下面结合附图和具体实施例对本申请做进一步说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
传统的后台中,多个HTTP接口共享调用相同的人工智能检测实例,像MySQL数据库的客户端连接实例、Redis客户端连接实例等,都是以共享变量的形式被整个后台调用,实现相应服务的功能。但由于人工智能检测模型的运行模式上跟常规程序不一样,运行的载体在GPU设备上,导致如果按照常规方案,单个人工智能检测实例被全局调用的话,也就是说由于多个HTTP接口调用人工智能检测实例时缺乏对人工智能检测实例的调用安排机制,会导致多个HTTP接口争抢同一个人工智能检测实例的状况,导致GPU显存的资源争抢情况,进而出现检测运算不稳定、卡顿甚至崩溃的异常。
如图1和图2所示,本申请的一个实施例提供了一种用于实现人工智能检测的电子装置,包括处理器和存储器;
处理器,用于控制该装置中的组件;
后台组件,用于在启动后,初始化交互接口,及初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;本实施例中的交互接口为HTTP接口;
后台组件还用于当HTTP接口接收到来自前台组件的调用请求指令时,响应于该调用请求指令,获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用;
后台组件还用于若该人工智能检测实例当前可用,则通过HTTP接口接入与该HTTP接口相对应的人工智能检测实例,调用该人工智能检测实例;
后台组件还用于该人工智能检测实例根据该调用请求指令进行运算,并将运算结果通过该HTTP接口反馈到前台组件;
前台组件,用于接收来自外部客户端的调用请求指令,并发送给后台组件;以及,接收来自后台组件的反馈,发送给客户端;
存储器,与该处理器相耦合,该存储器用于存储该人工智能检测模型和该人工智能检测实例。
该后台组件进一步包括互斥访问组件,该互斥访问组件用于获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,该互斥访问组件为远程字典服务。
如图2所示,后台组件与前台组件相连接,前台组件与HTTP接口相连接,例如,前台组件可以包括用于公司上下班考勤打卡的刷脸考勤机摄像头,摄像头获取人脸图像之后,向HTTP接口发送调用人工智能检测实例请求。
在某些实施方式中,在该人工智能检测实例根据该调用请求指令进行运算之前,该后台组件还用于实现:
若该人工智能检测实例当前不可用,则该互斥访问组件重复获取对应于该HTTP接口的该人工智能检测实例的互斥锁的状态,根据该互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,直至对应于该HTTP接口的人工智能检测实例当前可用为止。
在某些实施方式中,初始化该人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例,包括:
使用python自带的类(class)数据结构,将该人工智能检测模型所需的整个工作流程的功能函数封装成一个AI服务类。
在某些实施方式中,实现该互斥访问组件获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,包括:
该互斥访问组件以人工智能检测实例本身的实例名为键值去判断该人工智能检测实例的互斥锁的状态,根据该互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用。
在某些实施方式中,该互斥访问组件获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,包括:
为该调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过该超时时间则继续尝试抢占,通过互斥访问组件尝试以人工智能检测实例的名称为键值和该识别符作为值执行赋值操作,如果赋值失败,则证明该人工智能检测实例当前不可用;否则,该人工智能检测实例当前可用。
在某些实施方式中,在实现该人工智能检测实例根据该调用请求指令进行运算之前,该后台实现装置还用于实现:
若赋值成功,则给互斥访问组件的键值设置计算超时时间,执行该人工智能检测实例的推理计算函数,在完成计算过程后,释放该键值,释放互斥锁。
在某些实施方式中,该互斥访问组件为远程字典服务。
在某些实施方式中,该人工智能检测模型包括AI算法的模型文件和AI算法代码文件。
如图3所示,本申请的一个实施例提供了一种用于实现人工智能检测的方法,包括:
S10、后台组件启动后,初始化HTTP接口,及初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例。可选地,根据实际需要,该HTTP接口可以替换为其他的交互接口。
该人工智能检测模型包括AI算法的模型文件和AI算法代码文件。每个人工智能检测实例具有一个AI实例接口;在每个人工智能检测实例中设置有一个互斥锁;互斥锁能够保证在任一时刻,只能有一个HTTP接口访问该人工智能检测实例,实现人工智能检测实例的排他独立调用机制;每个人工智能检测实例对应于若干HTTP接口,当人工智能检测实例可调用时,与该人工智能检测实例相对应的每个HTTP接口按照请求调用先后顺序与该人工智能检测实例的AI实例接口对接以调用该人工智能检测实例。
在某些实施方式中,采用Python语言,该人工智能检测模型初始化,生成多个设置有互斥锁的人工智能检测实例,包括:
使用python自带的class数据结构,将该人工智能检测模型所需的整个工作流程的功能函数封装成一个AI服务类。
人工智能检测实例是基于人工智能检测模型和代码实例化的一个存储于内存的数据结构。人工智能检测模型在运行时候有个显著特点是初始化的时间很长,在运行过程中会占用主机和显卡的内存,并在运行完毕后释放。如果每次接受应用请求都进行一次初始化的处理的话,HTTP接口的访问延时将会非常大,当需要多次执行HTTP接口的时候,就需要将人工智能检测模型进行实例化,另起常驻于内存和显存,而无需在每次执行来自HTTP接口的调用请求指令时都重复进行初始化工作。
每个调用人工智能检测实例的HTTP接口都对应有一个具有互斥锁的人工智能检测实例,至于各个HTTP接口所对应的人工智能检测实例是否相同则需要根据实际应用场景和业务场景确定下来,例如一个识别打印材料文字的OCR算法,会分别为识别书本材料、发票材料或身份证材料等各种应用接口去实例化对应的专属人工智能检测模型。多个HTTP接口可以对应于同一个人工智能检测实例,当多个HTTP接口调用该人工智能检测实例时,则人工智能检测实例的按序调用安排机制起作用,按照时间先后顺序被各HTTP接口所调用并运行。
人工智能检测模型相当于一个固定化的“模板”,由AI算法的模型文件、AI算法代码文件组成,是计算机内实实在在的文件,而人工智能检测实例,是指人工智能检测模型运行起来之后,存储在计算机内存里的数据结构。同一套人工智能检测模型代码可以运行生成多个人工智能检测实例,就如同一个“模板”,能生产很多个有相同属性的产品一样。
S20、当HTTP接口接收到来自前台组件的调用请求指令时,响应于该调用请求指令,互斥访问组件获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用。
在某些实施方式中,该互斥访问组件获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,包括:
该互斥访问组件以人工智能检测实例本身的实例名为键值去判断该人工智能检测实例的互斥锁的状态,根据该互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用。
在某些实施方式中,该互斥访问组件获取对应于该HTTP接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,包括:
为该调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过该超时时间则继续尝试抢占,通过互斥访问组件尝试以人工智能检测实例的名称为键值和该识别符作为值执行赋值操作,如果赋值失败,则证明该人工智能检测实例当前不可用;否则,该人工智能检测实例当前可用。
在某些实施方式中,若赋值成功,则给互斥访问组件的键值设置计算超时时间,执行该人工智能检测实例的推理计算函数,在完成计算过程后,释放该键值,释放互斥锁。
在某些实施方式中,该互斥访问组件为远程字典服务。
S30、若该人工智能检测实例当前可用,则通过HTTP接口接入与该HTTP接口相对应的人工智能检测实例,调用该人工智能检测实例。
例如,人工智能检测实例为一个人脸识别的人工智能检测实例,用于公司上下班人脸识别打卡,当通过HTTP接口接入人脸识别请求时,若人工智能检测实例可用,则调用该人工智能检测实例进行人脸识别。
S50、该人工智能检测实例根据该调用请求指令进行运算,并将运算结果通过该HTTP接口反馈到前台组件;前台组件接收来自后台组件的反馈,发送给客户端。
例如,用于人脸识别的人工智能检测实例识别人脸后,将人脸识别的结果通过HTTP接口发送到前台组件,前台组件接收来自后台组件的反馈,发送给客户端,实现人脸识别上下班打卡。
在某些实施方式中,在步骤S50之前,该后台实现方法还包括:
S40、若该人工智能检测实例当前不可用,则该互斥访问组件重复获取对应于该HTTP接口的该人工智能检测实例的互斥锁的状态,根据该互斥锁的状态判断对应于该HTTP接口的人工智能检测实例当前是否可用,直至对应于该HTTP接口的人工智能检测实例当前可用为止。
本申请的另一个实施例提供了一种电子设备,包括存储器、处理器及存储在该存储器上并可在该处理器上运行的计算机程序,该处理器执行该程序,以实现上述的用于实现人工智能检测的方法。
本申请的另一个实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现上述的用于实现人工智能检测的方法。
本申请的另一个实施例提供了一种用于实现人工智能检测的方法,包括:当后台服务启动时候,先初始化人工智能检测模型生成若干人工智能检测实例,当有AI应用请求来临时,对应请求的HTTP接口会调用该人工智能检测实例进行AI检测处理运算,而在人工智能检测实例执行处理运算之前,利用第三方组件Redis与人工智能检测实例进行通信获取互斥锁状态以便确定人工智能检测实例当前是否可用,如果当前可用,则进行后续的处理运算过程,完成后释放互斥锁,接着HTTP接口给前台组件返回计算结果。如果人工智能检测实例当前不可用,则会不断获取人工智能检测实例状态直到发生超时异常为止。
如图2所示,后台组件与前台组件电连接,前台组件与后台组件的HTTP接口相连接,前台组件可以包括用于公司上下班考勤打卡的刷脸考勤机摄像头,摄像头获取人脸图像之后,向HTTP接口发送调用人工智能检测实例请求。
为了实现人工智能检测实例的排他独立调用机制,本实施例使用python自带的class数据结构,将人工智能检测模型所需的整个工作流程如初始化模式配置、加载算法模型、进行AI计算推理、清理缓存等功能函数封装成一个AI服务类。
上述代码声明并实现了人工智能检测模型的一个类,命名为AI_demo_instance,调用者可以通过ai_model=AI_model_instance(config)的方法实例化人工智能检测模型。其初始化函数__init__主要功能是基于一个配置文件config实现该人工智能检测模型的底层框架的初始化,并保存至人工智能检测实例的私有变量self._instance,另一个变量self.instance_name是使用uuid库随机生成的唯一编码,用于实现接口内人工智能检测实例访问互斥锁的关键,下文调用方式部分会详细展开。函数_clear_gpu_cache是实现每次进行AI计算之后,清空当前的运算状态,使得每次AI运算都是基于完全一致的初始状态的基础上进行。函数inference则是该AI服务算法的主要计算函数,即以file_to_detect为入参(可以是图片、视频、音频等类别文件),利用人工智能检测模型进行推理运算,得到运算结果(result),然后调用
_clear_gpu_cache清理缓存,最后返回检测结果(result)。
在HTTP接口初始化的时候,利用既有的人工智能检测模型和代码运行并生成专属的人工智能检测实例,确保当多个HTTP接口需要访问相同的人工智能检测实例时不会出现争抢资源的情况。
人工智能检测实例的排他调用方式:
由于基于python的web服务框架种类较多,但使用方法相似,本实施例将以Tornado作为例子描述人工智能检测实例的排他调用方法。
在Tornado框架下,每个HTTP接口本质上就是一个python类,为了使不同HTTP接口调用的人工智能检测实例相互隔离,本实施例提出的解决方案是,在该HTTP接口类初始化时候,即实例化该HTTP接口专属调用的人工智能检测实例,由于HTTP接口初始化过程中加入了人工智能检测模型初始化的过程,因此会使得HTTP接口初始化时间变长,从而也使得后台服务器端启动时间会延长,但通过这种一次性的加载人工智能检测模型的方案,带来的好处是后续HTTP接口调用人工智能检测实例进行运算的时候就不需要进行重复的初始化工作了。
上述便是一种实现排他性人工智能检测实例的实现方式,例子中SomeAPIHander_A是一个POST接口服务的实现类,在接口实现类前,本方案先实例化了一个人工智能检测模型的变量exclusive_ai_instance_A,然后在接口服务类初始化函数(initialize)里将当前接口的私有变量self._exclusive_ai_instance赋值为exclusive_ai_instance_A。当有POST请求需要处理的时候,可以通过直接调用
self._exclusive_ai_instance.inference()进行AI运算,并将对应计算结果返回给接口调用方。当有多个接口实现类需要调用该人工智能检测模型的时候,都需要为每一个接口实例化一个私有的exclusive_ai_instance,从而实现了多个接口服务之间对人工智能检测模型的调用互相隔离,不会出现GPU争抢的情况。
当遇到多个请求同时抵达服务端的情况,还是会出现人工智能检测实例的争抢情况,因此针对HTTP接口也需要相应的互斥访问机制,本实施例使用的基于Redis(Redis,Remote Dictionary Server,即远程字典服务)的访问互斥锁的方案,以人工智能检测实例本身的实例名self.instance_name为键值key去判断当前人工智能检测实例的互斥锁的状态,以确定当前的人工智能检测实例是否可以被调用,由于Redis的单线程访问机制,使得当多个线程(进程)同时访问Redis的时候,不会出现读取到脏数据的情况。
HTTP接口抢占人工智能检测实例的逻辑如上,在收到前台组件的POST请求后,后台需要先给当前调用请求生成一个识别符(identifier),通过uuid.uuid1()生成该标识符,并设置抢占人工智能检测实例的超时时间,此处以1000毫秒为例。然后进入抢占逻辑的while循环分支代码段,通过判断当前时间time.time()是否超过超时时间end_ts则继续尝试抢占,通过Redis前台组件的setnx命令,尝试以人工智能检测实例的名称
self._exclusive_ai_instance.instance_name为键值key,上述提及的会话识别符(identifier)作为值(value)执行赋值操作,如果失败,则证明已经存在别的线程设置了对方的识别符,则等待0.01秒后进行下一次尝试,如果成功,则首先给该Redis的键值key设置计算超时时间,本例同样为1秒,防止人工智能检测模型计算过程中出现异常导致Redis的key释放异常,然后正常执行人工智能检测实例的推理计算函数,在完成计算过程后,则主动释放该键值key,释放互斥锁。以上,便是判断人工智能检测实例当前是否可用的方案。
人工智能检测实例根据该调用请求指令进行运算,并将运算结果通过HTTP接口反馈到前台组件。至此,便是整个面向实时AI检测后台的实现方案,通过利用python的语法特性以及Redis的单线程执行特性,实现了后台的基于不同情况的AI算法资源的隔离的目的。
HTTP接口会调用人工智能检测实例的检测功能,但是该人工智能检测实例是在HTTP接口外部进行初始化的。
本实施例的后台的组建模式主要是在传统接口部署的基础上,添加了面向HTTP接口的具有按序调用安排机制的人工智能检测实例。因此本实施例提出的方法能够确保每个HTTP接口都具有一个与其相对应的、具有独立性排他性的人工智能检测实例,同时结合互斥访问组件获取人工智能检测实例当前是否可用的信息,能够实现人工智能检测实例的按序调用安排机制,能够确保多个HTTP接口按照顺序有序调用相对应的人工智能检测实例,从而克服了多个HTTP接口同时调用同一个人工智能检测实例的时候会发生资源争抢的情况,提高了工作效率,避免了调用混乱,降低了故障发生率。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述实施例仅表达了本申请的实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (8)
1.一种用于实现人工智能检测的电子装置,其特征在于,包括:
处理器,用于控制所述装置中的组件;
后台组件,用于在启动后,初始化交互接口,及初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;
所述后台组件还用于当交互接口接收到来自前台组件的调用请求指令时,响应于所述调用请求指令,获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;
所述后台组件还用于若所述人工智能检测实例当前可用,则通过交互接口接入与所述交互接口相对应的人工智能检测实例,调用该人工智能检测实例;
所述后台组件还用于所述人工智能检测实例根据所述调用请求指令进行运算,并将运算结果通过所述交互接口反馈到前台组件;
前台组件,用于接收来自外部客户端的调用请求指令,并发送给后台组件;以及,接收来自后台组件的反馈,发送给客户端;
存储器,与所述处理器相耦合,用于存储所述人工智能检测模型和所述人工智能检测实例;
所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
为所述调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过所述超时时间则继续尝试抢占,尝试以人工智能检测实例的名称为键值和所述识别符作为值执行赋值操作,如果赋值失败,则证明所述人工智能检测实例当前不可用;否则,所述人工智能检测实例当前可用。
2.根据权利要求1所述的装置,其特征在于,所述后台组件进一步包括互斥访问组件,所述互斥访问组件用于获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;在所述人工智能检测实例根据所述调用请求指令进行运算之前,所述后台组件还用于实现:
若所述人工智能检测实例当前不可用,则所述互斥访问组件重复获取对应于所述交互接口的所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,直至对应于所述交互接口的人工智能检测实例当前可用为止。
3.根据权利要求1所述的装置,其特征在于,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
以人工智能检测实例本身的实例名为键值去判断所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用。
4.根据权利要求2所述的装置,其特征在于,所述互斥访问组件为远程字典服务。
5.一种用于实现人工智能检测的方法,其特征在于,包括:
后台组件启动后,初始化交互接口,初始化人工智能检测模型,生成多个设置有互斥锁的人工智能检测实例;
当交互接口接收到来自前台组件的调用请求指令时,响应于所述调用请求指令,获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;
若所述人工智能检测实例当前可用,则通过交互接口接入与所述交互接口相对应的人工智能检测实例,调用该人工智能检测实例;
所述人工智能检测实例根据所述调用请求指令进行运算,并将运算结果通过所述交互接口反馈到前台组件;
前台组件接收来自后台组件的反馈,发送给客户端;
所述后台组件进一步包括互斥访问组件,所述互斥访问组件用于获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用;
所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
为所述调用请求指令生成一个识别符,设置抢占人工智能检测实例的超时时间,进入抢占逻辑的循环分支,通过判断当前时间是否超过所述超时时间则继续尝试抢占,通过互斥访问组件尝试以人工智能检测实例的名称为键值和所述识别符作为值执行赋值操作,如果赋值失败,则证明所述人工智能检测实例当前不可用;否则,所述人工智能检测实例当前可用。
6.根据权利要求5所述的方法,其特征在于,在所述人工智能检测实例根据所述调用请求指令进行运算之前,所述方法还包括:
若所述人工智能检测实例当前不可用,则重复获取对应于所述交互接口的所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,直至对应于所述交互接口的人工智能检测实例当前可用为止。
7.根据权利要求5所述的方法,其特征在于,所述获取对应于所述交互接口的人工智能检测实例的互斥锁的状态,根据互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用,包括:
以人工智能检测实例本身的实例名为键值去判断所述人工智能检测实例的互斥锁的状态,根据所述互斥锁的状态判断对应于所述交互接口的人工智能检测实例当前是否可用。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行,以实现如权利要求5-7中任一所述的用于实现人工智能检测的方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010687231.XA CN111831463B (zh) | 2020-07-16 | 2020-07-16 | 用于人工智能检测的电子装置及方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202010687231.XA CN111831463B (zh) | 2020-07-16 | 2020-07-16 | 用于人工智能检测的电子装置及方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111831463A CN111831463A (zh) | 2020-10-27 |
| CN111831463B true CN111831463B (zh) | 2024-09-06 |
Family
ID=72923024
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202010687231.XA Active CN111831463B (zh) | 2020-07-16 | 2020-07-16 | 用于人工智能检测的电子装置及方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN111831463B (zh) |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106776050A (zh) * | 2016-10-17 | 2017-05-31 | 广州视源电子科技股份有限公司 | 多用户进程互斥方法及装置 |
| CN109144685A (zh) * | 2017-06-16 | 2019-01-04 | 通用汽车环球科技运作有限责任公司 | 支持多处理系统中的可重新配置同步的架构和服务 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8589333B2 (en) * | 2008-08-19 | 2013-11-19 | Northrop Grumman Systems Corporation | System and method for information sharing across security boundaries |
| US9703532B1 (en) * | 2014-09-30 | 2017-07-11 | The Mathworks, Inc. | Dynamically updating class instances based on class definition changes |
-
2020
- 2020-07-16 CN CN202010687231.XA patent/CN111831463B/zh active Active
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106776050A (zh) * | 2016-10-17 | 2017-05-31 | 广州视源电子科技股份有限公司 | 多用户进程互斥方法及装置 |
| CN109144685A (zh) * | 2017-06-16 | 2019-01-04 | 通用汽车环球科技运作有限责任公司 | 支持多处理系统中的可重新配置同步的架构和服务 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN111831463A (zh) | 2020-10-27 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7788668B2 (en) | System and method for implementing distributed priority inheritance | |
| US7058950B2 (en) | Callback event listener mechanism for resource adapter work executions performed by an application server thread | |
| US20170270151A1 (en) | Dynamic code loading | |
| CN111400000B (zh) | 网络请求处理方法、装置、设备和存储介质 | |
| US7171663B2 (en) | External event interrupt for server-side programs | |
| CN108733496B (zh) | 事件处理方法和装置 | |
| CN110569121B (zh) | 基于应用机器人的多线程并发处理方法和装置 | |
| CN109471711B (zh) | 一种任务处理的方法及装置 | |
| CN114610404B (zh) | 基于应用框架的组件调用方法、装置和计算机设备 | |
| CN111026541B (zh) | 渲染资源调度方法、装置、设备及存储介质 | |
| CN110262842A (zh) | 一种启动组件的方法及终端 | |
| CN111831463B (zh) | 用于人工智能检测的电子装置及方法 | |
| CN112099868A (zh) | 一种跨浏览器调用控件的方法和系统 | |
| CN115601221A (zh) | 一种资源的分配方法、装置和一种人工智能训练系统 | |
| CN115114022A (zh) | 对gpu资源进行使用的方法、系统、设备及介质 | |
| CN118963718B (zh) | 神经网络处理单元的接口调用装置、方法、设备和介质 | |
| CN113032118A (zh) | 用于计算机应用程序的异步操作处理方法和相应的系统 | |
| CN110245027B (zh) | 一种进程间通信的方法和设备 | |
| WO2015184902A1 (zh) | 一种智能分屏的并发处理方法及相应的智能终端 | |
| CN115827121A (zh) | 基于图元素的异步仿真执行引擎系统及方法 | |
| CN115237565B (zh) | 任务处理方法、装置、程序产品、计算机设备和介质 | |
| WO2025153094A1 (zh) | 系统服务调度方法、装置、计算机设备及存储介质 | |
| US20250377956A1 (en) | Method, device, and computer program product for generating executable scripts | |
| CN113159076B (zh) | 一种基于图像识别加载对比信息的方法及装置 | |
| US20160026447A1 (en) | Console application through web service |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |