ai算子是什么_AI当自强:独家揭秘旷视自研人工智能算法平台Brain++

2023-11-04

转载自:机器之心

随着深度学习逐渐从实验室走向工业应用,各大企业都在探索构建算法架构、实现模型的工具和平台。和使用 TensorFlow 或 PyTorch 等开源框架的公司不同,旷视走向了一条自主研制的道路,建立了从算法研发到部署应用的全流程、一站式人工智能算法平台 Brain++。在 Brain++ 投入使用 5 年之际,机器之心在此为读者揭开 Brain++ 的神秘面纱。

如果说算法模型是果实,那么开发它的环境和框架就是培育果树的土壤。尽管平时在开发中,框架和底层环境没有那么引人瞩目,但没有这些底层技术的支持,优秀的思路和创意也就无从实现。当前,深度学习社区基本上被 TensorFlow 和 PyTorch 两大框架垄断。开源框架固然具有很高的人气和易用性,但是在国际环境变幻莫测的大背景下,是否依赖这些框架就足够保险呢?同时,如果企业有新的想法和业务需求,开源框架能否完美实现?是否能够无缝嵌入业务之中?这些都是 AI 企业需要思考的问题。

近日,旷视自主研发的人工智能算法平台 Brain++荣获第六届世界互联网大会「世界互联网领先科技成果」

旷视联合创始人兼 CTO 唐文斌在大会上表示,「2014 年我们开始研发 Brain++,它是一套端到端的 AI 算法平台,目标是让研发人员获得从数据到算法产业化的一揽子技术能力,不用重复造轮子也可以推进 AI 快速落地。我们的 Brain++还引入了 AutoML 技术,可以让算法来训练算法,让 AI 来创造 AI。」

通过旷视从 2014 年开始自研深度学习框架,到现如今构建了一整套围绕 AI 开发的整体系统,似乎以上这些问题可以得到一个解答。

Brain++:旷视自研人工智能算法平台

很多人会误以为这仅仅只是旷视的一个深度学习框架,或者是企业内部开发的云计算平台。而事实上,Brain++ 在旷视内部已成为了支撑算法研究和开发的整体基础底层平台。

Brain++ 涵盖了深度学习算法开发的整个流程

具体而言,Brain++ 涵盖了深度学习算法开发的所有环节。从数据的获取、清洗、预处理、标注和存储开始,到研究人员设计算法架构、设计实验环节、搭建训练环境、训练、加速、调参、模型效果评估和产生模型,到最终的模型分发和部署应用,Brain++为旷视的研发人员提供了一站式全流程的 AI 工程解决方案。总体架构上,Brain++ 可以大体分为三部分,包括作为主体的深度学习算法开发框架 MegEngine、提供算力支持的 MegCompute、以及用于提供数据服务和支持的 MegData。

据旷视方面透露,Brain++ 其实是国内很早就开始研发构建的深度学习系统之一。早在 2014 年,Brain++ 就已经开发出来,在当时作为算法框架在公司内部开始使用。其中,旷视在 2017 年拿下 3 项 COCO 冠军,2018 年拿下 4 项 COCO 冠军,以及今年发布的全新的通用物体检测数据集 Objects365,都与 Brain++ 的功劳密不可分。

人工智能平台 Brain++ 这一系统内部是什么样的?机器之心接下来会按照组成模块进行解读。

三大支柱模块成就 Brain++旷视原创自研的新一代人工智能算法平台 Brain++ 由三大支柱构成,分别是深度学习框架 MegEngine、深度学习云计算平台 MegCompute 和数据管理平台 MegData。

MegEngine:极致性能

MegEngine 是 Brain++ 的核心组件,是为开发者和研究人员提供开发的深度学习框架。这一框架主要用于旷视内部进行计算机视觉领域的算法开发工作,包括大规模的人脸识别、图像分割、姿态识别等。

1. 基于计算图的深度学习框架

MegEngine 的整体架构

从架构来说,MegEngine 分为四个层,包括计算引擎、运行时管理、编译和优化以及编程和表示。计算引擎以 MegDNN 为核心,发挥计算作用。MegDNN 是一个基于异构架构,有着统一的交互方法的内核,可以根据设备本身启发式地选择最优内核,也可以让用户自己选择最适合的内核进行计算。

在运行时管理层中包括两个模块,分别是内核调度和内存管理和优化两大模块。在内存管理和优化模块中,MegEngine 采用了动态、静态内存分配并存的方式。

