首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >InspireFace GPU (CUDA) 编译避坑指南(2)

InspireFace GPU (CUDA) 编译避坑指南(2)

原创
作者头像
美畅物联-南宫美
发布2026-05-08 17:19:08
发布2026-05-08 17:19:08
270
举报

一、InspireFace 源码修改

源码来自官网:https://github.com/HyperInspire/InspireFace/releases

版本号:InspireFace v1.2.3

1.1 CMake CACHE 变量判空 bug

文件:根目录 CMakeLists.txt

if (NOT DEFINED ISF_LINUX_MNN_CUDA)

问题:NOT DEFINED 对 set(... CACHE ...) 变量永远为 FALSE,导致即使传入空路径也走 else 分支。

下图为修改对比:

1.2 宏定义不一致导致 CUDA 后端不生效

文件:cpp/inspireface/middleware/inference_adapter/mnn_cv_adapter_inference.h

问题:

#ifdef FORWARD_CUDA        // ← 未定义的宏!

backend_ = MNN_FORWARD_CUDA;

下图为修改对比:

1.3 inference_wrapper_mnn.cpp 文件加载版硬编码 CPU

文件:cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.cpp

问题:文件加载版 Initialize 函数中,无论是否启用 CUDA,scheduleConfig.type 都被设为 MNN_FORWARD_CPU。

下图为修改对比:

1.4 meta.cpp.in 缺少 MNN CUDA 显示分支

文件:cpp/inspireface/meta.cpp.in

问题:只有 TensorRT(CUDA) 和 MNN(CPU) 两个 GPU 相关分支,缺少 MNN CUDA。

下图为修改对比:

总结修改文件清单:

修改文件

修改内容

CMakeLists.txt(根目录)

① CACHE 变量判空 STREQUAL "" ② 自动查找 libMNN_*.a ③ GCC≥12 自动检测 CUDA host 编译器 ④ 全局链接加 -lstdc++

cpp/inspireface/CMakeLists.txt

① --whole-archive 只包裹 MNN 库② CUDA 库用 CUDA:: 导入目标③ 链接顺序:MNN → CUDA → stdc++ → m → 其他 ④ find_package(CUDAToolkit)⑤ link_directories 区分预编译/内置 MNN

cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.cpp

① 文件加载版 Initialize 统一 CUDA 逻辑 ② session_ 先判空再使用 ③ input_names_ 存 string 不存 c_str()

cpp/inspireface/middleware/inference_wrapper/inference_wrapper_mnn.h

session_ 初始化为 nullptr

cpp/inspireface/middleware/inference_adapter/mnn_cv_adapter_inference.h

FORWARD_CUDA → ISF_GLOBAL_INFERENCE_BACKEND_USE_MNN_CUDA

cpp/inspireface/meta.cpp.in

新增 MNN CUDA 显示分支

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档