Qualcomm TensorFlow Lite SDK 工具快速入门指南(3)

150 篇文章 7 订阅
50 篇文章 0 订阅


4.5 使用 Linux 工作站生成 TFLite SDK

使用 Linux 工作站无需容器即可启用 TFLite SDK 工作流程。此过程是使用容器的替代方法。

要同步和构建 Qualcomm TFLite SDK,请执行以下操作:

  1. 在主机文件系统上创建一个目录以同步 Qualcomm TFLite SDK 工作区。例如:

    $mkdir <tflite-sdk-workspace>
    $cd <tflite-sdk-workspace>
    
    
  2. 从 CodeLinaro 获取 Qualcomm TFLite SDK 源代码:

    $ repo init -u https://git.codelinaro.org/clo/le/sdktflite/tflite/manifest.git --repo-branch=qc/stable --repo-url=git://git.quicinc.com/tools/repo.git -m TFLITE.SDK.1.0.r1-00200-TFLITE.0.xml -b release && repo sync -qc --no-tags -j8 && 
    repo sync -qc --no-tags -j8
    
    
  3. 使用以下条目编辑/tflite-tools/targets/le-tflite-tools-builder.json中存在的 JSON 配置文件 :

    {
        "Image": "tflite-tools-builder",
        "Device_OS": "le",
        "Additional_tag": "",
        "TFLite_Version": "2.11.1",
        "Delegates": {
            "Hexagon_delegate": "OFF",
            "Gpu_delegate": "ON",
            "Xnnpack_delegate": "ON"
        },
        "TFLite_rsync_destination": "<not applicable>",
        "SDK_path": "<path-to-workspace>/build-qti-distro-fullstack-perf/tmp-  glibc/deploy/sdk>",
        "SDK_shell_file": "<sdk-shell-filename not containing *-ext-*>",
        "Base_Dir_Location": "<Absolute path to TfLiteSDK sync directory>"
    }
    
    

有关 json 配置文件中提到的条目的更多信息,请参阅位于/tflite-tools/的Docker.md自述文件 。

笔记
对于 QCS8550,不支持 Hexagon DSP delegate。

  1. 获取脚本以设置环境:

    $ cd <tflite-sdk-workspace>/tflite-tools
    $ source ./scripts/host/host_env_setup.sh
    
  2. 构建 Qualcomm TFLite SDK。

    $ tflite-tools-setup targets/le-tflite-tools-builder.json
    
  3. 在同一 Linux shell 中运行以下实用程序命令,以从TFLite_rsync_destination收集 TFLite SDK 工件。

    $ tflite-tools-host-get-rel-package targets/le-tflite-tools-builder.json
    $ tflite-tools-host-get-dev-package targets/le-tflite-tools-builder.json
    
    
  4. 根据操作系统安装工件。

    • 对于 Windows 平台,在 PowerShell 上,使用以下脚本:

      PS C:> adb root
      PS C:> adb disable-verity PS C:> adb reboot
      PS C:> adb wait-for-device PS C:> adb root
      PS C:> adb remount
      PS C:> adb shell mount -o remount,rw /
      PS C:> adb shell “mkdir -p /tmp”
      PS C:> adb push <tflite package> /tmp
      
      

      如果包是 ipk(对于 QCS8550.LE.1.0),请使用以下命令:

      PS C:> adb shell “opkg --force-depends --force-reinstall --force-overwrite install /tmp/<tflite package>
    • 对于Linux平台,使用以下脚本:

      $ adb root
      $ adb disable-verity 
      $ adb reboot
      $ adb wait-for-device
      $ adb root 
      $ adb remount
      $ adb shell mount -o remount,rw /
      $ adb shell “mkdir -p /tmp”
      $ adb push <tflite package> /tmp
      
      

      如果包是 ipk(对于 QCS8550.LE.1.0):

      $ adb shell “opkg --force-depends --force-reinstall --force-overwrite install /tmp/<tflite package>

4.6 生成用于 QIM SDK 构建的 Qualcomm TFLite SDK 工件

要使用生成的工件在 QIM SDK 中启用 Qualcomm TFLite SDK GStreamer 插件,请执行以下操作:

  1. 完成Sync and build Qualcomm TFLite SDK中的过程,然后运行以下命令:

    $ tflite-tools-host-get-dev-tar-package ./targets/le-tflite-tools-     builder.json
    

    生成一个 tar 文件。它包含 Qualcomm TFLite SDK,位于“TFLite_rsync_destination”提供的路径中

  2. 要启用 Qualcomm TFLite SDK GStreamer 插件,请使用 tar 文件作为 QIM SDK 构建的 JSON 配置文件中的参数。
    有关编译 QIM SDK 的信息,请参阅Qualcomm 智能多媒体 SDK (QIM SDK) 快速入门指南(80-50450-51)。