在编译层和优化层,MegEngine 使用了基于计算图的编译和优化方法。编程和表示层进行用户交互,能够使用高级编程语言(如 Python)执行用户的命令。

2. 框架优势

旷视的深度学习框架 MegEngine 有着多种多样的优势,相比于开源的大部分深度学习框架,MegEngine 具有:

  • 运算速度快:MegEngine 动态、静态结合的内存优化机制,因此速度比 TensorFlow 更快;
  • 内存占用少:通过分析整个执行方案的内存使用情况,MegEngine 充分优化内存,特别是亚线性内存优化,可以支持复杂的网络结构,自动利用部分冗余计算缩减内存占用,可达两个数量级,从而支持更大规模的模型训练;
  • 易用性好:MegEngine 封装了平台细节,易于新人用户快速上手;
  • 支持多种硬件平台和异构计算:MegEngine 支持通用 CPU、GPU、FPGA 以及其他移动设备端硬件,可多卡多机进行训练;
  • 训练部署一体化:整个框架既可用于训练又同时支持推理,实现模型一次训练,多设备部署,避免复杂的转换过程造成的性能下降和精度损失。

3. 和主流深度学习框架对比

MegEngine 之所以能够成为的核心算法框架,主要依靠其底层几大技术。

首先,MegEngine 基于 C++ 开发,可帮助用户借助编程语言进行高性能的运算执行。在框架内部,使用了目前流行的计算图方式。和其他框架不同,MegEngine 使用的是异构架构,方便使用框架进行分布式计算。

此外,MegEngine 内部的计算以算子的形式进行,它支持多种算子节点和变量算子,包括常用的卷积、全连接、ReLU 和用户可定制的算子,甚至可以计算二阶梯度,从而进行更多底层和灵活的运算。可以说,MegEngine 在尽全力提升深度学习计算性能的基础上,为用户提供了灵活易用的模型构建工具,极大地提升了开发效率。

根据旷视提供的资料,MegEngine 和当前开源的主流深度学习框架—— TensorFlow、PyTorch 进行了对比。

MegEngine和 TensorFlow、PyTorch 框架的性能对比

从图上可以看出,在主流的计算机视觉模型(Resnet50 和 ShuffleNet V1)上,MegEngine 在训练上可以和主流框架媲美。

4. 并行计算支持

值得一提的是,MegEngine 为了提升大规模图像数据进行处理和模型训练的效率,在分布式计算方面下足了功夫。分布式计算中的数据并行和模型并行方式都被用在了 MegEngine 中,极大提升了模型训练效率。在模型并行方面,MegEngine 提供原语级别的支持,方便用户进行模型并行设置和执行。最终,模型并行可以和数据并行模式混合使用。有了深度学习框架天生对分布式计算的支持,MegEngine 在训练和推理效率上达到了很高的水平。

5. 原生 AutoML 支持

MegEngine 还集成了旷视最新的 AutoML 技术,对深度学习算法的各个关键环节进行自动化的设计、搜索和优化。这项技术以 One-Shot 方法为核心,通过一次训练完成自动化过程,将计算代价减小至传统 AutoML 方法的万分之一,在可控的时间内搜索出高性能、易部署的模型结构。

旷视 AutoML 技术图示

相比于市场上的 AutoML 技术,旷视的 AutoML 技术有以下优势:

  • 计算代价小。传统的 AutoML 技术常常需要多次训练模型甚至会遍历部分模型空间,计算代价巨大。旷视的 AutoML 技术只需训练一次即可得到整个模型空间的刻画,大大减小了计算代价,只是平常训练代价的 1-3 倍。
  • 应用范围广。旷视 AutoML 技术提供了一套完整的解决方案,覆盖了大部分业务,包括活体检测、人脸识别、物体检测、语义分割等。
  • 部署方便。旷视 AutoML 技术涵盖了数据处理、模型训练、模型压缩、模型量化等流程,自动处理从数据到落地。
  • 精度高。旷视 AutoML 技术在诸多视觉任务上,超过人类手工设计,达到了业界最优。

除了支持深度学习框架中所有的基本功能,MegEngine 还有很多高级功能,如支持神经架构搜索、网络剪枝和构建低比特的小型神经网络(基于旷视提出的 DoReFaNet)等。

MegCompute:高效灵活

