如果大家摸索过几种不同的编程语言时 , 可以看到不管是C、C++、Java或Python , 它的核心还是if-else、循环、跳转 , 只不过在用途、编译计算等方面会有一些不同 , 但基础东西是没有变的 。 但是到了自主机器人时代是完全不同的 , 机器可以看懂和听懂周围的世界 , 这是一个数据驱动的可微分编程方式 。 在贯穿在整个过程中 , 应用场景和开发范式都在持续迭代 。
再回过头来看 , 2.0时代越来越重要 , 所以围绕着2.0时代的“好用” , 就是2.0时代的开发 。 但会遇到一个问题 , 到底应该做什么样的事情 , 以什么样的标准来衡量 , 才能把软件2.0时代的开发做得好 。 我请教了一个老师:C++之父 , 他在2020年发表了一篇paper , 这篇paper在讲2006年到2020年14年间C++的发展 。
文章图片
上图的纵坐标是C++社区的活跃程度 , 横坐标是时间 , 可以看到C++在一个很快速的上升期之后 , 在2000年左右出现了下降 , 在2006年出现了一个拐点 , 之后推出了C++11 , C++14 , C++ 17, C++20 , 软件开发者的数量开始有了非常大的提升 。
在这14年里 , Bjarne带领整个C++标准委员会讨论究竟需要把什么样的内容放到C++标准里 , 让全世界的C++开发工程师利用他们手上能拿到的编译器做好开发 , 比如C++11在Windows下编程可能是Visual Studio, 在Linux下编程可能是GCC或LVM或者其他一些商用的编译器 , 那究竟要增加什么样的特性 , C++才能更好用?要用什么样的标准来衡量“好用”?
他总结了两个点:C++一定要让应用能够非常好的利用硬件性能特性来提升硬件效能 , 同时更好的管控底层的编程复杂度 。 这两句话也很矛盾 , 高效利用硬件 , 像是某种形式的软硬结合 。 有效降低复杂度 , 是某种情况下的软硬解耦 。 同时 , 他也提出来一条原则 , 要能够让程序员写出好的代码 , 并创造出好的应用 , 而不是预防程序员出bug 。 一种是补补丁 , 一种是更好的牵引 , 来成就更好的开发者 。
从这点让我们更加坚信AI芯片上的开发也需要充分释放硬件的性能 , 降低开发的复杂度 , 让AI开发者们在 AI芯片平台上开发自己最主要的应用 , 并把它变成一个很好的产品 , 推向客户、市场 。 结合C++ 14年的发展历史 , 我们认为这样的平台才是一个“好用”的开发平台 。
3.用软件2.0基础设施、工具链、开放软件栈和丰富样例成就开发者结合软件2.0的编程模式和编程范式 , 究竟应该怎么做才能做出一个好用的芯片、上层软件开发环境 。 在这方面地平线也在一直实践 , 所以下面将结合地平线的实践 , 从软件2.0的基础设施、工具链、开放软件栈和丰富样例几个层面来介绍一些相关的思考 , 我们也相信这可能是通往好用芯片 , 尤其是好用AI芯片、自动驾驶芯片 , 一定要走的路 。
AI芯片需要一个工具链和软件2.0基础设施 , 在基础设施方面要有数据标注、模型训练平台 , 它可以支持算法开发和训练、算法评测、端到端的数据闭环 , 这样才能把更多的数据回传到基础设施里做数据驱动的软件2.0开发 。 而软件1.0经过40多年的时间已经变得非常成熟 , 我们在上面也会坚持做微创新 。
另外一方面是模型部署优化和性能分析 , AI算法放在芯片上运行起来时要很快、性能要好、精度要高 , 出问题后要知道怎样分析 。 当把算法用起来时是整套应用的开发 , 它最终会帮助开发者达到最终产品的目标 。
首先讲下基础设施 , 这里会结合地平线艾迪AI开发工具平台的实践 。 艾迪AI开发工具平台是一个高效的软件2.0训练、测试、管理的工具平台 。 它由有几部分组成 , 比如在边缘侧有车、芯片 , 通过加密传输把数据传过来 。 在云端也是一套完整的基础设施 , 包括半/全自动的标注工具 , 自动化模型训练 , 长尾场景管理、软件自动集成、自动化回归测试 , 最后这整套模型通过OTA升级部署到芯片上 。 同时 , 在端上还有影子模式、量产相关的模型部署、功能安全和信息安全方面的工作 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
