利用高通openCL ML SDK加速机器学习模型
发表于 2022-04-11 12:29:45

您是否在高通®Adreno GPU上利用open CL来运行机器学习任务?想要优化应用程序并提高性能吗?下载我们的OpenCL ML SDK,并在开发中使用高通的OpenCL扩展吧。 

我们知道有些客户已经利用open CL在高通Adreno GPU上实现了机器学习算法。因此,我们添加了一个OpenCL扩展--cl_qcom_ml_ops,高通在open CL用户驱动层添加了对机器学习的加速优化,而这个扩展就能让您在Android平台上充分利用这一优化。这样能让您继续遵守openGL API行业标准,同时将您的机器学习任务移到更接近芯片的位置,以此从Adreno获取更高的性能。

cl_qcom_ml_ops扩展与OpenCL的良好配合
 

作为Khronos group的推广成员,高通技术有限公司(QTI)与GPU领域的所有主要参与者合作。我们已经设计了与您使用OpenCL开发的内核完全兼容的扩展;并且我们根据对高通GPU的深入了解,添加了对性能优化的扩展。

该扩展从高通888移动平台的Snapdragon Adreno 660 GPU开始支持,旨在加速最常见的图像处理和ML操作,包括:

Convolution

Fully Connected

Depthwise Separable Convolution

Softmax

Fused Convolution + Activation

Binary Operations

Activation

Add, subtract, mul, min, max

Relu

Concatenation

Sigmoid

Depth to Space

Tanh

Permute

Relu6

Reshape

BatchNorm

Fill

Pooling

ResizeBilinear

Max

Pad

Average

CopyTensor

GEMM

Transpose

该扩展对这些ML操作提供了新的尝试,我们对每个操作都进行了Adreno GPU的内核优化。它们在同一个open CL命令队列里与其他OpenCL命令一起顺序执行,您可以使用OpenCL事件来跟踪它们的执行。您可以通过一系列的ML操作以及每个操作适当的tensor输入构建一个机器学习模型。

该扩展与应用程序所依赖的OpenCL兼容,具有后处理、控制性能和内存管理等功能。它利用了命令队列、buffers和事件等标准OpenCL功能,并支持FP16FP32数据类型。

如果您有其它OpenCL内核或编写了自定义操作,可以与我们已有的ML操作混合使用。可以将这些操作发送到同一个命令队列里进行执行。

更低层工作的优势
 

在open CL用户空间驱动层进行ML的优化与实现,可以对内存分配、数据移动、执行和同步进行更精细的控制。例如,上传权重数据和发送每个ML操作都是由应用程序显式执行的。

  • 要评测ML操作,您可以使用OpenCL事件获取提交时间和GPU执行时间等详细信息。
  • 为tensor的预留内存是由应用程序显式控制;这意味着应用程序控制tensor内存占用。预留内存也可以在tensor之间复用,从而减少空间占用。
  • 由于OpenCL ML是基于CAPI,您的模型实际上更安全,因为它们不需要以可解释的文件格式存储。

此外,我们还设计了OpenCL ML扩展,以便能够很快在Adreno上训练ML模型。

OpenCL ML SDK中有什么?


在Android镜像中我们提供了支持这个扩展的open CL驱动,您可以使用SDK中的头文件和参考文件来修改应用程序,调用新的CL函数。

至于工具,如果您使用过我们的Qualcomm®Neural Processing SDK,您可能熟悉将TensorFlow Lite模型轻松转换为其他格式的工具。由于OpenCL ML 处于很用户空间driver层,是一个很接近芯片的位置,所以没有简单的、一键式的方式来转换模型。这就是为什么我们提供了一对工具,用于从TensorFlow模型中提取和转换权重张量数据:

  • 生成可视模型工具-TensorFlow protobuf冻结模型(.pb)或TensorFlowLite.tflite)模型转换为TensorFlow可视模型表示。生成的可视模型保留了源模型的拓扑和权重数据。
  • QFP16/32的可视模型工具-将权重张量提取为'.qfp16''.qfp32'文件类型,分别保存半精度和全精度数据。

这些工具的输出是cl_qcom_ml_ops扩展中的示例模型使用的数据。SDK包括11个示例模型,演示如何在Adreno GPU上使用扩展以及使用OpenCL的其他功能。大多数模型都是用于图像分类的MobileNet版本,演示了以下内容:

  • 使用半精度浮点型(FP16)张量
  • 所有操作上的张量为单精度浮点型(FP32
  • 用于替代GEMM和二进制操作的全连接操作
  • 一个自定义OpenCL C内核(由应用程序开发人员创建),与OpenCL ML操作(来自SDK)混合使用
  • 重新使用tensor预留内存以降低内存占用
  • 需要在op创建期间查找优化缓存命中率的操作属性
  • 记录和发送模型的可记录队列
  • FP32完全连接层交替使用不同精度的数据类型(FP16FP32精度)
  • 利用ION为tensor预留内存,实现CPU与GPU内存共享

当然还包括用于图像分类的Inception V3实现和用于物体检测的MobileNet SSD实现。

下一步:下载OpenCL ML SDK

既然高通已经为您编写了OpenCL内核,并且根据Adreno GPU特性进行了优化,为什么还要自己写卷积、全连接和softmaxML操作内核呢 ?

如果您在OpenCL中开发ML模型,并希望在更接近芯片层的情况下获得性能优势,请下载OpenCL ML SDK,看看它为您提供了什么。

其他相关内容:

边缘机器学习训练:移动设备端训练

作者:Ya Kong

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】