有了性能极佳的深度学习框架和全面的数据平台支持,Brain++也需要强大的算力支撑才能发挥完全的能力。深度学习框架的基础之上,旷视开发出了支撑整个平台计算的系统,称为 MegCompute。

这是一个包括了硬件基础设施、数据存储和计算调度的平台。用于协助研究人员部署训练环境、设计训练流程、提供算力和资源分配服务、监控实验进程、提供可视化效果展示、管理用户权限、存储数据等。

MegCompute 平台的整体架构

MegCompute 的总体架构可以概括为「三驾马车」,分别为基础设施、数据存储和计算。基础设施方面,通过高性能硬件支持深度学习计算和大规模数据传输。在数据存储方面,考虑到计算机视觉数据普遍为海量小文件,数据存储平台采用了分布式对象存储系统,具有大容量可弹性扩展的存储能力。此外,在云计算方面,使用精细的算力管理方式,给用户灵活分配计算资源,同时避免算力浪费。

MegCompute 会为每个用户会分配若干台虚拟机做开发,这称之为 Workspace, 其中自带了 JupyterLab 方便研究员使用;旷视还通过开发可分享的插件,方便研究员将 JupyterLab 中的内容分享给指定的同事。为杜绝浪费,Workspace 中不带 GPU,那训练程序需要 GPU 怎么办呢?

MegCompute 提供了一种新颖的动态分配使用 GPU 的方式,当需要使用 GPU 运行程序时,可使用 rlaunch 命令将程序直接分配到若干台 GPU 运行,并可以在终端的标准输出获取到远程命令执行的结果。这种方式跟任务提交相比,可以做到无缝执行,不需要将程序打包成镜像进行分发,因为 rlaunch 可以做到跟本地拥有 GPU 类似的使用体验,而广受研究员欢迎。

此外,计算平台提供任务的优先级机制,让集群资源能够高效的利用。同时,通过 GPU 拓扑和网络拓扑感知功能,让大规模多机训练的网络更加快速和稳定,达到更高效的训练效率。

总体而言,MegCompute 从功能上,真正将旷视自研的深度学习框架扩展到了企业级别的系统服务平台,通过连接硬件、数据和深度学习框架,将构建深度学习模型的所有环节串联了起来。MegCompute 有以下几大特点:

  • 性能强大:MegCompute 有丰富的 GPU 计算资源,同时也支持各类硬件,可灵活高效地分配计算任务。
  • 全流程覆盖:MegCompute 支持模型构建的全部流程环节,让研究人员能够实现一站式的业务应用服务,满足工业级的 AI 能力研发测试、部署上线和业务生产方面的工作。
  • 弹性部署:MegCompute 采用了 Docker 容器技术,可以让用户弹性化地构建部署训练环境,在不需要使用的时候直接销毁,使得资源可以及时释放给其他用户,具有非常弹性的特点。
  • 用户友好:用户使用过程中,通过可视化界面进行环境搭建和训练设计方面的工作,也可以通过可视化的方式查看模型测试的结果,不需要关注太多的底层技术细节,使用非常方便。
  • 支持多种深度学习框架:除了和 MegEngine 自研深度学习框架紧密结合外,MegCompute 也支持使用 TensorFlow 和 PyTorch。

MegData:数据综合处理

在构建模型的时候,也需要大量的数据支持。Brain++ 中的 MegData 是负责提供数据方面的服务,主要有四个方面:1)数据管理;2)数据标注;3)数据处理;4)数据安全。

旷视 Brain++ 的核心组件 MegData

旷视在研发过程中需要使用大量的图像数据,因此需要一个综合平台提供管理、标注、处理和存储安全相关的服务。根据旷视介绍,MegData 可以提供完整的数据服务,为用户提供了全流程的解决方案。

在标注方面,MegData 提供了数据标注相关的服务,将人工标注和辅助算法相结合,提升标注效率。经过多次的业务打磨,MegData 平台现已拥有全生命周期的项目管理平台,进一步实现 AI 助力,解放人工。另外,MegData 还将旷视原创算法引入标注平台中,利用数据辅助算法实现标注效率的大幅提升。这些标注算法都是基于云的,可以伸缩和扩展。在自动标注上,旷视采用了很多算法。比如,使用聚类算法,旷视可以使某项标注任务的成本下降为原有的 10%。一些标注任务通过算法辅助验收,效率提升 150% 以上。相比于其他同类平台,MegData 在数据层面为 AI 模型研究提供了安全、高效的数据存储和处理方式。同时,由于它是基于云的,具有很高的灵活性。最后,MegData 补全了 AI 算法研发中数据处理的缺失环节,使研发人员不需要花太多精力在数据层面,很大程度上提升了效率,节省了时间和研发成本。

