当前位置: 首页 > news >正文

AI芯片:神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速

AI芯片: 神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速

      • 神经网络研发加速器
        • 神经网络编译器
        • 各自实现的神经网络编译器
      • 神经网络加速与压缩(算法层面)
        • 知识蒸馏
        • 低秩分解
        • 轻量化网络
        • 剪枝
        • 量化
      • 通用芯片 CPU 加速
        • x86 加速
        • arm 加速
        • 卷积优化
        • 神经网络加速库
      • 专用芯片 GPU 加速
        • dsp加速
        • faga加速
        • npu加速
        • K210人工智能微控制器
        • 神经网络加速库: Vulkan图形计算

 


神经网络研发加速器

神经网络编译器组成:编译器、图表示、图优化、计算优化、代码生成。

 

神经网络编译器

问题: 如何将高级别的神经网络模型有效转换为在多种硬件上运行的优化代码?

ONNX的角色:

  1. 统一格式:ONNX提供了一个标准化的格式来表示不同深度学习框架中的模型。它使模型可以在不同的框架和工具之间轻松转换,从而增强了模型的可移植性和互操作性。
  2. 模型交换:ONNX使得开发者可以选择最适合他们需求的工具和框架来训练模型,并且能够轻松地将这些模型转换为ONNX格式,用于部署。

神经网络编译器的角色:

  1. 优化和转换:神经网络编译器接收特定格式(如ONNX)的深度学习模型,并将其编译和优化以在特定硬件上运行。这包括转换模型为硬件特定的指令集,进行图优化、算子融合等。
  2. 跨平台部署:编译器使得模型不仅可以在不同的框架中移植,还可以在不同的硬件平台上高效运行,如CPU、GPU、FPGA或专用AI加速器。

协同工作流程:

  1. 模型训练:
  • 开始于:深度学习模型首先在特定的框架(如TensorFlow, PyTorch, MXNet等)中进行训练。
  • 输出:训练完成后的模型通常以该框架的特定格式存储。
  1. 模型转换(使用ONNX):
  • 转换工具:使用ONNX提供的工具将模型从原始框架转换成ONNX格式。这一步骤涉及将模型的结构和权重导出到ONNX定义的统一格式中。
  • 输出:转换后的模型现在在一个标准化的ONNX格式中,使得它可以跨不同的深度学习框架和工具共享。
  1. 模型优化和编译(使用神经网络编译器):
  • 编译器输入:编译器接收ONNX格式的模型。
  • 优化过程:编译器对模型进行一系列优化,如算子融合、图优化、消除冗余计算等,以提高模型在目标硬件上的运行效率。
  • 硬件特定优化:编译器还会针对特定的目标硬件(如CPU, GPU, FPGA等)进行优化,生成适合该硬件的低级代码。
  1. 部署和执行:
  • 部署:优化后的模型被部署到目标硬件上。
  • 执行:模型在目标设备上执行,进行推理任务,如图像识别、语音识别等。

总结:

  • ONNX的作用:提供了一个中间桥梁,允许不同框架中训练的模型被统一表示和共享。
  • 神经网络编译器的作用:进一步优化ONNX格式的模型,确保它们在特定硬件上高效运行。

 

【图表示】:

ONNX 两个主要的 Protobuf 协议对象:TensorProto、AttributeProto

  1. TensorProto:

    • 这个结构用于定义神经网络中的张量(多维数组),它包含张量的维度(dims)、数据类型(data_type)、数据本身(float_data, int32_data, string_data, int64_data, raw_data等),以及数据存储顺序(通常为行主序)。
    • TensorProto可以包含任何类型的数据,包括原始的字节数据,这在存储复杂的或非标准格式的张量时非常有用。
  2. AttributeProto:

    • 用于定义图中节点属性的结构,它可以包含单个的数据值(如浮点数、整数、字符串、图、张量)或这些数据类型的数组。
    • 每个属性都有一个名字(name)和一个类型(AttributeType),类型决定了属性值可以是哪种数据。

这些协议对象是ONNX标准的一部分,使得ONNX能够以一种跨平台、跨语言的方式精确地表示神经网络模型的结构和权重。

它们使得模型可以从一个框架转换并在另一个框架中使用,这对于深度学习模型的共享和部署至关重要。

