阿里云语音AI中请问Android端使用vulkan后端进行推理,除了编译选项设置MNN_VULKAN 开启,并编译出libMNN_Vulkan.so 和设置forward_vulkan_type外还需要做什么?一直会fallback到CPU后端,看了下源码,vulkan后端的注册函数并没有调用到,导致extra creater内只有CPU后端
在Android端使用vulkan后端进行推理,除了上述编译选项设置和编译出libMNN_Vulkan.so外,还需要在代码中进行相关的初始化和设置,包括:
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支持的数据类型与其他后端不同。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。