5. 增量构建 Qualcomm TFLite SDK

如果您是首次构建 Qualcomm TFLite SDK,请参阅构建 Qualcomm TFLite SDK 工具 - 开发人员工作流程。相同的构建环境可以重复用于增量开发。

开发人员可以使用图中提到的帮助程序实用程序(在容器内)来编译修改后的应用程序和插件。

在这里插入图片描述

图片 :容器中的工作流

代码修改完成后,在代码目录下执行以下操作:

  1. 编译修改后的代码:

    $ tflite-tools-incremental-build-install
    
  2. 打包编译代码:

    $ tflite-tools-ipk-rel-pkg
    

    或者

    $ tflite-tools-deb-rel-pkg
    
  3. 将发布包与主机文件系统同步:

    $ tflite-tools-remote-sync-ipk-rel-pkg
    

    或者

    $ tflite-tools-remote-sync-deb-rel-pkg
    
  4. 准备开发包:

    $   tflite-tools-ipk-dev-pkg
    

编译后的工件位于 JSON 文件中提到的TFLite_rsync_destination文件夹中,可以将其复制到任何目录。

6. 与 QNN 外部 TFLite Delegate 配合使用

TFLite 外部委托允许您使用可信第三方(例如 Qualcomm 的 QNN)提供的库在另一个执行器上运行模型(部分或全部)。该机制可以利用各种设备上的加速器,例如 GPU 或六角形张量处理器 (HTP) 进行推理。这为开发人员提供了一种与默认 TFLite 分离的灵活方法,以加快推理速度。

  • 确保使用 Ubuntu 工作站来提取 QNN AI 堆栈。
  • 确保您使用 QNN 版本 2.14 与 Qualcomm TFLite SDK 结合使用
    Qualcomm TFLite SDK 能够通过 TFLite QNN 外部委托在多个 QNN 后端上运行推理。具有通用表示的 TFLite 模型 flatbuffer可以在 GPU 和 HTP 上运行。

在设备上安装 Qualcomm TFLite SDK 包后,请执行以下操作以在设备上安装 QNN 库。

  1. 下载适用于 Ubuntu 的 Qualcomm Package Manager 3。
    a. 单击https://qpm.qualcomm.com/,然后单击工具。
    b. 在左窗格的“搜索工具”字段中,输入QPM。从系统操作系统列表中,选择Linux。
    搜索结果显示 Qualcomm 包管理器列表。
    c. 选择 Qualcomm Package Manager 3 并下载 Linux debian 软件包。

  2. 安装适用于 Linux 的 Qualcomm Package Manager 3。使用以下命令:

    $ dpkg -i --force-overwrite /path/to/QualcommPackageManager3.3.0.83.1.Linux-x86.deb
    
  3. 在 Ubuntu 工作站上下载 Qualcomm ® AI Engine Direct SDK。
    单击https://qpm.qualcomm.com/,然后单击工具。
    在左窗格的“搜索工具”字段中,输入AI stack。从系统操作系统列表中,选择Linux。
    将显示包含各种 AI 堆栈引擎的下拉列表。
    单击Qualcomm® AI Engine Direct SDK并下载Linux v2.14.0包。

  4. 在 Ubuntu 工作站上安装 Qualcomm® AI Engine Direct SDK。
    a. 激活许可证:

    qpm-cli --license-activate qualcomm_ai_engine_direct
    

    b. 安装AI Engine Direct SDK:

    $ qpm-cli --extract /path/to/qualcomm_ai_engine_direct.2.14.0.230828.Linux-AnyCPU.qik
    
  5. 使用 .push 将库从 Ubuntu 工作站推送到设备adb push。

    $ cd /opt/qcom/aistack/qnn/2.14.0.230828
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnDsp.so              /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnDspV66Stub.so       /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnGpu.so              /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnHtpPrepare.so       /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnHtp.so              /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnHtpV68Stub.so       /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnSaver.so            /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnSystem.so           /usr/lib/
    $ adb push ./lib/aarch64-oe-linux-gcc11.2/libQnnTFLiteDelegate.so   /usr/lib/
    $ adb push ./lib/hexagon-v65/unsigned/libQnnDspV65Skel.so           /usr/lib/rfsa/adsp
    $ adb push ./lib/hexagon-v66/unsigned/libQnnDspV66Skel.so           /usr/lib/rfsa/adsp
    $ adb push ./lib/hexagon-v68/unsigned/libQnnHtpV68Skel.so           /usr/lib/rfsa/adsp
    $ adb push ./lib/hexagon-v69/unsigned/libQnnHtpV69Skel.so           /usr/lib/rfsa/adsp
    $ adb push ./lib/hexagon-v73/unsigned/libQnnHtpV73Skel.so           /usr/lib/rfsa/adsp
    
    

