你或许也想拥有专属于自己的ai模型文件格式(推理部署篇)-(代码片段)

慷仔 慷仔     2022-12-06     327

关键词:

OCL-ENGINE的CPU Debug调试接口适配

哈哈哈,这段时间有些空闲时间去完善OCLEngine工程,所以有些高产。
为了验证核心函数的正确性,本次主要完善之前预留的cpu推理调试接
口。同样是以Conv2d和Pool2d算子适配工作为主。

1、前言

本次的进展内容:

  • 在engine.hpp中增加了余弦相似度计算模板函数
  • 增加了InferenceDebugByCpu调试推理接口
  • 仿照了对应的cl核函数实现,适配了卷积(Conv2d)算子和池化(Pool2d)算子的cpu_run调试接口

本次文章的主要内容:

  • 介绍余弦相似度计算函数的实现细节
  • InferenceDebugByCpu调试推理接口的调用流程和具体实现
  • cpu_run调试推理部分如何从cl核函数转换

2、介绍余弦相似度计算函数的实现细节

2.1、模板函数实现

/*----------------------quadraticSum函数用途-------------------------------*/
    //用途:这是一个归一化的函数,将输出特征进行归一化操作
    template <typename T>
    void quadraticSum(T* packFeature, size_t fea_size)
    
        double squre = 0.0;
        for (size_t i = 0; i < fea_size; i++)
        
            squre += (double)(packFeature[i] * packFeature[i]);
        
        double root = std::sqrt(squre);
        for (size_t i = 0; i < fea_size; i++)
        
            packFeature[i] = (T)(packFeature[i]/root);
        

        return;
    


    /*----------------------CosineSimilarity函数用途-------------------------------*/
    template <typename T>
    double CosineSimilarity(T* fea1, T* fea2, size_t fea_size)
    
        double product = 0.0;
        quadraticSum(fea1, fea_size);
        quadraticSum(fea2, fea_size);

        for (size_t i = 0; i < fea_size; i++)
        
            product = product + (double)(fea1[i] * fea2[i]);
        
        return 0.5 * product + 0.5;
    

3、InferenceDebugByCpu调试推理接口

3.1、调用流程

具体的调用流程示例如下所示:

    // 首先进行一次OCLEngine的opencl推理,其内部会把计算好的结果放入到对应的cl_mem对象中
    OCLEngine::Inference();
    // 如果设置了异步推理,需要进行WaitFinish等待命令队列的所有命令结束
    if(OCLEngine::WaitFinish() == false)
        printf("error when waiting finish\\n");
    
    // 最后才调用InferenceDebugByCpu()进行cpu的相关调试推理
    OCLEngine::InferenceDebugByCpu();

3.2、实现细节

具体的调用流程示例如下所示:

    /* 进行推理的接口 */
    bool InferenceDebugByCpu()
        /* 配合上述Inference接口使用,确保cl_mem数据全部被赋值,同时没被使用 */
        for(size_t i = 0; i < AllLayers.size(); i++)
            AllLayers[i]->cpu_run();//调用了算子的cpu_run实现
        
        return true;
    

4、cpu_run调试推理部分如何从cl核函数转换

4.1、关于opencl的cl核函数说明

  • cl核函数内部遵循了C99编程语言标准,内部的代码跟C语言一致;
  • cl核函数内部的逻辑只代表一个工作项的所有工作,具体的循环是靠外部调用clEnqueueNDRangeKernel函数时设置的globalWorkSize去切分;

4.2、从cl核函数转换成Cpu推理代码的流程

  • 1、变量替换:cl的传参用外部变量替换
转cpu batchSize this->cfg.batchSize
  • 2、预编译替换:cl的预编译用条件语句替换
转cpu #ifdef HASBIAS if (biases != NULL)
  • 3、显示循环:cl的工作项用cpu循环语句替换
转cpu int ohx = get_global_id(1); for(size_t ohx = 0; ohx < this->cfg.outputHeight; ohx++)

5、精度测试

测试条件跟上次的一致,测试结果如下所示:

conv2d CosineSimilarity value = 99.9999972397
pool2d CosineSimilarity value = 99.9999996682
inference time is 54.398 fps

结果显示:两个算子的精度都在百分比精度的第6位,说明精度已经分别高了。

6、工程源码下载

可直接访问该网址https://github.com/pengzhikang/Custom-Model.git

git clone -b OCLEngine https://github.com/pengzhikang/Custom-Model.git

7、后续计划与安排

如下所示:

  • 适配更多常用算子:常见激活算子relu、sigmoid等
  • 模型转换工具:需要编写一个模型转换工具去转换比如pytorch或者是caffe,甚至是darknet的训练前端模型到自定义的模型上。
  • 其他:异构推理(调度多计算设备去同时进行一次推理)、量化支持等

实战教程|用让新海诚本人惊讶的ai模型制作属于你的动漫视频

大家好,我是Charmve!本文将介绍如何使用GAN模型来生成属于你自己的动漫风格的视频,为自己、喜欢的菇凉或者调皮可爱孩子生成一个别具一格的动漫风格的视频。本文操作难度较低,适合想要试玩了解GAN模型的同学。可以同... 查看详情

人工智能ai想要搭建“真本地”的永远免费-真正属于自己的chatgpt吗?国产开源版chatglm:保姆级上手教程!