【图优化】:

  1. 节点融合: 将多个操作符(Op)融合为单个复合操作符,以减少内存访问次数和计算开销。例如,将卷积、批量归一化和激活函数合并为一个操作。

  1. 常量折叠: 在编译时预计算那些以常量输入进行的操作,减少运行时的计算量。

  1. 死代码消除: 移除那些不会影响最终输出的操作,比如未使用的变量或操作。

  2. 公共子表达式消除: 检测并合并计算图中重复的表达式,以节省计算资源。

  3. 内存优化: 优化数据的存储和访问方式,减少内存使用量,例如通过就地操作(in-place operations)来减少不必要的数据复制。

  4. 层次融合: 类似节点融合,但在更高的层次上,比如将多层网络结构融合以减少中间数据的存储和传递。

  5. 操作调度: 优化操作的执行顺序,以提高硬件的使用效率,减少等待时间。

  6. 数据布局转换: 改变数据在内存中的排列方式(如NCHW到NHWC),以适配硬件特性,提高内存访问效率。

  7. 算子融合: 把能够一起执行的多个算子合并为一个算子,以减少内存访问和改善缓存使用。

  8. 精度优化: 根据需要将数据类型从高精度(如float64)降低到低精度(如float16或INT8),以加快计算速度并减少内存使用,特别是在支持低精度计算的硬件上。

所有这些优化都是为了减少计算量、提高执行速度、减少内存占用,并最大化硬件利用率。

【计算优化】:

  1. 向量化(Vectorization):
    • 利用SIMD指令集对操作进行向量化处理,同时处理多个数据点,提高了数据处理速率。

  • 首先,三个独立的数据向量(A0, A1, A2, A3),(B0, B1, B2, B3),和(C0, C1, C2, C3)被加载到SIMD寄存器中。这通常使用如_mm_loadu_ps这样的指令完成,它可以从非对齐的内存地址加载多个浮点数到一个SIMD寄存器。

  • 接下来,使用SIMD加法指令(如_mm_add_ps)对这些向量进行逐元素加法操作。这样,每个数据向量中相应的元素将被加在一起。

  • 然后,使用SIMD水平加法指令(如_mm_hadd_ps),对加法的结果进行进一步的组合。水平加法将一个SIMD寄存器中的相邻元素加在一起。

  • 最后,使用如_mm_store_ss这样的指令,将计算的结果存回内存中。

  1. 并行化(Parallelization):
    • 分布计算工作负载,利用多核CPU、GPU的多个计算单元,或者其他硬件加速器(如FPGA、TPU)的并行处理能力。

  • 利用缓存,所需的数据可以被连续地加载到缓存中,而不是随机地从内存中读取,提取加速
  1. 循环展开(Loop Unrolling):

    • 展开循环结构以减少循环控制的开销,并可能使编译器能够进一步优化。
  2. 内存访问优化:

    • 通过优化数据存储模式和访问模式来减少缓存未命中和内存延迟。
  3. 算术强度提升(Increase Arithmetic Intensity):

    • 通过减少内存操作和增加计算操作的比例,提高计算与内存传输的比率。
  4. 算子融合(Operator Fusion):

    • 将多个操作融合为一个复合操作,以减少内存访问次数和提高缓存利用率。
  5. 内核融合(Kernel Fusion):

    • 在GPU编程中,将多个内核操作融合成单个内核,减少GPU内核启动的开销。
  6. 延迟执行(Lazy Evaluation):

    • 操作只在必要时执行,避免不必要的计算,节省资源。
  7. 精确度与混合精度训练(Precision and Mixed-Precision Training):

    • 适当降低计算的精度来加快速度,如使用半精度浮点数(float16)代替全精度(float32)。
  8. 特定硬件优化:

    • 根据目标硬件的特定特性(如GPU的共享内存大小、CPU的缓存行大小)进行优化。
  9. 编译时优化(Compile-time Optimizations):

    • 利用编译器的高级优化,如去除冗余计算、优化分支预测等。
  10. 动态张量重用(Dynamic Tensor Rematerialization):

    • 在运行时动态决定数据结构的生命周期,以减少内存占用。
  11. 消除重复计算:对于一个均值池化,那么橘色部分就是重复计算的,可以通过优化消除重复计算

 


各自实现的神经网络编译器

神经网络编译器组成:编译器、图表示、图优化、计算优化、代码生成。

所以,就有了 — 各自实现的神经网络编译器。

  • TVM 神经网络编译器
  • NCNN 神经网络推理框架
  • MNN 移动神经网络引擎

