Last Updated on 2021-06-28 by Clay
最近在進行深度學習的模型訓練時遇到了瓶頸,最主要是『速度』的方面 —— 訓練的速度實在是快不起來。
上網找了找大家的分享,意外看見了這個將檔案放置於『記憶體』當中,用來提高程式讀取速度的方法。這個方法聽起來實在很有意思,就研究了一下。
下面列出了我實際測試的結果,大致上分成『寫入』與『讀取』兩個部份,分別在 RAM、SSD、HDD 上進行測試。
掛載 RAM 硬碟
其實只需要透過 "mount" 指令,便可以輕鬆地建立 RAM 的硬碟。
mkdir /tmp/memory
mount -t tmpfs -o size=1G tmpfs /tmp/memory/
這樣一來,我就將 1GB 的記憶體掛載在了我所建立的 "memory" 資料夾中。接下來,我們只需要將資料放在 "/tmp/memory/" 路徑底下,就能享受 RAM 的高速度了。
為了確認是否真的有成功掛載,還是只用指令看一下比較好。
df -h
Output:
如果是剛掛載上去的,這個磁碟理應是全空著的。不過目前我將測試的檔案放在其中了,所以已經使用一部分了。
寫入速度的比較
接下來開始測試資料放在 RAM 中究竟有多快了。我有一份叫做 "test.json" 的檔案,使用 "du" 指令查看其大小:
du -m test.json
Output:
然後我分別使用 "cp" 指令,將這份檔案檔案從 HDD 移動到 RAM、SSD、另一塊 HDD。
他們速度分別為:
RAM | SSD | HDD |
5.308s | 5.781s | 7.025s |
其實 RAM 好像只有比 SSD 快一點而已,只有 HDD 明顯比較慢一些。順帶一提,為了不要讓 Cache 影響我寫入檔案的速度,我還特地使用了以下指令清理了 Cache。
sudo -i
sync; echo 3 > /proc/sys/vm/drop_caches
不知道,是否是我的實驗方法不對?
讀取速度
讀取速度的測試,我是使用 Python 程式來讀取剛剛的 "test.json" 檔。同樣,每次讀取完我都有清除 Cache。
RAM | SSD | HDD |
14.876s | 14.636s | 14.883s |
這個結果真的太糟糕了......沒有我原先想像的那麼好用。
不知道是不是我哪邊的操作方法有問題呢?我想,我可能還得研究一陣子。
卸載 RAM 硬碟
其實要移除掉也是非常簡單的,還記得剛才我掛載的路徑 "/tmp/memory" 嗎?
sudo umount /tmp/memory
只要像這樣移除掉即可。
話又說回來,其實在 Linux 當中 Page Cache 都做得很好,如無特別需求,其實似乎不用特地建立 RAM Disk 就能運行得挺流暢的了。以上是一點個人感想。