• Gaussian的安裝方法及運行時的相關問題

    注:筆者在寫這篇文章的時候,已經盡本人最大努力考慮到最初級的計算化學工作者理解能力的最底線,請睜大眼睛萬分仔細一個字一個字過腦子地閱讀本文5遍以上,只要理解能力正常的人100%能裝上!如果還裝不上,那么友情建議你及早改行成和計算模擬完全無關的領域,肯定能獲得比搞計算化學更大的成果(也不要指望看網上其它文章就能裝上,因為本文已經是網上關于裝Gaussian的文章當中最詳細的了)。

     

    Gaussian的安裝方法及運行時的相關問題

    文/Sobereva@北京科音

     First release: 2018-Sep-5  Last update: 2022-Nov-4


    Gaussian是目前最流行、用戶最多的量化程序,從《2018年度計算化學公社杯最常用的量子化學程序和DFT泛函投票結果統計》(http://www.shanxitv.org/420)的統計就可見一斑。很多初學者在安裝Gaussian時總是遇到各種問題。網上有大量烏七八糟的關于安裝Gaussian的中文資料,極少有完全正確的,嚴重毒害Gaussian初學者,導致他們繞了大量彎路。鑒于筆者答疑過程中關于安裝Gaussian的問題出現頻率很高,這里就說一下最正確的安裝Gaussian的方法,以正視聽,同時也說一些常見的相關問題。如果你在網上看到的安裝步驟與本文不同,那么要么有多余的步驟,要么是錯誤的,導致配置完了之后Gaussian都沒法完全正常運行。下文當中每一個空格都要看清楚,如果你視力太差看不清楚空格,可以從本文當中直接復制命令。

    PS:如果你是幾乎零基礎想開始上手做量子化學計算的人,想最好、最快速、最系統、最正確地學怎么用Gaussian做量子化學計算,十分建議參加北京科音初級量子化學培訓班,見http://www.keinsci.com/workshop/KEQC_content.html的介紹和《談談學量子化學如何正確地入門》(http://www.shanxitv.org/355)。


    1 在Linux下安裝和運行Gaussian

    1.1 幾個Linux常識

    考慮到一些Gaussian使用者是Linux初學者,為便于他們順利安裝Gaussian,這里先普及幾個常識。

    關于shell:Linux下有很多種shell,諸如bash、csh、ksh等,相當于不同的文本終端的界面。不同的shell下一些命令不同,比如設置環境變量,在bash里用export命令,而在csh里用set命令。其中Bash是最常見的shell,也是大多數Linux系統默認的shell。如果你不確定你當前用的是什么shell的話,可以在Linux終端里輸入echo $SHELL看顯示的是什么。本文假定大家用的是bash,如果用的不是bash,也可以在終端里輸入bash切換成bash shell。

    關于用戶主目錄:Linux下每個用戶都有自己的主目錄。默認情況下,你以命令行方式登錄系統后,你當前所在的目錄就是用戶主目錄,可以敲pwd命令顯示當前的目錄。如果你是普通用戶的話,那么主目錄將為/home/[用戶名]/。如果你是root的話,那么主目錄就是/root/。

    關于文件權限:Linux下每個文件都有稱為權限的屬性,可以用chmod命令來修改。權限包括是否可執行、是否可讀取、是否可修改。比如chmod +x ./niconiconi就會把當前目錄下的niconiconi加上可執行權限,再比如chmod 750 /sob/yoshiko.exe命令就會把/sob/yoshiko.exe文件設為750權限。這里750的百位數、十位數、個位數分別對應這個文件對于當前用戶的權限、對于與當前用戶同組用戶的權限、對于其它組用戶的權限。7對應完整的權限,即可執行、可讀取、可寫入,5代表可讀取、可執行,而0代表所有權限都沒有。更多關于chmod的知識請自行google。

    關于.bashrc文件:每個用戶主目錄下都會有.bashrc文件,這是個文本文件,里面記錄了當你每次登錄bash shell的終端的時候都會自動執行的命令。因此如果有些命令你希望每次登錄終端時都能生效,那么把命令寫入.bashrc文件即可。.bashrc文件里有一些自帶的內容,那些都不用管,自己加新的命令往此文件末尾添加即可。Linux下所有開頭為.的文件都是隱藏文件,直接用ls命令看不到,而得用諸如ls -a才能看到。如果你是在系統自帶的圖形界面的文件瀏覽器下,得按一次Ctrl+H才能看到隱藏文件。顯然,.bashrc文件也是個隱藏文件。


    1.2 Gaussian的安裝

    假設當前用戶名是sob,要把Gaussian安裝到自己的主目錄下,且用的是bash,那么安裝過程為:

    把Gaussian壓縮包解壓到/home/sob/目錄下

    建立一個文件夾用于儲存Gaussian運行過程中產生的臨時文件,位置隨意。比如此例我們建立/home/sob/g09/scratch。

    用vi或者gedit等文本編輯器打開/home/sob/.bashrc,在里面加入以下語句然后保存文件。
    export g09root=/home/sob
    export GAUSS_SCRDIR=/home/sob/g09/scratch
    source /home/sob/g09/bsd/g09.profile
    其中,g09root環境變量用來說明Gaussian目錄被放在了哪個目錄下。GAUSS_SCRDIR環境變量用來說明哪個文件夾作為臨時文件夾。source命令用來執行Gaussian自帶的腳本文件,其中包含了各種配置Gaussian運行環境的命令。

    重新進入終端使以上內容生效(如果你是用Linux圖形環境,就關閉終端窗口,然后重新打開。如果你是通過ssh方式登錄服務器,就斷開連接,然后重新連接服務器)

    Gaussian目錄下的Default.Route用來設定默認用的計算資源(如果沒有此文件就新建一個),-M-設置默認用的最大內存量(一般用MB或GB為單位,也可以用MW和GW,1MW=8MB、1GW=8GB),-P-設置默認用多少CPU核數來并行計算。比如我們想默認用36個核心、最大60GB內存做計算,就在/home/sob/g09/Default.Route里面寫入以下內容
    -M- 60GB
    -P- 36
    此文件中的設置優先級低于輸入文件里的%mem和%nproc設置。因此,輸入文件里沒寫%mem的時候才會用這里的-M-設置,輸入文件里沒寫%nproc的時候才會使用這里的-P-設置。如果你既沒在這里設-P-也沒寫%nproc,那么程序只用單核計算。如果你既沒在這里設-M-也沒寫%mem,那么G09最多用256MB內存,G16最多用800MB內存(注:值得一提的是G16 C.01有bug,Default.Route里的-M-不生效,必須自己靠%mem方式定義內存。其它版本Gaussian沒這個問題)。

    最后,切換到/home/sob/g09/目錄,運行chmod 750 -R *命令,之后Gaussian就可以使用了。這里-R *代表對當前目錄下所有文件和所有子目錄下的文件都設置權限。

    如果你用的是Gaussian 16,只需把上面過程中所有g09改成g16即可,其它沒有任何差別。

    友情提示:默認情況下,當Gaussian任務運行中途中斷,在GAUSS_SCRDIR環境變量設的臨時文件夾里就會殘留當前運行時生成的臨時文件,文件名是任務的pid號。日積月累,可能此目錄下的殘留的臨時文件體積會巨大,把硬盤占滿,導致之后的各種Gaussian任務運行一開始就失敗。因此,建議定期把臨時文件夾里的內容清空,但不要在有任務運行的時候清理(或者,至少清理的時候別清掉當前任務對應的臨時文件。用top或ps命令可以查看pid號)。

    PS 1:網上一些烏七八糟的介紹安裝Gaussian的文章中還說要設定PATH、LD_LIBRARY_PATH、GAUSS_EXEDIR之類的環境變量,這是完全多余的。打開g09.profile看一眼就知道,這些環境變量在profile文件里都會自動設好,因此按照前文source一遍.profile文件就完事了,根本沒有絲毫必要手動去設那些環境變量。本文介紹的絕對是步驟最少而且最正確的安裝步驟。

    PS 2:如果要在集群中給所有用戶安裝公用的Gaussian,可參考http://bbs.keinsci.com/thread-14301-1-1.html


    1.3 Gaussian在Linux下運行的命令

    這里順便提一下Gaussian在Linux下的運行方法。常見有以下幾種,test.gjf是輸入文件
    g09 < test.gjf > test.out    (信息都輸出到test.out里。末尾可以再加上&令任務在后臺運行)
    g09 < test.gjf |tee test.out (信息輸出到test.out的同時也同時輸出到屏幕上)
    g09 test.gjf  (輸出文件將默認為當前目錄下的test.log)

    以上面第1種或第3種方式運行時,如果你又想把輸出信息在屏幕上不斷同步顯示了,那么可以運行tail -f test.out。

    使用SSH遠程登錄服務器時,如果提交了Gaussian任務,則與服務器連接中斷后任務也相應地中斷。為了能讓任務在斷開連接后也能一直在服務器上繼續跑完,提交任務時應當寫
    nohup g09 < test.gjf > test.out &
    并且退出時要用exit命令先優雅地斷開連接,而不要直接關終端。這樣任務就會在服務器上繼續跑直到完成。

    從G16開始,如果在gjf里沒定義%nprocs、%cpu、%mem,也可以在運行命令里方便地直接指定,比如
    g16 -p=16 -m="40GB" < love.gjf > love.out
    相對于定義了%nprocs=16和%mem=40GB。再比如
    g16 -c="0-47" < live.gjf > live.out
    相對于定義了%cpu=0-47只在第0~47號CPU核心上計算。命令行里直接指定參數的優先級高于Default.Route。


    1.4 Gaussian運行的幾個常見問題

    (1)運行時提示files in the gaussian directory are world accessible. this must be fixed
    這說明你沒做chmod 750 -R *這一步。Gaussian如果發現其可執行文件對于所有用戶都可以訪問時就不干,這是Gaussian的一個莫名其妙、很固執的地方。

    (2)運行時提示Error: illegal instruction , illegal opcode
    這說明Gaussian和你的CPU不兼容,確切來說,是你的CPU太老,不支持Gaussian在開發者編譯程序的時候使用的指令集。比如Gaussian 16有利用較新的AVX2指令集的版本,也有不利用AVX2指令集的版本,前者運行速度更快。如果你用的是前者,而你的CPU較老,比如是XEON v3及之前系列的服務器CPU,或者你用的是Intel的消費級的CPU而型號是3xxx及之前的,由于不支持AVX2指令集,運行就會報上面的錯誤。解決方法就是購買非AVX2版的Gaussian 16或者換機子。PS:什么CPU支持什么指令集,可以去看我的硬件資料庫(http://www.shanxitv.org/datasheet.rar),對于Intel的CPU也可以去查Intel ARK(https://ark.intel.com/)。

    還有一種情況是你用的是較新的AMD的CPU,比如ZEN2架構的,雖然支持相應的指令集,但由于編譯器與CPU架構之間的兼容問題導致以上報錯。可嘗試在運行Gaussian前通過這行命令定義環境變量:export PGI_FASTMATH_CPU=sandybridge。

    (3)運行時該用多少CPU核心?
    如果你的機子打算只跑一個Gaussian任務,那么建議CPU有多少物理核心就用多少核數來并行,這樣通常最快。若有額外CPU核心閑著也是白白浪費。注意,對于采用了超線程(HT)技術的CPU而且管理機子的人沒有把超線程關閉的話,邏輯核心數會是物理核心數的兩倍。如果你搞不懂這一點,務必看《正確看待超線程(HT)技術對計算化學運算的影響》(http://www.shanxitv.org/392)。比如,如果你的機子是雙路2696v3 CPU,一共有36個物理核心,對應72個邏輯核心,而且你平時只跑一個Gaussian任務,那么Default.Route里的-P-或者輸入文件里的%nprocs后面應該寫36。

    計算速度和使用的核數絕對不是理想的線性的正比關系。并行的核數越多,繼續增加核數使速度提升的幅度就越低,對于Gaussian 16并行核數用到50核左右就接近速度的極限了(繼續提升的余量看具體計算任務)。即曰,雖然并行核數越多總耗時越低(不排除極個別例外),但并行效率越低。所以,如果CPU的核數很多,比如你用的是一個2*48=96個物理核心的雙路服務器,同時用跑兩個48核并行的任務遠比跑一個96核的任務更能充分發揮CPU的性能。注意同時跑兩個任務時建議把兩個任務用%cpu分別綁定在兩個不同CPU上以減少資源爭搶拖慢速度,詳見《淘寶上購買的雙路EPYC 7R32 96核服務器的使用感受和雜談》(http://www.shanxitv.org/653)第6節關于跑Gaussian部分的文字。如果機子核數特別多,比如是128核服務器,有大量任務要跑,那么還可以同時跑4個乃至8個任務,CPU利用程度會更充分。注意所有Gaussian任務調用的核數的總和不要超過機子的物理核心數,且分配給各個任務的可用內存量的總和不能超過空余物理內存量。還要注意有些任務,比如后高階的HF,不僅特別耗內存,而且讀寫硬盤量往往非常大,這樣的任務別一次跑好幾個,要不然可能內存不夠直接崩潰,或者在硬盤讀寫上嚴重爭搶,導致哪個任務都巨慢。

    當設定的并行核數超過64時,對于Gaussian 16 B.01及之前的版本來說,Gaussian可能一上來就會報錯。解決辦法是在~/.bashrc里添加比如export OMP_THREAD_LIMIT=256,這樣就把并行核數上限提升到256了,因此就可以使用超過64核并行了。

    (4)運行時該分配多少內存?
    Gaussian里同一個任務可能有不同算法,有的速度快但是耗內存高,有的算法速度慢但是耗內存少,如果你的內存給得足夠大,Gaussian往往會自動選擇速度最快的算法。而且對于有的算法,當可用內存較大時,計算量就會較小。因此,一般建議是有多少空余物理內存,就分配多少內存給Gaussian。何況,有些任務本身就特別耗內存,內存分配小了則Gaussian根本沒法完整執行完此任務,或者程序會自動降低并行線程數來降低內存消耗,使得任務在有限的內存量下得以算完,但顯然會因此導致耗時增加。如果你的機子里打算只跑一個Gaussian任務,那么把實際物理內存量中扣除一部分分配給操作系統和后臺任務的,其余部分都給Gaussian即可。為穩妥起見,我建議把90%左右的物理內存分配給Gaussian。如果內存分配量超過了空余物理內存,將導致程序運行一開始就會報錯,或者程序可能會試圖使用虛擬內存(即把相對來說速度很慢的硬盤虛擬成內存來用)而導致計算速度被嚴重拖慢。如果你要跑多個Gaussian任務,那么所有任務分配的內存量的總和不應當超過空余物理內存量。

    給Gaussian分配的內存量是Gaussian對內存使用量的上限,不是說分配多少就都會被占滿。諸如普通泛函的DFT單點任務(假設以默認的direct SCF方式運行時),由于其算法原因,注定就占不了什么內存,所以你分配200GB可能實際也只會占用300MB。

    PS:有興趣的讀者不妨看看《硬盤速度與內存容量對量子化學計算速度影響的測試》(http://www.shanxitv.org/397),里面有一些關于內存分配量對計算速度影響的測試。

    我老看到有初學者,不知道為什么,做Gaussian計算時分配的內存量超級吝嗇!常看到有人比如用36核做計算,內存只分配少得可憐的10GB甚至6GB,非常莫名其妙!有36核的機子的內存總量怎么可能連64GB都沒有?機子里那么多的空余內存不利用起來留著干嘛?明明把更多的內存給Gaussian不僅沒害處,還往往能加快計算,干嘛偏偏就給一點點內存?到底在想什么?最最最最起碼,用N核并行,也要給N GB內存,否則且不說速度,對很多耗內存略多的任務就連正常算完都做不到。

    (5)如何在機子里令Gaussian 09和16并存?
    比如你把g09和g16都放在了/home/sob下,為了能夠令g09和g16都有可能被使用,你可以在.bashrc文件中加入比如以下內容
    export g09root=/home/sob
    source /home/sob/g09/bsd/g09.profile
    #export g16root=/home/sob
    #source /home/sob/g16/bsd/g16.profile
    export GAUSS_SCRDIR=/home/sob/g09/scratch
    其中#用來注釋,因此凡是前頭帶#的行,說明此行在當前情況下不生效。因此,當前情況只能用g09而不能用g16。如果你接下來想改用g16,那么就修改.bashrc文件,把g16對應的兩行前頭的#挪到g09對應的兩行的開頭,然后保存文件,重新進入終端,此時g09就沒法用了,而g16則可以使用了。

    由于g09和g16在一些運行環境的配置上是共通的,沒有辦法同時令g09和g16命令都可以正常使用。

    PS:實際上,每次運行bash命令,也會把.bashrc文件里的信息執行一遍,但在前面的敘述中,都是通過重新進入終端來使.bashrc內的信息生效,因為這樣做是最保險的。這是考慮到g09或g16.profile的某些命令可能是對環境變量里的內容進行追加,而不是重設。只有重新進入終端,那么當前的環境變量和只執行過一次profile里的配置命令才是相同的,才可以嚴格確保g09和g16不會在運行時候出現混亂。

    (6)我運行formchk命令,怎么提示找不到命令?
    這說明你沒有嚴格按照前文的方法配置Gaussian(可能你被網上的一些文章坑了)。

    (7)運行一開始提示此類報錯怎么回事?
     Entering Gaussian System, Link 0=g09
    PGFIO/stdio: No such file or directory
    PGFIO-F-/OPEN/unit=11/error code returned by host stdio - 2.
     File name = /sob/g09/scratch/Gau-75009.inp
    這說明GAUSS_SCRDIR環境變量所指向的路徑(比如當前為/sob/g09/scratch)目前不存在,應當仔細檢查路徑。另外,如果GAUSS_SCRDIR環境變量指向的是一個雖然存在,但是你沒有可讀寫權限的路徑,Gaussian運行時由于沒法創建臨時文件,顯然也會運行失敗。

    (8)運行一開始報錯galloc:  could not allocate memory
    說明你設Gaussian內存使用量上限過大了,超過了實際可分配的內存量。雖然如前所述,不是你給Gaussian分配多少內存Gaussian就會實際用多少(計算過程中內存實際使用量可以在top命令里看),但是Gaussian會在計算一開始就向系統請求你設的內存量,如果發現沒法分配那么多就直接報錯。



    2 在Windows下安裝和運行Gaussian

    Windows版Gaussian的安裝很簡單,啟動安裝程序,輸入序列號,然后下一步下一步即可。注意絕對別把Gaussian裝到帶有中文的路徑下,否則以后使用過程中可能會碰到一些莫名其妙的錯誤。比如把程序裝到了D:\study\G09W下,那么安裝后應當手動建立一個文本文件D:\study\G09W\scratch\Default.Rou,這個文件就是Windows下的默認的計算資源的配置文件,里面要填的內容和Linux下的Default.Route是完全相同的。

    絕大多數人用的Windows版Gaussian都是32bit版的,主要是因為Win32版售價比Win64版便宜得多(這里不是指操作系統是多少位,而是Gaussian程序自身是多少位)。32bit版Gaussian在運行時對資源限制極大,并行核數最多只能設為4(實際上還有只支持串行運行的Windows版Gaussian,售價更便宜,但很少見),而且內存最多只能分配1500MB左右。我個人建議設成1400MB,因為設成1500MB的時候仍有可能在個別情況下因為內存分配問題而運行失敗。如果想不受制于核數和內存的限制,那就得改用64bit版Gaussian了。除非是計算量較小的任務,否則運行的時候都應當用64bit版。
    注:目前的Linux版Gaussian一律都是64bit的,32bit版也根本不賣了,很老版本的Gaussian才有32bit Linux版。

    Windows用戶一般還會安裝GaussView,這是Gaussian官方開發的Gaussian圖形界面程序。記得一定要先安裝Gaussian再安裝GaussView,而且GaussView應當安裝到與Gaussian相同的目錄下,否則可能導致GaussView識別不到Gaussian可執行文件。此時不僅啟動GaussView的時候會有警告,而且由于GaussView將沒法調用Gaussian目錄下的可執行程序,此時GaussView很多特性和功能將無法使用,比如無法載入chk文件、無法繪制分子軌道等值面、無法向Gaussian提交任務等。

    應當注意Gaussian和GaussView的版本兼容性。根據筆者經驗,Gaussian 09建議搭配GaussView 5.0.9使用,Gaussian 16建議搭配GaussView 6.0.16(目前的最新版本)使用,這樣兼容性是最好的,否則會有很多問題。比如GaussView 6.0.16打開Gaussian 09的IRC任務的幀號順序是錯亂的,而GaussView 5.0.9無法正確載入Gaussian 16的振動分析輸出文件等。

    啟動Gaussian的Windows版的圖形界面后,在File - Preference里會看到一些配置選項,一般不用去改。Windows版默認的Gaussian臨時文件夾是其目錄下的scratch目錄,如果你想把臨時文件目錄改為其它路徑,可以修改里面的Scratch Path設置。ASCII Editor設的是在Gaussian圖形界面里打開輸出文件時調用的文本編輯器,默認是記事本,如果你機子里有Ultraedit、notepad++等更強大的文本編輯器,建議改成這些文本編輯器的路徑。

    有些人在運行Windows版Gaussian時明明輸入文件正確,計算任務計算量也很小,卻在中途莫名其妙地卡住、出現莫名其妙的報錯,這往往是因為機子里的360等垃圾山寨安全程序搗的鬼。把這些垃圾程序刪掉往往就能解決。另外,筆者發現XEON v3(對于v4等其它型號可能也有)系列的一些CPU運行win32版Gaussian09/16時會失敗,這應當是CPU和程序兼容性的原因,目前沒有發現好辦法解決(不過這不是什么大問題,一般也不會有人用幾十核的服務器去跑win32版Gaussian)。

    久久精品国产99久久香蕉