為了安裝tensorflow,導(dǎo)致我Linux系統(tǒng)重裝趴俘,Windows系統(tǒng)差點也沒了睹簇,哎。寥闪。太惠。
本人筆記本電腦有一個256 SSD和1TB機械硬盤,固態(tài)裝C盤疲憋,機械硬盤裝D凿渊、E和F,各330G缚柳,系統(tǒng)為Win10埃脏,顯卡為NVIDIA1060。后來打算裝manjaro雙系統(tǒng)喂击,進行編程和機器學(xué)習(xí)剂癌、深度學(xué)習(xí)的開發(fā)工作,于是F盤分了一半約160G給manjaro系統(tǒng)翰绊,其中根目錄和家目錄等單獨劃分分區(qū)掛載佩谷,根目錄分區(qū)大小為30G旁壮,此是前話。
在安裝tensorflow之前自己先裝了pytorch谐檀,因為覺得這個框架代碼更優(yōu)雅抡谐,代碼風(fēng)格自己更喜歡。后來在安裝tensorflow時發(fā)現(xiàn)還挺麻煩桐猬,需要獨立cuda和cudnn庫麦撵,不同版本的tensorflow依賴于不同版本的cuda和cudnn,而cuda和cudnn依賴于gcc溃肪,如下圖所示免胃。
而manjaro系統(tǒng)屬于arch系,各軟件包滾動更新速度很快惫撰,基本總是保持最新羔沙,比如系統(tǒng)默認python環(huán)境竟然時3.7.2,我的個乖乖厨钻,自己的系統(tǒng)里安裝的gcc是此時最新的8.2.1扼雏,與cuda所需的gcc6沖突,如果要裝gcc6還要卸載gcc8夯膀,而其他軟件包會依賴于gcc8诗充,況且安裝舊版本包這種行為一點都不arch,于是使用tensorflow官方預(yù)編譯好的whl文件安裝就不太現(xiàn)實了诱建,只能自己在本機上編譯構(gòu)建了蝴蜓,幸好網(wǎng)上搜到了一篇最近的、講得很好很詳細俺猿、和自己情況正相符的一篇帖子:編譯 Tensorflow 1.10 + CUDA9.2 + MKL励翼,在這里向作者由衷的表示感謝!
于是便紅紅火火按照教程開始來裝了辜荠,于是問題舊開始出現(xiàn)了。
首先問題是當(dāng)下載了tensorflow源碼之后發(fā)現(xiàn)自己不能切換安裝版本抓狭,如果選擇默認master以外的分支伯病,則報無法引用到/tensorflow/tools/bazel.rc文件
的錯誤,于是只能在master分支裝吧否过,不管了午笛。
如圖:
同時發(fā)現(xiàn)自己訪問github下載文件的速度太慢了,導(dǎo)致bazel程序運行失敗苗桂,后來找到了相關(guān)博客如git clone速度太慢的解決辦法進行配置药磺,發(fā)現(xiàn)還是未解決,自己在命令前加proxychains代理也不行煤伟,因為是程序內(nèi)部調(diào)用系統(tǒng)網(wǎng)絡(luò)去下載文件癌佩,代理命令無效木缝,經(jīng)過多次嘗試后,自己打算通過瀏覽器下載一個文件試試围辙,如https://github.com/bazelbuild/rules_closure/archive/9889e2348259a5aad7e805547c1a0cf311cfcd91.tar.gz
,發(fā)現(xiàn)下載的挺快的我碟,是因為代理,而自己直接調(diào)用wget命令發(fā)現(xiàn)好慢姚建,同時還發(fā)現(xiàn)了該文件的最終下載域名為:codeload.github.com
矫俺,后來自己參考那個教程在https://www.ipaddress.com/里搜索得到了對應(yīng)的ip并將其和ip加到hosts文件中,如圖所示:
速度一下就快了不少掸冤,雖說只有幾十k厘托,但是也比之前的幾十幾百b強,同時安裝也不報下載文件失敗訪問不了文件的錯誤了稿湿。
后來又遇到:invalid conversion from 'const char*' to 'char*'
這樣的代碼error铅匹,于是網(wǎng)上找到了invalid conversion from 'const char' to 'char' 的解決方法這篇文章,于是便修改了報錯處的源碼缎罢,重新繼續(xù)編譯伊群,看著編譯進行的挺順利,自己還蠻開心的策精,可誰知命運給自己開的玩笑才剛剛開始舰始。
經(jīng)過了漫長的編譯時間,突然又報錯了咽袜,說是什么文件訪問失敗丸卷,沒有剩余空間了,當(dāng)時我就蒙了询刹,這是咋回事谜嫉,后來發(fā)現(xiàn):根目錄所在分區(qū)滿了,安裝過程中所有文件都保存在根目錄所在分區(qū)凹联,即已經(jīng)到了30G了沐兰,使用df -h
命令查看所在分區(qū)使用率已經(jīng)到了100%,我擦1文印W〈场!
這可如何是好澳淑,沒想到編譯個tensorflow這么占存儲空間比原,后來網(wǎng)上查找相關(guān)案例和解決方案,暫時只是把用不到的大軟件卸載了杠巡,如Clion量窘,發(fā)現(xiàn)效果不明顯,還是占用了29G多氢拥,于是心想:老子不裝了蚌铜,不裝了還不行嗎锨侯,回歸pytorch,pytorch才是老紙的真愛厘线,卸載之后發(fā)現(xiàn):使用率還是90%识腿,這這這,后來想到滿了那就擴充啊造壮,于是就在網(wǎng)上找擴充根目錄分區(qū)的方法教程渡讼,然而歷史說明正是這一步開始使我踏進了深淵烦味。
網(wǎng)上搜了不少方法呼胚,發(fā)現(xiàn)許多都不好使空繁,同時分區(qū)滿了我裝個軟件都裝不了了键袱,感覺要炸蝶缀!發(fā)現(xiàn)有個說法說在拓展分區(qū)之前要先掛載平挑,于是我就嘗試著把根目錄所在分區(qū)給掛載掉了扇谣,在卸載時還提示錯誤锣尉,說device is busy
攀隔,于是網(wǎng)上找到類似如linux umount命令介紹與device is busy解決方法的答案皂贩,于是敲下了罪惡的umount -l /
,后來系統(tǒng)崩了昆汹,重啟明刷,發(fā)現(xiàn)又好了,哈哈满粗。
后來就想著硬盤F盤還有剩余空間辈末,想劃分出來給根目錄所在分區(qū),經(jīng)過嘗試之后發(fā)現(xiàn)直接劃分不行映皆,因為自己沒有搞lvm挤聘,不能通過卷組或邏輯卷相關(guān)的指令操作來進行,后來發(fā)現(xiàn)了一個可行的法子是把硬盤中根目錄所在分區(qū)位置后面的空間騰出來捅彻,然后便可以擴充了组去,把原來的數(shù)據(jù)放到其他位置就可以了,于是通過這樣的操作進行了var掛載分區(qū)的移動步淹,感覺還不錯添怔,其中主要參考的是linux(manjaro)磁盤遷移/opt /home,而在進行boot分區(qū)的移動時發(fā)現(xiàn)自己未成功進行boot分區(qū)的重新掛載,于是系統(tǒng)又崩了贤旷,重啟也報錯了,進入grub rescue模式中砾脑,此時有點慌了幼驶,后來找到類似該篇博客grub rescue救援模式的處理所說內(nèi)容,重新掛載了boot目錄,并且重新生成grub配置文件韧衣,于是問題解決了盅藻。
之后在進行home分區(qū)的操作時自己忘記了備份购桑,直接掛載和格式化掉了(通過 mkfs.ext4 /dev/sda*
),發(fā)現(xiàn)出了問題之后重新登錄都登錄不了氏淑,因為相關(guān)用戶信息都沒了勃蜘,只能進入命令行界面,同時home目錄為空假残,后來在各分區(qū)找了半天發(fā)現(xiàn)沒有找到備份缭贡,這時自己真的慌掉了,還有不少數(shù)據(jù)呢辉懒,比如項目代碼阳惹、還有博客環(huán)境配置和博客原文件等,找了半天都沒能找到可行的辦法眶俩,因為系統(tǒng)都登錄不進去莹汤,連修復(fù)軟件啥的都安裝不了,況且天色已晚颠印,于是就先睡了纲岭。
等到第二天自己想到可以在window系統(tǒng)上安裝然后修復(fù)那個分區(qū)的數(shù)據(jù)吧?于是先嘗試了DiskGenius軟件线罕,發(fā)現(xiàn)好像它識別的分區(qū)不全止潮,并且也只能恢復(fù)文件,會丟失文件名等信息闻坚,這樣也僅是得到一些文件沽翔,不是整體的恢復(fù)分區(qū),而后又下載了testdisk軟件窿凤,經(jīng)過一陣蒙蔽的操作之后仅偎,發(fā)現(xiàn)自己的D盤和E盤也不見了,趕忙重啟發(fā)現(xiàn)還是沒有雳殊,由于許多軟件都是安裝在D盤上橘沥,所以導(dǎo)致window系統(tǒng)下的環(huán)境也出問題了,要炸啊夯秃,幸虧自己的chrome瀏覽器在C盤裝的座咆,又下載了DiskGenius,發(fā)現(xiàn)還要注冊仓洼,還挺麻煩介陶,于是又嘗試下了綠色破解版,經(jīng)過掃描色建,找到了丟失的D盤和E盤哺呜,只是其他數(shù)據(jù)全部都沒有了(指manjaro系統(tǒng)下全部信息)。哎箕戳,一聲長嘆之后只能重新再裝系統(tǒng)了某残。
只是可惜了當(dāng)時探索了不少軟件国撵,同時還有不少有用的數(shù)據(jù)資料,還有自己最新的代碼玻墅,以及最新的博客環(huán)境配置文件和最新的博客原文件介牙。
而后再劃分分區(qū)安裝的時候,有了之前的教訓(xùn)和探索澳厢,自己對分區(qū)的理解更加深刻环础,于是在劃分時感覺熟悉了好多,把整個300G空間全部給新系統(tǒng)了赏酥,同時多分配了一些空間給根目錄和var目錄所在分區(qū)喳整。
后來重裝系統(tǒng),還好自己當(dāng)時寫了安裝記錄的博客在網(wǎng)上可以看裸扶,于是又重新安裝配置環(huán)境框都,配置NVIDIA獨顯,配置科學(xué)上網(wǎng)呵晨,后來心想以后再做記錄先只在簡書和有道上吧魏保,自己的博客先不管了吧,畢竟環(huán)境也丟了摸屠,能找到的是好久之前的了谓罗,要配置還挺麻煩,博客內(nèi)容自己自己也增刪改的比較多季二,再撿起來比較耗時檩咱,于是暫時就不考慮維護自己的博客了,之前也嘗試在知乎專欄和簡書上寫文章胯舷,發(fā)現(xiàn)簡書支持Markdown效果很好刻蚯,而知乎則導(dǎo)入效果很差,于是便最終選擇了簡書作為最終的自己發(fā)布內(nèi)容的平臺啦桑嘶。
后來重新參考之前提到的編譯tensorflow的那篇文章炊汹,還是只能master分支,還是要配置hosts文件中g(shù)ithub對應(yīng)域名和ip逃顶,不過編譯的還挺順利的讨便,不過還是要好久,最終吃了個晚飯以政,回來發(fā)現(xiàn)又報錯了霸褒,我真的快要崩潰了,報ImportError: No module named keras.preprocessing
的錯誤盈蛮,后來我就想是不是版本問題傲霸,于是切換r1.12和r1.10,發(fā)現(xiàn)還是報bazel.rc文件的錯,于是又切換回master分支昙啄,繼續(xù)網(wǎng)上找相關(guān)問題和答案,并在github上成功找到了答案:1.10 build fails with "No module named 'keras_applications'" ,即通過pip安裝keras_applications
和keras_preprocessing
這兩個庫寸五。
后來重新執(zhí)行編譯命令梳凛,又等待了好一會兒(比之前快多了,因為有緩存之前的編譯結(jié)果)梳杏,終于成功了哈哈哈韧拒!后來經(jīng)過測試,發(fā)現(xiàn)編譯成功十性,tensorflow已經(jīng)被正常安裝在自己的pip列表中了叛溢。
以下是耗時截圖:
安裝tensorflow的whl包后,發(fā)現(xiàn)安裝的就是現(xiàn)行版r1.12劲适。楷掉。。
這里是分區(qū)使用率截圖:
相比而言霞势,pytorch安裝就要簡單許多了烹植,并且提供了許多預(yù)編譯好的可選。
在這里自己簡單記錄一下心酸的歷程愕贡,也提醒各位看客同樣需要編譯tensorflow時留意自己的分區(qū)使用率~