清华智谱 AI开源了 GLM 系列模型的新成员——中英双语对话模型ChatGLM-6B,支持在单张消费级显卡上进行推理使用。这是继此前开源 GLM-130B千亿基座模型之后,智谱 AI 再次推出大模型方向的研究成果。与此... 查看详情

如何使用openaifine-tuning(微调)训练属于自己专有的chatgpt模型?(代码片段)

要使用OpenAI的微调技术来训练自己的专有模型,您需要遵循以下步骤:获取和准备数据集:首先,您需要准备自己的数据集。可以使用公共数据集,也可以使用自己的数据集。数据集需要以特定格式(如JSONL)进行存储,并且需... 查看详情

专属于自己的cad绘图工具,提高你的绘图效率

迅捷CAD编辑器专业版兼容AutoCAD设计软件,可支持工程建筑、机械行业等领域中工程图纸设计和编辑工作。软件特点:支持AutoCAD功能、高兼容性设计图纸编辑、适应多种工程行业施工设计、支持二次开发和移植。那有什么功能可... 查看详情

为你写诗:3步搭建serverlessai应用

...AI场景做些什么?Serverless分为FaaS和BaaS,阿里云函数计算属于FaaS,是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行... 查看详情

如何拥有一个属于自己的网站

前言网站顾名思义就是网上的一个站点 而你打开的页面就是一个站点上的一个一个文件。那就有人问了,我有一台可以上网的计算机可不可以当站点用呢?答案是肯定的通俗点来讲就跟你平时串门一样这家门开着你就可以进... 查看详情

干货零基础30分钟让你拥有一个完整属于自己的短视频app系统

  目录一、附言: 1二、购买域名和购买服务器: 2三、搭建服务器环境: 5四、配置APP前端部分: 81.工具以及文件准备: 92.配置后端接口地址 113.配置APP启动图和启动图标 12五、搭建APP后端部分 13步骤,一步步输入并且... 查看详情

地址标准化服务ai深度学习模型推理优化实践

...持响应时间不变的前提下,使用结构更为复杂的深度学习模型,进而提升业务精度指标。本文针对地址标准化服务中的深度学习模型开展了推理性能优化工作。通过高性能算子、量化、编译优化等优化手段,在精度 查看详情

想拥有一台属于你自己的无人机嘛?

  首先送上好消息:下周Galaxis Wars将在HTCVive上推出星际争霸游戏。  故事背景是:100年后,人类已经受够了在地球争斗,于是人类将眼光放至其他星球,试图寻一个全新的机会,让一切重焕希望。   虚拟现实(VR... 查看详情

四种ai技术方案,教你拥有自己的avatar形象

大火的Avatar到底是什么?随着元宇宙概念的大火,Avatar这个词也开始越来越多出现在人们的视野。2009年,一部由詹姆斯・卡梅隆执导3D科幻大片《阿凡达》让很多人认识了Avatar这个英语单词。不过,很多人并不知... 查看详情

地址标准化服务ai深度学习模型推理优化实践

...应时间不变的前提下,使用结构更为复杂的深度学习模型,进而提升业务精度指标。本文针对地址标准化服务中的深度学习模型开展了推理性能优化工作。通过高性能算子、量化、编译优化等优化手段,在精度指标不... 查看详情

极智ai|tensorrtparser构建模型推理方法(代码片段)

...好,我是极智视界,本文介绍一下TensorRTParser构建模型推理方法。 TensorRT构建模型推理一般有三种方式:(1)使用框架自带的TensorRT接口,如TF-TRT、Torch-TRT;(2)使用Parser前端解释器,如TF/ 查看详情

极智ai|libtorch调用模型推理方法(代码片段)

...大家好,我是极智视界,本文介绍一下libtorch调用模型推理方法。 之前写了一篇《ubuntu安装libtorch》,所以关于ubuntu上安装libtorch的方法,有兴趣的同学可以自行查看。libtorch是pytorch的C++版本,支 查看详情

定制专属于你的系统安装镜像

mount/dev/sr0/mnt/cdrommkdir/application/centos7-prsync-a--exclude=/mnt/cdrom/Packages/--exclude=/mnt/cdrom/repodata//mnt/cdrom//application/centos7/本文出自“silence”博客,请务必保留此出处http://silencezone.blog.51c 查看详情

springboot中怎么集成swagger,让你拥有属于自己的api管理器(代码片段)

springboot项目中怎么集成Swaggerswagger世界上最好的api管理工具文章目录springboot项目中怎么集成Swagger前言一、swagger是什么?1.1为什么swagger开始流行二、swagger集成在springboot1.1maven引入依赖2.2编写Controller层,测试确保运行成... 查看详情

经历过的一切是属于你的独特财富

...母过上安逸的日子,渴望得到一份完美的幸福爱情,渴望拥有能互相扶持携手并进的知己好友,渴望能有一部属于自己的 查看详情

新一代推理部署工具fastdeploy与十大硬件公司联合打造:产业级ai模型部署实战课...

...需要面对的适配部署工作也越来越复杂。层出不穷的算法模型、各种架构的AI硬件、不同场景的部署需求、不同操作系统和开发语言,为AI开发者项目落地带来极大的挑战。为了解决AI部署落地难题,我们发布了新一代面... 查看详情

用opencv的dnn模块调onnx模型文件

...机器学习所设计的开放式的文件格式,用于存储训练好的模型。用于在各种深度学习训练和推理框架转换的一个中间表示格式。它定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性,开放性较强。2.在对... 查看详情