AI芯片的软件挑战

本文是记录会议【ICPA联盟微课 | 第1期】燧原科技李彬:AI芯片的软件挑战内容。不得不说,什么叫高屋建瓴。

芯片软件的5个衡量指标:算力利用率、开发效率、生态兼容性、可移植性、用户友好型

AI芯片的软件挑战

算力利用率

AI芯片的软件挑战

JIT: just-in-time compilation 即时编译

AOT:Ahead Of Time,指运行前编译

  1. 在实际运算时,必须考虑数据的IO时间,IO效率又由带宽决定。算力利用率和带宽算力比往往会成正比关系
  2. 同样的带宽下,不同精度的计算,因为每次计算的数据长度的不同,所带来的的算力利用率也有明显的差别。
  3. 通常计算精度越低,带宽算力比越低,算力利用率也越低
  4. 要提高算字的算力利用率,就是要用一切方式将核心计算单元利用起来。
  5. 边编译边执行,那么硬件时而等待编译,时而等待指定运行。从模型执行层面观测到的算力利用率自然会降低。但实际上,进入每个算子的执行周期里面,硬件一直处于非空闲状态。那么算力周期内的算力利用率,肯定是高于模型层面观测出来的利用率。因此,如果要提高模型层面的算力利用率,尽量让算子在启动的间隔缩小。
  6. 同样往更上层的应用执行周期里,可能还会涉及到一些数据的前后处理的过程。这部分如果不被AI芯片加速,整体应用算力利用率会在模型的基础上进一步降低。要提高整个应用层面的利用率。就需要有更好的变性机制或流水线机制。让AI芯片与无关的而控制或者计算。在保证关键输入输出正确性同步的前提下,能流水线或者并行处理,从而使得芯片可以一直处于运转状态,提高算力利用率

开发效率

AI芯片的软件挑战

典型的,比如算子的开发效率。我们认为,编程模型是决定开发效率的基础。编程模型并不由软件单独决定。而是需要由于硬件架构系统系统性设计共同决定的。好的编程模型需要在硬件可实现性、开发效率、性能、完备性等几个方面进行权衡。傻瓜式的编程固然代码编写速度快,但是往往难以生成高性能的底层代码,发回不出硬件的算力。

直接提供硬件编程接口,能让编程者直接操控算力硬件,但是也意味着非常高的学习门槛,从而影响开发效率。

同样,手动的方法简单直接,但是开发效率低。同样,自动的方法效率高,但是确保自动生成高性能的代码,是非常关键的。

其次软件架构的泛化能力也会决定开发效率。以模型知识为例,如果针对数以万亿的模型和算子,一个个独立开发,工作量是巨大的。软件需要提供可泛化的知识能力。

最后,AI芯片本身会进行不断的迭代。但是没有哪一家芯片公司愿意为每一代硬件,重新进行软件开发设计。对客户而言,也希望芯片设计是向后兼容的。

用户友好性

AI芯片的软件挑战

我们把软件质量放在用户友好性的第一位。是因为实际上bug总是可以解决,但是会非常影响用户体验,尤其是针对数据中心的软件,质量直接影响到业务的稳定性。比如RAS这样的指标。

提供给用户的接口API,不管是基于什么样的原因,如果频繁的变动,会提高客户的学习成本和业务迁移成本,是非常糟糕的用户体验。调试和调优工具是否完善、调试手段是否丰富,是否能方便客户快速定位问题,是否能大大提高客户实际使用的体验。也都是用户友好性的关键的衡量标准。

可移植性

AI芯片的软件挑战

可移植性主要衡量平台横向迁移的适配能力。

首先AI芯片软件需要考虑适配不同的CPU架构主机。从服务不同场景平台的角度,除了最主流的X86CPU,还需要考虑ARM等其他CPU平台。软件需要从架构设计上就考虑这方面的知识。尤其是在驱动以及交叉编译环境等方面,否则支持新平台需要耗费非常大的代码修改代价。

其次,支持不同的操作系统,也同样需要从架构层面进行考量。不同的操作系统,首先对驱动的要求也有所不同,比如Windows和Linux两大阵营。定义了完全不同的驱动架构。如何从软件设计上就考虑跨操作系统架构支持是一个不小的挑战。

另外,各种软件依赖库,不同的操作系统会有不同。需要厘清AI软件栈实际的依赖库以及他们之间的关系。在工程构建系统里面进行多版本的支持。

框架方面,AI芯片尤其是训练芯片,通常会从某一个AI框架的支持开始。但是不同的AI框架之间往往差别很大。比如TensorFlow的1.0的版本和Pytorch之间,就从编译方式上是基于图还是基于算子,基于动态还是静态,对软件设计和实现都有巨大的差别。这对同一的软件架构形成了很大的考验。如果这部分设计缺乏弹性,那么多架构支持就会变得非常困难。

生态兼容性

AI芯片的软件挑战

首先,作为一个AI芯片的提供者,是自研AI框架,还是基于现有的流行的框架,值得思考。自研框架当然可以对自家的芯片量身定制,但是提高了用户的使用门槛和迁移成本。而适配现有的主流框架,能快速融入现有的开发生态,但是需要适应特定框架带来的约束。

AI框架作为绝大多数算法功能式的开发平台,如同AI操作系统一样的存在。AI芯片软件走兼容现有的框架的路线,更容易获得绝大多数用户的认可。