介绍:

  • TVM:https://tvm.apache.org/docs/install/index.html

    是一个开源的神经网络编译器框架,它可以将各种深度学习模型(如TensorFlow、PyTorch、MXNet等的模型)编译成优化的代码,以在多种硬件上运行,包括CPU、GPU、FPGA等。

    TVM特别强调自动化的性能优化,使用了一种叫做AutoTVM的系统自动调整模型参数以适应不同的硬件配置。

  • NCNN:https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux

    由腾讯优化的一个轻量级深度学习框架,专门用于移动设备和边缘计算设备。

    它不依赖于第三方库,非常适合于移动应用。

    NCNN特别关注于在低功耗设备上的高性能运行,它通过优化网络的内存使用和计算速度,使得模型在移动设备上能够快速且有效地执行。

  • MNN:https://www.yuque.com/mnn/cn

    由阿里巴巴开源的深度学习框架,旨在帮助开发者在端侧设备上部署AI模型。

    MNN的主要特点是支持多平台和多后端,能够在各种设备上运行,如iOS和Android手机、服务器和IoT设备。

    它通过优化计算图,减少内存占用,并提供多种量化方案以适应不同的应用需求。

他们的结构就不一一拆解了。

 

神经网络加速与压缩(算法层面)

  1. 矩阵低秩分解
    • 概念:将神经网络的参数(例如,全连接层的二维矩阵、卷积层的四维矩阵)通过矩阵分解和低秩近似,分解为多个计算总量更小的小矩阵。
    • 目的:加速网络计算过程。
    • 方法:例如SVD分解、Tucker分解。
    • 影响:分解为多层可能增加数据读取次数,影响速度。
       
  2. 剪枝
    • 类型:包括非结构化剪枝和结构化剪枝,以及自动化剪枝。
    • 非结构化剪枝:去除权重矩阵中不重要的元素,形成稀疏矩阵,通过稀疏存储减少模型大小。
    • 结构化剪枝:删除整个网络结构的一部分(如通道、过滤器、层),在现有框架上实现加速。
    • 自动化剪枝:自动确定剪枝结构,如AMC(自动化模型压缩)和MetaPruning。
       
  3. 量化
    • 概念:将网络参数和激活值从高精度(如FP32)转化为低精度(如INT8),以加快推理速度。
    • 挑战:量化可能导致精度损失,需精心设计,如数值对齐、对称和非对称量化等。
       
  4. 知识蒸馏
    • 概念:从大型模型(教师网络)到小型模型(学生网络)的知识迁移。
    • 目的:保持小模型在减少计算量的同时获得较高性能。
    • 发展:许多方法被提出,如FitNet、Attention Transfer,以及无数据网络压缩。
       
  5. 轻量化模型设计
    • 目标:设计高效、轻量的网络,替代传统大型网络。
    • 方法:使用高效操作,如深度可分离卷积,减少参数量。
    • 代表模型:Google的MobileNet系列,旷视的ShuffleNet。

从结构调整到参数精度的多个层面。

目标是在保持模型性能的同时,减少模型的计算负担和存储需求,特别适用于资源受限的环境,如移动设备和边缘计算平台。

每种技术都有其独特的优点和适用场景,在实际应用中往往需要结合多种技术来达到最佳效果。

 

知识蒸馏

 

低秩分解

 

轻量化网络

 

剪枝

 

量化

 


通用芯片 CPU 加速

 

x86 加速

 

arm 加速

 

卷积优化

 

神经网络加速库

 


专用芯片 GPU 加速

 

dsp加速

 

faga加速

 

npu加速

 

K210人工智能微控制器

 

神经网络加速库: Vulkan图形计算

相关文章:

AI芯片:神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速

AI芯片: 神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速 神经网络研发加速器神经网络编译器各自实现的神经网络编译器 神经网络加速与压缩(算法层面)知识蒸馏低秩分解轻量化网络剪枝量化 通用芯片 CPU 加速x86…...

系列七、Spring Security中基于Jdbc的用户认证 授权

一、Spring Security中基于Jdbc的用户认证 & 授权 1.1、概述 前面的系列文章介绍了基于内存定义用户的方式,其实Spring Security中还提供了基于Jdbc的用户认证 & 授权,再说基于Jdbc的用户认证 & 授权之前,不得不说一下Spring Se…...

网络安全(网络安全)—2024自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…...

python爬虫小练习——爬取豆瓣电影top250

爬取豆瓣电影top250 需求分析 将爬取的数据导入到表格中,方便人为查看。 实现方法 三大功能 1,下载所有网页内容。 2,处理网页中的内容提取自己想要的数据 3,导入到表格中 分析网站结构需要提取的内容 代码 import requests…...

Vulnhub靶机:driftingblues 2

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:driftingblues2(10.0.2.18) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entr…...

