背景
使用的特定的设备进行深度学习模型的推理,该机器仅仅提供了C++封装好的API进行模型的加载启动与推理,模型的训练依然是使用caffe,模型需要转化成该设备支持的格式,模型的转化这里就不在介绍。为了把模型的推理做成一种服务,只能上手C++,搭建HTTP服务,使得用户通过http服务post一张图片,服务器启动模型推理,实现模型的预测,并把结果返回给客户端。
整体框架
服务短的服务内容就是对接收的图片进行预处理,然后进行模型的推理,目前需要做的一点就是引入HTTP服务
前期调研
对于一个C++新手,前期调研当然是先进行搜索,http server c++搜处理的结果也是五花八门,有的是教你如何通过实现一个http服务器,有的是一个用第三方库,有的是直接怼一堆代码。。。知道在stackoverflow上看到了:
why
not try NGINX with fcgi-function mapping?
实现步骤
nginx这个是做代理的神器,做负载均衡的时候也经常用,只要我的客户端的内容发送的nginx上,然后nginx把数据转发给fcgi相关的应用就可以,我需要做的就是把fcgi和我的推理程序结合起来就可以。
nginx
简单说nginx就是中间商,客户端把请求发给中间商,中间商去货源地把货拿上,让后给客户回应:
客户告诉nginx 我要购买**商品,nginx就去对于的服务提供商取出对于服务并把它返回给客户。
目前需要的就是实现fcgi 部分,那么什么是fcgi?
cgi
通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。
这里的标准输入输出是对应的一些环境变量主要包含有与请求相关的环境变量,与服务器相关的环境变量,与客户端相关的环境变量三大类。
fastcgi
FastCGI 实际上是增加了一些扩展功能的 CGI 、是 CGI 的改进,同样也是描述客户端和Web服务器程序之间传输数据的一种标准。
FastCGI 致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。与 CGI 为每个Web请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。
新闻热点
疑难解答