就很煩啊,裝jdk裝到去重裝系統,裝python配置要環境,檢測還是出錯,做完本體結果到下一步jena不能運行,還找不到問題,就真的很崩潰啊,感覺天生學不會計算機一樣,有關計算機的任何問題我來做都會出現漏洞


兄弟,你寫過計算幾何嗎?

eps=1e-6,WA!

eps=1e-8,AC……

從而磨練出一顆強大的心臟233

——————————

是否崩潰取決於問題的價值,

如果幾個小時就克服了關鍵問題在數據集上實現SOTA/驗證理論觀點/實現產品特色,

那就會很開心。

如果幾小時後發現錯誤在於屏幕髒了導致自己以為已經寫了分號(其實沒寫),

那就會想砸機器。


早期遇到這樣的情況會煩惱,晚上加班卡住了,叫天天不應,叫地地不靈。

直到我發現了stackoverflow。

看了上面各種解決問題的神奇方法,我腰不酸了,腿不疼了,說話利索了,做人自信了!

我發現過(搜到過)java虛擬機問題,eclipse的bug,三方控制項的兼容性問題,我搞定過(粘貼過)巨複雜的linux部署腳本和sql數據遷移腳本。

在stackoverflow各位大俠眼裡,各種bug都不是事情,即便有搞不定的bug,大神也會理直氣壯地告訴你:

這個bug就是修不好的,不用多想了。

再小眾的軟體問題,總有人跳出來解答。我之前還遇到pegasus控制項作者親自下場解答一個圖像水印問題。

所以要好好學英語,可以節約生命啊。


說兩個以前在華為的時候遇到的問題。

其實,在通信設備上寫代碼是比較困難的。舉個例子,你如果在windows操作系統上寫代碼,解引用空指針的話會出什麼問題呢?如果是win98以前的操作系統,大概率會藍屏。winxp以後的操作系統會彈出一個消息框,提示你某某地址非法訪問。

通信設備上的情況就類似於win98,你要是解引用空指針,機器就複位給你看,你要是在初始化裡面解引用空指針,那麼機器就變成磚給你看,那得在BIOS狀態下「刷機」才能讓機器復活。

當然,你要是解引用空指針,這種容易重現的bug還是很容易解決的。困難的是有些時靈時不靈的情況,比如把模塊的指針放在map裡面,中途還有可能去替換map裡面的值,替換的時候還可能是多線程。這樣的bug,有時候一周崩潰一次,有可能三個月才崩潰,還有可能一年才崩潰,具體什麼時候崩潰,得看代碼運行的時候有多「巧妙」。這類問題,每個組都有老專家專門坐診,解決其起來也是得心應手。

言歸正傳,鋪墊了那麼多,說一下,我遇到的一個問題。當時,我還是一個新員工,給的交付任務非常少,完整的代碼也就140行的樣子,前面80行代碼寫完後,我就上設備驗證了一下,完全ok,一點問題都沒有。當我把所有代碼都寫好了以後再上設備,設備能夠正常啟動,但是我不能對設備下發任何命令,一下發,設備就崩潰了。抱著謙虛謹慎,自己最菜的心態,仔細的排查了下代碼,覺得沒有任何問題,再上設備驗證,情況依舊。這時候,我求助了一位工作十二年的老員工,他看完代碼也覺得完全ok,然後編譯了個版本,換到另一台設備上,下發命令依舊崩潰。然後,他又找了另一位「老專家」來坐診,看了一圈代碼,完全ok,又編譯一個版本上設備,崩潰。。。此時,激起了他兩的戰鬥慾望,我的電腦就被他兩霸佔了,把我寫的代碼刪除,上設備,運行正常。然後把我寫的一部分代碼改進去,運行正常。全部改進去,設備又崩了。修修改改就到了凌晨1點多,前後持續了7個小時,最後,某個「老專家」提出,我們把這個代碼重寫一遍,然後就照著我的邏輯重寫了一遍,變數名稱都復刻了一下,重新編譯,運行正常。再對比一下兩份代碼,除了有幾個換行符的差別,其餘一模一樣,眼看著時間太晚了,他們讓我把代碼備份一下,等明天了再研究,不過我備份這份代碼直到我離職的時候也沒有人再去研究過,也不知道具體出了什麼問題,依舊是一個未解之謎。

