caffe 错误
一些caffe錯(cuò)誤
如果找不到數(shù)據(jù)上的原因的話,可以懷疑caffe框架有問題,換用其它版本試試。比如我遇到的問題是在訓(xùn)練時(shí)使用了Accuracy層,而該層的實(shí)現(xiàn)代碼在某次更新中GPU代碼存在bug,復(fù)用了其它層的變量導(dǎo)致對(duì)loss的計(jì)算產(chǎn)生了影響。訓(xùn)練時(shí)去掉accuracy層就好了,測(cè)試時(shí)使用該層不受影響,或者使用這里的補(bǔ)丁https://github.com/BVLC/caffe/pull/5987 。
Check failed: error == cudaSuccess (9 vs. 0) invalid configuration argument
可能原因是GPU硬件配置低,線程數(shù)不夠,超過了它能承受的范圍。caffe不支持小于2.0計(jì)算能力的nvidia GPU,嘗試調(diào)小batch size或者降低圖片縮放的大小,使用較小的網(wǎng)絡(luò)如ZF net或者VGG_CNN_M_1024試試。
如果硬件沒問題那么如果Faster R-CNN的smooth L1 loss層報(bào)錯(cuò),RPN未產(chǎn)生候選區(qū)域,導(dǎo)致CAFFE_GET_BLOCKS分配到的block數(shù)為0,將配置文件中的bg_thresh_lo設(shè)置為0,可以增加roi的數(shù)量,然而有時(shí)候仍然不行。
將CAFFE_GET_BLOCKS(count)替換為std::max(1, CAFFE_GET_BLOCKS(count))也可以解決一部分這個(gè)問題。
如果問題仍未解決,請(qǐng)仔細(xì)檢查訓(xùn)練數(shù)據(jù),最終發(fā)現(xiàn)數(shù)據(jù)中某個(gè)樣本是負(fù)樣本(Faster R-CNN的該標(biāo)簽中沒有目標(biāo)標(biāo)記),導(dǎo)致計(jì)算smooth l1損失時(shí)ground truth為0,因此導(dǎo)致了cuda的block數(shù)為0.
再來看Invalid Configuration Argument的一般原因:
Invalid Configuration Argument - This error means that the dimension of either the specified grid of blocks (dimGrid) , or number of threads in a block (dimBlock), is incorrect. In such a case, the dimension is either zero or the dimension is larger than it should be. This error will only occur if you dynamically determine the dimensions.
原因:之前安裝caffe時(shí)在/usr/lib/libcaffe.so創(chuàng)建了符號(hào)鏈接,刪除即可。
在Makefile或其include的Makefile.config中對(duì)gcc編譯選項(xiàng)加入-fopenmp:
CXXFLAGS += -fopenmp LDFLAGS += -lgomp
注意不要加入到COMMON_FLAGS中,因?yàn)槠浔籲vcc用到,而nvcc沒有openmp選項(xiàng)。
free(): invalid pointer: 0x00000000020663b0
可能是 glibc malloc/free 的問題, 可用TCMalloc庫替代:
# 下載tcmalloc庫.so sudo apt install libtcmalloc-minimal4 # 可選方式二: 性能分析工具(全家桶): apt install google-perftools # 對(duì)于要執(zhí)行的程序通過preload替換掉原malloc功能庫 export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4"
Google開源的TCMalloc,在C++小對(duì)象頻繁創(chuàng)建銷毀的處理上擁有非常大的優(yōu)勢(shì)。tcmalloc速度快,但是耗內(nèi)存,不適合直接與caffe鏈接到一塊, 從caffe的提交歷史可以看到曾經(jīng)加入了tcmalloc后來又刪除了.
在使用PyTorch或者Tensorflow等框架時(shí)也可能遇到這個(gè)問題.
參考How To Use TCMalloc? 與 TCMalloc : Thread-Caching Malloc
caffe的python接口.
caffe的python接口很容易因?yàn)镃++代碼的改動(dòng)編譯而出現(xiàn)運(yùn)行時(shí)錯(cuò)誤. 解決方法是刪除python/caffe/下的caffe.so 或者重新編譯整個(gè)工程.
其它錯(cuò)誤, 每次修改caffe的C++代碼并編譯caffe時(shí)make或cmake工具僅編譯改動(dòng)過的文件及依賴文件,可能會(huì)出現(xiàn)一些很奇怪的運(yùn)行時(shí)錯(cuò)誤. 這種情況下的首選嘗試方法就是重新編譯整個(gè)工程. (我遇到很多次這種情況了, 可能是Makefile寫的不夠完善)
轉(zhuǎn)載于:https://www.cnblogs.com/makefile/p/caffe-errors.html
總結(jié)
- 上一篇: 女人做梦梦到坟墓是什么征兆
- 下一篇: odoo10学习笔记十四:mixin其他