前言
最近好久沒寫部落格了,事情太多了,我還搞了個新的好玩的專案,等後續做得差不多了來寫篇文章介紹一下。
在我們目前的AI專案中,團隊需要共同使用一臺GPU伺服器來做模型訓練和資料處理。為了讓每個團隊成員都能高效地使用這臺伺服器,我們決定設定一個多使用者共享環境。這樣,無論是程式碼開發、模型測試還是結果驗證,所有人都可以方便地訪問並利用伺服器的強大算力。
本文將記錄一下配置Linux共享環境的過程,同時也希望能幫助那些面臨類似需求的團隊。
設定使用者和組
要有效管理我們的GPU伺服器,首先需要建立新的使用者賬戶,並將這些賬戶組織到一個專門的使用者組中。這樣做可以更容易地管理許可權和訪問控制。
建立使用者和組
先建立個組
sudo groupadd gpugroup
接下來建立使用者
sudo adduser [使用者名稱]
然後把使用者新增到組裡面
sudo usermod -a -G gpugroup username
配置SSH公鑰登入
為了讓團隊成員能夠安全地透過SSH連線到伺服器,統一使用公鑰認證,禁止密碼登入。
每個使用者需要生成一對金鑰(如果還沒有的話),並將公鑰傳送給管理員。然後,管理員需要將這些公鑰新增到使用者的 .ssh/authorized_keys
檔案中。
首先,確保每個使用者的 home 目錄下都有 .ssh
目錄,如果沒有,可以使用下面的命令建立:
sudo mkdir /home/[使用者名稱]/.ssh
sudo chmod 700 /home/[使用者名稱]/.ssh
然後,將公鑰新增到 authorized_keys
檔案中:
echo [公鑰內容] >> /home/[使用者名稱]/.ssh/authorized_keys
sudo chmod 600 /home/[使用者名稱]/.ssh/authorized_keys
替換 [使用者名稱]
和 [公鑰內容]
為實際的使用者名稱和公鑰。
建立共享資料夾
之前我把程式碼放在 home 目錄下,不過實踐中發現這樣不利於共享。
畢竟把某個使用者 home 目錄下的一個資料夾設定為共享目錄,讓其他使用者訪問,總覺得怪怪的。
通常為了安全性和組織性,還是建立一個專門的目錄用於共享專案比較好,問了GPT是這麼說的
安全性:避免不必要的許可權洩露。當你將專案放在個人家目錄下時,可能會不小心賦予其他使用者過多的訪問許可權,這可能導致敏感資訊的洩露或不小心的資料損壞。
易管理性:一個專門的共享目錄使得管理更為簡單明瞭。你可以輕鬆控制誰可以訪問這個目錄,而不必擔心影響到其他個人資料或設定。
擴充套件性:隨著團隊的增長,可能會有更多的使用者需要訪問這些共享資源。有一個獨立的共享目錄可以更方便地管理使用者和許可權,而不是不斷調整家目錄下的許可權設定。
清晰的許可權界定:獨立的共享目錄讓許可權的設定和調整變得更加清晰和簡單。例如,可以針對這個目錄設定定製的安全策略和備份策略。
所以我在 /srv
目錄裡建立了一個目錄 /srv/projects
用來共享。
組許可權設定
接下來,將團隊共享的專案資料夾 /srv/projects
的所有權設定給 gpugroup
組。
sudo chown -R root:gpugroup /srv/projects
sudo chmod -R 775 /srv/projects
設定SGID(Set Group ID)
SGID 是一個特殊的許可權設定,它確保在一個目錄下建立的任何新檔案或目錄都會自動繼承該目錄的組。這非常適合我們的專案目錄,因為它可以讓團隊中的所有成員都能訪問和修改檔案,而不必擔心單個檔案的組設定。
你可以使用以下命令來設定SGID位:
sudo chmod g+s /path/to/directory
例如,如果我們的專案目錄是 /srv/projects
,命令將是:
sudo chmod g+s /srv/projects
這樣設定後,所有在 /srv/projects
下建立的新檔案和目錄都將自動設定為該組,保持許可權的一致性。
調整 umask (optional)
PS: 我沒有設定這個,可以但沒必要
umask 是一個系統設定,決定了新建立的檔案和目錄的預設許可權。為了確保團隊成員可以編輯彼此的檔案,我們需要設定一個合適的 umask 值。
通常的 umask 值是 022
,這意味著新建立的檔案預設許可權是 644
(使用者可讀寫,組和其他人可讀),新目錄的預設許可權是 755
(使用者可讀寫執行,組和其他人可讀執行)。為了團隊協作,我們可以設定 umask 為 002
,這樣新檔案的許可權為 664
(使用者和組可讀寫,其他人可讀),新目錄的許可權為 775
(使用者和組可讀寫執行,其他人可讀執行)。
可以透過以下命令臨時改變 umask 值:
umask 002
為了永久改變,需要在使用者的 shell 配置檔案中設定,比如 .bashrc
或 .profile
:
echo "umask 002" >> ~/.bashrc
其他
還有一些細節的,比如我之前把 conda 裝到 home 目錄裡了
現在也得重新在 /srv/apps 裡安裝,原本在 home 裡的就不要了
這樣所有使用者都能共享 python 的虛擬環境
複製檔案時顯示進度
cp -R 命令不支援顯示進度
可以使用 rsync 或 pv 代替
rsync
rsync -ah --progress source destination
引數解釋:
-a
是歸檔模式,它保留符號連結、檔案許可權、使用者組資訊等。-h
使輸出更易於閱讀,使用人類可讀的格式。--progress
顯示覆制進度。
pv
這個是搭配壓縮工具使用的,有些系統不自帶,可能得先安裝。
tar cf - source/ | pv | tar xf - -C destination
這個命令將 source
目錄打包並透過 pv
顯示進度,然後在 destination
目錄中解包。
小結
這樣設定下來就基本搞定了
我最近還探索了一些專案管理工具,部署了 MatterMost
接下來可以寫文章記錄一下。