Tengine FAQ中文版

1. 編譯example時,出現相似 fatal error: 'tengine_c_api.h' file not found 的錯誤?

這是編譯Tengine以後沒有將相關文件複製到 core/include 的緣故,只須要在Tengine根目錄下執行make install便可;若是你是在編譯某一個example,還須要在cmake的時候加入參數-DTENGINE_DIR=<tengine_root>來指定Tengine目錄。html

2. 編譯Tengine時,出現相似 internal compiler error: Segmentation fault 的錯誤?

一般是由於編譯時開啓太多的線程,嘗試用make clean清空編譯結果,用較少的線程數(即make命令的 j 參數)從新編譯。java

3. 編譯Android版本的Tengine時,出現 This file was generated by a newer(older) version of protoc which is incompatible with your Protocol Buffer headers. Please update your headers. 的錯誤?

protobuf版本不匹配。若是你使用了百度雲盤上預編譯好的 protobuf_lib ,請將你本地的protobuf版本升級(降級)到3.0.0版本,安裝方式參見 如何安裝 protobuf 3.0.0?;或者使用ndk從新編譯 protobuf_libpython

4. 若是個人模型有某一部分操做只出如今Tengine的CPU或GPU支持的操做列表裏怎麼辦?

嘗試使用 異構計算git

5. 爲何樹莓派3B開啓 CONFIG_ARCH_ARM64=y 編譯會報錯?

雖然樹莓派3B是64位的A53處理器,但因爲官方的操做系統運行在aarch32模式下,因此沒法正常編譯和運行Tengine的64位彙編代碼。github

6. RK3399如何查看GPU的運行頻率和佔用率?

在終端執行cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/loadapache

7. 開啓TF_SERIALIZER以後編譯報錯 fatal error: graph.pb.h: No such file or directory

protobuf版本不夠高,TF要求3.0.0以上的版本,安裝方式參見 如何安裝 protobuf 3.0.0?api

8. tengine如何指定cpu核心?爲何設置 TENGINE_CPU_LIST=0 或者2 性能沒差異?

tengine經過環境變量TENGINE_CPU_LIST 來設置cpu核心。
若是用的是RK3399, cpu的編號是: 0,1,2,3 爲A53, 4,5 爲A72, 這個信息能夠經過命令cat /proc/cpuinfo查看。
所以,設置TENGINE_CPU_LIST, 不管設置0,2 都是單A53, 性能無差異。
網絡

設置方法:函數

  1. 在命令窗口直接設置
    export TENGINE_CPU_LIST=4,5 //兩個A72
  2. 在代碼中調用setenv設置
    int setenv(const char *envname, const char *envval, int overwrite);
    setenv最後一個參數overwrite 設置爲0,表示若是環境變量已有設置,則不更新; 最後一個參數非0, 參數更新
    如:setenv("TENGINE_CPU_LIST", "4,5", 1);

在代碼中調用set_cpu_list函數設置
void set_cpu_list(const char* cpu_list_str);
函數接收cpu序號的列表,用逗號做爲分隔符,注意:set_cpu_list函數必須在init_tengine以前調用才能生效。
如:set_cpu_list("4,5");工具

9. 執行程序時出現相似Failed to execute on: xxx Op: xxx報錯?

檢查一下makefile.config裏是否是同時註釋掉了CONFIG_ARCH_ARM64=yCONFIG_ARCH_BLAS=y,二者起碼須要打開一個。對於armv8,建議打開ARM64,若是須要使用只能依賴openblas的OP(如LSTM和DeConv)則須要將BLAS一併打開;對於armv七、x86則只能打開BLAS。

10. 爲何相同的網絡和相同的輸入,CPU和GPU計算輸出的特徵向量不徹底相同?

對於浮點運算,CPU只支持FP32,而GPU每每同時支持FP16和FP32。若是爲GPU設置了FP16運算精度(export ACL_FP16=1),那麼因爲計算精度的不一樣,CPU和GPU的運算結果就有了一些差別。

11. 執行程序時報錯 The input file specified is using deprecated params: xxx. Please upgrade the input file by using caffe tools(upgrade_net_proto_text/upgrade_net_proto_binary).

Tengine對caffe只支持新的input格式,解決方法:

  1. 調用caffe的工具 upgrade_net_proto_text/upgrade_net_proto_binary 對prototxt進行升級;
  2. 或手動修改prototxt文件,將
    input: "data"
    input_shape {
        dim: 1
        dim: 3
        dim: 300
        dim: 300
    }

    的格式改成(注意:輸入維度要對應修改,不能照抄

    layer {
        name: "input"
        type: "Input"
        top: "data"
        input_param {
            shape {
                dim: 1
                dim: 3
                dim: 300
                dim: 300
            }
        }
    }

    12. 自定義OP後報錯 cannot find load function for operator: xxx

    這是由於沒有在serializer上註冊該OP,使得模型解析過程當中找不到OP,以caffe爲例可參考 issue#89

    13. 如何使用PyTorch/Gluon模型?

  • PyTorch用戶能夠將導出onnx模型,或使用轉換工具(如PytorchToCaffe轉換成caffe模型)來使用Tengine。
  • MXNet-Gluon用戶能夠導出onnxMXNet-Module模型,或使用轉換工具(如GluonConverter轉換成caffe模型)來使用Tengine。
  • 有多是opencv版本問題,opencv3把一些名爲CV_xxx的常量挪到了cv命名空間下而且去掉了前綴CV_,能夠嘗試將代碼報錯的CV_xxx常量改成cv::xxx後從新編譯,如CV_FILLED改成cv::FILLED

14. 編譯Tengine過程當中報錯 te_caffe.pb.h: No such file or directory

te_caffe.pb.h文件是在編譯過程當中產生的,也就是說在該錯誤以前應該還會有其餘報錯——並且這每每是protobuf帶來的問題,如 protoc: error while loading shared libraries: libprotoc.so.xx: cannot open shared object file: No such file or directory,編譯工具未找到protobuf或系統包含多個版本的protobuf致使編譯工具產生混亂。

15. 編譯example的時候報錯 CV_xxx was not declared in this scope

有多是opencv版本問題,opencv3把一些名爲CV_xxx的常量挪到了cv命名空間下而且去掉了前綴CV_,能夠嘗試將代碼報錯的CV_xxx常量改成cv::xxx後從新編譯,如CV_FILLED改成cv::FILLED

相關文章
相關標籤/搜索