开发者社区> 问答> 正文

阿里云语音AI中请问Android端使用vulkan后端进行推理需要做什么?

阿里云语音AI中请问Android端使用vulkan后端进行推理,除了编译选项设置MNN_VULKAN 开启,并编译出libMNN_Vulkan.so 和设置forward_vulkan_type外还需要做什么?一直会fallback到CPU后端,看了下源码,vulkan后端的注册函数并没有调用到,导致extra creater内只有CPU后端

展开
收起
十一0204 2023-08-08 23:00:08 76 0
1 条回答
写回答
取消 提交回答
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    在Android端使用vulkan后端进行推理,除了上述编译选项设置和编译出libMNN_Vulkan.so外,还需要在代码中进行相关的初始化和设置,包括:

    • 1、在Android.mk文件中添加vulkan的库文件链接。
      ```js

      Android.mk

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    LOCAL_MODULE := model
    LOCAL_SRC_FILES := model.cpp

    LOCAL_LDLIBS := -L$(LOCAL_PATH)/libs -lMNN_Vulkan

    include $(BUILD_SHARED_LIBRARY)

    - 2、 在model.cpp文件中添加对vulkan的初始化和使用代码。 
    ```js
    // 初始化vulkan
    mnn::VulkanBackend::initVulkan();
    
    // 创建模型
    mnn::Model model;
    model.load("model.mnn", mnn::DataType::INT8);
    
    // 获取模型输入和输出的张量信息
    const mnn::TensorInfo inputTensorInfo = model.getInputs()[0];
    const mnn::TensorInfo outputTensorInfo = model.getOutputs()[0];
    
    // 创建张量
    mnn::VulkanTensor inputTensor, outputTensor;
    inputTensor.setTensorInfo(inputTensorInfo);
    outputTensor.setTensorInfo(outputTensorInfo);
    
    // 准备输入数据
    float* inputData = new float[inputTensorInfo.getElementNum()];
    // ...
    inputTensor.setTensorData(inputData, inputTensorInfo);
    
    // 推理
    model.infer(inputTensor, outputTensor);
    
    // 获取输出数据
    float* outputData = new float[outputTensorInfo.getElementNum()];
    outputTensor.getTensorData(outputData, outputTensorInfo);
    
    // 处理输出数据
    // ...
    

    除此之外,还需要注意在使用vulkan进行推理时,需要对输入和输出的数据类型进行转换,因为vulkan支持的数据类型与其他后端不同。

    2023-08-12 16:04:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
智算时代,基于 Kubernetes 落地云原生 AI 立即下载
AI让数据库的路走的“更快更远” 立即下载
Data+AI时代大数据平台应该如何建设 立即下载