PaddlePaddle踩坑指北系列——Linux安裝(一)

本周我們精選出社區(qū)問答進(jìn)行整理匯總,開發(fā)者在使用PaddlePaddle過程中遇到任何技術(shù)難題,都可以到PaddlePaddle公眾號(hào)FAQ專欄上尋求解決方案,希望能幫助新用戶在Linux安裝過程中解答疑惑。


1.問題:cuda9.0需要安裝哪一個(gè)版本的paddle,安裝包在哪?

??關(guān)鍵字:cuda 9.0

??問題描述:cuda9.0需要安裝哪一個(gè)版本的paddle,安裝包在哪,希望安裝Fluid版本的Paddle,而不是舊版的Paddle

??問題解答:paddlepaddle-gpu使用CUDA 9.0和cuDNN 7編譯的0.14.0版本

因此,pip install paddlepaddle-gpu即可。

可以參考安裝說明文檔:http://paddlepaddle.org/documentation/docs/zh/0.14.0/new_docs/beginners_guide/install/install_doc.html#linuxpaddlepaddle

?2.問題:pip install paddlepaddle-gpu?安裝fluid?版本報(bào)錯(cuò)

??關(guān)鍵字:GPU

??問題描述:使用pip install paddlepaddle-gpu命令在公司內(nèi)部開發(fā)GPU機(jī)器上安裝PaddlePaddle。


安裝信息
機(jī)器的CUDA信息
按照官網(wǎng)安裝:pip install paddlepaddle-gpu?執(zhí)行import paddle.fluid as fluid?失敗


按照官網(wǎng)安裝:pip install paddlepaddle-gpu?執(zhí)行import paddle.fluid as fluid?失敗

奇怪的是,同樣的環(huán)境下,上周運(yùn)行成功,這周確運(yùn)行失敗,求解答

??解決方法:這通常是GPU顯存不足導(dǎo)致的,請(qǐng)檢查一下機(jī)器的顯存,確保顯存足夠后再嘗試import paddle.fluid

3.問題:CUDA driver version is insufficient

??關(guān)鍵字:CUDA insufficient

??問題描述:在使用PaddlePaddle GPU的Docker鏡像的時(shí)候,出現(xiàn)Cuda Error: CUDA driver version is insufficient for CUDA runtime version

??問題解答:通常出現(xiàn)Cuda Error: CUDA driver version is insufficient for CUDA runtime version,?原因在于沒有把機(jī)器上CUDA相關(guān)的驅(qū)動(dòng)和庫(kù)映射到容器內(nèi)部。

??解決方法:使用nvidia-docker,?命令只需要將docker換為nvidia-docker即可。更多請(qǐng)參考:https://github.com/NVIDIA/nvidia-docker

4.問題:安裝CPU版本后訓(xùn)練主動(dòng)abort,gdb顯示Illegal instruction

??關(guān)鍵字:CPU版本Illegal instruction

??問題描述:成功安裝了PaddlePaddle CPU版本后,使用Paddle訓(xùn)練模型,訓(xùn)練過程中,Paddle會(huì)自動(dòng)退出,gdb顯示Illegal instruction

??報(bào)錯(cuò)輸出:

*** Aborted at 1539697466 (unix time) try "date -d @1539697466" if you are using GNU date ***

PC: @???????????????0x0 (unknown)

*** SIGILL (@0x7fe3a27b7912) received by PID 13005 (TID 0x7fe4059d8700) from PID 18446744072140585234; stack trace: ***

?@?0x318b20f500 (unknown)

?@?0x7fe3a27b7912 paddle::framework::VisitDataType<>()

?@?0x7fe3a279f84f paddle::operators::math::set_constant_with_place<>()

?@?0x7fe3a1e50c21 paddle::operators::FillConstantOp::RunImpl()

?@?0x7fe3a27526bf paddle::framework::OperatorBase::Run()

?@?0x7fe3a1ca31ea paddle::framework::Executor::RunPreparedContext()

?@?0x7fe3a1ca3be0 paddle::framework::Executor::Run()

?@?0x7fe3a1bc9e7d _ZZN8pybind1112cpp_function10initializeIZN6paddle6pybindL13pybind11_initEvEUlRNS2_9framework8ExecutorERKNS4_11ProgramDescEPNS4_5ScopeEibbE63_vIS6_S9_SB_ibbEINS_4nameENS_9is_methodENS_7siblingEEEEvOT_PFT0_DpT1_EDpRKT2_ENUlRNS_6detail13function_callEE1_4_FUNEST_