总体而言,虽然不似其他两个 Brain++ 模块那样引人关注,MegData 在系统中发挥着重要的功能,负责完成了深度学习训练前很大一部分的数据管理、处理、标注和安全的工作。这些都是整个流程环节必不可少的。

自研平台驱动整体技术发展

Brain++ 系统凸显了旷视在技术开发上的三个趋势。首先,Brain++ 完全是自主研发的深度学习系统,涵盖了 AI 业务的整体流程。这说明旷视能够完全掌握核心的研发工具和平台。旷视 Brain++ 是为计算机视觉场景而专门研发的,这是一个以业务为导向的专业 AI 服务系统,因此旷视可以拿出很多精力,针对业务中的需求提出专门的解决方案,而新方法可以快速在实际应用中得到测试和验证,通过业务驱动框架的发展。

最后,由于旷视对 Brain++ 本身具有完整的掌握能力,并且通过计算机视觉相关场景驱动 Brain++ 的发展,它的迭代速度非常快。当前,新算法层出不穷,企业急需要能够快速实现算法的人工智能平台,能够迅速将新方法投入实际的生产中。Brain++ 能够快速根据新的变化进行调整,能够为旷视在新技术的研发和应用上抢占先机,使企业牢牢占领技术高地,保持技术能力常新常青。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ai算子是什么_AI当自强:独家揭秘旷视自研人工智能算法平台Brain++ 的相关文章

  • 软件逆向练习--Reverse

    如有错误或理解不到位的地方劳烦各位大佬指出 感谢 一 Reverse000 exe 1 使用OD打开Reverse000 exe 2 右键选择中文搜索引擎 gt 智能搜索 3 双击please input password 跟进去 4 此处
  • Android versions (Android 版本)

    Android versions Android 版本 All Android releases https developer android com about versions Android 1 0 G1 Android 1 5 C
  • vue怎么在一个页面里写两个表格_vue项目中将element-ui table表格写成组件

    表格中我们经常需要动态加载数据 如果有多个页面都需要用到表格 那我希望可以有个组件 只传数据过去显示 不用每个页面都去写这么一段内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 查看 16 编辑 17 18 19
  • 《百面机器学习》学习笔试之模型评估(第2章)

    01 评估指标的局限性 准确率 Accuracy 的局限性 A c c u r a c y
  • 服务器输入nvidia-smi报错:

    发现服务器好像有挖矿程序再跑 我重启了一下 结果重启后nvidia smi报错了 NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver Ma
  • 运维36讲第10课:基于 Python+Ansible+Django 搭建 CMDB 平台

    本课时我们主要讲解如何基于 Python Django Ansible 开发一套具备 Devops 理念的自动化任务执行和资产管理 CMDB 系统 工程简介 这个可以实现自动化任务执行和资产管理的系统取名为 Imoocc 它是基于 Pyth
  • element ui 对话框设置固定宽度

    宽度设置width属性 默认是百分比 如 width 30 表示宽度为 其父元素宽的 30 想给固定宽度 使用v bind指令 加上px单位即可 width 300px 注意引号
  • 如何查看公众号文章的排版格式字体大小

    Q1 如何查看公众号文章的排版格式 字体 大小 颜色 行间距 页边距等 注意 如果是长图形式 图片中的文字 无法使用这个方法 总共三步 1 电脑端打开微信文章 复制链接地址 点击下方红框 2 在浏览器中粘贴 跳转显示该文章 3 鼠标选中字体
  • 对傅里叶变换的一些思考

    1 时域中的周期对应傅里叶变换的离散 2 时域的非周期对应傅里叶变换后的连续 3 将一个非周期信号傅里叶变换后 得到频谱图 其中横坐标是频率 纵坐标是幅值密度 而不是幅值 量纲是幅值的单位 Hz 所以这个频谱图里面各个频率对应的波的幅值应该
  • 简单博弈论(Nim游戏)

    891 Nim游戏 题目 提交记录 讨论 题解 视频讲解 给定 n 堆石子 两位玩家轮流操作 每次操作可以从任意一堆石子中拿走任意数量的石子 可以拿完 但不能不拿 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜 输入格
  • 图像分类之PaddleClas网络预训练模型加载方法

    PaddlePaddle简介 PaddlePaddle是非常好用的深度学习库 尤其是2 0版本发布以来 高低层API可以自由结合使用 优点如下 可以像tensorflow里面的keras一样非常方便的用几行代码完成模型构建和训练 可以像py
  • 【图像处理】彩色图直方图统计

    首先要知道彩色图是没有直方图的 只能在rgb方向分别求直方图在合并一下 干脆不用这么麻烦 用rgb2gray转到灰度图 再在二维上进行直方图绘制 最后还提供了代码 找出直方图中横坐标 像素值 为50以下的纵坐标 以此为像素的个数 的和 cl
  • 代码精简10倍,责任链模式yyds

    目录 什么是责任链 使用场景 结语 前言最近 我让团队内一位成员写了一个导入功能 他使用了责任链模式 代码堆的非常多 bug 也多 没有达到我预期的效果 实际上 针对导入功能 我认为模版方法更合适 为此 隔壁团队也拿出我们的案例 进行了集体
  • K8S中安装kafka集群问题总结

    k8s下kafkacluster的安装 https github com banzaicloud kafka operator 问题一 镜像无法拉取 由于镜像源在国外被墙的原因 无法从源镜像下载 一般走镜像代理的形式 先从代理仓库docke
  • Ubuntu16.04 完全卸载opencv

    cd XXX opencv build 进入build目录 sudo make uninstall 卸载掉配置路径中的文件 sudo rm r build 删除build文件
  • Windows10家庭版 Windows defender 安全中心显示 页面不可用

    前言 今天使用电脑时出现了如下情况 倒没有发现电脑有什么实质的问题 只是不太理解又觉得好奇 于是就上网查了查 因为没有发现电脑有什么实质的问题 所以犯懒没有鼓捣自己的电脑 以下内容皆由网络所得 由本人整理汇总 希望有所帮助 可能的原因与解决
  • IOU(Intersection Over Union) 概念清晰图解 + python代码示例

    IOU Intersection Over Union 交并比 Intersection over Union IoU 目标检测中使用的一个概念 是产生的候选框 candidate bound 与原标记框 ground truth boun
  • C++ gstreamer函数使用总结

    目录 1 GSteamer的基本API的使用 这个播放mp4报错 这个创建play bin 返回0 不能运行 这个值得看 2 创建元件并且链接起来 3 添加衬垫 添加回调 手动链接衬垫 4 打印gstreamer的版本信息 5 gstrea