說下另一個事。也是在開發過程中,突然發現設備會不定期的複位,這種情況,大概率就是內存問題,排查了一圈,找不到原因,問題就暫時擱置了。後來,這個複位問題時現時不現,測試那邊的PL就覺得問題挺嚴重,上升到了產品經理那裡,接下來經理就給開發一頓懟,讓開發儘快解決,否則就如何扣獎金、如何發郵件通報批評。。。好吧,剛開始,開發這邊也不足夠重視,就隨便丟給了一個組讓儘快搞定,組裡排查了半天,得出的結論是,我們的代碼沒有問題,是下發的命令的模塊有問題。接下來,就把問題拋給了另外的項目組,這個項目組覺得下發的命令沒有問題,是處理命令的代碼有問題,又把問題給踢回來了(吐槽一下,這樣的內耗非常嚴重)。前後踢了幾個回合,沒有誰佔到便宜,問題又拋回給了經理,經理又把兩個組的人拉起來一頓懟,最後決定讓兩個組聯合定位。這兩個組的員工都覺得,一定是對方的代碼有問題,所以也沒有排出最強陣容來對待,結果兩天過去了,一點頭緒都沒有。接著,產品經理怒了,把這事直接捅到了更高的領導那裡。大領導說話就是好使,馬上就指名要哪幾個「老專家」放下手中的活,優先解決這個複位問題。接下來的具體細節我就不太清楚了,我只知道大概五天後,我收到了一個通報表揚的郵件,「表揚xx在xxx產品複位問題中,身先士卒,用精湛的技術定位了1bit內存溢出問題」。但是這五天我是看著這位老專家怎麼過來的,一個41歲的人了,天天定位問題到凌晨2點,然後在摺疊床上睡到6點鐘,起床又接著看代碼。問題解決那天,他請假回去休息,隔了兩天才又來上班。

說了那麼多,我想表達的就是,真正熱愛計算機技術的人,遇到問題是會激發戰鬥慾望,並不會崩潰。


才幾個小時,我最長試過幾個星期的。


會。

之前使用pytorch的時候,代碼總是會隨機出現錯誤,有時候運行五分鐘就報錯,有時候一整天都不會。

Segmentation fault (core dumped)

把代碼拆出來,一個個模塊檢查沒問題,拼在一起就出錯了。

把整個代碼都檢查了好幾遍,沒問題,運行就隨機出錯。

然後開始降低pytorch版本,降低到某個古老版本的時候沒啥問題,然而我其他模塊不太支持該版本。繼續找問題。

後來就去stackoverflow和github找,有找到類似的,但是解決辦法並沒有用(吐槽一下github的issue搜索,感覺有點不準)。

試了試gdb

Thread 46 "python" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffe5a9de700 (LWP 19345)]
0x00007fffbc46cbfb in std::pair&, bool&> std::_Hashtable&, std::__detail::_Identity, std::equal_to&, std::hash&, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits& &>::_M_emplace&(std::integral_constant&, c10::Stream const) ()
from .../site-packages/torch/lib/libtorch.so
(gdb) where
#0 0x00007fffbc46cbfb in std::pair&, bool&> std::_Hashtable&, std::__detail::_Identity, std::equal_to&, std::hash&, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits& &>::_M_emplace&(std::integral_constant&, c10::Stream const) ()
from /home/xxxxx/anaconda3/envs/py36/lib/python3.6/site-packages/torch/lib/libtorch.so
#1 0x00007fffbc464380 in torch::autograd::Engine::evaluate_function(torch::autograd::NodeTask) ()
from /home/xxxxx/anaconda3/envs/py36/lib/python3.6/site-packages/torch/lib/libtorch.so
#2 0x00007fffbc466234 in torch::autograd::Engine::thread_main(torch::autograd::GraphTask*) () from /home/xxxxx/anaconda3/envs/py36/lib/python3.6/site-packages/torch/lib/libtorch.so
#3 0x00007fffe6e5ad1a in torch::autograd::python::PythonEngine::thread_init(int) () from /home/xxxxx/anaconda3/envs/py36/lib/python3.6/site-packages/torch/lib/libtorch_python.so
#4 0x00007fffe691e19d in std::execute_native_thread_routine (__p=0x7ffba4f7a010)
at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libstdc++-v3/src/c++11/thread.cc:80
#5 0x00007ffff7bbd6db in start_thread (arg=0x7ffe5a9de700) at pthread_create.c:463
#6 0x00007ffff78e688f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

至此已經熬夜搞了三天,終於知道錯在哪裡了,原來是autograd出了點小問題。

但是autograd代碼我沒看過啊。

拿著gdb debug log繼續找issue,找到一篇issue,log有點類似,最後給的方法是更新到pytorch最新版本即可,然而七早八早試過了。

最後開issue,一天後issue 被加上了high priority 標籤,幾天後回了一個「你試試nightly版本」。問題解決。

前後耗時一周。

我發誓如果我找到相關方面的工作了,我一定要把底層吃的透透的,下次遇到這種情況直接貢獻代碼,不再依賴工作人員!


推薦閱讀:
相关文章