智能所實驗室環境配置【Windows遠程連接Linux服務器/VScode+Anaconda】【詳細教程】

前言

此文寫給實驗室的學弟學妹們,以便快速配置環境少踩坑。計算資源是公共資源,學長學姐有自己的研究任務,無法像企業運維人員那樣周到的看護服務器,服務器的穩定運行有賴於每個使用者合理使用。菜,是原罪(推眼鏡)。【和你用同一個服務器的人正在跑實驗,突然掛掉了,發現是你在瞎搞,內心會很崩潰】

一、總覽

目前的部署是單服務器的形式,使用起來也很簡單,一般也就把程序放在一個服務器上跑,有在準備分佈式,是後話了。

大夥用自己的電腦就行了,window或者mac都行。本地寫代碼,遠程連接,上傳,程序在服務器上跑,本地圖形化界面還是很方便的,多媒體支持也好,你可以一邊寫代碼,一邊聽音樂,在程序提交以後看看文章或是做PPT。

二、準備工作

  1. 讓管理服務器的學長在特定服務器上幫你開一個賬號,目前你有了登錄所需的 “服務器IP,賬戶名,密碼”。
  2. windows下載並安裝遠程連接軟件,mac自帶bash和ssh之類了。
  • 終端模擬軟件,XShell,支持SSH(默認端口22),輸入“服務器IP,賬戶名,密碼”,登錄以後就可以在小黑框裏敲命令了。
  • 文件傳輸軟件,XFTP,ftp和sftp都支持,系統默認開的sftp,ftp看該服務器有沒有開vsftp服務。
  • 也可以用MobaXterm,二合一,網址:https://mobaxterm.mobatek.net/
  • MobaXterm詳細使用教程:https://zhuanlan.zhihu.com/p/61013117
  • 其他相關SSH軟件裏面也有提到,咱只要會登錄能敲命令,會上傳下載文件就行,剩下不用管。

三、預備知識

同學們可能本科時候Linux用的少,不熟練是正常的,好好補充相關知識,是少搞事的關鍵,況且linux是開發繞不開的。

首先是linux基本的目錄結構:https://www.runoob.com/linux/linux-system-contents.html

同學們的東西一般在 /home/[賬戶名]/  的目錄下,例如/home/Alice/,大家井水不犯河水

關於linux的root權限:

root說白了就是超級管理員賬戶,你幹啥都暢通無阻,但也有了搞癱服務器的機會,學長信任你把賬號給你可能就是悲劇的開始。網上有一些教程上來就拿權限,因爲人家在自己的電腦的ubuntu上搞,崩了也無所謂,省事,但服務器公共資源,底層環境壞了影響別人,root權限還是不給的好,各位同學看教程也辯證的看。

然後基本的linux命令自己學,最好知其所以然。命令太多了,不搞運維,常用的會了就行,要用的臨時查。

放一點常用的:https://blog.csdn.net/heros_never_die/article/details/106363409

特別注意粘貼該用shit+insert,ctrl+c在這是鍵盤中斷。

四、配置環境

本機windows配置IDE就夠了,遠程服務器配置python和各種框架。

方案有很多種,我各種都用過了,核心功能都差不多的,剩下的那些蘿蔔青菜各有所愛,知乎上比較一堆,聊聊核心區別。

1.本地IDE的選擇

pycharm和vscode。最有區別的地方之一是遠程模式。

  1. 一般的pycharm是通過文件傳輸同步的ftp/sftp,換句話說,你本地電腦有一份工程文件,服務器上也有一份,修改好了以後用快捷鍵ctrl+shift+alt+x上傳覆蓋,也可以從服務器下載覆蓋本地實現回滾。
  2. vscode就遠程服務器上一份工程文件夾,本地默認沒有(你也可以選擇下載備份),你界面裏的修改直接作用於服務器文件,感覺上更接近中斷模擬軟件了。有插件可以記錄你的修改,然後選擇修改生效或是回滾,有備份需求的可以使用git命令和git插件(pycharm也有)。

實際上專業版的pycharm也有遠程同步功能,不過如果用的社區版的話,就得用模式1那種,vscode目前免費。

2.服務器配置

  • Docker,和虛擬機差不多,連底層一起全套打包,特別適合有用到虛擬環境的,做普通任務的不一定需要。
  • Anaconda,也會創建虛擬環境,但是有些東西對底層還有一些依賴,自動處理衝突並尋找兼容性的版本,你可以創建不同版本python的環境,它可以調整CUDA版本(這對深度學習框架很重要)。
  • 裸python,省去激活環境,可以直接用pip(有不少教程用這種方法),對底層的依賴更高,而你沒有root權限(於是你用不了教程裏的apt-get,yum),得想辦法手動非root安裝,還要手動調整動態鏈接庫/環境變量, 以防止不同版本打架或是不小心用到系統python。
  • 系統python,不是自己的機子,沒有可能性,除非你能像那位同學一樣能讓噁心所有同學並老師害怕,然後獨自霸佔一臺機子。或者家裏有礦自己整一臺。