在编程模型方面,如在算子利用率和开发效率两个指标中我们讨论的,首先需要在两者之间进行平衡。其次需要考虑符合用户的习惯,兼容生态的一些普遍的做法。

尽管如此,我们不认为兼容性,就等于需要照搬某些特定架构下的编程语法。芯片架构的不同,所支撑的编程方式有天壤之别。在完全不同的架构下,生搬硬套某些编程语法或者API,最终必定称为东施效颦。与追求性能和效率的这样的主要目标背道而驰。

最后就是异构编程模式的兼容。到目前为止,主机加上加速器设备这种方式,仍然是异构计算的主流形式。计算产业生态决定了这种方式延续至今。作为AI芯片系统软件,不管使用用户习惯,还是上下游产业生态的现状,采取主机加设备,这种异构编程模式仍然是最好的方式。模糊化这种模式,从结构或者从一些另辟蹊径的做法,很难在整个计算产业生态上获得支持。

展望

AI芯片的软件挑战

期待AI生态全行业秉持开放的姿态,进行广泛的合作和交流。只有开放才会有共赢。其次,在人工智能产业生态高度繁荣的今天,希望所有的行业伙伴和友商。一起携手推进AI技术标准化,共同制定国人认可的AI技术标准。

硬科技没有捷径,需要脚踏实地的攻克挑战和难关,只有这样才能做出被用户真正接受的产品,也不负这个时代赋予我们的使命。

Original: https://www.cnblogs.com/xyjk1002-rejuvenation/p/16408976.html
Author: miyan
Title: AI芯片的软件挑战

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581763/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [ Python ] 音视频剪辑

    https://www.cnblogs.com/yeungchie/ 视频 提取视频 from moviepy.editor import * 从 MP4 文件提取 video =…

    Linux 2023年6月7日
    095
  • 如何使用yum来下载RPM包而不进行安装

    yum是基于Red Hat的系统(如CentOS、Fedora、RHEl)上的默认包管理器。使用yum,你可以安装或者更新一个RPM包,并且他会自动解决包依赖关系。但是如果你只想将…

    Linux 2023年6月6日
    0165
  • 30道关于linux的基础命令小题,先练练手

    1.修改主机名为yuanlai0224命令是: 2.切换⽬录到/yuchao01/data/,再创建脚本/my_website/scripts/start.sh。 绝对路径、相对路…

    Linux 2023年5月27日
    0105
  • C++Lambda表达式

    C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。 Lambda 的语法形式如下: [捕获列表] (参数) mutable 或 exceptio…

    Linux 2023年6月8日
    0119
  • 上篇:Go函数的骚包玩法有哪些

    1. 用type关键字可以定义函数类型,函数类型变量可以作为函数的参数或返回值。 package main import "fmt" func add(a, b…

    Linux 2023年6月7日
    095
  • shell 下载aliplayer 的视频

    #!/bin/bash url="http://v.example.com/8dedaec32ca9415eaa8ccd423ee33bf3/" #下载视频索引…

    Linux 2023年5月28日
    0106
  • Docker下部署LNMP黄金架构

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0110
  • linux的启动流程详解

    linux启动流程 一、第一阶段:BIOS 上个世纪70年代初,”只读内存”(read-only memory,缩写为ROM)发明,开机程序被刷入ROM芯片…

    Linux 2023年6月7日
    090
  • docker image ls 提示 “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    现象描述 上次在统信Linux上费了很大力气才装上docker,当时记得是可以用了。但今天登录系统后执行 docker image ls却提示上面的问题,但切换到root账户再执行…

    Linux 2023年6月8日
    0105
  • 从 Hadoop 到云原生, 大数据平台如何做存算分离

    Hadoop 的诞生改变了企业对数据的存储、处理和分析的过程,加速了大数据的发展,受到广泛的应用,给整个行业带来了变革意义的改变;随着云计算时代的到来, 存算分离的架构受到青睐,企…

    Linux 2023年6月14日
    062
  • Linux命令(实时更新)

    本博客主要总结一下博主工作中比较常用的命令: 1.iconv命令 对于给定文件把它的内容从一种编码转换成另一种编码。 -f encoding : 把字符从encoding编码开始转…

    Linux 2023年6月6日
    091
  • LeetCode-16. 最接近的三数之和

    题目来源 题目详情 给你一个长度为 n 的整数数组 nums和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。…

    Linux 2023年6月7日
    0108
  • 【Linux】【专项突破】CentOS下软件安装

    rpm yum软件仓库 配置文件 缓存处理 清理缓存 重构缓存 查询包的依赖关系 rpm 普通下载安装 rpm -ivh 包名 更新 rpm -Uvh 包全名 查询 rpm -q …

    Linux 2023年6月14日
    0122
  • CentOS/Redflag 7.3安装qemu 5.0记录

    安装实际上相当简单,只需下载源代码并编译即可。 [En] Installation is actually quite simple, just download the sour…

    Linux 2023年5月27日
    0114
  • Linux 磁盘挂载

    具体操作是: 1.先对磁盘进行格式化; 挂载磁盘到需要的挂载点; 3.添加分区启动表 1、首先查看系统中磁盘信息 命令为:fdisk -l 2、格式化要挂载的磁盘 格式化命令为:m…

    Linux 2023年6月7日
    093
  • C 中的字符数组

    在C语言中没有专门的字符串变量,字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。通常用一个 字符数组来存…

    Linux 2023年6月13日
    098
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球