• [产品体验官] ModelBox 端云协同AI开发套件(RK3568)开发体验
    体验形式:本次体验采用有奖征集体验评测报告+群内交流的反馈的形式。我们将在体验官群内(点击链接申请成为体验官   )筛选体验官若干位,然后签订协议邮寄实物开发板并按照体验报告(筛选后展示)的要求操作和体验产品,最后输出体验报告。我们会从中筛选出高质量体验报告,给予礼品奖励和积分奖励。体验产品简介:ModelBox 端云协同AI开发套件(RK3568),降低门槛的AI开发板。拥有0.8TOPS算力,支持丰富的硬件接口扩展;具备强大的软件生态,利于进行开发研究。拥有它,你可以快速了解系统的硬件和软件,学习AI应用端侧硬件开发流程,实现云侧AI应用端侧部署;你还可以将部署的AI应用同步到云平台售卖,实现AI应用的商业变现。活动流程:1.如您已经成为产品体验官,小助手会在群内发布招募公告,直接报名即可。2.如您还未申请成为体验官,请点击链接先申请成为体验官,再参与活动哦~申请链接:https://developer.huaweicloud.com/activity/experience-officer.html 3.填写本次活动体验者筛选问卷,等待小助手入选拉群。问卷链接:https://devcloud.huaweicloud.com/expertmobile/qtn?id=93421f85b0704d70b4adb69c18ad5513 4.签订协议收到开发板进行体验5.输出产品体验报告,等待领奖☆奖励设置如下☆参与奖:15名获奖要求:完成体验和体验报告,并完成一篇案例奖励:华为体脂称   优秀奖:10名获奖要求:完成体验和体验报告,并完成一篇优质案例(专家评选)优秀案例:ModelBox开发案例 - 使用YOLO v3做口罩检测奖品:开发板硬件
  • [技术干货] openGauss亮相ICDE 2022,分享在AI自治数据库上的演进之路
    ICDE 38thICDE 2022 ICDE 2022全称38th IEEE International Conference on Data Engineering(第38届IEEE 国际数据工程大会)是数据库领域最高权威的国际顶级学术会议之一,是CCF推荐的A类会议,与SIGMOD、VLDB 并称数据库领域三大顶会。ICDE 2022 于2022年5月9日—12日,在马来西亚吉隆坡以线上会议的形式召开。openGauss作为开源数据库的新兴力量亮相ICDE 2022。openGauss社区技术专家、华为高斯数据库高级工程师王天庆在圆桌会议上,做了以“openGauss在AI自治数据库上的演进”的专题发言,提出AI将是未来数据库发展的关键。通过引入AI技术,数据库将会变得更加智能。基于深度学习、机器学习、优化算法等人工智能方法可以在数据库上实现自我演进的优化器、智能化的索引。以及实现支持数据库故障自诊断、自愈等更加智能化的自治系统,最终将可能演进到具备全场景、自决策的、更加完备的智能化数据库管理系统,实现数据库的开发、交付、运维的端到端智能化平台。——华为高斯数据库高级工程师王天庆王天庆的专题发言—“openGauss在AI自治数据库上的演进”,主要从AI能力整体规划和AI能力介绍两部分在线为大家展开分享。openGauss数据库AI框架具有以下特点:全栈AI数据库:整个框架纵向来看, 向下融合通用AI技术栈;向上支持用户、DBA、开发者、数据分析师等全类型用户,从而支撑SQL, DBMS和DB Kernel全场景的智能。从水平方向来看,主要具备两部分能力:AI4DB与DB4AI. 其中DB4AI可实现全流程AI,构筑数据库內参数优化、模型选择、自动化特征工程等技术,压缩数据分析技术栈,让用户在数据库中利用SQL语句驱动AI任务。全场景AI数据库:AI4DB-利用AI技能两条线赋能。在DBMS中,AI能够对数据库的分布键、视图和索引等给予推荐,使数据库调优周期从天级下降为秒级。內置在DBMS中常用故障模式库,可以结合AI和规则引擎预测软件故障,还能通过AI算法分析故障根因,并尝试自动化修复;在DB Kernel中,利用AI技术可实现优化器的自我更新、自学习型索引以及负载的智能编排,从而达到提升性能、减少人为操作的效果。在2022年4月1日发布的3.0版本中,openGauss实现了后台监控服务,并在后台定期地检查数据库系统的状态,从而形成了自治数据库平台DBMind。创新性地完成了对历史AI能力的整合,实现了可服务化、可离线式、插件式、自由组装的DBMind平台。同时,还介绍了在3.0版本中,openGauss 对现有的索引推荐、时序预测等功能也进行了全面升级。AI4DB自治运维平台DBMind实现DBMind系统组件化,支持通过组件命令执行方式,实现AI自治功能的调用;集成基于openGauss exporter的采集能力,实现监控、采集、诊断和优化端到端能力。慢SQL根因分析实现基于KNN算法和根因特征权重矩阵的慢SQL根因分析召回,覆盖20+慢SQL场景;支持分区表索引推荐能力;实现轻量化趋势预测能力,实现线性时序、非线性时间和周期时序多种场景下的预测能力。随着AI技术在数据库领域的使用范围日趋广泛的同时,数据库在实际使用场景也越来越复杂化、多元化,如何将AI技术与数据库更好的结合起来需要数据库行业的技术专家们共同努力。关于openGaussopenGauss 是一款自由使用和开放源代码的关系型数据管理系统,在木兰宽松许可协议(MulanPSL)下发行。openGauss 以开源社区为依托,联接全球开发者、产业链上下游合作伙伴、用户,联合打造开放,包容,创新、全球领先的企业级开源数据库生态。降低企业使用数据库门槛,提升企业级数据库使用效率,以高效的数据管理,加速企业数字化转型。目前,openGauss 已取如下成绩:openGauss 在2021年度取得墨天轮中国数据库流行度排行榜上的全年增长分数、复合增长率、半年增长分数“三冠王”称号,斩获 “2021年度卓越表现数据库奖”,最新排名已升至第一的位置。openGauss 已在72所重点高校开课,覆盖学生28000+人。截至目前,openGauss 已经吸引2900+社区贡献者、110+家企业加入社区,社区用户达到64万+。10+家合作伙伴发布基于 openGauss 的商业发行版,联合伙伴和用户,构建了丰富的解决方案。openGauss 已经在政府、金融、保险、电力等关键行业规模商用落地,比如邮储银行新核心系统、中华联合人寿团险核心交易系统、四川气象局气象观测数据系统等。出版发行《openGauss数据库核心技术》、《openGauss 数据库源码解析》《openGauss 数据库实战指南》三本专业书籍,其中,《openGauss 数据库核心技术》成为多所高校的专业辅助教材。openGauss 数据库纳入全国计算机等级考试二级、三级范围。
  • [其他] 认识算法开发-华为自研先用-- 天筹(OptVerse)AI求解器
           天筹(OptVerse)AI求解器 将运筹学和AI相结合,突破业界运筹优化极限,针对线性和整数模型寻找最优解,以通用形式描述问题,高效计算最优方案,助力企业量化决策和精细化运营,提升资源利用率和运转效率,增强决策水平和竞争力。求解器--现代决策优化的“芯片”和“根技术”    小到快递员路线选择、商铺选址,大到工厂排程、物流路径规划和金融风控等问题,都可以建成数学规划模型,用天筹(OptVerse)AI求解器进行求解。利用运筹优化算法和决策模型求解方法,将业务问题转化为数学规划模型,适用在多种复杂约束条件限制(如人力、时效、容量等约束限制)和海量数据的基础上获取全局最优方案(如成本最低、时间最短)的业务场景,助力业务实现从数据到决策的闭环。    支持求解混合整数线性规划问题(MIP)和线性规划问题(LP)    AI建模,易用高效,大幅度提升建模效率,让客户聚焦核心业务问题和诉求。    AI赋能求解,基于历史数据和问题特征自适应选择最优参数,不断挖掘求解器自身潜力,适应客户场景和问题特点。    支持基于拓扑感知的分布式并行加速,充分利用华为云分布式并行能力,给客户带来极致性能体验。优势    高效建模工具    基于图建模算法,充分利用稀疏性与并行算力,建模效率最大可以提升30倍    高效、稳定、高质量    求解速度快、优度高、性能稳定,已在华为内部供应链问题上成功求解亿级变量/约束超大规模数学模型    自适应学习优化    融合前沿AI能力,可根据问题特征自适应进行参数调优和求解策略选取,实现最大30%的求解效率提升    原生支持分布式加速求解    依托强大云上算力,    支持超大规模分布式并行加速    全行业场景全流程决策支持    支持结合 ModelArts 平台向用户提供全流程决策优化能力    简单易用,快速上手    支持云服务RESTful API、ModelArts notebook内置SDK的C++/python接口等多种开发和调用方式应用场景港口智能计划与调度在港口智能计划与调度场景中,为提升港口作业效率,需要合理制定生产作业计划并调动生产作业资源。通过天筹(OptVerse)AI求解器可实现港口全链路协同,最大化地调动所有资源,提升设备利用率,降低堆场翻倒率,大幅度地提升了港口运转效率和作业效率,进而缩短船舶在港时间,真正地实现了港口资源调度最大化。供应链排产在供应链排产场景中,为确保客户需求能及时交付,提升客户满意度,需要合理决策内部各产品的生产计划。产品线生产多种产品,各产品之间的装配关系高度耦合,使得所有物品、所有工厂的决策联合制定成为一个超大规模的优化问题,天筹(OptVerse)AI求解器的数学建模方案可以快速建立问题约束和目标,支撑求解器快速求解。物流路径规划在物流运输路径规划、班车接送路径等路径规划场景,基于运输需求、时间窗、车型、可用车辆数量、位置等信息,天筹(OptVerse)AI求解器可以快速求解输出最优路径,节省调度时间,提高运输效率,节约运输成本。
  • [其他] 算法偏见:你看见的都是你想看见的
    所谓算法偏见,指的是算法开发者或所有者可以调控程序参数,从而**得到想要看到的结果**:一方面是开发者有意为之的结果,另一方面也是受个人价值观念等潜移默化影响的结果。 例如,尽管一再标榜 “算法中立”,全球最大社交媒体平台Facebook 为用户推荐热门消息的“趋势话题”应用的算法公正性却不断受到质疑。 ​ Facebook “偏见门”曾经引起巨大关注:曝光了其趋势话题平台其实是由一个约20 人的团队运营的内幕,这个团队由有媒体经验的人组成,他们可以获取 Facebook 算法浮现的结果,对其呈现的优先顺序进行分级排列,,并常规性地压制美国右翼保守派的信息,还可以将一些话题人为地 “注射”到话题框架中去 。 ​ 2018年的“剑桥分析”事件中人工智能科学家 Mercer博士、特朗普竟选主要幕僚 Stephen Bannon 等人,运用爬虫得到的 Facebook 用户数据,与选民资料进行比对分析,通过机器学习技术为每一个用户“画像”,并**精准推送具有针对性、准确击中受众“共鸣点”的各种消息**,以期影响总统选举的结果。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/19/1652941506990728002.png) 如何去除偏见呢?公开、透明。 算法透明度(Arithmetic Transparency)来源于透明度(Transparency)。对于算法透明度的内涵和实现方式,学界有不同的偏向。 ​ 在算法运行机制的层面,有学者认为算法透明度概念是“阐明与算法有关的信息被公开的机制,披露关于算法如何驱动各种计算系统的信息,以允许用户确定在操作过程中的价值、偏差和意识形态,了解新闻产品中的潜在观点”。具体来说,就是从算法机制运行的流程出发,在每一个层级都定义应该被公开的算法元素。 还有学者认为,算法透明度的不应仅仅包括系统设计和算法机制的层面。算法系统不仅仅是代码和数据,还是人类和非人类行动者的集合。算法黑箱实际上存在于“社会网图”和“技术网图”的交叉地带,要使之透明化,既要关注技术,也要关注其中进行互动的各主体形成的“行动者网络”。在阐明算法机制的同时,还须阐明算法与其他社会要素之间的互动和这些互动对算法本身的重塑。 那么如何提升算法透明度,针对这一问题不同学者也提出了不同的主张。张淑玲(2018)认为,可以从算法要素透明、算法程序透明和算法背景透明这三个角度构建披露机制,提升透明度。具体来说就是通过披露数据来源,算法模型,数据质量和权重,参与的人的相关背景及影响程度等,实现算法的透明。 仇筠茜(2018)认为,随着人工智能和无监督式机器学习的发展,算法中必然会增加越来越多的变量,数据量越来越大,分析的模型也愈发复杂,**仅凭披露数据来源和算法程序等依然难以使人们理解,这样的透明是机械的,实际作用有限**。她认为应将理解置于透明之上,以用户为导向,追求一种可理解性和社会接受效果。具体实施来说,一方面是使用户知情并理解对其数据的使用方式,并保留调整的余地;另一方面是通过交互界面使用户能便捷的调整算法相关参数,并理解其对自己带来的影响和改变。 在政府法律层面的监管: 国际范围内,欧盟率先在 2016 年 5 月通过《全面数据保护法》(General Data Protection Regulation),规定软件公司应向用户解释算法决策背后的逻辑推理过程,并明确规定,如果相关主体未履行披露义务,将对其处以高额罚金。 我国去年三月份发布的《关于加强互联网信息服务算法综合治理的指导意见》指出,要**构建算法监管体系,有效监测算法安全风险、推进算法备案工作,推动算法公开透明**。《中华人民共和国个人信息保护法》第二十四条也规定,利用个人信息进行自动化决策,要保证决策的透明度和结果公平、公正,应当同时提供不针对其个人特征的选项,个人有权要求对自动化决策进行说明,并有权拒绝。 学界则提出,可对数据库分级、管控用户权限;“以算法规制算法”,在代码中加入数据保护步骤等。在事后问责机制上,可通过建立统一的算法技术标准来指引“结构性元规则”的制定,建立算法系统和法律系统间的沟通机制。
  • [其他] 算法的负面作用和黑箱
    算法的负面作用有:算法对用户的画像是否存在隐私的侵犯,算法所作出的个性化推荐是否使我们困于**信息茧房**之中,算法是否成为一部分人或组织谋取不正当利益或权力的“白手套”...... 算法(algorithm)一词是由拉丁语algorism演变而来,最初含义为任何运算方法的统称,但人工智能时代的算法概念已经远超出其原有的含义,简单来讲就是指为解决问题而进行的计算机操作规则的一系列步骤。 这个角度来看,算法本身只是一系列代码的组合,自身并不包含价值判断的成分。但当算法作用于人和社会的时候,则会真切的影响到我们日常生活的方方面面,这时其就有必要保持公开公正,避免偏见等伦理问题。当前算法引起的一系列争议,很大程度上是因为“算法黑箱”的形成。 **黑箱理论源于控制论,指不分析系统内部结构,仅从输入端和输出端分析系统规律的理论方法**,这里的“黑箱”是一种隐喻,指的是“为人所不知的、那些既不能打开,又不能从外部直接观察其内部状态的系统”。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/19/1652941062841191258.png) 而算法“黑箱”与理论上作为系统的“黑箱”又有所区别,算法“黑箱”本质上归属于技术“黑箱”,技术“黑箱”特指作为知识的人工制造品,其特点是部分人知道,另一部分人不一定知道。在这个意义上,算法“黑箱”指的是**算法运行的某个阶段“所涉及的技术繁杂”且部分人“无法了解或得到解释”**。 第一种情形属于算法“黑箱”的初级形态算法根据人为确定好的规则运行,同时输入端的数据和输出端的目标都是确定的,那么存在于黑箱的仅仅是从输入到输出中间的部分。 第二种是算法“黑箱”的中间形态通常情况下,算法的输入端是无人干预的,数据挖掘、数据收集等程序是自动运行的,但经过算法运行后的输出端是人为预先确定的,因此这里的“黑箱”指的是存在于算法输出之前我们无法洞悉的算法流程。 第三种情形属于算法“黑箱”的进阶形态对应无监督式机器学习,在输入端,算法凭借自动学习能力能够自动对数据进行挖掘和收集; 在输出端,“学习型算法”凭借高级认知能力自动生成和改善程序模型,因此该情形下的“黑箱”是指包含输入端与输出端的一个全流程闭环,其特点在于仅有机器了解算法,而人不了解。 根据目前算法发展和应用的具体情况,当前主要应当关注的是第二种情形,第一种更多是在科学研究中进行使用,而第三种情形中的无监督式机器学习尚需一定阶段的发展才能得到成熟稳定的应用,以现有的技术条件很难实现。
  • [其他] 机器学习算法中的神经网络算法
    从20 世纪40 年代起, 就有学者开始从事神经网络的研究:McCulloch 和Pitts 发布了A Logical Calculus of the ldeas lmma-nent in Nervous Activity, 被认为是神经网络的第一篇文章;神经心理学家Hebb 出版了The Organazation of behavior书, 在书中提出了被后人称为"Hebb 规则”的学习机制。 1. 第一个大突破出现于1958 年, Rosenblatt 在计算机上模拟实现了一种他发明的叫作“ 感知机” ( Perceptron) 的模型, 这个模型可以完成一些**简单的视觉处理任务**, 也是后来神经网络的雏形、支持向量机( 一种快速可靠的分类算法) 的基础。一时间, 这种能够模拟人脑的算法得到了追捧, 国防部等政府机构纷纷开始赞助神经网络的研究,风光持续了十余年, 1969 年, Minsky 等人论证了感知机在决XOR ( 异或) 等基本逻辑问题时能力有限, 浇灭了人们对神经网络的热情, 原来的政府机构也逐渐停止资助, 直接造成了此后长达10 年的神经网络的“ 冷静时期” 。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/18/1652861611893118770.png) 期间, Werbos 在1974 年证明了在神经网络中多加一层, 并且利用“ 后向传播”( Back-propagation) 算法可以有效解决XOR 问题, 但由于当时仍处于神经网络的低潮, 这一成果并没有得到太多关注。 2. 直到80年代, 神经网络才终于迎来复兴。物理学家Hopfield在1982 年和1984 年发表了两篇关于人工神经网络研究的论文,提出了一种新的神经网络, 可以解决一大类模式识别问题, 还可以给出一类组合优化问题的近似解。他的研究引起了巨大的反响, 人们重新认识到神经网络的威力以及付诸应用的现实性。1985 年, Rumelhart 、Hinton 等许多神经网络学者成功实现了**使用“后向传播”BP算法来训练神经网络**,并在很长一段时间内将BP作为神经网络训练的专用算法。在这之后,越来越多的研究成果开始涌现。1995年,YannLeCun等人受生物视觉模型的启发,改进了**卷积神经网络(Convolution Neural Network,CNN)**。这个网络模拟了视觉皮层中的细胞(有小部分细胞对特定部分的视觉区域敏感,个体神经细胞只有在特定方向的边缘存在时才能做出反应),以类似的方式计算机能够进行图像分类任务(通过寻找低层次的简单特征,如边缘和曲线,然后运用一系列的卷积层建立一个更抽象的概念),在手写识别等小规模问题上取得了当时的最好结果。2000年之后,gio等人开创了神经网络构建语言模型的先河。直到2001年,Hochreiter等人发现使用BP算法时,**在神经网络单元饱和之后会发生梯度损失**,即模型训练超过一定迭代次数后容易产生过拟合,就是训练集和测试集数据分布不一致(就好比上学考试的时候,有的人采取题海战术,把每道题目都背下来。但是题目稍微一变,他就不会做了。因为机器非常复杂地记住了每道题的做法,却没有抽象出通用的规则)。神经网络又一次被人们所遗弃。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/18/1652862269528669537.png) 3. 然而,神经网络并未就此沉寂,许多学者仍在坚持不懈地进行研究。2006年,Hinton和他的学生在Science杂志上发表了一篇文章,从此掀起了深度学习(Deep Learning)的浪潮。深度学习能发现大数据中的复杂结构,也因此大幅提升了神经网络的效果。2009年微软研究院和Hinton合作研究基于深度神经网络语音识别,使得相对误识别率降低25%。2012年,Hinton带领学生目前最大的图像数据库ImageNet上,对分类问题取得了惊人成果,将错误率由26%降低至15%。 再往后的一个标志性时间是2014年,lan Goodfellow等学者发表论文提出题目中的“生成对抗网络",标志着GANs的诞生,并自2016年开始成为学界、业界炙手可热的概念,它为创建无监督学习模型提供了强有力的算法框架。时至今日,神经网络经历了数次潮起潮落后,又一次站在了风口浪尖,在图像识别、语音识别、机器翻译等领域,都随处可见它的身影。
  • [干货汇总] 养殖场新来了个“AI管家”
    本文分享自华为云社区《[【云享·伙伴】第4期:养殖场新来了个“AI管家”](https://bbs.huaweicloud.com/blogs/349715?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=other&utm_content=content)》,作者: 华为云社区精选。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/13/1652412482694127765.png) 民以食为天。肉类是食物中主要的动物蛋白来源,市场规模庞大。 畜牧养殖业虽然在我国已有上千年的经验积累,但传统的禽畜养殖方式往往面临着成本高、效率低、环境差的问题。对于养殖户来说,一直以来都是一项极耗心力的劳动密集型工作。比如品种识别、数据统计、健康监护等,无一不需要精细化管理,不仅是困扰养殖户多年的苦活累活,对于动辄有上千头禽畜且依赖人工的养殖场来说,这是一笔很高的管理成本。 早前在诸多中小型养殖场里,要准确无误地统计出有多少头禽畜是一件极其困难的事情。特别是出售装车清点数量的过程中,经常出现农场方和客户统计数量不一致导致纠纷频发。 是否有智能化的方式,让养殖户能够实现无接触式的智能远程看护,不仅降低管理成本,也能提高人工监管的效率。**“边打麻将边在手机上看护养殖场”,这将是怎样的体验?AI摄像头正是开启智慧养殖的第一步。** # 传统硬件厂商的AI转型,只需一套工作流 通过摄像头能够帮助养殖户更好的看管禽畜。作为专业的摄像头模组供应商,天视通有很多禽畜养殖业的客户,基于现实情况,提出了不同的需求:如家禽、牲畜等看护种类的区分;室内、室外等看护环境的不同。 以养牛为例,这些养殖户每次都要到牛场里观察,现场记录哪些牛生病了,哪些牛到了孕育最佳时机,这样的工作需要他们每天往返于牛场和家。有些牛不愿意看到人类,他们会视人类为捕食者,因此养殖户的出现还会给牛群带来紧张情绪,这就更加大了养殖户的工作难度。 **这些零散的需求,需要定制不同的AI技能,天视通常常要借助第三方算法公司。但许多需求由于成本、开发周期以及隐私泄漏等问题无法快速提供解决方案,造成了业务流失。** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/13/1652412514889670696.png) 天视通的硬件设计能力较强,单款摄像头出货过百万,年累计出货达千万台以上,供应链积累也非常雄厚,但因算法定制依赖算法供应商,大大增加了天视通的研发和试错成本。随着市场的发展,单一的业务模式已经无法适应当下环境。为寻求突破,天视通找到了早前在算法定制合作的伙伴华为云,希望运用华为云的AI能力满足现实需求。 华为云为天视通提供的**智能摄像头自定义算法定制部署一体工作流**解决方案,基于华为云企业级AI应用开发套件ModelArts Pro与端云协同多模态AI应用开发平台HiLens,**不需要高阶AI能力就能覆盖大部分的零散AI定制需求,并能零代码迭代部署AI算法到端侧设备。** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/13/1652412581139735274.png) 以牛场健康监管为例,天视通利用摄像头采集到的健康牛和生病牛的体态、日常行为特征等图片数据,通过ModelArts对监控视频中的牛群进行标注,之后再启动模型训练,确认训练的效果后,将该技能一键发布到华为云的AI算法市场 AI Gallery。 天视通在华为云AI Gallery上,下载新的牛生病行为检测技能到天视通技能管理APP。工作流的算法后装功能,可以通过天视通技能管理APP一键部署到牛场已安装的摄像头里,在家里的监控屏前就能实时看到牛场里每一头牛的状态。 天视通技术负责人这样谈到他对AI赋能智慧养殖的理解:“畜牧业是一个智能化启动较晚的行业,但实际上却非常重要,关系到每个家庭的日常生活。这些年食品安全一直处在风口浪尖,产业的规模化和IT技术的应用精准管理成为可能,从养殖过程自动化管理到全流程溯源就是大家如今看到的热门应用。” **带有AI技能的摄像头不仅在工具层面解决了养殖场的人力问题,通过智能化还能解决禽畜的健康问题。** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/13/1652412684483563493.png) # 端云协同,定制化算法+零代码远程部署 正是得益于华为云AI技术所积累的场景化行业工作流能力,帮助天视通快速完成面向特殊场景算法的开发和一键式远程部署。此次华为云所提供的方案分为四个部分: ① 数据标注:通集摄像头场景需求和少量数据,华为云利用ModelArts标注工具完成对图片标注; ② 算法训练:工作流内置行业主流标准算法,一键启动即可进行训练,生成算法并能直接查看模型性能; ③ 算法优化:训练完之后在平台上就能生成针对具体摄像头硬件的优化过的高性能算法。针对客户的硬件平台,优化适配模型与技能,实现一键技能发布; ④ 算法部署:生成的算法部署到实际应用的摄像头中,再结合HiLens的端云部署能力,完成对算法授权管理,上架到手机端的算法市场APP。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/13/1652412699357899302.png) 作为解决方案的核心,华为云EI工作流以业务场景为中心,以“定义场景→分布实施→持续迭代→形成闭环”的模式,通过聚焦各行业可落地的AI开发方式,为服务客户提供基于场景化的工作流,完成全流程的AI开发及迭代。 - 降低AI开发门槛:零AI知识、特殊场景,算法定制化开发不在话下 借助AI开发低门槛的华为云EI工作流,无需AI知识,天视通员工可基于摄像头产品,无论客户的需求场景是否存在行业特殊性,都能快速定制出符合实际场景应用的算法,从而让天视通快速且准确的提供合作伙伴所需的方案。 - 端云协同:零代码部署、后装算法,无惧芯片性能 结合华为云的ModelArts Pro和HiLens平台,通过端云协同开发,可将算法零代码迭代部署到端侧的摄像头模组上,操作灵活、迭代迅速,不用投入大量人力手动开发。天视通利用华为云EI工作流的一键式远程部署,实现了算法的快速迭代更新。 针对天视通的低端芯片产品,华为云可通过HiLens平台部署算法,让低端芯片硬件运行AI算法也都能毫无压力。同时打通天视通手机侧算法APP市场与华为云AI Gallery,为天视通产品提供可选后装的算法,提升天视通产品在应用场景中的更多可能性。 # 携手伙伴,降本增效谋全局 作为中国专业的网络视频监控方案和核心电路模组供应商,天视通始终专注在图像处理和通讯的技术领域前沿,通过技术和产品的不断创新,为广大客户提供技术更先进、更贴近客户需求的远程视频设备和开发方案,提供高品质的视频产品和专业的图像处理服务。凭借自身的技术优势,天视通的产品已广泛应用到养殖场、酒店、鱼塘、餐馆、企业、服务机构、商店等社会的众多行业。 对于视频监控领域来说,人工智能和5G等新技术的应用,已经成为推动智能监控发展的一块关键踏板。 新技术打破了传统监控行业以硬件为主的局面,带来了软件定义摄像机、云平台等概念。 天视通在应用华为云EI工作流之后发现,和传统的线下开发环境相比,华为云整合了许多工具的同时提供便利的图像化界面,大幅度减少很多通用环境的配置。基于算法后装的方式,很大程度上减轻了天视通对摄像头硬件本身的库存规划,让库存周转变得更加灵活。在算法定制方面,华为云EI工作流为天视通节省30%的支出;算法云端部署方面,节省硬件库存20%运营成本。 从交付客户的定制化场景需求,到算法市场APP,这一系列举措中我们看到天视通在对硬件智能化的敏感性,以及在智能安防领域上产品发展的长远计划和对未来AI领域的深远布局。 华为云EI工作流在提升伙伴产品竞争力的同时,也帮助伙伴实现无缝转型升级。天视通从传统硬件厂商转型成为了具备AI能力的解决方案提供商,拓展了对于业务定制需求的承接能力,也给客户提供了更多选择。 伴随智能芯片的算力提高,AI算法的准确度已经达到甚至超过了人工水平。餐饮、商超、酒店等场景对于AI监控的需求也会逐渐增多。华为云在AI、音视频、IoT领域方面的技术深耕,也让天视通与华为云在不同的领域场景拥有更多的合作可能性。 # 华为云:提供合适的AI应用落地路径 很早以前,人工智能软件开发与传统软件开发的区别就开始凸显,所以AI领域权威学者吴恩达提出了面向AI的MLOps,试图来弥合AI实际应用中的一些工程能力,具体表现就是让算法专家和软件开发人员能更好地面向实际场景来快速迭代开发。 华为云EI工作流,实际上是把某些具备一致性问题的场景单独抽象出来,形成一个相对固定的开发模式,提供给工程团队。在这个过程中降低对算法工程师的能力要求,只需要让软件开发人员聚焦工程。这样做,一方面为了算法的定制,但同时也具备了一定的泛化能力,从而兼顾有限的通用性。华为云相信在更为通用的MLOps出现之前,这是一条更适合当下AI应用落地的路径。 当前,华为云工作流积累了大量的场景化行业工作流,助力客户零代码、高灵活的实现全流程AI开发应用。
  • [其他] 边打麻将边养牛?多吃肉
    “边打麻将边在手机上看护养殖场”,这将是怎样的体验?AI摄像头正是开启智慧养殖的第一步。华为云为天视通提供的智能摄像头自定义算法定制部署一体工作流解决方案,基于华为云企业级AI应用开发套件ModelArts Pro与端云协同多模态AI应用开发平台HiLens,不需要高阶AI能力就能覆盖大部分的零散AI定制需求,并能零代码迭代部署AI算法到端侧设备。以牲畜健康监管为例子,天视通利用摄像头从养殖场实际采集到的健康牛和生病牛的一些体态及日常行为特征图片数据,通过ModelArts对监控视频中的牛进行标注,之后再启动模型训练,确认模型的效果后,将该技能一键发布到华为云的AI算法市场AI Gallery。天视通在华为云AI Gallery上,下载新的牛生病行为检测技能到天视通技能管理APP。工作流的算法后装功能,可以通过天视通技能管理APP一键部署到牛场已安装的摄像头里,在家里的监控屏前就能实时看到牛场里每一头牛的状态。天视通技术负责人这样谈到他对AI赋能智慧养殖的理解:“畜牧业是一个智能化启动较晚的行业,但实际上却非常重要,关系到每个家庭的日常生活。这些年食品安全一直处在风口浪尖,产业的规模化和IT技术的应用精准管理成为可能,从养殖过程自动化管理到全流程溯源就是大家如今看到的热门应用。带有AI技能的摄像头不仅在工具层面解决了养殖场的人力问题,通过智能化还能解决禽畜的健康问题。正是得益于华为云AI技术所积累的场景化行业工作流能力,帮助天视通快速完成面向特殊场景算法的开发和一键式远程部署。此次华为云所提供的方案分为四个部分:数据标注:通集摄像头场景需求和少    量数据,华为云利用ModelArts标注工具完成对图片标注;算法训练:工作流内置行业主流标准算法,一键启动即可进行训练,生成算法并能直接查看模型性能;算法优化:训练完之后在平台上就能生成针对具体摄像头硬件的优化过的高性能算法。针对客户的硬件平台,优化适配模型与技能,实现一键技能发布;算法部署:生成的算法部署到实际应用的摄像头中,再结合HiLens的端云部署能力,完成对算法授权管理,上架到手机端的算法市场APP。作为解决方案的核心,华为云EI工作流以业务场景为中心,以“定义场景→分布实施→持续迭代→形成闭环”的模式,通过聚焦各行业可落地的AI开发方式,为服务客户提供基于场景化的工作流,完成全流程的AI开发及迭代。- 降低AI开发门槛:零AI知识、特殊场景,算法定制化开发不在话下借助AI开发低门槛的华为云EI工作流,无需AI知识,天视通员工可基于摄像头产品,无论客户的需求场景是否存在行业特殊性,都能快速定制出符合实际场景应用的算法,从而让天视通快速且准确的提供合作伙伴所需的方案。- 端云协同:零代码部署、后装算法,无惧芯片性能结合华为云的ModelArts Pro和HiLens平台,通过端云协同开发,可将算法零代码迭代部署到端侧的摄像头模组上,操作灵活、迭代迅速,不用投入大量人力手动开发。天视通利用华为云EI工作流的一键式远程部署,实现了算法的快速迭代更新。针对天视通的低端芯片产品,华为云可通过HiLens平台部署算法,让低端芯片硬件运行AI算法也都能毫无压力。同时打通天视通手机侧算法APP市场与华为云AI Gallery,为天视通产品提供可选后装的算法,提升天视通产品在应用场景中的更多可能性。转发自:https://mp.weixin.qq.com/s/cK4p83AXT6_LkZBcw0lgLw
  • [技术干货] 编译器优化那些事儿(2):常量传播
    ## 0.基础知识盘点 * 基本块 (Basic Block) 一个基本块内的指令,处理器会从基本块的第一条指令顺序执行到基本块的最后一条指令,中间不会跳转到其它地方去,也不会有其它地方跳转到基本块的非首条指令上来。 * 控制流图 (Control Flow Graph) 控制流图的节点是基本块,边代表基本块之间的跳转。基本块A到基本块B有一条边,表示基本块A的最后一条指令是一个跳转指令,跳转到了基本块B的第一条指令;或者基本块A的最后一条指令执行完可以顺序的走向基本块B的第一条指令。 * SSA (Static Single Assignment) 静态单赋值,指程序的一种表示形式,在该形式中变量只被赋值一次,如果变量需要更新,会使用一个新的变量。决定使用哪个分支处的变量,会使用Φ函数。 例如 ```c min = a; if(min > b) min = b; return min; ``` 转换为SSA形式为: ```c min = a; if(min > b) min2 = b; return Φ(min, min2) ``` * 局部优化 指基本块内,跨指令的优化。 * 全局优化 过程(函数)内的,跨基本块的优化。 * 过程间的优化 跨过程(函数),编译单元的优化。 ## 1.什么是常量传播 首先来认识一下什么是常量传播,常量传播也叫常量折叠,但有些资料中对它们的定义又是区分开来的。下面来看看它们分别是什么? 常量传播,顾名思义,就是把常量传播到使用了这个常量的地方去,用常量替换原来的变量。 ``` x = 3; y = 4; z = x + y; ``` -> ``` x = 3; y = 4; z = 3 + 4; ``` 什么是常量折叠?常量折叠就是当运算符左右两边都是常数时,把结果计算出来替代原来的那部分表达式。 ``` z = 3 + 4; ``` --> ``` z = 7; ``` 现在的常量传播优化技术能同时实现上面介绍的传播和折叠的功能,所以现在通常不对它们加以区分,本文后续就把常量传播和折叠统称为常量传播了。 **为什么会有常量?** 程序中的常量来源有3种 1. 程序员书写的,比如magic number 1. 宏定义展开后带来的,这种情况在大型工程文件中非常普遍 1. 在程序优化过程中由其它的优化技术带来的常数 **为什么要进行常量传播优化?** 从上面简单的例子中可以看到,常量传播可以把原本在运行时的计算转移到编译时进行,减小了程序运行时的开销。同时常量传播还有助于实现其它的优化,比如死代码消除。 **如何实现?** 前面介绍的常量传播的例子非常简单而且直观。如果程序的控制逻辑比较复杂时,判断一个变量是否是常数,就不是一件简单的事了,需要借助数据流的分析才能判断某个变量是否是常量。而且这个判断是保守的,即不能充分证明某个变量是常量的话就认为它是变量。这种保守的分析结果是可以接受的,因为我们优化程序的时候在性能提升与程序语义保证时优先选择保证程序语义不变。 下面我们先初步学习一下数据流分析。 ## 2.数据流分析 数据流分析常常是为了实现全局优化、过程间优化,或者程序静态分析而进行的分析技术。分析得到的信息可以支撑各种优化技术的落实。 考虑下面这条指令,我们能对它做什么优化呢? ```c z = x + y; ``` `+` 代表各种有效的运算符, 比如+-*/等 最基本的,有下面3种假设: 1. 如果`x`或者`y`是常量,我们可以做常量传播, 用常量值替代变量`x`, `y`。 如果`x`和`y`都是常量,可以在编译时刻把`x+y`计算出来,并赋值给`z`,这样就不会在运行时做这样的计算了。 2. 如果`x+y`在前面已经被计算过了,而且`x`和`y`再没有被赋值过(是一个可用表达式),那么此处就可以将上次计算过的值直接赋值给`z`, 省去再次计算的代价,这样的优化称为公共子表达式的消除。 3. 如果`z`从这里开始到程序结尾再没有被使用(`z`是不活跃变量),或者是有使用,但使用前被重新赋值了(`z`是不活跃变量),那么这个赋值语句是没用的,可以删除掉这条语句。 可以看到对每一种可能的优化,都需要一定的依据。这些依据就需要进行数据流的分析来获取。 下面我们介绍一下非常基础的3种数据流模式。 1. 到达定值 告诉我们在一个程序点上,过程(函数)里的变量分别是在什么位置被定值(赋值)的。常用在常量传播,复制传播上。 2. 可用表达式 告诉我们在一个程序点上,可用的表达式有哪些。常用在公共子表达式消除。 3. 活跃变量 告诉我们在一个程序点上,活跃变量(将来还会用到的变量)有哪些。常用于优化寄存器分配,删除死代码。 ### 2.1 到达定值 #### 2.1.1 转移函数 程序中的每一条语句都会对程序的状态产生影响,程序的状态包括了寄存器的值、内存的值、读写的文件等。对于特定的数据流分析,我们只关心对我们分析或者程序优化有用的那部分内容。比如对到达定值分析,我们只跟踪变量的定值情况,对可用表达式的分析,我们跟踪表达式的生成以及表达式分量的赋值情况,对于活跃变量我们关心变量的赋值和使用情况。 我们用转移函数来表示程序语句对程序状态的影响: $$ OUT=f_d(IN) $$ $f_d$ 是语句d的转移函数。`IN`是语句d前面的程序状态,`OUT`是语句d之后的程序状态。 同样的,基本块对程序状态也有影响,基本块也有转移函数: $$ OUT = f_B(IN) $$ $f_B$ 是基本块B的转移函数,`IN`是基本块B之前的程序状态(也可表示为`IN[B]`),`OUT`是基本块B结束后的程序状态(也可表示为`OUT[B]`)。 不同的分析目的,转移函数不同,对于到达定值分析,如果遇到下面的一条语句 ``` d: u = v + w ``` 我们说这个语句生成了一个对变量`u`的定值`d`,同时杀死了其它对变量`u`的定值。记为:$gen = \{d\}$, $kill = \{其它对u的所有定值\}$ 。 对上面的赋值语句来说,它的转移函数就是: $f_d(x) = gen_d∪(x-kill_d)$ 其中$gen_d= \{d\}$, $kill_d = \{其它对u的所有定值\}$。 基本块的转移函数由基本块的每一个语句的转移函数组合构成。比如2个语句组成的基本块的到达定值转移函数是 $$ \begin{array}{l} f_B(x) &=& f_2(f_1(x)) \\ &=& gen_2∪(gen_1∪(x - kill_1)-kill_2) \\ &=& (gen_2∪(gen_1-kill_2))∪(x-(kill_1∪kill_2)) \\ \end{array} $$ 扩展开来,含有n条语句的基本块的到达定值转移函数是 $$ f_B(x) = f_n(f_{n-1}(..(f_2(f_1(x))..)) = gen_B∪(x-kill_B) $$ 其中 $gen_B = gen_n∪(gen_{n-1}-kill_n)∪(gen_{n-2}-kill_{n-1}-kill_n)∪…∪(gen_1-kill_2-kill_3-…-kill_n)$; $kill_B = kill_1∪kill_2∪…∪kill_n$ 下面我们看一个具体的例子,在下面的这个流图中,每一个基本块生成的定值和杀死的定值已标记在图右侧。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652233669819777141.png) <center>图1 基本块的生成定值和杀死定值集合</center> #### 2.1.2 数据流分析的基本思想 对每个基本块,根据输入状态,应用转移函数,求解输出状态,循环进行此操作,直到所有的基本块的输出状态不再变化为止。 #### 2.1.3 交汇运算(meet operator) ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652233699437267531.png) <center>图2 数据流分析-交汇运算符的意义</center> 对于上面的控制流图,B2前驱节点包括B1和B2自身。B2的输入状态需要汇合B1结束后的状态`OUT[B1]` 和 B2结束后的状态`OUT[B2]`, 如何汇合呢?这取决于我们的分析目的,对于到达定值分析,我们要汇集所有路径上过来的定值集合,所以对前驱节点的输出做并集运算`OUT[B1]∪OUT[B2]`;而对于可用表达式分析,只有每一条通往此基本块的路径上都有这个表达式的生成时我们才说这个表达式在此基本块上是可用的,所以交汇运算是求交集`OUT[B1]∩OUT[B2]`。交汇运算用符号`∧`表示。 对上面的这个控制流图中的B2基本块,在第一次分析时,它自身的输出是初始化的值`∅`, 第二次分析时,它的输出就是上一次分析后得到输出了,就可能不再是`∅`了。这样迭代多次后,它的输出不再变化。当所有的基本块的输出都不再变化时,我们说这个时候到了一个定点(**fix point**)。 当分析达到定点时,数据流分析的结果也就得到了。 #### 2.1.4 到达定值分析的迭代算法 $$ \begin{array} {l} OUT[ENTRY] = ∅; \\ for (除ENTRY之外的每个基本块B) \\ \qquad OUT[B] = ∅; \\ while (某个OUT值发生了变化) \{ \\ \qquad for (除ENTRY之外的每个基本块B) \{ \\ \qquad \qquad IN[B] = \cup_{p是B的一个前驱}OUT[P]; \\ \qquad \qquad OUT[B] = gen_B∪(IN[B] - kill_B); \\ \qquad \} \\ \} \\ \end{array} $$ 说明:此算法是非SSA表示上的到达定值分析的算法,这里用这个相对来说比较原始的算法旨在介绍它最基本的思路;如果要在SSA形式上进行到达定值分析会更加高效,前提条件是需要把程序转换为SSA形式的表示。后续介绍的活跃变量分析,可用表达式分析也是如此。 **程序示例** 下面我们用真实的程序对上“图1”表示的程序做到达定值分析,(这里仅列出主要的程序片段) ```c++ // 定义一个基本块的属性结构 struct N{ string name; // 基本块名称 bitset7> gen {}; // 生成的定值 bitset7> kill {}; // 杀死的定值 bitset7> in {}; // 输入定值集合 bitset7> out {}; // 输出定值集合 vector> pre{}; // 前驱基本块 }; ``` ```c++ // 基本块的属性和初始化 shared_ptr entry, b1, b2, b3, b4, exit{}; entry = make_shared(N{"entry", 0, 0, 0, 0, {}}); b1 = make_shared(N{"b1", 0B0000111, 0B1111000, 0, 0, {}}); b2 = make_shared(N{"b2", 0B0011000, 0B1000011, 0, 0, {}}); b3 = make_shared(N{"b3", 0B0100000, 0B0000100, 0, 0, {}}); b4 = make_shared(N{"b4", 0B1000000, 0B0001001, 0, 0, {}}); exit = make_shared(N{"exit", 0, 0, 0, 0, {}}); // 构建基本块的前驱,形成CFG entry->pre = {nullptr}; b1->pre = {entry}; b2->pre = {b1, b4}; b3->pre = {b2}; b4->pre = {b2, b3}; exit->pre = {b4}; // 到达定值分析过程 bool anyChange{}; vector> BBs{b1, b2, b3, b4, exit}; do { anyChange = false; for (auto B : BBs) { for (auto p : B->pre) { B->in |= p->out; } auto new_out = B->gen | B->in & ~B->kill; if (new_out != B->out) { anyChange = true; } B->out = new_out; } } while (anyChange); // 输出每个基本块的输入定值,和输出定值 for (auto B : BBs) { cout *B endl; } ``` 输出结果: ``` b1 0000000 1110000 b2 1110111 0011110 b3 0011110 0001110 b4 0011110 0010111 exit 0010111 0010111 ``` 第一列是基本块名称,第二列是输入定值集合的位向量,第三列是输出集合的位向量。 这样我们就得到了每一个基本块的输入定值集合和输出定值集合。例如对于基本块B4, 位向量<`0011110`>代表`{d3,d4,d5,d6}`,是基本块开始处的到达定值集合,位向量<`0010111`>代表`{d3,d5,d6,d7}`,是基本块结尾处的到达定值集合。有了这些信息就能很容易的得到在某一个程序点处p, 有哪些变量在何处被定值了。 把结果反馈到流图中如下: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253233393281839.png) <center>图3 数据流分析-到达定值结果示例</center> 类似的,我们用相似的方法可以进行活跃变量,可用表达式的分析。 ### 2.2 活跃变量 一个变量x在程序点p上活跃,是说这个变量x从程序点p到程序结尾的路径上被使用,且在使用前没有对它进行新的赋值(没有被杀死)。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253397749567645.png) <center>图4 数据流分析-活跃变量示例1</center> B1出口处的活跃变量只有`b`, 这是因为变量`a`再未被使用过,变量`c`被B2中的赋值杀死了。 B2出口处的活跃变量有`b`和`c`。因为只有`b`和`c`在后面的路径中被使用,且使用前未被重新赋值。 **活跃变量分析的迭代算法** 活跃变量分析是一种后向分析,基本块的出口作为输入,入口作为输出。 $$ \begin{array} {l} IN&=f_B(OUT) \\ &= Use[B] ∪(OUT[B] - Def[B]) \end{array} $$ 其中`Use[B]`表示基本块B使用了的变量, `Def[B]`表示基本块B赋值的变量。 迭代算法如下: $$ \begin{array}{l} IN[EXIT] = ∅; \\ for(除EXIT之外的每个基本块B) \; IN[B] = ∅; \\ while(某个IN值发生了变化)\{ \\ for(除EXIT之外的每个基本块B)\{ \\ \qquad OUT[B]=\cup_{S是B的一个后继}IN[S]; \\ \qquad IN[B] = use_{B}∪(OUT[B]-def_{B}); \\ \qquad \} \\ \} \\ \end{array} $$ **示例** ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253458263587946.png) <center>图5 数据流分析-活跃变量示例2</center> 上面的程序流图中,基本块B2, B3, B4的Use和Def为: ``` Use[B2] = ∅, Def[B2] = {b} Use[B3] = {a}, Def[B3] = {a} Use[B4] = {b}, Def[B4] = ∅ ``` $OUT[B4]=∅$,B4使用了`b`, 所以$IN[B4] = Use[B4] ∪(OUT[B4] - Def[B4]) = \{b\}$; B3和B2只有一个后继B4, 所以他们的OUT值为`IN[B4]`,即 $OUT[B2] = OUT[B3] = IN[B4] = \{b\}$; B2中对变量`b`重新进行了赋值,即杀死了变量`b`,$Def[B2] = \{b\}$,没有使用原有的变量,$Use[B2]= ∅$,$IN[B2]=Use[B2] ∪ (OUT[B2] - Def[B2]) = ∅$; B3使用了`a`, 同时也对`a`重赋值, $Def[B3]=\{a\}, kill[B3]=\{a\}$, $IN[B3] = Use[B3] ∪ (OUT[B3] - Def[B3]) =\{a,b\}$; $OUT[B1] = IN[B2] ∪IN[B3]∪ IN[B4] = \{a,b\}$。 ### 2.3 可用表达式 一个表达式是可用的,是说在通往程序点p的所有路径上都对那个表达式进行过计算,且计算后再未对表达式的分量进行赋值过。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253486410107289.png) <center>图6 数据流分析-可用表达式示例1</center> B1生成表达式`a+b`,$OUT[B1] = \{a + b\}$。B2中对a重新赋值了,把`a+b`杀死了,所以$OUT[B2]=∅$。$IN[B3] = OUT[B1]∩OUT[B2]=∅$。因此B3中的`a+b`需要重新计算,不能消除。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253508431954071.png) <center>图7 数据流分析-可用表达式示例2</center> B2对`a`重新进行了赋值,但又生成了表达式`a + b`, 所以在B3的入口处 $IN[B3]=OUT[B1]∩OUT[B2] = \{a+b\}$。此处B3中的表达式可以使用`t`或者`x`, 不需要重新计算。 **可用表达式分析的迭代算法** $$ \begin{array} {l} OUT[ENTRY] = ∅; \\ for(除ENTRY之外的每个基本块B) \; IN[B] = U; \\ while(某个OUT值发生了变化)\{ \\ \qquad for(除ENTRY之外的每个基本块B)\{ \\ \qquad \qquad IN[B]=\cap_{P是B的一个前驱}OUT[P]; \\ \qquad \qquad OUT[B] = e\_gen_B∪(IN[B]-e\_kill_B); \\ \qquad \} \\ \} \\ \end{array} $$ ## 3.常量传播的数据流分析方法 前面介绍了到达定值分析,活跃变量分析,可用表达式分析。它们都是非常基础的数据流分析,在很多优化过程中会使用到这些数据流分析的结果。现在我们再次回到常量传播的优化上来。常量传播也是需要进行数据流的分析。它非常类似于到达定值,但因为常数的性质,又有所不同。 ### 3.1 常量传播使用的半格 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253532632154532.png) <center>图8 常量传播-半格</center> 过程(函数)中的每一个变量都这样的一个半格,变量的值就是半格中的元素。在常量传播分析的初始阶段,所有的变量的值是不确定的,我们用`UNDEF`表示(对应格论中的最大值`⊤`); 随着我们的分析,有些变量的值是常数,它的值就可以对应到半格的中间那一行的某一个元素,比如常数2。随着分析的进行,一些变量的值不是常数时(比如定值来自不同的前驱,每个前驱中对该变量的定值不同),用半格最底下的`NAC`(Not a Constant)表示(对应格论中的最小值`⊥`)。 前面提到过,交汇运算是对不同集合的合并。对于常量传播,每个变量的交运算(Meet Operator) 是它的不同取值在半格中的最大下界。交汇运算的规则如下: * UNDEF ∧ C = C (C表示一个具体的常数) * UNDEF ∧ NAC = NAC * C ∧ NAC = NAC * NAC ∧ NAC = NAC * C ∧ C = C * C1 ∧ C2 = NAC (C1≠C2) 例子: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253568691819188.png) <center>图9 常量传播-变量映射到半格的值</center> B2对`x`的定值为常数`-2`,B3对x定值为常数`3`,`-2 ∧ 3`就是在`x`变量的半格上取**它们俩的最大下界**,为`NAC`。 ### 3.2 常量传播的转移函数 对语句 z = x + y,转移函数如下: | x | y | z | | ----- | ----- | ------- | | undef | undef | undef | | undef | Cb | undef | | undef | NAC | NAC | | Ca | undef | undef | | Ca | Cb | Ca + Cb | | Ca | NAC | NAC | | NAC | undef | NAC | | NAC | Cb | NAC | | NAC | NAC | NAC | 例如下面的一个流图,黄色标记表示因为程序语句的影响而发生变化的变量状态。变量`x`在基本块B2中的值是`3`, 在B3中的值是`undef`, 他们汇合后(最大下界)是常数`3`。 在B4中,`x`是常数`3`, `x + 3` 就是常数`6`,所以B4中的指令就可以优化为 `y = 6`了。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253599804918666.png) <center>图10 常量传播-转移函数的示例</center> ### 3.3 常量传播的一个简易算法 ``` M[entry] == init do change = false worklist - all BBs; ∀B visisted(B) = false while worklist not empty do B = worklist.remove visited(B) = true m' = fB(m) ∀B' ∈ successors of B if visited(B') then continue end else m[B'] ∧= m' if m[B'] change then change = true end worklist.add(B') end end while(change == true) ``` **示例** 下面的程序代码 ```c j = 1; x = 10; y = 1; while(myRead()!=0){ x = x * y; y = y * y; j = j + y; } p = j + x + y; printf("%d\n", p); ``` 它的控制流图 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253636080702161.png)图11 常量传播-示例的控制流图对此控制流图应用上面的算法 | | 第一轮| 第二轮| 第三轮| | --------- | -------------------------------- | -------------------------------- | -------------------------------- | | Entry | ⊤,⊤,⊤,⊤> | ⊤,⊤,⊤,⊤> | ⊤,⊤,⊤,⊤> | | B1 | 1,10,1,⊤> | 1,10,1,⊤> | 1,10,1,⊤> | | B2 | 1,10,1,⊤> | ⊥,10,1,⊤> | ⊥,10,1,⊤> | | B3 | 2,10,1,⊤> | ⊥,10,1,⊤> | ⊥,10,1,⊤> | | B4 | ⊥,10,1,⊥> | ⊥,10,1,⊥> | ⊥,10,1,⊥> | | anyChange | True | True | False | `⊤`表示undef, `⊥`表示NAC (not a constant) 在第三轮迭代时每一个基本块的输出不再变化,到达定点。可以看出在基本块B3出口处,只有`x`和`y`是常量,分别是`10`和`1`,`j`和`p`是非常量。 基于上面的分析,上述程序可以做出如下优化 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253660317403931.png)图12 常量传播-程序优化的效果## 4.毕昇和LLVM中的常量传播 毕昇和LLVM的SCCP是一个比较高级的常量传播的pass, 它使用的算法是 Sparse Conditional Constant Propagation。 它的原理和上述的简易算法类似,有2点区别: 1. SCCP是在SSA的表示上进行的分析。在SSA的表示上进行常量传播分析,比非SSA表示的分析要快,但得到的结果是一致的。 2. SCCP会对条件分支中的条件进行判断,区分哪些基本块是可执行的,哪些是不可执行的,这样能够去除不可执行分支的影响,使常量传播更加准确(减少能传播但没有传播的情况)。 好了,常量传播就为大家介绍到这里。常量传播涉及到数据流的分析,所以这篇文章在介绍常量传播时也介绍了一下数据流分析,以及常见的三种数据流分析的思路。 ## 5.参考文献 1. Compilers Principles, Techniques, & Tools 2. http://www.cse.iitm.ac.in/~rupesh/teaching/pa/jan17/scribes/0-cp.pdf 3. Constant propagation with conditional branches https://dl.acm.org/doi/pdf/10.1145/103135.103136 4. https://www.youtube.com/watch?v=S1s4WYABiq0 --------- ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/11/1652253691899637472.png) 原文转载自毕昇编译-[编译器优化那些事儿(2):常量传播](https://mp.weixin.qq.com/s?__biz=MzkyNTMwMjI2Mw==&mid=2247484806&idx=1&sn=20eecb71c56960c3e2aeeb9e611838c6&chksm=c1c9e91ef6be60085081cc5fe1c2ef22117b04b74224a860075e0106befc044bd42d77744f9b&token=533395568〈=zh_CN#rd)
  • [其他] 浅谈人工智能研究价值
    例如繁重的科学和工程计算本来是要人脑来承担的,如今计算机不但能完成这种计算,而且能够比人脑做得更快、更准确,因此当代人已不再把这种计算看作是“需要人类智能才能完成的复杂任务”,可见复杂工作的定义是随着时代的发展和技术的进步而变化的,人工智能这门科学的具体目标也自然随着时代的变化而发展。它一方面不断获得新的进展,另一方面又转向更有意义、更加困难的目标。通常,“机器学习”的数学基础是“统计学”、“信息论”和“控制论”。还包括其他非数学学科。这类“机器学习”对“经验”的依赖性很强。计算机需要不断从解决一类问题的经验中获取知识,学习策略,在遇到类似的问题时,运用经验知识解决问题并积累新的经验,就像普通人一样。我们可以将这样的学习方式称之为“连续型学习”。但人类除了会从经验中学习之外,还会创造,即“跳跃型学习”。这在某些情形下被称为“灵感”或“顿悟”。一直以来,计算机最难学会的就是“顿悟”。或者再严格一些来说,计算机在学习和“实践”方面难以学会“不依赖于量变的质变”,很难从一种“质”直接到另一种“质”,或者从一个“概念”直接到另一个“概念”。正因为如此,这里的“实践”并非同人类一样的实践。人类的实践过程同时包括经验和创造。这是智能化研究者梦寐以求的东西。潘伟明表示,帮助人类完成无趣的重复性工作人工智能的快速发展对人类社会带来的最大冲击可能就是,它将代替大量的传统劳动力,很多生产线上的工人会因此而失去工作,全球大部分国家的失业率会因此上升。虽然人工智能使很多新兴产业崛起,但也有很多产业因人工智能的兴起而消亡。  在现实生活里,人工智能对社会传统劳动力形成的就业威胁,远超过很多社会学家的预期,不仅生产线上的工人会被影响,很多蓝领和白领也都被卷入这场威胁的浪潮。  著名企业家曾经预测,在二十年内,人工智能与自动化设备将取代社会各个行业将近一半的技术岗位,主要集中在文档分类、图书管理、理财产品的电话销售、会计、分拣、装配等方面。因为人工智能在做这种相对简单的数据分类且不需要大量交流的工作时,相比人工更高效且准确。潘伟明强调,事实上,他的预测已经在全球个别行业逐渐有了端倪。上海就有一家无人银行,也是我国唯一一家完全取代人工、全部用机器来办理业务的银行。国外也有案例,在 2017 年,世界四大会计事务所之一的德勤,就将人工智能应用在会计、税务等多项工作中,代替人类阅读合同和文件。人工智能正不断渗透到全球的社会工作,面对人工智能时代的全面来临,人们应该正视它并且要有足够的把握来控制它。人们需要理解的一点就是,人工智能代替的只是无趣的、重复性的工作。  人们应该用积极的态度来面对人工智能,充分了解自身的技能特点与人工智能的关系,运用人工智能技术提升人类劳动力的价值。并且,人们也应该接受那些工作内容冗杂、重复的工作岗位正在被人工智能替代的现实。在潘伟明看来,人工智能将作为分析工具与人类共事,人类也同样在思考能力方面有着人工智能不可比拟的优势,二者应共同创造人工智能与人类协作的蓝图。       2013年,帝金数据普数中心数据研究员S.C WANG开发了一种新的数据分析方法,该方法导出了研究函数性质的新方法。作者发现,新数据分析方法给计算机学会“创造”提供了一种方法。本质上,这种方法为人的“创造力”的模式化提供了一种相当有效的途径。这种途径是数学赋予的,是普通人无法拥有但计算机可以拥有的“能力”。从此,计算机不仅精于算,还会因精于算而精于创造。计算机学家们应该斩钉截铁地剥夺“精于创造”的计算机过于全面的操作能力,否则计算机真的有一天会“反捕”人类。当回头审视新方法的推演过程和数学的时候,作者拓展了对思维和数学的认识。数学简洁,清晰,可靠性、模式化强。在数学的发展史上,处处闪耀着数学大师们创造力的光辉。这些创造力以各种数学定理或结论的方式呈现出来,而数学定理最大的特点就是:建立在一些基本的概念和公理上,以模式化的语言方式表达出来的包含丰富信息的逻辑结构。应该说,数学是最单纯、最直白地反映着(至少一类)创造力模式的学科。
  • [AI类] 【ModelArts产品】【AI应用功能】MOX命令行应用将OBS文件传输给MODELARTS AI部署
    【功能模块】ModelArts产品AI应用功能模块服务ID 536afc85-d5ee-4ee5-8200-4ed6e1bc4ba0【操作步骤&问题现象】1、在使用ultralytics和yolov5,在modelarts平台做AI部署,报错,已经聚焦到问题是原代码中font(Arial.ttf)需要从网页下载2、已经将ttf文件手动下载放入obs中,地址:obs://overunderwater对象/ma-competitions-bj4/chuanbo/model/utilitiesma-competitions-bj4/chuanbo/model/utilities/Arial.ttf3、问题报错是找不到tff文件,请问如何在python文件中用mox命令,将该文件告诉python进行后续操作,麻烦写完整命令行,折腾好久了。import yaml from utilities.downloads import gsutil_getsize from utilities.metrics import box_iou, fitness # Settings FILE = Path(__file__).resolve() ROOT = FILE.parents[1] # YOLOv5 root directory DATASETS_DIR = ROOT.parent / 'datasets' # YOLOv5 datasets directory NUM_THREADS = min(8, max(1, os.cpu_count() - 1)) # number of YOLOv5 multiprocessing threads VERBOSE = str(os.getenv('YOLOv5_VERBOSE', True)).lower() == 'true' # global verbose mode FONT = 'Arial.ttf' # https://ultralytics.com/assets/Arial.ttf torch.set_printoptions(linewidth=320, precision=5, profile='long')【截图信息】【日志信息】(可选,上传日志内容或者附件)[2022-05-05 05:13:04 +0000] [18] [INFO] Using worker: sync [2022-05-05 05:13:04 +0000] [21] [INFO] Booting worker with pid: 21 Traceback (most recent call last): File "/home/mind/model/utilities/plots.py", line 57, in check_pil_font return ImageFont.truetype(str(font) if font.exists() else font.name, size) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 836, in truetype return freetype(font) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 833, in freetype return FreeTypeFont(font, size, index, encoding, layout_engine) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 194, in __init__ font, size, index, encoding, layout_engine=layout_engine OSError: unknown file format During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/mind/model_service/model_service.py", line 179, in load_service spec.loader.exec_module(module) File "", line 678, in exec_module File "", line 219, in _call_with_frames_removed File "/home/mind/model/customize_service.py", line 34, in from models.common import DetectMultiBackend File "/home/mind/model/models/common.py", line 27, in from utilities.plots import Annotator, colors, save_one_box File "/home/mind/model/utilities/plots.py", line 68, in class Annotator: File "/home/mind/model/utilities/plots.py", line 70, in Annotator check_pil_font() # download TTF if necessary File "/home/mind/model/utilities/plots.py", line 61, in check_pil_font return ImageFont.truetype(str(font), size) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 836, in truetype return freetype(font) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 833, in freetype return FreeTypeFont(font, size, index, encoding, layout_engine) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 194, in __init__ font, size, index, encoding, layout_engine=layout_engine OSError: unknown file format [2022-05-05 05:13:15 +0000] [21] [ERROR] Exception in worker process Traceback (most recent call last): File "/home/mind/model/utilities/plots.py", line 57, in check_pil_font return ImageFont.truetype(str(font) if font.exists() else font.name, size) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 836, in truetype return freetype(font) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 833, in freetype return FreeTypeFont(font, size, index, encoding, layout_engine) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 194, in __init__ font, size, index, encoding, layout_engine=layout_engine OSError: unknown file format During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/mind/model_service/model_service.py", line 179, in load_service spec.loader.exec_module(module) File "", line 678, in exec_module File "", line 219, in _call_with_frames_removed File "/home/mind/model/customize_service.py", line 34, in from models.common import DetectMultiBackend File "/home/mind/model/models/common.py", line 27, in from utilities.plots import Annotator, colors, save_one_box File "/home/mind/model/utilities/plots.py", line 68, in class Annotator: File "/home/mind/model/utilities/plots.py", line 70, in Annotator check_pil_font() # download TTF if necessary File "/home/mind/model/utilities/plots.py", line 61, in check_pil_font return ImageFont.truetype(str(font), size) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 836, in truetype return freetype(font) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 833, in freetype return FreeTypeFont(font, size, index, encoding, layout_engine) File "/root/.local/lib/python3.6/site-packages/PIL/ImageFont.py", line 194, in __init__ font, size, index, encoding, layout_engine=layout_engine OSError: unknown file format During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker worker.init_process() File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process self.load_wsgi() File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi self.wsgi = self.app.wsgi() File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load return self.load_wsgiapp() File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp return util.import_app(self.app_uri) File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app __import__(module) File "/home/mind/app.py", line 132, in module = load_service(model_service_file) if model_service_file else pytorch_vision_service File "/home/mind/model_service/model_service.py", line 188, in load_service raise Exception('Incorrect or missing service file: ' + path) Exception: Incorrect or missing service file: /home/mind/model/customize_service.py [2022-05-05 05:13:15 +0000] [21] [INFO] Worker exiting (pid: 21) Namespace(model_name='serve', model_path='/home/mind/model/yolov5l.pt', pt_server_name='127.0.0.1', service_file='/home/mind/model/customize_service.py') [2022-05-05 05:13:16 +0000] [18] [INFO] Shutting down: Master [2022-05-05 05:13:16 +0000] [18] [INFO] Reason: Worker failed to boot.
  • [热门活动] 【华为云AI证书和手机待领取】DevRun AI应用开发Python实战营
    【报名福利】报名后即可参与抽奖,超5%中奖概率,抽华为畅享10 Plus手机、华为路由器、华为nova mini蓝牙音箱、华为云AI定制衣服、定制保温杯!【活动亮点】0门槛入门Python,华为名师从环境搭建开始带您走进Python的世界,了解Python独特的语法,同时结合实践操作,增强您的编程能力。>>> 点击报名链接<<<【活动流程】①报名加入学习群,②在线课程,③实践案例直播课,④结业颁奖 ①【加入学习群】扫码添加小助手,加入学习群↓↓↓↓↓②【在线课程】总分500分开发者完成以下三门课程的进度和测试,可获得对应的分数。· 华为名师揭秘编程界“网红”Python:· Python入门篇:· Python进阶篇: ③【实践案例直播课】总分100分老师保姆式教学,完成实践案例可获得对应的分数:④【结业颁奖】获得满分600分的开发者,活动结束后将获得由华为云AI颁发的【DevRun AI应用开发-Python实战营结业证书】【邀请报名奖励】>>> 点击报名链接<<<>>> 点击报名链接<<<【活动说明】①请务必使用个人实名账号参与活动(IAM、企业账号等账号参与无效)。②为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等**活动公平性的行为,黑产用户不计入活动统计),利用资源从事违法违规行为的用户收回奖励资格,本次活动一个实名认证账号只能对应一个收件人(只能参加一次),如同一账号填写多个不同收件人,不予发放奖励,且每个账号只记录最早的一次回帖,多发无效。排名奖项若有并列,按照完成时间先后顺序排列。③本活动规则由华为云在法律规定范围内进行解释。华为云保留不时更新、修改或删除本活动规则的权利。上述更新、修改或删除于公布时即时生效,用户应当主动查阅本活动规则的最新内容。④所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》,包括以援引方式纳入《华为云用户协议》的《可接受的使用政策》、《法律声明》、《隐私政策声明》、相关服务等级协议(华为ModelArts服务声明、SLA等),以及华为云服务网站规定的其他协议和政策(统称为“云服务协议”)的约束。如果您不同意本活动规则和云服务协议的条款,请勿参加本活动。
  • [技术干货] openGauss AI能力升级,打造全新的AI-Native数据库
    数据库与AI结合起来会迸发出什么样的火花?不同的数据库厂商、开源社区、高校师生们的理解也都不尽相同。虽然在精确的概念上难以形成统一的标准,但是在总体的演进思路上却是一致的。对于openGauss来说,自从在社区开源第一个版本开始,openGauss便不断地在该领域演进并贡献代码,对于此次开源的openGauss 3.0.0 版本来说也不例外。在3.0.0版本中,openGauss的AI领域将在多个方向演进:1. 整合现有AI4DB功能,开源openGauss数据库自治平台;2. 重构现有AI4DB能力,实现插件化、支持服务式的运行模式;3. 支持Prometheus 生态;4. 新增慢SQL根因分析、时序预测等新特性,优化现有的AI能力;5. DB4AI功能支持更多算法。DB4AI原生引擎进一步升级在openGauss 3.0.0中,DB4AI原生引擎支持更多机器学习算法,例如支持SVM的非线性核函数,支持XGBoost等等。同时,openGauss还提供了Explain接口,可以观察到模型的信息。AI4DB支持服务化、插件化原有的openGauss AI4DB 能力是离线工具形态,不能在后台对数据库进行完整的监控,也不能定期地对数据库进行问题发现。最新版本,openGauss实现了后台监控服务,并在后台定期地检查数据库系统的状态,从而形成了自治数据库平台DBMind。通过离线计算的形式,将诊断结果保存,用户可以通过Grafana等软件进行可视化,从而第一时间发现问题并获知问题的根因。由于需要在后台定期监控openGauss数据库系统的运行状态,因此,需要对接监控平台以便采集数据库监控指标并进行离线计算。故而,在3.0.0版本中,openGauss实现了两款exporter用于与Prometheus平台进行对接,其架构形态为:其中,openGauss-exporter 用于获取数据库系统的监控指标(metric),reprocessing-exporter用于对存储在Prometheus中的数据进行二次加工。上述两个exporter的数据,可以通过Prometheus定期采集获取。DBMind系统定期从Prometheus中获取时序数据,并在DBMind部署机上进行并行计算。待计算完成后,将计算结果存储在元数据库(meta-database)中。之后,用户可以从元数据库中获取诊断结果,更进一步地,可以通过配置Grafana等进行可视化。如上图所示,是一种基于元数据库中的数据,采用Grafana进行可视化的示例。与此同时,openGauss还全面整合了现有的AI能力,并重新设计了一种插件化的模式。例如,用户希望调用参数调优功能,基于强化学习来调试数据库的参数,可以通过下述命令来实现:gs_dbmind component xtuner tune …通过上述gs_dbmind 命令,可以调用所有的AI功能,通过component 子命令,可以调用具体的AI功能。用户可以通过下述命令来查看帮助详情:gs_dbmind component --help通过上述设计,openGauss社区开发者如果希望贡献某种数据库AI功能,则只需要保证接口能被gs_dbmind获取到即可。同时,开发的插件还可以调用DBMind提供的全部API,例如从Prometheus 中获取数据的dai (data access interface)接口,向元数据库(meta database)中插入数据的 dao (database access object)接口等。AI4DB 现有AI能力全面提升在此次发布的3.0.0版本中,openGauss 对现有的索引推荐、时序预测等功能也进行了全面升级。补充了以往版本中的疏漏场景。同时,提供慢SQL根因分析与推荐功能,帮助DBA迅速识别出慢SQL,并依据监控到的数据库运行指标,通过AI特征库识别算法创新地给出慢SQL产生的原因和置信度,同时还给出优化建议。为下一步开发全面的数据库AI自治平台打下基础如上文所述,在openGauss 3.0.0版本中,创新性地完成了对历史AI能力的整合,丢弃历史研发过程中遗留下的包袱,轻装上阵,创新性地实现了可服务化、可离线式、插件式、自由组装的DBMind平台,并跟随数据库安装包一同发布。对于诊断后的结果,用户可以自行采用Grafana等工具进行自定义地可视化(当然,我们也会提供Grafana示例)。这为我们未来更进一步地将DBMind平台升级打下基础,预计本年度openGauss会将更多AI功能丰富到该平台中,同时将该平台从现有代码仓库中独立出来,并提供原生的Web前后端展示平台,同时支持自修复功能,让用户真正体会到一键式、开箱即用的数据库自动驾驶。
  • [其他] 将AI应用发布到ModelArts模型管理
    AI应用开发并调试完成后,开发者可以将AI应用服务到ModelArts AI应用管理模块,然后在ModelArts的推理平台进行应用的生产部署。发布AI应用包含了应用打包、构建镜像和发布这三个步骤。打包AI应用构建镜像发布和部署AI应用打包AI应用鼠标右键工程列表中当前工程,点击“Package”将会打包当前工程,生成该工程的rpm包。构建镜像将AI应用打好的rpm包和基础镜像打成新的应用镜像,用于部署。生产部署时,Dockerfile中配置的基础镜像需要选择runtime镜像。鼠标右键工程列表中的当前工程,点击“Build Image”,输入镜像名称、镜像版本、OBS地址。图1 构建镜像镜像构建首次执行大约耗时5~8min,执行成功后镜像将被推送到华为云SWR服务的组织中,SWR地址会打印在terminal控制台。命令执行结束后,镜像构建的日志会在下载至工程log目录下docker-build.log文件中,可通过日志查看构建过程信息。发布和部署AI应用发布AI应用鼠标右键工程列表中当前工程,点击“Public”,输入应用名称、应用版本、请求方式以及镜像地址。点击高级选项可以配置更加丰富的选项。图2 发布AI应用部署AI应用AI应用发布成功后,进入“部署上线>在线服务”模块进行部署操作,部署时选择发布的AI应用进行部署即可。控制台上提供了比开发环境的命令行更为丰富的部署选项,例如服务流量限制、服务自动停止等,用户可以根据需要进行配置,具体可参考部署为在线服务。
  • [云实验室] 基于昇腾AI处理器的目标检测应用(ACL)-连不上弹性公网IP
    实验到这个步骤的时候,连不上弹性公网IPfailed to connect the device
总条数:7868 到第 页
上滑加载中