[20200316] Device rebooting during deep learning training

[前言]

一直有個壞習慣就是看到值得一看的文章就會先加到我的最愛蒐藏起來,想說以後再看,不過總是沒有行動,日積月累下我的最愛就跟個垃圾桶沒什麼兩樣……

打這篇文章的當下本人坐在實驗室裡面,覺得剛吃飽好累喔不想做正事,所以開始清我的最愛清單,清阿清啊發現了有兩篇是之前遇到的問題,原本打算要來寫blog記錄下來的可是居然忘了,所以來寫篇廢文記錄一下順便讓自己不要那麼睏(對我來說寫blog比做正事好多了)。

[問題敘述]

前陣子lab server發生了一個很奇怪的現象,當有多人同時在train deep learning model的時候,可能train個一陣子server就會自動重開,一開始也不知道為什麼會這樣,不斷的透過排除法來尋找問題在哪裡,只差沒拿綠色乖乖放在server上了 繼續閱讀 “[20200316] Device rebooting during deep learning training"

[C/C++]Optimize string use: a case study閱讀筆記

文章網址: Optimize string use: a case study
Hackmd好讀版: [閱讀筆記]Optimize string use: a case study


最近真是挫折,修了C越覺得自己其實不懂C,修了OSDI的課發現越來越不懂OS…不過越是不懂就越要努力把知識補起來!
這篇是一篇介紹如何最佳化string coding(C/C++)的文章的閱讀心得&重點摘要,以及自己的一些深入研究

該篇文章很長,我也還沒看完,不過這裡記錄到了原作者的第一個最佳化case study的重點和心得。以下有著大量的文字敘述以及程式碼,請小心服用,不過看完應該能學到不少。 繼續閱讀 “[C/C++]Optimize string use: a case study閱讀筆記"

[DL]論文速速讀: ReZero is All You Need: Fast Convergence at Large Depth

[簡介]

論文網址: ReZero is All You Need: Fast Convergence at Large Depth

20200310發在arXiv的論文,主要是提出了一種Residual blocks的變形,使得在深層模型的時候也能夠有效地進行back propagation,而盡量降低gradient vanish或gradient exploding的影響,並且能夠加速收斂的速度。簡單,卻很有效。 繼續閱讀 “[DL]論文速速讀: ReZero is All You Need: Fast Convergence at Large Depth"

[OSDI]Qemu Emulator on Raspi3

最近在搞如何在Qemu上模擬Raspi 3,搜尋了一下發現在Qemu2.12後的內建支援raspi3,而之前的版本則需要另外設定一些東西(參考QEMU Raspberry Pi 3 support)。

我打算用2.12版本的Qemu來免除額外設定的麻煩,但是明明Qemu版本都已經3.x了,當我用apt-get install安裝的Qemu版本卻只有2.11,上網找了很久後發現原來我的作業系統是Ubuntu 18.04 TLS,綁定的Qemu是2.11版本,如果想要更高的版本就需要自己build或是用別人的PPA 繼續閱讀 “[OSDI]Qemu Emulator on Raspi3″

[20200308]2020微軟一日實習生(RDI)

87179746_3387713074578253_2576386941968711680_n因為一些機緣報名了2020的一日微軟實習生,是一個免費體驗的活動,可以更加了解微軟實習生的資訊以及參觀微軟總部。當初是在粉絲專頁看到相關的報名資訊的,如果有其他資訊好像也都是在這裡公告。

報名前一個禮拜收到了主辦方的來信,由於我是報名RDI(Research Development Intern,研發助理),所以他們事前寄了一封信要大家先去寫幾題題目 繼續閱讀 “[20200308]2020微軟一日實習生(RDI)"

[C]Bit fields介紹

[前言]

之前在上一篇介紹linux kernel中build_on_zero的時候有使用到了bit fields技巧,然後我很懶的丟了一個超連結就代過了,後來越想越覺得自己對這個概念還沒是很清楚,所以痛定思痛來寫一篇介紹文順便把它搞懂。

[Bit fields]

bit fields是什麼? 簡單來說是可以在struct內以bit為單位來指定變數,考慮我們有一個需要紀錄4個flag的struct,如果都用bool(p.s. 題外話,c99後才在stdbool.h定義了bool這個type,我自首,我以前都沒注意…)來儲存的話則需要4*1byte = 4bytes。但是其實每個flag只有true/false,也就是說只要一個bit來紀錄就可以了,所以我們可以用一個byte的4個bits來記錄這些flag,總共只佔了1byte。 繼續閱讀 “[C]Bit fields介紹"

[C] ARRAY_SIZE macro in linux kernel

前言

為什麼c語言使用function在傳參數的時候,如果傳入一個array會無法正確得到array大小呢?

這其實跟array decay有關,在linux kernel中為了防呆會加上一些code來防止產生這樣的問題(透過在compile time就產生error),接下來從array size該如何取得,到linux kernel的macro來簡單介紹。

array size & sizeof()

在寫c的時候,如果想知道一個array的大小可以這樣寫


int main()
{
    int arr[3] = {1,2,3};
    printf("%zu\n", sizeof(arr)/sizeof((arr)[0]));
    return 0;
}

可是當arr不是一個array,而是一個指向該array的pointer時(pointer to array),就會有問題。由於pointer的大小是4 or 8 bytes(取決於OS是32bit或64bit),所以除以一個array(arr[0])的話就會得到不一樣的結果,例如下面就會得到2而不是3。 繼續閱讀 “[C] ARRAY_SIZE macro in linux kernel"