CentOS 7 权限管理实战指南:用户组管理相关命令详解

前言 深入了解 CentOS 7 用户组管理的命令,掌握关键的用户组操作技巧。从创建和删除用户组、修改组属性,到设置组密码和管理组成员,这篇文章详细介绍了 CentOS 7 系统下常用的用户组管理命令,为读者小伙伴提供了实用而全面的指南…...

Python操作MySQL入门教程,使用pymysql操作MySQL,有录播直播私教课

创建数据库 create database gx character set utf8mb4;连接数据库 #!/usr/bin/python3import mysql as pymysql# 打开数据库连接 db pymysql.connect(hostlocalhost,port3306,userroot,passwordzhangdapeng520,databasegx)# 使用 cursor() 方法创建一个游标对象 cursor cur…...

面试 React 框架八股文十问十答第七期

面试 React 框架八股文十问十答第七期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)React 废弃了哪些生命…...

Docker教程

docker 安装 官方文档 wget -qO- https://get.docker.com/ | sh sudo usermod -aG docker your-user sudo usermod -aG docker ${USER} newgrp docker # 更新docker用户组 cat /etc/group | grep docker docker --version 使用非root用户管理 帮助启动类 命令 system…...

数据结构:二叉树

数据结构:二叉树 文章目录 数据结构:二叉树1.一些特殊的二叉树1.满二叉树2.完全二叉树 2.手动创建一颗二叉树3.二叉树深度优先遍历4.二叉树层序遍历5.二叉树基础操作1.创建二叉树2.二叉树节点个数3.二叉树叶子节点个数4.二叉树的高度5.二叉树第k层节点个…...

HTTP超文本传输协议

原文链接: 1.5 万字 40 张图解 HTTP 常见面试题(值得收藏)_图解http 小林-CSDN博客https://blog.csdn.net/qq_34827674/article/details/124089736?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170521531616777224478386%252…...

视频SDK的技术架构优势和价值

为了满足企业对于高质量视频的需求,美摄科技推出了一款强大的视频SDK(软件开发工具包),旨在帮助企业轻松实现高效、稳定的视频功能,提升用户体验,增强企业竞争力。 一、美摄视频SDK的技术实现方式 美摄视…...

Invalid bound statement (not found)(xml文件创建问题)

目录 解决方法: 这边大致讲一下我的经历,不想看的直接点目录去解决方法 今天照着老师视频学习,中间老师在使用动态SQL时,直接复制了一份,我想这么简单的一个,我直接从网上找内容创建一个好了,…...

正则表达式2 常见模式

继上次的正则表达式速攻1/2-CSDN博客 还有一些常见的匹配模式可以直接使用 电子邮箱 xxxxxx.域名 的情况 \b[A-Za-z0-9._%-][A-Za-z0-9.-]\.[A-Z|a-z]{2,}\bhttp或者https网址 的情况 http[s]?://(?:[a-zA-Z]|[0-9]|[$-_.&]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F…...

前端对接电子秤、扫码枪设备serialPort 串口使用教程

因为最近工作项目中用到了电子秤,需要对接电子秤设备。以前也没有对接过这种设备,当时也是一脸懵逼,脑袋空空。后来就去网上搜了一下前端怎么对接,然后就发现了SerialPort串口。 Serialport 官网地址:https://serialpo…...

LeeCode前端算法基础100题(18)整数转罗马数字

一、问题详情: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1…...

【C++ 程序设计入门基础】- 第4节-函数

1、函数 函数是对实现某一功能的代码的模块化封装。 函数的定义&#xff1a; 标准函数&#xff1a; 输入 n 对整数的 a、b &#xff0c;输出它们的和。 #include <iostream> #include <windows.h> using namespace std;int add(int a,int b);//函数原型声明int…...

华为数通HCIA题库(750题)

完整题库在这里&#xff1a;华为数通HCIA-RS题库注释版-加水印.pdf资源-CSDN文库 此处只节选几题。 1.网络管理员在网络中捕获到了一个数据帧&#xff0c;其目的MAC地址是01-00-5E-AO-B1-C3。关于该MAC地址的说法正确的是&#xff08; )。 A.它是一个单播MAC地址 B.它是一个广播…...

SpringIOC之support模块GenericXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

CCF认证+蓝桥杯习题训练

贪心 *上取整公式* *代码展示* #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 1e5 10;typedef long long LL;int v[N] , a[N];int main() {int n , d;cin >> n >> d;for(int i 1 ; i < n…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...