-
一、模型在线部署深度学习和计算机视觉方向除了算法训练/研究,还有两个重要的方向: 模型压缩(模型优化、量化)、模型部署(模型转换、后端功能SDK开发)。所谓模型部署,即将算法研究员训练出的模型部署到具体的端边云芯片平台上,并完成特定业务的视频结构化应用开发。现阶段的平台主要分为云平台(如英伟达 GPU)、手机移动端平台(ARM 系列芯片)和其他嵌入式端侧平台(海思 3519、安霸 CV22、地平线 X3、英伟达 jetson tx2 等芯片)。对于模型部署/移植/优化工程师来说,虽然模型优化、量化等是更有挑战性和技术性的知识,但是对于新手的我们往往是在做解决模型无法在端侧部署的问题,包括但不限于:实现新 OP、修改不兼容的属性、修改不兼容的权重形状、学习不同芯片平台的推理部署框架等。对于模型转换来说,现在行业主流是使用 Caffe 和 ONNX 模型作为中间模型。1.1,深度学习项目开发流程在高校做深度学习 demo 应用一般是这样一个过程,比如使用 Pytorch/TensorFlow 框架训练出一个模型,然后直接使用 Pytorch 框架做推理(test)完成功能验证,但是在工业界这是不可能的,因为这样模型推理速度很慢,一般我们必须有专门的深度学习推理加速框架去做模型推理(inference)。以 GPU 云平台推理框架 TensorRT 为例,简单描述模型训练推理过程就是:训练好网络模型(权重参数数据类型为 FP32)输入 TensorRT,然后 TensorRT 做解析优化,并进行在线推理和输出结果。两种不同的模型训练推理过程对比如下图所示: 前面的描述较为简单,实际在工业届,理想的深度学习项目开发流程应该分为三个步骤: 模型离线训练、模型压缩和模型在线部署,后面两个步骤互有交叉,具体详情如下:模型离线训练:实时性低,数据离线且更新不频繁,batchsize 较大,消耗大量 GPU 资源。设计开发模型网络结构;准备数据集并进行数据预处理、EDA 等操作;深度学习框架训练模型:数据增强、超参数调整、优化器选择、训练策略调整(多尺度训练)、TTA、模型融合等;模型测试。模型优化压缩:主要涉及模型优化、模型转换、模型量化和模型编译优化,这些过程很多都在高性能计算推理框架中集成了,各个芯片厂商也提供了相应的工具链和推理库来完成模型优化压缩。实际开发中,在不同的平台选择不同的推理加速引擎框架,比如 GPU 平台选择 TensorRT,手机移动端(ARM)选择 NCNN/MNN,NPU 芯片平台,如海思3519、地平线X3、安霸CV22等则直接在厂商给出的工具链进行模型的优化(optimizer)和压缩。模型优化 Optimizer:主要指计算图优化。首先对计算图进行分析并应用一系列与硬件无关的优化策略,从而在逻辑上降低运行时的开销,常见的类似优化策略其包括:算子融合(conv、bn、relu 融合)、算子替换、常数折叠、公共子表达式消除等。模型转换 Converter:Pytorch->Caffe、Pytorch->ONNX、ONNX模型->NCNN/NPU芯片厂商模型格式(需要踩坑非常多,Pytorch、ONNX、NPU 三者之间的算子要注意兼容)。注意 ONNX 一般用作训练框架和推理框架之间转换的中间模型格式。模型量化 Quantizer:主要指训练后量化(Post-training quantization PTQ);权重、激活使用不同的量化位宽,如速度最快的量化方式 w8a8、速度和精度平衡的量化方式 w8a16。模型编译优化(编译优化+NPU 指令生成+内存优化)Compiler:模型编译针对不同的硬件平台有不同优化方法,与前面的和硬件无关的模型层面的优化不同。GPU平台存在 kernel fusion 方法;而 NPU 平台算子是通过特定二进制指令实现,其编译优化方法包括,卷积层的拆分、卷积核权重数据重排、NPU 算子调优等。模型部署/SDK输出: 针对视频级应用需要输出功能接口的SDK。实时性要求高,数据线上且更新频繁,batchsize 为 1。主要需要完成多模型的集成、模型输入的预处理、非DL算法模块的开发、 各个模块 pipeline 的串联,以及最后 c 接口(SDK)的输出。板端框架模型推理: Inference:C/C++。不同的 NPU 芯片/不同的公司有着不同的推理框架,但是模型的推理流程大致是一样的。包括:输入图像数据预处理、加载模型文件并解析、填充输入图像和模型权重数据到相应地址、模型推理、释放模型资源。这里主要需要学习不同的模型部署和推理框架。pipeline 应用开发: 在实际的深度学习项目开发过程中,模型推理只是其中的基础功能,具体的我们还需要实现多模型的集成、模型输入前处理、以及非 DL 算法模块的开发: 包括检测模块、跟踪模块、选帧模块、关联模块和业务算法模块等,并将各模块串联成一个 pipeline,从而完成视频结构化应用的开发。SDK集成: 在完成了具体业务 pipeline 的算法开发后,一般就需要输出 c 接口的 SDK 给到下层的业务侧(前后端)人员调用了。这里主要涉及 c/c++ 接口的转换、pipeline 多线程/多通道等sample的开发、以及大量的单元、性能、精度、稳定性测试。芯片平台板端推理 Inference,不同的 NPU 芯片有着不同的 SDK 库代码,但是模型运行流程类似。不同平台的模型的编译优化是不同的,比如 NPU 和一般 GPU 的区别在于后端模型编译上,GPU 是编译生成 kernel library(cuDNN 函数),NPU 是编译生成二进制指令;前端的计算图优化没有本质区别,基本通用。所以综上所述,深度学习项目开发流程可以大致总结为三个步骤: 模型离线训练、模型优化压缩和模型部署/SDK输出,后两个步骤互有交叉。前面 2 个步骤在 PC 上完成,最后一个步骤开发的代码是需要在在 AI 芯片系统上运行的。最后以视差模型在海思 3519 平台的部署为例,其模型部署工作流程如下: 1.2,模型训练和推理的不同为了更好进行模型优化和部署的工作,需要总结一下模型推理(Inference)和训练(Training)的不同:网络权重值固定,只有前向传播(Forward),无需反向传播,因此:模型权值和结构固定,可以做计算图优化,比如算子融合等;输入输出大小固定,可以做 memory 优化,比如 feature 重排和 kernel 重排。batch_size 会很小(比如 1),存在 latency 的问题。可以使用低精度的技术,训练阶段要进行反向传播,每次梯度的更新是很微小的,需要相对较高的精度比如 FP32 来处理数据。但是推理阶段,对精度要求没那么高,现在很多论文都表明使用低精度如 in16 或者 int8 数据类型来做推理,也不会带来很大的精度损失。二、手机端CPU推理框架的优化对于 HPC 和软件工程师来说,在手机 CPU 端做模型推理框架的优化,可以从上到下考虑:算法层优化:最上面就是算法层,如可以用winograd从数学上减少乘法的数量(仅在大channel尺寸下有效);框架优化:推理框架可以实现内存池、多线程等策略;硬件层优化:主要包括: 适应不同的硬件架构特性、pipeline和cache优化、内存数据重排、NEON 汇编优化等。转自:cid:link_0
-
【问题来源】【必填】 天安人寿 【问题简要】【必填】 技能组排队等待音配置成通过IVR流程,在排队等待一段时间后溢出到其他队列失败 【问题类别】【必填】 IVR(gsl) 【AICC解决方案版本】【必填】 AICC 23.100 【期望解决时间】【选填】 尽快 【问题现象描述】【必填】 技能组排队等待音配置成通过IVR流程(IVR_Paidui_4008133.GSL),在排队等待一段时间后,查询另外一些技能组是否有空闲坐席,有的话直接转移呼叫,无空闲坐席继续在原技能组排队等待;现在的问题是经过”查询设备“、”队列状态“判断有可用坐席时,调用”转移呼叫“节点报错,无法转接呼叫,报错信息如下: 2023-09-21 16:03:55.282 205 $107$[转移呼叫] 2023-09-21 16:03:55.285 205 CCS(0)(0,10108)->IVR(255)(11,205): 拆线: 原因: [未定义: 717] 2023-09-21 16:03:55.286 205 CccRequestReroutingWithVDN WaitReturn=0 DeviceTyp=1 DeviceNo=5 DeviceVDN=1 Time=1695283393 Dsn=8291 Handle=1 Server=0 Ret=0 这个问题原来开过一个贴子(https://bbs.huaweicloud.com/forum/thread-0279130667516801004-1-1.html?ticket=ST-92399263-A7pVcfojfUltSrgEoURQTOZc-sso),依帖子中老师的建议:配置技能组的超时时长,排队等待超时时调用IVR流程实现重新排队和溢出功能。这种能实现这个功能,但选择重新排队用户又重新进入了队列,原来的等待时长就从0计算了,大屏监控中显示的最长排队等待时长也变为从重新排队时计算了,业务不接受这种方式!通过配置技能组等待音为IVR流程实现能完美实现这个功能,但现在溢出到其他技能组时报错,能否解决这个问题?谢谢!
-
鸿蒙开发使用ets语言,目前没有可用的对象存储服务sdk,因为后续鸿蒙开发者会越来越多,希望增加一下
-
【问题来源】【必填】 天安人寿 【问题简要】【必填】 技能组排队超时处理方式配置成IVR流程,在这个IVR流程中如何获取到原始的呼叫ID? 【问题类别】【必填】 IVR(gsl) 【AICC解决方案版本】【必填】 AICC 23.100 【期望解决时间】【选填】 尽快 【问题现象描述】【必填】 技能组排队超时处理方式配置成IVR流程,IVR流程中播报”很抱歉,现在坐席繁忙,如需电话回复请按1号键,继续等待请按2号键,结束请挂机“,用户按1记录数据库后挂断,第一次按2后继续在原技能组请求路由继续排队,第二次及以后按2后查询其他三个技能组是否有空闲坐席,有空闲坐席直接溢出,无空闲坐席继续在原技能组请求路由继续排队。 现在的问题是在排队超时的IVR流程中如何获取到原始的呼叫ID?我做了如下尝试: 1、通过获取呼叫ID节点获取的呼叫ID和发起转接流程呼叫ID不同,且多次排队超时调用此流程获取到的呼叫ID都不尽相同,我想通过呼叫ID为KEY值记录排队超时次数就行不通了 2、通过操作人工台数据,发起转接端能设置成功,排队超时IVR流程中无法获取到设置的人工台数据 3、通过操作IE信息设置/获取UUI信息,从发起端日志可看到设置成功了,但排队超时IVR流程中也无法获取到设置的UUI信息 附件为测试日志,test.GSL为发起转接的IVR流程,IVR_YiChu_4008133.GSL为排队超时IVR流程
-
【问题来源】【必填】 天安人寿 【问题简要】【必填】 技能组排队等待音配置成通过IVR流程,在排队等待一段时间后溢出到其他队列的坐席失败 【问题类别】【必填】 IVR(gsl) 【AICC解决方案版本】【必填】 AICC 23.100 【期望解决时间】【选填】 尽快 【问题现象描述】【必填】 技能组排队等待音配置成通过IVR流程(IVR_Paidui_4008133.GSL),在排队等待一段时间后,查询另外一些技能组是否有空闲坐席,有的话直接转移呼叫,无空闲坐席继续在原技能组排队等待;现在的问题是经过”查询设备“、”队列状态“判断有可用坐席时,调用”转移呼叫“节点报错,无法转接呼叫,报错信息如下: 2023-09-21 16:03:55.282 205 $107$[转移呼叫] 2023-09-21 16:03:55.285 205 CCS(0)(0,10108)->IVR(255)(11,205): 拆线: 原因: [未定义: 717] 2023-09-21 16:03:55.286 205 CccRequestReroutingWithVDN WaitReturn=0 DeviceTyp=1 DeviceNo=5 DeviceVDN=1 Time=1695283393 Dsn=8291 Handle=1 Server=0 Ret=0
yd_283595588
发表于2023-09-21 16:31:57
2023-09-21 16:31:57
最后回复
yd_283595588
2023-09-25 17:09:58
211 10 -
您好,我在使用OBS javasdk的文件上传API,使用中,我发现,对于大文件,使用官方提供的并发上传文件示例,比直接调 putObject方法速度还慢,具体代码如下:1.并发分段上传代码官方示例https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0607.html2.调用 putObject 上传文件public SaveObjectResult saveObject(String bucket, String objectKey, MultipartFile file) throws Exception { // 校验桶名称是否正确 bucket = checkBucketName(bucket); InputStream in = file.getInputStream(); SaveObjectResult saveObjectResult = new SaveObjectResult(); saveObjectResult.setOk(Boolean.FALSE); saveObjectResult.setStorageMediaType(OSSTypeEnum.OBS.name()); PutObjectResult putObjectResult = getClient().putObject(bucket, objectKey, in); if (putObjectResult != null && putObjectResult.getStatusCode() == HttpStatus.HTTP_OK) { saveObjectResult.setOk(Boolean.TRUE); saveObjectResult.setAccessUrl(putObjectResult.getObjectUrl()); } return saveObjectResult; }此处直接使用ObsCLient 的 PutObjectResult putObject(String bucketName, String objectKey, InputStream input) 方法。测试结果发现,使用并发分段上传,并没有节省时间,反而比直接使用putObject还慢,为什么会这样?怎么优化,才能让上传更快?
-
【问题来源】深圳容大【问题简要】trecordinfo表取值时间问题【问题类别】CC-dis【期望解决时间】在线等【问题描述】您好,在产生通话详单记录后,tcurrentbilllog表里有相应的数据记录,记录在关于时间有WAITBEGIN,WAITEND,ACKBEGIN,ACKEND,CALLBEGIN,CALLEND这几个时间字段中,想去trecordinfo[1,2,3,4,5,6,7,8,9,10,11,12]表查询录音记录,应该以哪个时间为准呢?
-
开发环境:keil软件使用#pragma section 指定内存地址#pragma section (".cal_data") volatile const float c_fRT1PedLatDist = 1.8F; volatile const float c_fCmsFldValveFreq = 1000; volatile const float c_fCmsFldValveDuty = 0; #pragma (section)编译报错../Core/Src/main.c(34): warning: #161-D: unrecognized #pragma #pragma arm section (".cal_data") ../Core/Src/main.c(38): warning: #161-D: unrecognized #pragma #pragma (section) ../Core/Src/main.c: 2 warnings, 0 errors linking... Program Size: Code=26572 RO-data=1356 RW-data=512 ZI-data=29464 FromELF: creating hex file... "pa2_0_min_sys\pa2_0_min_sys.axf" - 0 Error(s), 2 Warning(s). Build Time Elapsed: 00:00:04 Your Code
-
批量查询技能队列维度服务水平场景描述查询技能队列当前5分钟的服务水平相关数据。接口方法设置成“POST”。该接口仅支持POST方法,不支持PUT、GET和DELETE等方法。请求URLhttps://ip:port/rest/cmsapp/v1/openapi/skill/servicequality其中,ip为NSLB的服务器IP地址,port为CC-CMS服务在NSLB映射的HTTPS端口号。ak取值:/home/cmsapp/webapps/cmsapp/WEB-INF/classes/config/servicecloud.base.properties openapi.globalAppId=xxx sk取值:/home/cmsapp/webapps/cmsapp/WEB-INF/classes/config/security/servicecloud.security.properties openapi.globalSk=xx根据文档里面的demo生成Authorization,然后访问接口后报401错误,
-
请问一下IAM Token所在用户怎么订阅设备接入服务呀?小程序获取token之后获取设备影子报错403
-
目前需要定制化开发智慧安防基线服务,有以下疑问,请大佬们帮忙解答下:1.目前在用的是开发试用环境,要想进入多账号开发,是否需要申请购买开发环境?2.园区平台有基线应用demo:智慧安防,想基于这个基线应用定制化开发,该demo哪里可以申请到?需要走什么流程?3.安防中用到的摄像头等设备,在开发环境是否可以 提供 接入真实设备进行测试,如果不能,园区平台是否可以提供模拟设备进行,摄像头相关场景测试开发?4.关于摄像头视频这块,是否可以通过AppCube+ROMA+IOT就可以接入,进行视频实时查看?如果不能,是否有相应解决方案,比如是否需要购买华为哪款视频服务来做支撑?5.通过link sdk直接摄像头这种方案,sdk包 在哪里可以下载,需要走什么流程可以拿到相应sdk和试用文档?6.南向系统集成相关sdk和二次集成开发文档哪里可以申请到,帮忙给一个链接?以上问题,还请 各位大佬 帮忙解答下,谢谢!
-
目前上传的是只能在桶的根目录下,使用的uploadPartRequest.setObjectKey("文件夹/文件名");报错。详情如下:ResponseStatus: Bad Request, XML Error Message: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Error><Code>MalformedXML</Code><Message>The XML you provided was not well-formed or did not validate against our published schema</Message><RequestId>XXXX</RequestId><HostId>XXXX</HostId></Error> 请问在使用分段上传的时候是在哪个地方设置路径呢?
-
上传大文件,采用断点续传的api,需要在开启上传前获得uploadId,可以像分段上传的api那样,初始化时可以获得UploadId吗,
-
旧版本的WeAutomate设计器在哪里下载,以及AntRobot设计器在哪下载
-
求助如下问题: 我们在调用isales服务中新增外呼活动时,可以新增deviceType为3的IVR外呼,其中可上送deviceSign字段,当我们新建多个IVR外呼活动时,能否在不修改deviceSign字段的情况下,不同IVR外呼播报不同的话术?是否能上送其他字段能区分不同话术?
上滑加载中
推荐直播
-
用码道,让你的AI作品三步上朋友圈2026/08/04 周二 19:00-20:00
林华鼎-华为云AI开发者运营负责人
从入门 · 到做AI应用 · 到企业级开发。不教编程,只教用AI · 零代码、有产出、能带走、可炫耀 · 每课人人动手实操
回顾中 -
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
基于华为云码道,构建你的定制化AI搭子2026/08/14 周五 09:00-11:30
明亮-华为云开发者发展与支持部部长
本期直播将向您全面介绍华为云码道产品,并基于码道手把手教你部署自己的定制化AI陪伴搭子。
回顾中
热门标签