随机推荐

  • vim-指定区域查找替换

    vim中的区域查找替换 vim这么强大的工具当然是支持只替换一部分文本啦 那么怎么实现呢 最直接的方式 1 用v选中文本 2 然后 这样的话 命令默认形式是 lt gt s source source abc g 繁琐的方法 a bg fr
  • C/S与P2P的主要区别以及相同点

    C S方式所描述的是进程之间服务和被服务的关系 客户是服务的请求方 服务器是服务的提供方 服务的请求方和提供方都要使用网络核心部分所提供的服务 客户程序被用户调用后运行 在通信时主动向远地服务器发起通信 服务请求 因此 客户程序必须知道服务
  • Python爬虫系列(二)——Python爬虫批量下载百度图片

    1 前言 先贴代码 coding utf8 import requests import json from urllib import parse import os import time class BaiduImageSpider
  • 关于LayUI 表格高度解决方案

    需求是这样式的 我有一个产品列表 但是我想在产品列表中显示产品主图信息 本文只涉及LayUI技巧 不涉及JAVA JS 渲染部分 table render cellHeight 300 elem currentTableId url Pro
  • AIX 上压缩与解压缩

    gz gzip d 或 gunzip gzip Z uncompress compress tar tar xvf tar cvf cpio cpio idumv zip unzip 或 jar xvf tar gz gzip dc tar
  • 心跳包实现的另一种机制

    因为工作关系 经常用到心跳包 之前是在服务端中的连接的实体中保持一个timer 每秒加一 每次服务端接到客户端的心跳 就会把计数置为0 当累加到20秒的时候 服务端会接到客户端抛出的掉线函数回调 就会视为客户端掉线 然后从缓存中删掉掉线用户
  • 一次性搞懂什么是AIGC!

    你知道什么是AIGC吗 不知道 没关系 我来告诉你 AIGC就是人工智能生成内容 Artificial Intelligence Generative Content 也就是让AI自己动手创作各种各样的内容 比如图片 视频 音乐 文字等等
  • DNSPod 查看域名解析的 domain_id 和 record_id

    本文介绍调用 API 获取 DNSPod 域名解析需要的 domain id 和 record id 参数的方法 所有的 DNSPod API 请求都必须提供 login token作为公共参数以验证用户身份是否合法 获取 login to
  • 软件版本命名规范

    1 版本命名规范 1 2 3 20190114 rc 由四部分组成 第一位 1 主版本号 当功能模块有较大的变动 比如增加多个模块或者整体架构发生变化 此版本号由项目决定是否修改 第二位 2 子版本号 当功能有一定的增加或变化 比如增加了对
  • [小程序实现保存图片到相册]

    保存图片到相册 实现逻辑 首先查看用户申请过的权限中是否有 保存图片到相册 如果没有这个权限 则需要先申请权限 弹窗授权 如果用户同意授权则保存图片 如果用户不同意 则跳转到设置页 重新授权 然后再保存图片 查看用户申请的全县有哪些 通过微
  • Httpservlet cannot be resolved to a type的原因与解决方法

    刚开始学习Servlet 在Eclipse中新建了一个Servlet 不过页面上报错 Httpservlet cannot be resolved to a type 显然是Eclipse找不到相应的包 即javax servlet 原因
  • 重建控制文件 recreate control file

    简单总结如下 1 启动到mount2 执行Alter database backup controlfile to trace 3 找到第2步生成的trace文件 并作相应修改 只保留创建语句4 shutdown并启动到nomount 执行
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(二)

    马上就又到了程序员们躁动不安 蠢蠢欲动的季节 这不 金三银四已然到了家门口 元宵节一过后台就有不少人问我 现在外边大厂面试都问啥 想去大厂又怕面试挂 面试应该怎么准备 测试开发前景如何 面试 一个程序员成长之路永恒绕不过的话题 每每到这个时
  • DETR,YOLO模型计算量(FLOPs)参数量(Params)

    前言 关于计算量 FLOPs 参数量 Params 的一个直观理解 便是计算量对应时间复杂度 参数量对应空间复杂度 即计算量要看网络执行时间的长短 参数量要看占用显存的量 计算量 FLOPs FLOP时指浮点运算次数 s是指秒 即每秒浮点运
  • scrapy框架之item pipeline的使用

    转载 https blog csdn net kuangshp128 article details 80321099 一 关于scrapy中pipleline的基本认识 Item Pipeline又称之为管道 顾名思义就是对数据的过滤处理
  • 集线器端口上的电涌:一个USB设备超过其集线器端口的电源限制

    集线器端口上的电涌 一个USB设备超过其集线器端口的电源限制 花了三个小时查阅了大量资料 终于把这个问题大致弄清楚了 差点全盘格式化 主要是因为不认盘的缘故 以为分区表全部损坏 我一开始就怀疑是供电不足 当然以前也碰到过类似的情况 通常重启
  • MySQL数据库查询字符串数据格式之不足自动填充“0”字符以达到指定位数

    MySQL数据库查询字符串数据格式之不足自动填充 0 字符以达到指定位数 在MySQL数据库中 很多时候我们的数据会跟我们想要的输出结果有出入 例如在数据库中 如果我们保存的是1 但是我们需要他输出显示的是001 那就需要我们在数据1的前面
  • 【Linux】调试器:gdb 的基本使用

    文章目录 前序工作 readelf 基本操作 l 显示代码 list r 运行程序 开始调试 run b 打断点 breakpoint info b 查看 断点 information d 删除 断点 delete disable 关闭 断
  • Android 占位式插件化原理实现(三) 如何在插件APP中使用动态广播

    写在前面 前面实现了插件APP的Activity和Service的启动 今天咱来说一下动态广播的使用 还是老套路 使用宿主环境注册和发送 基于宿主Activity注入到插件Activity的Context 一 项目目录 新增文件 宿主APP
  • ai算子是什么_AI当自强:独家揭秘旷视自研人工智能算法平台Brain++

    转载自 机器之心 随着深度学习逐渐从实验室走向工业应用 各大企业都在探索构建算法架构 实现模型的工具和平台 和使用 TensorFlow 或 PyTorch 等开源框架的公司不同 旷视走向了一条自主研制的道路 建立了从算法研发到部署应用的全