總的來說,找到的教程是裸python的多,因爲有不少在自己機子的ubuntu上用root玩的,還有的github也這麼寫(因爲通用),服務器上搞非root裝亂七八糟的東西也費勁,推薦使用Anaconda,真的香,學會了以後那些pip裝的換成conda指令就行了。

3.具體步驟

網上教程有不少,但是比較碎片化,或者有的不是對服務器而言的,新版本有的還是有可視化窗口發生了寫變化,下面再簡略的寫一些吧。

1.安裝Anaconda

官網搞一份或者直接問學長學姐拷。地址:https://www.anaconda.com/products/individual

教研室網有奇怪的網關,上不去建議套一下學校的VPN或者去清華的源下載。

關於版本的選擇,我們服務器是Linux的,U是Intel的所以是x86的,power是IBM的。至於python3.7和python2.7區別不大,這裏指離線包裏包含哪個版本,Ananconda是個環境管理軟件,實際上你裝的python3.7版也可以用命令下載pythob2.7。類似於那種萬能驅動,包裏自帶一些東西,接上網了還可以下載各種東西。

                           

下載得到文件  Anaconda3-2020.02-Linux-x86_64.sh 

通過你的sftp軟件傳到服務器上你的目錄下,然後進入這個目錄(通過cd命令)

(爲什麼不直接在服務器用wget命令?因爲那樣走服務器小水管下載,而自己上傳用的局域網上傳)

接着輸入 bash Ana,按Tab鍵會幫你自動補全,回車開始安裝;之後就是讓你接受協議,回車就行了;再輸個yes回車;接着問你安裝目錄,要改就改,不改就回車;接着問你要不要初始化conda,輸入yes。

以下界面就是說你裝好了(人家還給pycharm打廣告了)

接着關了這個會話重開,這時候你的目錄前面多了(base)就對頭了

原本你輸入python命令是服務器的python,一般是2.7,安裝時間還很早,有base的時候,就是自己裝的python了。


剩下的東西參考下面:

https://blog.csdn.net/xi_zhong/article/details/83422225

https://www.jianshu.com/p/e298b9d3afae

關於環境變量都保存在.bashrc文件裏,用maba xterm的,可以直接雙擊打開,像記事本那樣該,關閉的時候會問你要不要上傳。

用vim編輯的話,不要傻乎乎的複製教程裏的命令,~/的意思是相對路徑,本身就在路徑裏的話,vim .bashrc 打開文件就好了。你要按insert鍵進入編輯模式纔好編輯,改完以後按esc退出編輯模式,按下分號鍵進入命令模式,輸入wq保存,vim的具體使用自己查。

另外提一句,換清華源很重要,不然有的下的很慢。

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda config --set show_channel_urls yes 這句是設置每次安裝包的時候,顯示一下源,用來確認用的。

這句是用來創建環境的:conda create -n your_env_name python=your_python_version

例如:conda create -n myenv python=2.7

接着你要進入這個環境的話就使用 conda activate myenv

conda info 顯示conda的各種信息(這裏也會顯示你有哪些源,路徑在哪,系統版本和cuda版本)

conda info --env 顯示你已經配置了哪些環境。

conda list  顯示當前環境下已經安裝了哪些包。

conda activate env1 激活(進入)某個環境

conda install tensorflow-gpu=1.6.0 安裝xxx,可以接版本號。

(記得看清自己目前在哪個環境裏,另外能對於深度學習框架自動配置CUDA,裝新包的時候會調整其他包保持兼容)

conda search pytorch 搜索某個包,雖然在pip裏面叫torch,在anaconda裏叫pytorch

(裝torch記得裝上全家桶,比如torchvision,conda install torchvision)

2.官網下載並安裝vscode

應該沒難度,也不需要破解,地址:https://code.visualstudio.com/

2.1 設置成中文(非必要)

ctrl+shift+p 調出命令框,找到命令Configure Display Language(輸一些內容直到顯示這個選項)

然後跳出選項Install additional languages(安裝額外語言包),點一下,裝上你需要的語言。裝好後右下角會提示器重啓vscode。

2.2 裝個SSH插件

插件欄搜索SSH,點安裝,然後提示需要重新加載,點一下就會重新加載。

2.3 新建遠程連接

這時候邊欄多了遠程連接的圖標,你可以點加號添加新的連接,也可以點那個齒輪調整config文件。實際上加號連接的東西也會問你記錄在哪個config裏面。至於選那個config,第一個就行了,其他的好像也能用。加號的添加方式按照裏面的提示填就行了。ssh 用戶名@地址,地址可以使域名也可以是普通ip,實驗內都是局域網ip。

接着會提示你成功添加了一個host,你可以直接點連接,也可以點host旁邊的小按鈕在新窗口中連接,彈出窗口以後會問你服務器系統是什麼,記得點一下。接着會提示你沒有RSA授權要不要連接,yes就行,然後輸入密碼,會下載一點必要的組件。

