人工智能发展面临碎片化。深度学习框架需要统一。场景中的关联性越来越强,碎片化的框架也给开发者带来了困扰,需要统一开发框架。人工智能发展面临碎片化。深度学习框架需要统一(图片来自FactorDaily)。深度学习的优势在于使用无监督或半监督的特征学习和分层特征提取的高效算法来替代传统的人工特征获取。为此,微软、谷歌、亚马逊等IT巨头纷纷投资深度学习项目,开发框架工具,CNTK、TensorFlow、MXNet等公司背书。此外,Caffe、Torch、Theano也是比较流行的开发框架。对于开发者来说,使用这些框架的特点和功能各不相同,应用场景也可能是计算机视觉、语音识别、自然语言处理和生物信息学等。在TensorFlow的情况下,用户不再需要通过梯度求解backpropagation,类似于Theano,在设计神经网络结构时,他们不需要花费太多精力去写C++或者CUDA代码。在使用过程中,C++降低了在线部署的复杂度,让手机、平板、可穿戴设备等处理资源密集的终端运行更复杂的模型。要知道,相对于Python的资源损失,还是处于一个比较高的水平。通过这种方式,开发者可以获得在硬件性能相对足够的机器中以低延迟状态和嵌入式环境使用C++的能力,即使是Python。当然,TensorFlow也有它的问题,比如异构设备之间的通信优化还有待提高。Theano可以说是同类库中最古老的库之一,也是深度学习的原始主导标准之一。它的流行让用户可以在上面找到各种常见的问题,包括如何在单个GPU上存储、运行训练模型和执行。效率也算是相当不错的水平了。并且基于Theano,还衍生出了大量的深度学习库。比如Keras对神经网络的抽象,可以随意切换执行后端。但考虑到Theano缺乏底层C++接口,部署不便,在工业生产环境中很少使用。因此,很多人将其视为一种研究工具而非最终产品,CPU上的低性能也阻碍了这方面的发展。所以这个框架更像是一种原始语言。如果直接用它来设计神经网络,或者读取它的输出信息,对开发者来说将是一件痛苦的事情。此外,Caffe、Deeplearning4J等也有各自的问题,这里不再赘述。这也就引出了开发者应该如何选择深度学习的开发平台?这里有几个观察点:第一,大部分公司的AI架构都不是从0开始的,整合现有编程平台的难度不容忽视;其次,机器学习软件包和数据处理的难度也要兼容;第三,对,二次开发能力也很关键。有了分布式和多GPU的优化能力,如何在其他平台上发挥作用,是值得思考的事情。通过对比几个主流的深度学习开发框架可以看出,C++(Caffe、MXNet、CNTK、TensorFlow)和C(Torch)在底层语言中使用的最多,是目前效率最高的,比如Python。有望成为下一代平台语言,这也是微软在CNTK2.0中努力的方向。从生态上看,各个公司的框架还是分团队的。开发者需要在自己的平台上进行自己的开发,而这些框架在更新时并不统一,这意味着开发者在一个框架上开发的神经网络模型不能直接用在另一个框架上。要使两者兼容,需要开发者花费大量精力自行解决。为了解决这个问题,微软、谷歌等掌握了开发者“主权”的公司需要站出来,借助兼容框架统一开发者的体验。ONNX(OpenNeuralNetworkExchange)就是在这种思路下成立的。这是一个由微软共同发起的项目,参与方包括Facebook、AWS等软件厂商,以及AMD、ARM、华为、IBM、英特尔、高通等行业参与者。例如,借助ONNX,开发者可以将在PyTorch中训练好的模型直接放到Caffe2上进行推理。ONNX几乎每2-4个月就会有一次升级,比如会增加一些新的算子来帮助用户创建新的模型。其实现在微软的主流产品Bing、广告和Office,还有可视化服务,后台基本都是用ONNX。在此基础上,微软还发布了ONNXRuntime。插件式执行器接口意味着ONNXRuntime可以快速适应软件和硬件的改进。执行器接口是硬件加速器向ONNX运行时报告其性能的标准方式。Intel和Nvidia都在将ONNXRuntime集成到他们的硬件加速器中。目前已经集成了英特尔的MKL-DNN、nGraph编译器和英伟达优化的TensorRT推理引擎。在ONNX吸纳更多开源框架的过程中,并非所有厂商的态度都是一样的。例如,TensorFlow对ONNX的兴趣并不那么明确。事实上,微软也写了一个从TensorFlow到ONNX的转换器。通过这样的转换功能,TensorFlow下的很多这些模型其实都可以转换到ONNX上。另外,ONNX还支持一些非常高级或者特殊的算子,比如LSTM,主要用来支持一些语音和语言功能。要想在AI领域取得成功,就必须把硬件和软件结合起来,所以需要ONNX这样的桥梁。过去,不同的接口和接口给开发者带来了极大的困惑,而ONNX可以让硬件和软件应用有机结合,部署在云端、本地或边缘等任何环境中。从这个角度来说,统一AI开发框架势在必行。
