前言
其实一个完整的人工智能产品从底层到上层基本上能把主流的编程语言都给涵盖到。目前为公众所熟知的其实是在模型算法的设计以及业务场景的应用上,在这两个层面上,Python因为其易用性、以及前人造好的无数轮子而被大家所喜爱。
下面是本人认为一个完整的人工智能产品包含的四层结构。

人工智能产品的四层结构
底层基础支撑
底层的基础支撑层分为硬件和软件两部分,硬件部分指GPU、FPGA等可以用来加速计算的芯片,软件部分是驱动硬件的程序以及提供给上层的编译、运算引擎,例如Nvidia的显卡驱动,以及CUDA中的NVCC编译器。这些都是硬件厂家干的活,例如Nvidia、Intel等,在这一层面可能用到的如:Verilog、汇编、C等。
框架支撑层
这一层面指Tensorflow、PyTorch、PaddlePaddle等计算框架,也可以分为两部分,向上集成各种接口方便上层开发者建模使用,向下通过N多算子分割计算任务,将计算任务交给下层驱动。对下这一部分一般使用C、C++开发,对上的部分开发语言就比较多了,Python、Java、Swift等等。这部分使用多种语言是为了方便上层开发者在不同场景、平台上进行建模开发。
模型算法研发层
框架提供的各种卷积、神经元的计算操作就如积木一样,这一层面是使用积木搭成房子(算法模型)。在这一层面就是研究各种模型,在哪个领域用什么模型好,模型结构还能怎么优化才能性能更高。例如分类用VGG、ResNet、生成图片用GAN等等。这时使用的语言只能是框架所支持的语言。
业务应用层
在这一层面是根据具体业务需求进行实际的模型选用、训练优化部署,例如一个人脸识别场景,选择一个目前精度较高的模型算法,然后采集标注数据,在GPU服务器上训练评估模型精度,觉得识别率可以了,考虑是在服务器端部署还是终端,服务器端根据性能需求可以选Java/Python/C++,移动端因为算力有限,需要考虑模型的压缩量化,最后部署时在IOS上Swift、安卓Java,嵌入式设备C/C++等等。
总结
在模型算法的研发(大部分是学术角度)以及业务应用(模型验证和训练,不包含最终的实施部署)阶段,人们需要用最少的成本(更少的编码量、更少的学习成本)来快速试错,这样可以将更多的时间放在自己的目的上(获得更高的模型精度)。Python正好满足这一条件,简洁的编码让更多的人使用,同时又不断丰富这个生态(造出来更多的轮子让后人更方便使用)。
当然,Python被人诟病的更多的是运行速度慢之类,其实这是一个看碟下菜的过程,根据不同阶段的需求选择合适的语言。
模型算法研发阶段重视模型迭代效率,相比之下,再慢的运行速度在顶配的个人工作站面前也顶多是慢了几秒或者几分钟。而在底层框架的研发上,更注重的是运行效率(如果一个算子慢了几秒钟,当这个算子被上层开发者调用了几百上千次的时候,可就是一个无穷的时间,毕竟人工智能是计算密集型产业),为了榨干硬件的最后一滴性能,会更多地采用C这种。在终端部署上也是,受限于功耗(主要就是电池和散热不给力),才会将模型轻量化去部署推理。
后话
相信如果有一天,大家人手一台超算,电力可以无限供应的时候,肯定还会有更简洁易用的语言出现。当算力不再是限制的瓶颈时,谁还会为了运行效率而斤斤计较呢。毕竟,懒,才是人类社会前进的动力。