?@?0x7fe3a1c14c24 pybind11::cpp_function::dispatcher()

?@?0x7fe405acf3e4 PyEval_EvalFrameEx

?@?0x7fe405ad0130 PyEval_EvalCodeEx

?@?0x7fe405ace4a1 PyEval_EvalFrameEx

?@?0x7fe405ad0130 PyEval_EvalCodeEx

?@?0x7fe405ace4a1 PyEval_EvalFrameEx

??@????0x7fe405ad0130 PyEval_EvalCodeEx

?@?0x7fe405a5c181 function_call

?@?0x7fe405a340f3 PyObject_Call

?@?0x7fe405accde7 PyEval_EvalFrameEx

?@?0x7fe405acec56 PyEval_EvalFrameEx

?@?0x7fe405ad0130 PyEval_EvalCodeEx

?@????0x7fe405a5c27d function_call

?@?0x7fe405a340f3 PyObject_Call

?@?0x7fe405accde7 PyEval_EvalFrameEx

?@?0x7fe405ad0130 PyEval_EvalCodeEx

?@?0x7fe405a5c181 function_call

?@?0x7fe405a340f3 PyObject_Call

?@?0x7fe405a46f7f instancemethod_call

?@?0x7fe405a340f3 PyObject_Call

?@?0x7fe405a8abd4 slot_tp_call

?@?0x7fe405a340f3 PyObject_Call

?@?0x7fe405acd887 PyEval_EvalFrameEx

?@?0x7fe405acec56 PyEval_EvalFrameEx

??問題解答:CPU版本PaddlePaddle自動(dòng)退出的原因通常是因?yàn)樗跈C(jī)器不支持AVX2指令集而主動(dòng)abort。簡(jiǎn)單的判斷方法:用gdb-7.9以上版本(因編譯C++文件用的工具集是gcc-4.8.2,目前只知道gdb-7.9這個(gè)版本可以debug gcc4編譯出來的目標(biāo)文件):

$ /path/to/gdb -iex "set auto-load safe-path /" -iex "set solib-search-path /path/to/gcc-4/lib" /path/to/python -c core.xxx

在gdb界面:

(gdb) disas

找到箭頭所指的指令,例如:

??0x00007f381ae4b90d <+3101>:?test?%r8,%r8

=> 0x00007f381ae4b912 <+3106>:?vbroadcastss %xmm0,%ymm1

??0x00007f381ae4b917 <+3111>:?lea?(%r12,%rdx,4),%rdi

然后google一下這個(gè)指令需要的指令集。上面例子中的帶xmm和ymm操作數(shù)的vbroadcastss指令只在AVX2中支持

然后看下自己的CPU是否支持該指令集

cat /proc/cpuinfo | grep flags | uniq | grep avx --color

如果沒有AVX2,就表示確實(shí)是指令集不支持引起的主動(dòng)abort

??解決方法:如果沒有AVX2指令集,就需要要安裝不支持AVX2指令集版本的PaddlePaddle,默認(rèn)安裝的PaddlePaddle是支持AVX2指令集的,因?yàn)锳VX2可以加速模型訓(xùn)練的過程,更多細(xì)節(jié)可以參考安裝文檔

http://www.paddlepaddle.org/documentation/docs/zh/1.0/beginners_guide/install/Start.html#paddlepaddle

5.問題:nvidia-docker運(yùn)行鏡像latest-gpu-cuda8.0-cudnn7: SIGILL

關(guān)鍵字:nvidia-docker?cuda8.0?cudnn7

問題描述:使用sudo nvidia-docker run --name Paddle -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda8.0-cudnn7 /bin/bash,安裝成功后,出現(xiàn)如下問題

import paddle.fluid

*** Aborted at 1539682149 (unix time) try "date -d @1539682149" if you are using GNU date ***

PC: @ 0x0 (unknown)

*** SIGILL (@0x7f6ac6ea9436) received by PID 16 (TID 0x7f6b07bc7700) from PID 18446744072751846454; stack trace: ***

解決方法:請(qǐng)先確定一下機(jī)器是否支持AVX2指令集,如果不支持,請(qǐng)按照相應(yīng)的不支持AVX2指令集的PaddlePaddle,可以解決該問題。

如果在這篇文章中沒有得到您所遇到問題的解答時(shí),請(qǐng)不要著急。我們將即可推出后續(xù)問題解答報(bào)道,敬請(qǐng)期待。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容