讓所有的MATLAB用戶都能用集羣做並行計算

學院的計算平臺(一期)運行已經一年了,麻雀雖小五臟俱全。本來以爲大家有GPU需求的差不多都會自己買上一兩臺GPU服務器(我自己還有一臺K40×2的古董呢),所以一期建設只有刀片和FPGA,但是現在大家都玩深度學習了,對GPU的需求很旺,趕緊二期來一臺V100×4,下學期應該就能跑起來啦。

言歸正傳,雖然目前沒有GPU,但是CPU上跑MATLAB的需求還是有的,但是目前的用戶們,僅停留在寫串行的MATLAB程序,最多把能夠數據並行的程序多提交幾個作業,每個處理一部分數據,算是實現手工並行。我個人對MATLAB不是很熟,但是也看到了它能夠配置集羣系統,而且有parfor的並行方式。而且,印象中工程師已經對MATLAB做了初步的並行配置,但需要具體的應用實踐檢驗。正好最近有用戶提出了這個需求,於是期末稍閒下來,決定把MATLAB的集羣並行計算搞定。

共用配置

首先,解決多用戶共用配置的問題。默認,在每個用戶的家目錄下,會有個隱藏目錄.matlab,裏面再有一個MATLAB版本號的目錄,如R2017b,這個目錄裏面保存了當前用戶的配置,包括parallel.settings這個關於並行配置的XML文件。在下圖的界面中做的配置,都會保存在這個文件中。
在這裏插入圖片描述
爲了能夠讓所有用戶共享同一個集羣配置,我把這個配置文件的目錄複製到/opt下,然後各個用戶家目錄下相應的位置通過軟鏈鏈接過去,如下圖所示。
在這裏插入圖片描述

這裏注意兩點:

  1. 爲了不讓普通用戶隨意修改配置,配置文件全都設置爲644的root權限。
  2. 爲了保留備份、方便測試等,root下的配置沒有做軟鏈,還在自己家目錄下。如果有修改,手工將相應文件複製到/opt下。

只有root能夠啓動並行池。。。

其實,這個纔是這篇博客想要記錄的核心問題。也是困擾了我三天最後終於解決的問題。
先描述一下:用root用戶啓動的MATLAB,可以正常啓動並行池,如下圖所示。
在這裏插入圖片描述
然而,換成普通用戶,就變成下圖的熊樣子。。。。
在這裏插入圖片描述
最下面的錯誤信息很有迷惑性:無效的屬性默認值。翻遍了配置文件也沒看出來哪裏無效,而且人家root怎麼就有效呢?

那個警告很惹人注目:無法打開僞tty(MATLAB was unable to open a pseudo-tty)。一開始不懂這個僞tty是啥,但看得出來是類似於linux中的用戶會話、控制檯等之類的東西。這個信息反覆出現,困擾我很久。百度、谷歌查到的不多,老外有遇到這個問題解決了的,卻是因爲盤沒掛好。。。但既然root能行而普通用戶不行,感覺應該是權限上的問題,最後證明這個大方向把握得還是準確的。

後來,試圖順着警告信息,點開代碼看,發現發生警告的地方,都是類似於system(cmd)這種語句,也就是在系統裏執行cmd命令。給代碼文件增加寫權限,在執行命令之前增加disp(cmd)顯示命令,發現無非是調用腳本查詢MATLAB自己的進程信息之類的操作,複製出來在linux下執行,完全沒有問題。這說明命令本身沒有權限問題。

查到tty等會話的位置,是在/dev下,於是進去查看一大堆終端、控制檯,根據它們時間的變化,找出了一個目錄shm和一個文件ptmx,會在MATLAB創建並行池時時間發送變化。這裏,還發現目錄shm的權限,最後一個字符是t,感覺很奇怪,於是搜到這篇博文《linux權限補充:rwt rwT rws rwS 特殊權限》學習了一下,並按照裏面的說法,給ptmx文件增加s權限,但沒解決問題。

通過各種關鍵詞組合搜索,最終終於明白了所謂僞tty的概念,其中最有用的要數這個郵件《Re: sarge in chroot》和這篇文檔《ptmx(4) - Linux man page》,通過它們,瞭解了僞tty的概念、原理,以及涉及到的文件和目錄。到這裏,我才知道/dev下還有個目錄pts,是保存新建的tty會話的,但該目錄本身的日期時間沒有變化,所以上面在/dev目錄下的查找纔沒注意到它。查看/dev/pts目錄下的文件,果然有幾個由普通用戶創建的文件。除了上面兩個文檔,還有《[Solved] No /dev/ptmx in FreeBSD 10》和《Konsole (and some other virtual terminals) not working correctly.》也都提到了相關內容。

經過分析,整個的問題,應該是MATLAB在初始化並行池時,需要在系統中執行一些命令,而這個操作是要先創建一個僞tty會話,然後在裏面執行命令的。普通用戶就卡在創建僞tty這步上,而創建僞tty的過程,無非是要寫/dev/ptmx文件、/dev/pts目錄,那麼一定是這裏的權限出了問題。ptmx文件和pts目錄的權限如下圖所示。
在這裏插入圖片描述
在這裏插入圖片描述
看上去沒什麼問題,666的權限,相當於所有用戶都有讀寫權限了,但是最後還是抱着試一試的心態,把當前的普通用戶加入tty組了,然後重新登錄——果然OK了!

到這裏,問題算是解決了。但是還是不太明白,爲什麼666的權限還會卡住普通用戶呢?不知哪位大神能爲我解惑?

接下來,需要把系統中的所有普通用戶都加到tty組中,還要修改初始化用戶腳本,把這個操作加進去。

發佈了171 篇原創文章 · 獲贊 2 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章