聲明:本文轉自知乎專欄千張的文章,本文只做學術交流,不做商業用途,原文請點擊文末原文鏈接。
之前看過 @pika02 在公社的帖子【Gaussian 16 在虛擬機和WSL中的相對效率】[1],測試發現 g16 在 WSL 下的效率超過了配置很麻煩的 VBox 和 VMWare,與原生 Linux 相比只損失了 ~10%。這對于筆者這種經常在本地運行一些懶得提交超算的小任務的人來說簡直是福音。另外,在開發方面,隨著 VS Code 的 Remote 功能的完善,使用 VS Code + WSL 可以帶來十分絲滑的開發體驗。完善的 GNU 工具鏈也可以讓人脫離各種閉源商業軟件的魔爪。
筆者之前一直使用 VBox,這次借著換電腦的機會,決定將工作遷移到 WSL 上。關于 WSL 的安裝,網上教程很多了,這里對于普通的步驟就只粗略講一下,重點強調一些踩過的坑,以及個人使用比較順手的工具/配置。
本文基于 Windows 10 v1909 + WSL1 Ubuntu 20.04 LTS
筆者秉持 GNU 精神,在主要功能相似時,優先選擇開源免費的軟件
筆者主要使用計算化學程序,但本文的基本配置應也適用于其他科學計算領域
安裝WSL
首先管理員身份開終端,啟用 WSL:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
重啟之后在 Microsoft Store 搜索下載 Ubuntu,筆者安裝的是 20.04 LTS 版本。
下完之后在開始菜單的程序列表里找到 Ubuntu,運行,完成安裝和用戶設置。
安裝和配置終端 - cmder
雖然 Windows Terminal 非常驚艷,但是其自定義的空間還是不夠大,而且透明效果做得不好,所以筆者還是選擇了一直使用的 cmder。直接去官網[2]下載即可。下載之后,進入設置,在 Startup--Tasks 下選擇WSL:bash即可運行 WSL 終端。但是使用過程中發現 vim 出現各種問題,具體來說包括方向鍵失靈、保存退出后直接刷掉整個緩存區等等搜了半天發現是 conemu 的兼容性問題導致的。解決方法是用 WSL 的 bash.exe代替 cmder 自帶的啟動命令。如圖,在 Command 框里輸入如下命令即可。
%windir%\system32\bash.exe ~ -cur_console:p5
在 Task parameters 里面可以替換 .ico 圖標,這樣子在任務欄里就可以顯示出 Ubuntu 的 logo 了(如果你也看膩了 cmder 自帶的 λ 圖標)。
最后,按照自己的喜好配置透明度、配色方案、字體、背景等等即可。筆者的配置是:
Font: Consolas bold
Color scheme: Babun
Active window transparency: 75
Inactive window transparency: 50
效果如圖,可以直接疊在瀏覽器或者 Zoom 上面:
為了方便使用,可以將 cmder.exe 的路徑添加到環境變量PATH,這樣就可以 win+R 輸入 cmder 直接打開終端。
安裝 X Server - VcXsrv
由于 WSL 不自帶圖形界面,所以要通過 X forwarding 轉發到 Win10 內來查看圖形界面。筆者使用的是開源免費的 VcXsrv[3]。安裝好后運行 Xlaunch,前兩步配置直接回車使用默認配置,第三步把 Native opengl 關掉(以免影響 vtk、qt 等圖形庫的使用),即可開始運行 X Server。
在 WSL 這邊:打開終端,修改DISPLAY 環境變量。可以把放到你的~/.bashrc里:
export DISPLAY=localhost:0
然后就可以快樂地使用圖形界面遼~ 這樣配置好之后感覺 XManager 全家桶完全是搶劫。
安裝桌面環境
由于可以 X forwarding,所以 WSL 也可以用桌面了。這里筆者因為主要的工作環境還是 Win10,覺得沒必要費力 tweak WSL 桌面,而且不想占太多硬盤,所以選擇了以前樹莓派上用過的 xfce4 組件。執行如下命令即可安裝:
sudo apt update
sudo apt install -y xfce4
由于桌面的圖形界面是默認全屏,如果采用 VcXsrv 的默認配置就會直接疊在 Win10 桌面上,把任務欄都覆蓋掉,影響使用。如果工作時要頻繁切回 win10,推薦另開啟第二個 Xlaunch,第一步里選擇 One large window,然后在準備開啟桌面的終端里運行export DISPLAY=localhost:1,把桌面轉發到開啟的第二個 X Server。
然后即可運行startxfce4開啟 WSL 桌面了。需注意,在 WSL 桌面里開啟的終端也要設置export DISPLAY=localhost:1,才能將 GUI 的應用開啟在 WSL 桌面這個窗口內,否則會另開一個 Win10 下的 VcXsrv 窗口。最終效果如下:
如果在 WSL 桌面里工作更多的話,可以把主要用的跨平臺軟件(尤其是 Linux 下體驗更好的,比如 VESTA、POV-Ray)都裝到 WSL 下,不在 Win 下再裝一遍了。
如果想要沉浸式體驗,就 VcXsrv 開全屏,實測延遲比微軟的遠程桌面低很多,系統占用也低。缺點是似乎長期掛機有幾率 session 掛掉,要手動重啟。另外,快捷鍵會和 Win10 沖突,需要自定義一下常用的快捷鍵。
如果覺得極簡桌面不過癮,想要更加原汁原味的體驗,可以選擇原生 Ubuntu 桌面 或者 Gnome,安裝方法是相似的。
瀏覽器設置
需要注意,WSL1 不支持目前的幾個主流瀏覽器聯網(firefox、chromium)。筆者找到的能使的只有比較非主流的 basilisk、palemoon、seamonkey。這里筆者選擇 seamonkey:
cat <<EOF | sudo tee /etc/apt/sources.list.d/mozilla.list
deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main
EOF
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2667CA5C
sudo apt-get update
sudo apt-get install seamonkey-mozilla-build
安裝好后運行seamonkey即可。界面很簡陋,用起來有點兒卡頓,但總算能上網了:
不順手的話可以干脆放棄在 WSL 下看網頁,把瀏覽器的默認命令修改成 Win10 里的瀏覽器路徑,類似下圖:
這樣的話,WSL 桌面里點開瀏覽器會直接跳回你設置的 Win10 下的瀏覽器。
文件路徑
WSL 安裝在你的系統盤里,其根目錄路徑是:
C:\Users\用戶名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs
可以把它登記到書簽欄,方便跳轉。在 windows explorer 里打開,窗口間直接拖動文件即可完成 WSL 與 Win10 間的傳輸。
在 WSL 下訪問 Win10 的文件需要通過 /mnt/,為了方便訪問,可以通過ln -s命令創建一個軟鏈接。File Manager 里也可以開兩個窗口(一個Win,一個WSL)拖拽傳文件??上遣荒芟裉摂M機一樣從Win Explorer 直接往 Linux 桌面里拖了。
連接服務器
主要的計算任務當然還是交到服務器上的。WSL 自帶 SSH,就不需要像以前一樣再配置 PuTTY 之類的了。為了不用每次輸密碼,首先生成本機的 key:
ssh-keygen -t rsa
然后把公鑰登錄到服務器上:
ssh-copy-id [username]@[server.ip]
還想繼續省力氣,可以在 ~/.ssh/config 里設置服務器的信息,這樣就不用每次輸一遍用戶名和地址了。設置完之后,可以直接ssh -X [Host]進行連接(X 表示開啟 X forwarding)。scp 傳輸文件也會更方便。
如果更習慣圖形界面管理文件的話,推薦開源免費的 WinSCP[4]或 FileZilla[5]。
VS Code - Remote WSL
裝過 WSL 之后開 VS Code 應該會提示安裝這個插件,沒有提示的話就手動搜索安裝
把 VS Code 加進環境變量之后,在 WSL 終端下直接code xxx即可開啟 VS Code 以 Remote 模式編輯該文件。此外 VS Code 里也可以選擇 WSL 終端了(雖然沒有 cmder 好用,但有時候挺方便的)。
在 Win10 下可以點擊左下角開啟 Remote,類似 Remote SSH,左下角變綠表示成功連接。
安裝 Open MPI
首先,如果程序沒有特殊要求,強烈建議安裝最新版本,充分利用你的硬件(尤其當你用的是較新款的 CPU):
sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev
如果有特殊要求,那就去 OpenMPI 官網[6]下載特定版本,解壓后進去運行以下命令安裝。注意要提供 prefix 路徑否則會覆蓋系統里的 OpenMPI。
./configure --prefix=/xxx/ --disable-builtin-atomics
make all install
由于安全原因,WSL ubuntu 的/proc/sys/kernel/yama/ptrace_scope默認值為 1,這導致并行時進程之間共享內存出現問題,運行 OpenMPI 程序會出現類似如下報錯:
3 more processes have sent help message help-btl-vader.txt / cma-permission-denied
WARNING: Linux kernel CMA support was requested via the
btl_vader_single_copy_mechanism MCA variable, but CMA support is
not available due to restrictive ptrace settings.
對于小任務影響不大,但是對于內存需求大的任務,內存共享不通暢會導致總占用爆炸。此問題的解決方法是把 ptrace_scope 的值改為 0:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
(持續更新,未完待續)
參考
1.Gaussian 16 在虛擬機和WSL中的相對效率 http://bbs.keinsci.com/thread-16405-1- 1.html
2.Cmder https://cmder.net/
3.VcXsrc https://sourceforge.net/projects/vcxsrv/
4.WinSCP https://winscp.net/eng/docs/introduction
5.FileZilla https://filezilla-project.org/download.php
6.OpenMPI https://www.open-mpi.org/software/ompi/v4.0/
1.1 環境要求:
1)Win7/64
2)內存6G以上
3)硬盤150G的空間及以上
4)Virtual Box 4.3.10以上
5)Sercure CRT
6)Xmanager 3以上
1.2 虛機設置
Node1:
1)創建一個RAC目錄,下屬三個子目錄,分別是node1,node2,sharedisk。
2)全局設定很重要,它指向了RAC目錄,只要備份該目錄,就是一個RAC全備。
3)開始導入,路徑指向數據源。
導入目的地,雙擊內存設置,改為1580MB
1580M是一個較低的值,6G內存使用較合適,如內存8-10G較大可以再開大點。
確認導入目的地正確,缺省為全局設置。
Node2:同上
啟動 node1、node2
root登陸,密碼beijing
the end ?。?!
@jackman 共筑美好!