左下角的綠條是你的連接狀態,邊上兩個提示你有幾個error幾個warning。右上角是控制終端的欄目。+號是新建終端,垃圾桶是關閉終端(注意這個install終端不要關啊),剩下的按鈕還要終端分欄和終端全屏,鼠標放上去可以自己看說明。

接着點擊打卡文件夾就能打開服務器上的項目工程了,接着可以在裏面創建python文件什麼的,ctrl+s是保存,會直接修改服務器閃上的文件。左上角還會提醒你一個文件未保存。記得按照右下角安裝python擴展。裝的是pylint,裝了這個以後就有自動補全了,以及ctrl+鼠標左鍵點擊進入函數定義等必要功能。

正確安裝的話你可以看到,本地也可以安裝一份,注意區別。一般你連接哪邊的項目就會提示你安裝哪邊插件。

之後就可以享受coding了

2.4 我不想每次都在vscode裏輸ssh密碼

在終端輸入 

ssh-keygen -t rsa 建立rsa公鑰密鑰對

接着會問你創建文件在哪,可以手動輸入,也可以直接回車保存在默認的位置/home/你的的目錄/.ssh/id_rsa

接着問密碼並驗證密碼,回車兩次可以跳過。

cd .ssh 可以進入這個文件,裏面有id_rsa和id_rsa.pub兩個文件

cat ./id_rsa >> ./authorized_keys 接着輸如這句話,cat作用是把文件內容打印到終端屏幕,>>是重定向,意思就是這段不去原本的輸入,而是換個地方,目標就是後面的authorized_keys文件(不存在會建立一個),這句話的實際想過相當於把id_ras_pub的內容添加到了authorized_keys尾部,換句話說,你用sftp手動複製粘貼進去也行。最終我們產生了如下三個文件,在只有一個公鑰的情況下,實際上authorized_keys和id_rsa_pub內容一樣的。

接着我們用sftp把密鑰放到自己的windows電腦上,路徑就是之前config所在的ssh路徑。順便改一下config裏面的文件,把服務器和密鑰文件關聯起來,如下圖所示。

主要添加

  PreferredAuthentications publickey

  IdentityFile ~/.ssh/id_rsa_246

現在問題來了,我連接好幾個服務器,他們的密鑰不不能都叫id_rsa吧,所以記得要改一改名字。服務器那邊不一定要改,因爲主要起作用的是authorized_keys裏的內容,不過保持統一是個好習慣。

那麼如果你還有一臺筆記本電腦,用類似的方法配置一遍,服務器始終只有一份authorized_keys公鑰,臺式和筆記本各有一份id_rsa_246。

至此,以後vscode登錄特定服務器就不需要密碼了。

4. 運行代碼的正確姿勢

根據菜單欄上的運行可知,ctrl+F5運行,有加斷點的話也可以F5調試。

當然你可以使用下方的bash終端,像普通終端一樣輸入指令運行就行了, 例如:python test.py

關於解釋器的選擇在左下角,點一下以後可以選擇不同的解釋器路徑,如果想使用anaconda的環境則使用anaconda路徑的解釋器,路徑名裏有你起的環境名,好辨認的。vscode會自動激活環境。

調通程序之類的都可以使用這些方法,但如果你的模型要跑一兩天的話,你應該掛在後臺。

直接在終端裏跑,會話消失的時候進程就結束了。換句話說,你的終端要一直開着且保持穩定,如果意外斷網了,你的訓練模型就停止了。比較穩妥的方式是使用screen和tmux。

screen -S train 建立一個名爲train的窗口,這樣即使終端會話中斷了,窗口依然存在。

conda activate py2 激活你的環境

CUDA_VISIBLE_DEVICES=1,2 python train.py 設置顯卡1和2爲可用顯卡,使用python運行train.py文件

這裏說明一下CUDA_VISIBLE_DEVICES=1,2tensorflow是默認利用所有顯卡的,所以直接運行代碼的話,很容易佔用全服務器資源,給別人添麻煩,所以記得加這條命令限制顯卡的使用。而pytorch默認是使用顯卡0的,所以也可能和別人撞車。利用顯卡跑程序之前先使用nvidia-smi看一看各個顯卡的利用情況,選用空閒的顯卡。當然限制顯卡命令也有類似的語句可以直接加在py文件裏

import os
os.environ[“CUDA_VISIBLE_DEVICES”] = “0”

但是顯卡使用情況不同時刻不同,換卡運行要到py文件裏去修改,恆定一張卡的時候這個挺方便,看情況使用。

在窗口內,先按ctrl+a再按d,可以退出窗口,窗口掛在後臺,裏面程序還在跑。

先按ctrl+a再按k,可以徹底關閉窗口,進程會關掉。

screen -ls 列出現有窗口

screen -r train 恢復名爲train的窗口。

screen -D -r train 強制恢復名爲train的窗口,有時候會用到。

更多的見上文提到的linux常用指令,或自己查詢screen和tmux的使用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章