7. 测试高通TFLite SDK

Qualcomm TFLite SDK 提供了某些示例应用程序,可用于验证、基准测试并获取开发人员想要评估的模型的准确性。

在设备上安装 Qualcomm TFLite SDK 包后,设备上即可使用运行时来运行这些示例应用程序。

先决条件

在设备上创建以下目录:

$ adb shell "mkdir /data/Models"
$ adb shell "mkdir /data/Lables"
$ adb shell "mkdir /data/profiling"

7.1 标签图像标签

图像是 Qualcomm TFLite SDK 提供的实用程序,它展示了如何加载预先训练和转换的 TensorFlow Lite 模型并使用它来识别图像中的对象。

先决条件:

下载示例模型和图像:

您可以使用任何兼容模型,但以下 MobileNet v1 模型很好地演示了经过训练可识别 1000 个不同对象的模型。

  • 获取型号

    $ curl   https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz | tar xzv -C /data
    $ mv /data/mobilenet_v1_1.0_224.tflite /data/Models/
    
  • 获取标签

    $ curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz  | tar xzv -C /data  mobilenet_v1_1.0_224/labels.txt
    

$ mv /data/mobilenet_v1_1.0_224/labels.txt /data/Labels/
连接到 Qualcomm TFLite SDK docker 容器后,可以在以下位置找到该映像: “/mnt/tflite/src/tensorflow/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp”

  1. 将此文件推送到/data/Labels/

  2. 运行命令:

    $ adb shell "label_image -l /data/Labels/labels.txt -i /data/Labels/grace_hopper.bmp -m /data/Models/mobilenet_v1_1.0_224.tflite -c 10 -j 1 -p 1"
    

7.2 基准测试

Qualcomm TFLite SDK 提供了基准测试工具来计算各种运行时间的性能。

这些基准测试工具当前测量和计算以下重要性能指标的统计数据:

  • 初始化时间
  • 预热状态推断时间
  • 稳态推理时间
  • 初始化时的内存使用情况
  • 总体内存使用情况

先决条件
将待测试的模型从 TFLite Model Zoo ( https://tfhub.dev/ ) 推送到 /data/Models/。运行以下脚本:

  • XNN包

    $ adb shell "benchmark_model --graph=/data/Models/<model file> --enable_op_profiling=true --use_xnnpack=true --num_threads=4 --max_secs=300 --profiling_output_csv_file=/data/profiling/<csv file to dump data>"
    
  • GPU 代理

    $ adb shell "benchmark_model --graph=/data/Models/<model file> --enable_op_profiling=true --use_gpu=true --num_runs=100 --warmup_runs=10 --max_secs=300 --profiling_output_csv_file=/data/profiling/<csv file to dump data>"
    
  • 外部代表

    • QNN 外部委托 GPU:
      使用浮点模型运行推理:

      $  adb shell-command "benchmark_model --graph=/data/Models/<model_fp32>.tflite --external_delegate_path=libQnnTFLiteDelegate.so --external_delegate_options='backend_type:gpu;library_path:/usr/lib/libQnnGpu.so;skel_library_dir:/usr/lib/rfsa/adsp'"
      
    • QNN 外部委托 HTP:
      使用定量模型运行推理:

      $ adb shell-command "benchmark_model --graph=/data/Models/<model_quant>.tflite --external_delegate_path=libQnnTFLiteDelegate.so --external_delegate_options='backend_type:htp;library_path:/usr/lib/libQnnHtp.so;skel_library_dir:/usr/lib/rfsa/adsp'"
      

7.3 精度工具

Qualcomm TFLite SDK 提供了一个精度工具,用于计算不同运行时间的模型的精度。

  • 使用 GPU 委托进行分类
    下载测试所需文件的步骤可以在以下位置找到:

    /mnt/tflite/src/tensorflow/tensorflow/lite/tools/evaluation/tasks/imagenet_image_classificatio/README.md”
    

    用于运行该工具的二进制文件已经是 SDK 的一部分,因此开发人员无需再次构建它。

    $ adb shell "image_classify_run_eval -- model_file=/data/Models/<Model file> --ground_truth_images_path=/data/<Ground truth images path> --ground_truth_labels=/data/<ground truth lables> --model_output_labels=/data/<labels file> --delegate=gpu"
    
  • 使用 XNN 包进行物体检测

    $ adb shell "inf_diff_run_eval --model_file=/data/Models/<TFLite Object Detection Model> --delegate=xnnpack"
    
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值