一、编程模型和硬件架构

由于AI应用对巨大算力的极致追求,各种针对AI计算场景的AI芯片架构层出不穷。AI软件栈的复杂性就来自于硬件架构的跨越式发展。而面对这样的复杂度,AI软件编程模型的设计和架构就变得至关重要。

编程模型就是对编程共性的抽象,或许可以从两个层面理解:

  1. 架构上,是对底层硬件架构和对软件的组织、复用、交互方式的抽象
  2. 工程上,可以是一个或几个软件中间层所提供的上层应用开发接口。是基于硬件的岩石之上,让上层软件生态得以发展的土壤层

本文基于对Nvidia CUDA和Graphcore Poplar编程模型的调研,希望能谈谈个人对AI芯片的编程模型的一些看法。

阅读全文 »

最近拿到一块CORE-3399PRO-JD4开发板,要在上面部署AI应用。这块板子搭载Rockchip RK3399Pro处理器,采用双核 Cortex-A72+四核 Cortex-A53构架,主频高达 1.8GHz,集成四核Mali-T864 GPU,并内置高性能NPU,号称性能优异。但是实际过程中,发现发热严重,要使用NPU需要把算法移植到Rockchip提供的RKNN-Toolkit开发套件。按照官方文档把板子刷成了ubuntu18.4,然后安装了RKNN,打算把现有模型转换一下,结果发现:

  • 适配的tensorflow版本较低(RKNN 1.3 支持tensorflow 1.10.1),2.0版本的模型无法转换。
  • ONNX版本模型转换失败,应该也是版本不对
  • pytorch干脆没有迁移到板子上,官方例程都跑不起来。

实在没办法,只能先不用NPU把应用跑起来试试。这里把编译在ARM Ubuntu18.04上编译pytorch和opencv的过程记录一下。

阅读全文 »

如何衡量目标检测算法的优劣

目标检测(object detection)问题相对于一般AI分类问题更加复杂,不仅检测出目标,输出目标的类别,还要定位出目标的位置。分类问题中的简单accuray指标已经不能反映出目标检测问题结果的准确度,而mAP (Mean Average Precision)就是被用来衡量目标检测算法优劣的常用指标。
要理解什么是mAP,需要先澄清什么是Precision(查准率)和Recall(查全率)。

Precision和Recall

定义

查准率和查全率是在信息检索、Web搜索等应用中经常出现的性能度量指标,在机器学习中,也可以用来度量“预测结果中有多少比例是用户感兴趣的”。对于二分类问题,可将样例根据其真实类别与预测类别的组合划分为:

阅读全文 »

定义

在模型预测阶段,我们先为图像生成多个锚框,并为这些锚框一一预测类别和偏移量。随后,我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时,同一个目标上可能会输出较多相似的预测边界框。了使结果更加简洁,我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制(non-maximum suppression,NMS)。

计算流程

非极大值抑制的流程如下:

  • 根据置信度得分进行排序
  • 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
  • 计算所有边界框的面积
  • 计算置信度最高的边界框与其它候选框的IoU。
  • 删除IoU大于阈值的边界框
  • 重复上述过程,直至边界框列表为空。
    阅读全文 »

Docker on WSL

配置好了WLS后,最近慢慢的把以前在虚拟机上开发的项目都移到了WSL上,一切都像在原生的ubuntu下一样,只有一个用到docker的项目遇到了波折: 由于WSL 还不支持linux kernel的一些特性,在WSL下可以安装docker,但是 docker engine 的运行会有问题。Github和微软的feedback页面上有不少人都提出过这个问题 [1] [2] [3],但是WSL团队都没什么正面回答。能找到的就是WSL的PM、大帅哥Jack Hammons在Microsoft Build 2017上的回答提问时的一段话。

阅读全文 »

Windows subsystem for Linux

昨天晚上俄罗斯世界杯开踢了,看起来足球世界还是没怎么变,梅罗仍然统治世界,沙特仍然被欧洲球队打穿,中国队仍然四年一度的缺席……但是技术的世界却是日新月异,连微软都拥抱开源了,Windows subsystem for Linux (WSL) 简直是在赤裸裸的勾引程序员扔掉Mac投奔Windows。

既有Windows的桌面和Office套件,又可以方便的使用Linux的工具链,这样的生活不要太美好!当然前期坑是少不了的,经过两年时间的改进,wsl团队解决了不少问题(比如本文将提到的文件权限问题),个人觉得已经可以入坑了。当前时间节点18年6月,版本windows 10 1803, build 17134。

WSL的介绍和安装请看下这里:

加入到新团队后一直着手于建立统一的标准软件流程,现有的项目因为不同BU的影响,不仅流程各不相同,使用的工具也是五花八门,所以从年初制定KPI时,不仅是制定标准的软件流程,软件开发工具的统一也是一项重要内容。经过各种讨论评估,最终决定使用JIRA和Bitbucket,后续还会有Bamboo和Confluence的加入,最终凑齐Atlasssian全家桶, 完成软件开发从需求管理、任务管理、测试管理、代码管理、缺陷管理、持续集成、文档管理的全流程覆盖。

经过漫长的与sourcing和IT部门的扯皮,终于采购了JIRA和Bitbucket。然后由于IT部门的不作为,所有安装、配置、管理、维护都是自己动手,项目开发的任务之外又承担了配置管理员的角色,虽然这个我这个二把刀管理员搞出来的配置非常不专业,但是因为是自己的心血,还是很有必要记录一下的。

阅读全文 »

简介

头脑风暴是经常被使用的词汇,大众或多或少都知道这种讨论解决问题的方法,但是即使是在专业的项目管理者手中,头脑风暴也是经常被误用的一个工具。人们经常认为自己是在进行头脑风暴,但其实他们只是在进行讨论而已,真正的头脑风暴是一个正式的过程。在参加了很多各种各样的、或好或坏的头脑风暴后,觉得有必要做些总结。

头脑风暴(Brainstorming)在维基百科的定义:一种为激发创造力、强化思考力而设计出来的一种方法。此法是美国BBDO(Batten, Bcroton, Durstine and Osborn)广告公司创始人亚历克斯‧奥斯本(Alex F. Osborn)于1938年首创的。

头脑风暴作为一种群体决策工具在PMBOK的多个管理过程中被推荐使用,比如:项目整合管理,范围管理,时间管理,成本管理,质量管理,风险管理等。

头脑风暴主要目标大量收集解决问题的灵感和方案。为了最大限度的激发团队的创造力和思考力,过程中提倡自由发言、畅所欲言、发散思考,鼓励互相启发和激励,禁止评论和批评。

阅读全文 »