4.2. API

4.2.1. API

API是应用编程接口的缩写,通过API,一方以特定方式发送远程请求,而无需了解对方内部系统的逻辑,即可访问对方开放的资源,实现企业内外部产品和服务的互动,资源即服务。API已成为企业内外部系统集成的重要手段。如今,商业环境瞬息万变,对企业快速响应外部环境变化提出更高要求,跨界融合创新不断发生,通过API快速构建产品和服务,迅速响应客户需求成为优秀企业的必备技能,对API的使用亦更加广泛,API经济应运而生。

4.2.2. API经济

API经济是指企业间通过API建立合作关系而产生的经济活动,是一种商业理念。如今,商业环境的变化更加快速,对企业快速响应外部环境提出更高要求,跨界融合创新不断发生。

  • 供给端:主要是掌握了一定数据、内容、技术资源的企业及政府机构建立的开放平台:通过API快速构建产品和服务,迅速响应客户需求,并可以将高固定成本分摊到大量调用,使得单位调用成本将大幅度降低,形成规模经济和长尾经济。除了经济收益,这也成为企业扩大品牌影响力、获取外部创新、保持市场敏锐度、实现企业能力和技术的下沉。

  • 需求端:开发者也可借助领先企业开放的优质资源进行快速的集成和再创新。大约近七成CTO表示:API/SDK为其获取AI技术的主要渠道。1主体还包括:企业用户和个人用户。

4.2.3. RESTful API的崛起

在API服务产品不断演进的过程中,基于SOA设计思想的ESB(企业服务总线)模式在很长一段时间主导了系统集成和数据调用服务的市场。由于基于SOAP协议因而其在调用响应效率和安全性上存在优势,但其昂贵的部署成本和后期运维的困难,导致该类接口目前主要应用在大型企业的内网和对数据隐私性较高的行业中(金融、司法等主流采用私有云的行业)。随着移动端和web端应用的差异化和多样化,中小企业开发者逐步在应用开发市场上显现岀更髙的活跃度,对于AP服务也追求更灵活的调用和更低的运维成本。而在供给侧基于开源思潮,ROA设计思想下的微服务构架逐步兴起并被大型企业采用, RESTful API正式成为了API服务市场的主流。 RESTful APl由于其面向资源(基于微服务构架将能力分割成较小的资源包)的特性,极大降低了API开发的难度,让应用的开发效率得到了一定提升。其次, RESTful API更适配于http协议,可以灵活适配于硬件终端、桌面、移动应用及云端等多种运行环境。基于以上特征, RESTful API被广泛的应用于开源和半开源的环境中,为API经济奠定了技术基础。

4.2.4. 产业结构

从产业结构上来看,大型科技企业通过API平台层为下游的开发者提供相应的AI服务,但AP消费层与平台层并不是单向的供应关系。企业级和个人开发者可以将调用API形成的新的AI能力与解决方案上传至开放平台,或者通过API网关进行封装向其他用户进行开放,从而形成大型科技企业和开发者共建的A平台体系。主流的大型科技企业更多注重通用型A技术与能力的开发或与下游企业合作共创,开发特定场景AI能力,下游的开发者一般较为聚焦某些细分场景。利用开放平台的桥梁关系,上下游形成了闭环的API产业生态。

4.2.5. 中国参与者

目前,中国人工智能开放平台参与者众多,综合参与者背景和开放技术类型,可大体分为四类:

  1. 通用全面的智能云计算下属A开放平台,如阿里云、百度云、腾讯云等下属的A开放平台;

  2. 通用全面的独立人工智能开放平台,如讯飞开放平台;

  3. 提供垂直技术的人工智能开放平台,如专注计算机视觉的旷视科技Face++、商汤科技等;

  4. 提供垂直场景技术的人工智能开放平台,如安防场景的海康威视、大华股份乐橙开放平台、教育场景的好未来AI开放平台等。

4.2.6. 定制化

计算机视觉领域内的大部分企业都提供API、SDK、定制化解决方案的产品交付形式,但对行业用户来说,API与SDK产品需要进行二次开发与调整使用难度较大,效果与体验不好,因此行业用户普遍青睐定制解决方案。

https://www.aminer.cn/research_report/5f8d2e82e8a87f775ad21903?download=true&pathname=TRCV.pdf ## 开源软件

https://pytorch.org/

4.2.7. Android NNAPI

Android Neural Networks API 致力于为高层机器学习框架提供用于构建和训练神经网络的基础功能层。关于 Android Neural Networks API 的角色定位请参考官方文档。2

下图是 Android Neural Networks API 的软件栈,图中箭头表示了调用关系。 作为操作系统一部分,同时又是和底层设备高度相关的一套系统,Android Neural Networks API 的接口包括两部分:高层用户侧的 NDK 接口(图中 Android NN API)、和底层硬件设备侧的 HAL 接口(途中的 Android NN HAL)。

其中,NDK 接口是一组包含在 NDK 之中的 C 风格接口。通常这层接口的正确性由 CTS 确认。如图中所示,这一层是设计给深度学习框架使用的。当然,Android 应用也可以直接使用这一层接口,但似乎没什么必要。因为应用开发者直接使用 TensorFlow Lite、PyTorch/Caffe2 这类框架,框架后端对接 Android Neural Networks API (目前 TensorFlow Lite 和 PyTorch/Caffe2 已经集成)。接口包括常见的网络定义、编译、执行等步骤,具体参见下文的编程模型和实现介绍。

HAL 接口是一组用 HAL Interface Definition Language(HIDL) 描述的接口。HIDL 是 Android Oero 引入的全新的用于操作系统和硬件设备交互的机制。通常,VTS 检验设备提供的底层实现的正确性。引入 Android Neural Networks API 之后,硬件供应商在 Android 平台上只需要支持 HAL 接口这一层,继而从繁杂的框架支持中解放。从图中可以看到,在一个系统中可以存在多个不同种类的后端驱动设备。

Android Neural Networks API 包含一个 Runtime 。Android Neural Networks Runtime 的功能并不复杂,主要目的还是为了对接后端硬件。同时,考虑到硬件驱动在特定功能(例如某个新的神经网络算子)的可用性,Android Neural Networks Runtime 还包含了 CPU 回退(fallback)的功能——当不能使用专用设备计算时,依然可以保证基本的功能——这就像在图形系统中也可以用 CPU 模拟图形设备。Runtime 将在 Android Neural Networks API 内部结构等小节中继续介绍。

PyTorch Cookbook(常用代码段整理合集) - 张皓的文章 - 知乎 https://zhuanlan.zhihu.com/p/59205847