來自 | 知乎
作者 | 常慶豐
地址 | https://zhuanlan.zhihu.com/p/102385239
編輯 | 機器學習算法與自然語言處理
本文僅作學術分享,若侵權,請聯繫後臺刪文處理
序
之所以要寫這麼一篇介紹的文章,主要是因爲作爲一個打雜的算法工程師,在工作中需要使用遠程服務器進行開發,然而遠程服務器系統版更新緩慢,總有些代碼跑不起來,讓調包的我很難辦。
另外工作中難免遇到共用開發機器的情況,如果把現在的算法工作稱爲煉丹,那服務器就是丹房,如果大家共用一個丹爐那總是會有配置不同的問題,因此最好的解決方式就是每個人用自己的丹爐。
基於以上原因,我整理了這麼一篇配置,大體方案是基於 Docker + VSCode 配置屬於個人的開發環境,還會涉及 VSCode 擴展等。
聲明:
首先要說明的是,由於個人才疏學淺,本文介紹的方案並不是理論上最優的方案,而且一些配置項也並不是必須或並不是適合所有人的,因此如果有同學想要參考的話建議首先完整閱讀下各部分,有了整體的概念之後再根據自身需要參考配置。
其次本文各部分都參考了大量文檔文章,我儘量給出了相關的參考鏈接,在此感謝原作者們。對於給出了具體參考鏈接的情況本文就不會對具體內容多做描述,還請看官查看相關參考文章。不論是本文還是相關參考資料都存在錯誤的可能,因此還需要閱讀的各位根據自己遇到的情況進行調整,官方文檔永遠比二手博客文章更靠譜。
最後感謝各位(如果有)看官給本文貢獻了點擊量和瀏覽量…
Docker
首先要說 Docker 是什麼
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化
以上是我抄的百科詞條,總體意思看來是做了個內核容器虛擬化,也就是在真實系統的基礎上又虛擬化了容器出來。類比的話可以類似於常用的虛擬機,但又不一樣,容器開銷上會小很多。這種虛擬容器適合用來製作可移植鏡像發佈應用,而我這裏要用它來當做虛擬環境用,不知道算不算是一種浪費。
提到了Docker就要說到它的底層 LXC ,關於 LXC 和 Docker 的關係可以看看 《請問docker與lxc是什麼關係,有什麼區別》。因爲 LXC 是 Docker 的底層,所以也有人用 LXC 來達到共用機器隔離的目的,可以參考《爲實驗室建立公用GPU服務器》。不過本文還是介紹使用 Docker 的方法,就不多介紹 LXC 了。
知道了Docker 是什麼了之後就要使用 Docker,需要說明的是最好參考 docker-docs (注:大家都看過廖雪峯老師的Python等系列博客吧,他在自己的博客裏也表示“docker就看官方文檔”),一些中文資料如《菜鳥教程-Docker 教程》因爲更新不及時可能會存在些問題,這裏我是踩過坑的。
安裝 Docker
以 CentOS7 + 社區版Docker 爲例,CentOS7 中 Docker 的安裝可以參考《Get Docker Engine - Community for CentOS》
首先 Docker 對系統環境有些要求,參考文檔中 《OS requirements 》部分,具體的說就是 CentOS7 以及 centos-extras repository 。
系統符合要求後可以卸載已有老版本 docker,參考 《Uninstall old versions》 部分,沒裝過的可以跳過了。
接下來的安裝部分提供了三種安裝方式,分別是常用的由repository安裝、使用 RPM package 手動安裝以及測試腳本安裝,參考文檔 《Install Docker Engine - Community》部分,以下簡單介紹下常用的安裝方式:
第一步 SET UP THE REPOSITORY:
-
安裝依賴包:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
-
設置穩定源:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
第二步就是安裝 docker:sudo yum install docker-ce docker-ce-cli containerd.io,安裝後docker並未自動啓動
第三步就是啓動 docker:sudo systemctl start docker
最後可以測試下docker 是否安裝成功:sudo docker run hello-world,如果能夠正確顯示一些信息則安裝成功
安裝完之後如果想卸載了可以參考 《Uninstall old versions》部分卸載 docker,但是卸載時候不會自動刪除鏡像和容器,需要記得手動刪除。
安裝NVIDIA-Docker
作爲一個算法工程師,總歸有用上 GPU 的時候,爲了在 Linux 上啓用 GPU 支持,需要安裝 nvidia-docke。
The NVIDIA Container Toolkit allows users to build and run GPU accelerated Docker containers.
要安裝 nvidia-docker 首先要確保安裝了 NVIDIA driver 和 Docker 19.03,其中驅動的鏈接已經給出了,沒安裝的自己安裝下。
CentOS7下的 nvidia-docker 的安裝可以參考《CentOS 7 (docker-ce), RHEL 7.4/7.5 (docker-ce), Amazon Linux 1/2》,使用說明可以參考《Usage》。
需要注意的是在 Usage 裏已經使用 --gpus 參數,而後續的 TensorFlows 的 docker 中文教程中還在使用已廢棄 --runtime=nvidia參數,需要記得替換成–gpus。
安裝好之後可以使用命令 docker run --gpus all,capabilities=utility nvidia/cuda:9.0-base nvidia-smi 測試下。
Docker 的使用
docker的使用真的是參考 docker-docs 就好了,這裏只說幾個和後文有關及常用的。
首先是一些查看鏡像(image)和容器(container)的命令:
-
列出本機的所有 image 文件:docker image ls
-
刪除 image 文件:docker image rm [imageName]
-
列出本機正在運行的容器:docker container ls -l
-
列出本機所有容器,包括終止運行的容器:docker container ls -l --all
-
刪除容器文件:docker container rm [containerID]
-
導出容器:docker export [OPTIONS] CONTAINER
-
導入容器:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
這裏鏡像可以簡單粗暴的理解爲系統安裝包,而容器可以理解爲虛擬系統。
容器是可以導入和導出的,也就是說配置好了一個自己滿意的容器後可以導出,之後每次需要乾淨的新系統環境之後都可以導入這個,就有一個符合自己需要的乾淨系統了。
docker 的啓動使用 docker run [OPTIONS] IMAGE [COMMAND] [ARG…] 命令,例如:
docker run -it -p 8022:22 --ipc host --name docker_example --gpus all -v ~/work:/work tensorflow/tensorflow:latest-gpu-py3-jupyter /bin/bash
-
-i 表示 Allocate a pseudo-tty
-
-t 表示 Keep STDIN open even if not attached
-
-p 表示對端口號進行映射,即將 docker 容器的 22 號端口映射到宿主機的 8022 端口,這樣設置的目的是方便後續使用 VSCode 連接容器,可以根據需要進行設置
-
-ipc host 的目的是爲了增加主機與容器共享內存用的,如果這個參數報錯,還可以採用–shm-size參數[1]
-
-name docker_example 是將容器命名爲 docker_example,docker 有長id、短id、name三個標識,如果不指定名稱則會隨機名稱
-
-gpus all 是使用全部宿主機 GPU,這裏的設置可以參考 nvidia-docker 的 Usage 具體設置使用哪個卡
-
-v ~/work:/work 是將宿主機的 ~/work 目錄映射到容器的 /work 目錄,方便主機和宿主機間共享數據,這裏的 -v 是 volumes 的意思,而這個共享是有兩種情況的,具體信息可以參考《 Use volumes 》
-
tensorflow/tensorflow:latest-gpu-py3-jupyter 是指定使用的鏡像版本,這裏的版本可以在 docker-hub 查到
docker 的鏡像爲了減小體積會精簡掉很多內容,比如剛剛這個機遇 Ubuntu 的 tensorflow/tensorflow 就沒有 vim、locate、man手冊等等,有需要的可以自行安裝。
docker 容器啓動後可以使用exit退出,而如果使用 -d 模式的話會將 docker 放在後臺,此時可以通過 docker attach command 進入容器。
docker 容器關閉後,可以使用 Usage: docker start [OPTIONS] CONTAINER [CONTAINER…] 命令啓動容器,此時不能再用 docker run。
nvidia-docker 的安裝使用說明中還出現了 -rm 參數,此參數默認則爲 false,當使用此參數時會在退出容器時自動清理容器。
如果在 docker 的使用時遇到了用戶問題,還可以考慮在 docker run 的時候增加 -u 參數設置登錄用戶。
如果想修改已有容器的部分參數(如 -v 的目錄映射),可以參考 《docker-修改容器的掛載目錄三種方式》進行修改。
需要注意 :當 attach 到 docker 服務後,看到的輸出是同樣的,如果需要同時開啓多個窗口可以考慮:
-
按照下文方法配置並啓動 ssh 服務,這樣就通過 xshell 等方式遠程登錄
-
使用 screen 或者 tmux 等終端複用工具,這兩個工具以類似 session-windows-pane 的方式複用窗口
-
同時還可以通過 screen 或者 tmux 起到程序後臺運行的作用,參考:Linux 技巧:讓進程在後臺運行更可靠的幾種方法
TensorFlow Docker
以 TensorFlow 爲例,參考 TensorFlow Docker
先抄下介紹:
Docker 使用容器創建虛擬環境,以便將 TensorFlow 安裝與系統的其餘部分隔離開來。TensorFlow 程序在此虛擬環境中運行,該環境能夠與其主機共享資源(訪問目錄、使用 GPU、連接到互聯網等)。系統會針對每個版本測試 TensorFlow Docker 映像。
Docker 是在 Linux 上啓用 TensorFlow GPU 支持的最簡單方法,因爲只需在主機上安裝 NVIDIA® GPU 驅動程序(無需安裝 NVIDIA® CUDA® 工具包)
可以看出 TensorFlow 官方還是很支持使用 docker 方法的,官方也會發布每個版本經測試的 TensorFlow Docker 鏡像,而且 docker 是 Linux 上啓用 TensorFlow GPU 支持的最簡單方法,直接使用官方打好的鏡像,避免我們這些渣渣到處去提“tensorflow gpu 如何配置”這種低級問題。
TensorFlow Docker 要求在本地主機上安裝 Docker,如果需要在 Linux 上啓用 GPU 支持,請安裝 nvidia-docker
注意:要在沒有 sudo 的情況下運行 docker 命令,請創建 docker 組並添加用戶。有關詳情,請參閱針對 Linux 的安裝後步驟。
是使用 TensorFlow Docker 首先要拉取官方鏡像,鏡像位於 tensorflow/tensorflow,是基於 Ubuntu 的,映像版本按照以下格式進行標記:
-
latest :TensorFlow CPU 二進制映像的最新版本,默認項
-
nightly :TensorFlow 映像的每夜版 (不穩定)
-
version :指定 TensorFlow 二進制映像的版本,例如:1.13.1
-
devel :TensorFlow master 開發環境的每夜版。包含 TensorFlow 源代碼
每個基本標記都有用於添加或更改功能的變體:
-
tag-gpu:支持 GPU 的指定標記版本
-
tag-py3:支持 Python 3 的指定標記版本
-
tag-jupyter:帶有 Jupyter 的指定標記版本
例如 tensorflow/tensorflow:latest-gpu-py3-jupyter 表示最新版(latest)、帶GPU支持(-gpu)、基於Python3(-py3)、含 jupyter (-jupyter)
需要注意的是並非所有版本都包含這些,例如 tensorflow 1.12.0 並沒有 jupyter 項,具體鏡像可以通過 tensorflow/tensorflow/tags 搜索查詢
選定好版本後可以通過docker pull [OPTIONS] NAME[:TAG|@DIGEST] 拉取鏡像到本地
-
例如 docker pull tensorflow/tensorflow:latest-gpu-jupyter 即爲拉取基於py2的最新版TensorFlow,帶 gpu 和 jupyter
-
實際使用 docker run 命令時如果本地沒有對應鏡像則會自動拉取
拉取鏡像(或者不拉取也行)後,可以通過上文介紹過的 docker run命令啓動容器
-
例如 TensorFlow:docker run -it tensorflow/tensorflow bash,其餘容器名稱、目錄映射、端口映射等設置項可以參考上文
-
如果需要啓用 gpu 支持需要使用–gpus all 命令,其中 all 爲使用所有 gpu,具體設置參考 《Usage》
習慣使用 jupyter notebook 的同學可以參考官方設置啓用 jupyter notebook,例如
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter
但我不習慣使用 jupyter notebook,所以沒有認真測試過是否好用。
容器系統配置
配置 SSH服務
此部分參考 [1] 以及 [2],之所以配置 ssh 是爲了能夠在啓動容器後可通過 ssh 連接,也是爲了後續能夠通過 VSCode 進行遠程連接。
然而似乎在 docker 中不應該啓用 ssh 服務,並且 VSCode 似乎也是可以直接通過 docker 容器遠程連接[3],因此此處只是介紹方法,具體如何使用還需自行判斷。
apt update
apt install -y openssh-server
mkdir /var/run/sshd
echo 'root:passwd' | mypasswd
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
echo "export VISIBLE=now" >> /etc/profile
service ssh restart
此處第 4 行設置了容器的 root 用戶登錄密碼爲 mypasswd,第 5 行修改了 ssh 的設置爲可以通過密碼登錄。
需要注意的是,根據 [2] 的回覆中的記錄看,似乎第 5 行可能有問題,導致密碼依舊無法登錄,如有問題可以自行查閱 ssh 配置文檔進行修改。
當然此處更推薦的方式是參考 [4] 中的方式生成 ssh-key,並將 ssh-key 加入容器系統的 /root/.ssh/authorized_keys,這樣可以實現免密登錄,減少了每次登錄輸入密碼的麻煩。
還需要注意的是每次停用 docker 的時候 ssh 服務會關閉,再次使用時候需要再次啓用 ssh 服務,這樣也間接避免了容器內 ssh 服務在不使用時開啓的問題。
配置 oh-my-zsh
Oh-My-Zsh 是一款基於 zsh 的命令行工具,可以說是一種生活方式,而我大概更多是因爲莫名的覺得 oh-my-zsh看起來有點像orz(笑)。
不過也有很多人不習慣使用 zsh,而是更喜歡系統的 bash,因此此處只是介紹下 oh-my-zsh 的配置,使用與否自行決定。
oh-my-zsh 的官方網站是[ohmyzsh],使用文檔可以參考 wiki。
首先需要 安裝zsh。並將 zsh 設置爲默認shell,此處可能會設置失敗,參考:zsh default without chsh
之後需要安裝 ohmyzsh,需要注意的是必須已安裝 curl 或者 wget 以及 git,安裝方式由以下三種:
-
via curl:sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
-
via wget:sh -c "$(wget -O- -https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
-
curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh && sh install.sh
安裝好 ohmyzsh 之後可以設置下主題和插件
插件比較值得推薦的是 zsh-syntax-highlighting,安裝方式參考 How to install,在 ohmyzsh 中可以直接通過命令安裝
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
安裝插件之後運行 plugins=( [plugins…] zsh-syntax-highlighting) 啓動插件。
ohmyzsh的插件和主題及按鍵映射等配置項都在 ~/.zshrc 中,其中
-
ZSH_THEME=“ys”:設置主題,主題可以參考 Themes
-
可以像 oh my zsh 哪些主題比較好看、有特點? 中的回一樣答使用獨(喪)樹(心)一(病)幟(狂)的’random’—— 使用 random 主題的 ohmyzsh 就像一盒巧克力,你永遠不知道下一詞打開會給你帶來什麼樣的主題
-
需要注意的是部分主題需要使用 Powerline fonts ,需要自行安裝字體才能正確顯示各種圖標
-
plugins=(git z zsh-syntax-highlighting):用來設置啓用的插件,插件可以參考 Plugins
-
部分插件如 zsh-syntax-highlighting 需要單獨安裝,詳細信息參考具體插件
-
小鍵盤按鍵映射問題:如果遇到小鍵盤數字鍵無法使用的問題可以參考 Num Pad can’t input #4916 設置按鍵映射
配置 VSCode
上文已經介紹瞭如何使用 docker 創建一個屬於自己的丹爐,那麼下一步就是使用這個丹爐煉丹了。習慣使用 jupyter notebook 的同學可以參考官方設置啓用 jupyter notebook,或者參考[5],但我沒有具體測試過。接下來要參考 [3] 及 [4] 中方法介紹 VSCode 遠程煉丹方法。
PS:以下介紹實際上並不基於 docker,而是在 docker 容器內啓用 ssh 服務後的 VSCode 的通用方法。也就是說對於非 docker 情況,只要能用 ssh 連接則是通用的。
PPS:貌似這種用 ssh 連接 docker 容器的方式比較不符合 docker 理念,而 VSCode Remote 提供了直連容器的方法 [Developing inside a Container],但我目前還沒研究明白…有精通此道的同學請指點下我,或者等我自行領悟後也有可能更新下此文。
爲何選擇 VSCode
VSCode 作爲宇宙第一IDE—— Visual Studio 的兄弟,目標自然是宇宙第一編輯器(Vim、Emacs:嗯?)。
從多年前剛剛發佈時不支持插件的版本開始,VSCode 的市場份額在逐步擴張。
關於 VSCode 能夠成功的原因可以參考下:Visual Studio Code 可以翻盤成功主要是因爲什麼?我這裏說明下我選擇 VSCode 的原因吧。
如果有人問寫 Python 最好的工具是什麼,那我一定毫不猶豫的說 Pycharm;而 C++ IDE 則必須是前文提到的 VS。但是很多時候我要面對的不僅僅是 Python,作爲一個打雜的,C++、Python、Shell 都是常用的,在一些情況下 Java、Perl 也是要會一點的,偶爾做個 Demo 的話 Html 也是需要了解一二的,在更偶爾的情況下世界上最好的語言 PHP 也要能看能改的,面對這種複雜環境,我覺得還是 VSCode 這種能試用不同場景的編輯器比較符合我的需求。
還有就是 VSCode 還能遠程連接服務器,頭文件依賴庫都是直接基於服務器內環境,跳轉、查閱都方便。當然 Pycharm 和 VS 也提供遠程開發——但那不是收費的嘛。
不過 VSCode 也存在它的侷限性,畢竟有些時候臨時使用線上機器或者他人機器,不可能在每臺機器上都配置VSCode,這時還是要靠 Vim 的。總體而言很多開發工作是可以轉移到 VSCode 進行的。
VSCode 安裝及配置
沒啥好說的,看看 官方網站 。而 VSCode 的常用介紹及配置介紹可以參考下 [6] 和 [7] 及其他網上能搜到的相關文章。這裏說幾個我覺得需要注意的地方
-
VSCode 更新速度還是很快的,而一些博客的方案介紹是基於比較早期的版本。比如一些方案介紹的是使用 sftp 同步代碼,但是現在 VSCode 已經支持遠程開發,sftp 的方式變得意義不大。因此最好還是多看看官方文檔,自行判斷需求。
-
VSCode 的設置是以 Json 方式寫到 setting.json 中的,而且區分本地和遠程的,可以根據實際需要爲不同項目編寫不同的設置
-
很多公司爲了安全會採用跳板機/堡壘機的方式連接服務器,在需要進行遠程調整時的 VSCode 配置可以嘗試參考 [8](因爲我暫時不需要,因此沒有認真進行測試)
VSCode 訪問 Docker 容器
VSCode 的 Remote Development 配置可以參考官方文旦 [Remote development over SSH],也可以參考 [4],其中比較需要注意的地方就是 ssh-key 的生成,當然這裏 ssh-key 的應用場景不僅僅是 VSCode。
在按照上文提到的方式在 docker 容器中啓用 ssh 服務後,自然也可以通過 VSCode 的 Remote Development 以 SSH 方式訪問 docker 容器,需要注意的一點是此時 VSCode 的 ssh 配置時要增加 Port 參數,例如
Host TestServer
HostName ${ip}
User root
Port 8022
其中 ${ip} 爲遠程服務器 ip 地址, Port 則爲之前在使用 ‘docker run’ 命令時使用’-p’參數設置的轉發端口。也就是說使用 8022 端口連接,而這個連接會轉發到容器的 22 號端口(默認ssh端口)。因此如果在 ‘docker run’ 時沒指定端口轉發的話,就不能以此方式連接容器。
VSCode 擴展推薦
VSCode 的一個強大之處就在於豐富的擴展——特別是一些官方支持的擴展。前文提到的 Remote Development 就是微軟官方提供的遠程開發擴展集合。
網絡上現在也有很多 VSCode 擴展的推薦,但普遍是前端偏多,畢竟 VSCode 實屬前端神器。而以下會介紹一些我日常使用的擴展,我的目標是把 VSCode 打造成打雜神器。
VSCode 的擴展是有本地安裝和需要遠程安裝兩種情況的,本地安裝的擴展是指在使用 VSCode Remote Development 時不需要在服務器再安裝一遍的,而遠程安裝的是指需要在服務器再次安裝的,其中遠程安裝的擴展也可以使用本地的全局配置。
強烈推薦
-
Code Spell Checker:據說大多數代碼 bug 是因爲拼寫錯誤,裝個拼寫檢查能夠減少拼寫錯誤…然後發現自己定義的各種縮寫命名也都被識別成錯誤拼寫
-
GitLens:Git 高級擴展,文件歷史、行歷史等等功能,用 Git 的都應該裝一個,然而對 git 版本有要求,具體多少我忘了,反正 git 版本太低的是遺憾了
-
koroFileHeader / vscode-fileheader:自動增加代碼文件頭部註釋,可以根據需要配置下要添加的內容,還能自動修改文件最新修改時間
-
Path Autocomplete:在寫代碼時候自動目錄提示,通常寫代碼時候都會有個 src 目錄還有個 data 目錄,有時候在src時候需要指向 data 下的文件,用這個擴展可以避免手動一點點敲相對路徑
-
Remote Development:包括 Remote - SSH、Remote-Containers、Remote-WSL 三個組件,堪稱神器
-
Remote-SSH:通過 SSH 方式連接服務器或虛機,上文介紹的方法即依賴於這個擴展
-
Remote-Containers:連接 docker 容器進行開發,然而還沒搞清具體用法…
-
Remote-WSL:配合 Windows Subsystem for Linux (WSL) 使用,然而我沒用過這個…
-
Resource Monitor:資源使用情況顯示,請對系統資源佔用有點 x 數
-
Vim:Vim 擴展,適合習慣使用 Vim 的同學,然而我還是喜歡鼠標…
-
Visual Studio IntelliCode:微軟官方 IntelliCode 擴展,支持 Python,需要在線下載對應 server,貌似現在在推廣這種使用模型進行提示的策略
主題圖標
-
Community Material Theme:質感主題,VSCode 的主題似乎沒有 Atom 的漂亮,但是也是有挺多的,我比較喜歡這個
-
Material Icon Theme:質感圖標,VSCode 也是支持各種圖標的
代碼高亮美化
-
autoconf:提供 Autoconf M4 和 Automake files 的語法高亮,因爲平常接觸的 C++ 項目中就有使用 Autoconf 的,因此使用了這個擴展
-
Beautify:javascript, JSON, CSS, Sass, 和 HTML 代碼格式化,下載量很高
-
Better Comments:爲代碼註釋中的 TODOs 等信息提供代碼高亮
-
Bracket Pair Colorizer:爲代碼中的括號對提供不同顏色的高亮,嗯,可能有些同學會覺得太浮誇了,但對我這種經常數括號的人還是挺方便的
-
Log File Highlighter:日誌文件高亮,主要是針對 INFO、WARN、ERROR 高亮,方便查看日誌文件
-
MATLAB:Matlab 腳本的高亮、代碼片段、代碼檢查功能
-
Output Colorizer:爲 output/debug/extensions 面版以及 .log 文件提供高亮,剛剛發現這個似乎和 Log File Highlighter 有些重疊
-
prototxt:prototxt 語法高亮,使用 caffe 時候用的… 然而現在都 tf/pytorch 了,caffe 也該功成身退了
-
XML:XML 文件高亮…等等等功能
-
YAML:YAML 文件高亮…等等等功能
C++ 語言擴展
- C/C++:微軟官方 C/C++ 擴展,支持 IntelliSense 和 debugging
在遠程開發時有些公用頭文件會默認安裝在系統目錄,使用這個擴展能夠方便的進行跳轉及查詢,感覺非常方便
-
CMake Tools :微軟官方 CMake 工具擴展,用於項目配置,當然如果像我這樣只想稍微修改下別人的 CMake 文件那可以試試有高亮的 CMake
-
vscode-cudacpp:CUDA C++ 語法擴展,提供 cuda c++ 語法高亮、代碼片段功能,深度學習高級玩家應該會用到,我就是用高亮看看代碼
Docker 擴展
Docker:微軟官方 Docker 擴展,支持建立、管理docker容器,Dockerfile 編寫等功能,然而上文介紹的方式是基於 ssh 的,因此並未使用此擴展
Java 語言擴展
-
Java Extension Pack:微軟官方 Java 擴展 Pack,可以通過這個擴展一鍵開關相關 Java 擴展
-
Language Support for Java™ by Red Hat:Code Navigation、Auto Completion、Refactoring、Code Snippets
-
Debugger for Java:微軟官方 Java debug 擴展
-
Java Test Runner:Run & Debug JUnit/TestNG Test Cases
-
Maven for Java
-
Java Dependency Viewer:View Java projects, referenced libraries, resource files, packages, classes, and class members
Python 語言擴展
Python:微軟官方 Python 擴展,支持 Python2、3
- 支持 Python 解釋器的選擇,同樣支持 Python 虛擬環境,也就是說可以直接選擇 Python 環境作爲解釋器
-
支持 IntelliSense, linting, debugging, code navigation, code formatting, Jupyter notebook, refactoring, variable explorer, test explorer, snippets 等功能,Python 程序員必備
-
IntelliSense 還可以考慮使用 Kite 或者 TabNine 什麼的
-
linting 可以通過 “python.formatting.provider”: “autopep8”, 設置,還支持 yapf 和 black
-
Jupyter notebook 的支持爲使用 docker 遠程煉丹提供了方便,效果類似於下圖,具體參考[Working with Jupyter Notebooks in Visual Studio Code]
-
debugging 可以直接調用遠程 Python 環境進行 debug,圖下圖所示,最左邊紅箭頭指的地方是 debug 面板,上方紅色箭頭指的地方是局部變量,右方紅色箭頭指的是設置斷點的地方,具體參考 [Python debug configurations in Visual Studio Code]
-
python snippets:一些 python 的代碼片段
-
kite:Kite 的 VSCode 擴展,AI自動補全工具,不過我還是用的 Visual Studio IntelliCode,類似的還有 TabNine
Shell 腳本擴展
-
Bash IDE:Shell 腳本跳轉、補全等等,基於 bash language server,需要 nodejs,所以屬於看需求使用
-
shellman:Bash Scripting Snippet,適合我這種 Shell 二把刀,還有配套教程電子書 shellman ebook
版本管理擴展
Bookmarks:爲 VSCode 提供書籤功能,有書籤面板,不過書籤的位置和斷點是重疊的,不是點擊即添加還算有點遺憾
-
Chinese (Simplified) :簡體中文官翻包,然而我沒安裝,因爲受不了菜單中中英混雜的情況(該死的強迫症)
-
Markdown All in One:Markdown 擴展,基本上 Markdown 需要的功能都支持了,寫個文檔挺方便的
-
Partial Diff:任意兩段文本之間的 diff,在某些時候挺方便的其實
-
Project Manager:VSCode 項目管理,可以方便在項目中進行切換,然而目前還不支持遠程項目…
-
Settings Sync:VSCode 尚未支持配置同步是個遺憾,這個擴展通過 GitHub Gist 對配置進行同步,算是曲線救國吧
-
Todo Tree:能夠吧代碼中的 Todo、Fixme 之類的在邊欄顯示,可以參考[9],值得推薦
-
這個擴展使用 ripgrep 進行關鍵字搜索,在遇到目錄中有大文件時會佔用大量資源,可以通過 todo-tree.filtering.excludeGlobs把數據文件排除
偶爾用一用的擴展
-
Ascii Tree Generator:生成類似下圖的 Ascii Tree,我覺得會有用到的時候,然而並沒有用過…
-
Code Runner:國人寫的擴展,參考 [10],下載量和評價都很高,支持多種語言的運行配置,不過我沒怎麼用過…
-
Color Picker for VS Code:方便在 VSCode 中取色調色,下載量不低,但是評分不高,我也不常用
-
Excel Viewer:CSV 文件的擴展,提供更好的查看模式
-
Rainbow CSV:CSV 文件的擴展,分列高亮,偶爾需要查看 CSV 文件時候可以用一用
-
Readme Pattern:README.md 模板,有 Bot, Hackathon, Minimal, Standard 四種,寫項目時候留個 README.md 是好習慣,然而不隨代碼更新的話就很坑了
-
SFTP:VSCode 的 SFTP 的擴展,然而我更習慣 WinSCP
-
Sort JSON objects:把 Json 文件排序,我裝這個擴展的目的就是把我的 VSCode 配置文件 sort 了一下(我這強迫症啊)
總結
以上用了 8000 來字介紹了一些 docker + vscode 的配置,然而大家可以我介紹的詳細程度看出來:沒錯,我就是來吹 VSCode 的(笑)。
言歸正傳,其實除了我這裏提到的 Docker 的方法外,其實 Python 的虛擬環境也是個很好的隔離選擇,可以用來配置不同版本的 python 解釋器。
最後祝大家都能配置好自己煉丹爐,不受別人的爐子干擾,也不干擾別人的爐子…
參考資料
-
VSCode+Docker: 打造最舒適的深度學習環境
-
PyCharm+Docker:打造最舒適的深度學習煉丹爐
-
在 VS Code 中使用容器開發
-
使用vscode進行遠程煉丹
-
如何構建包含TensorFlow/Python3/Jupyter的Docker?
-
萬字長文把 VSCode 打造成 C++ 開發利器
-
如何讓 VS Code 更好用10倍?這裏有一份VS Code 新手指南
-
[VS Code]如何通過跳板機連接服務器進行遠程開發:Remote-SSH 篇
-
vscode 插件推薦 todo-tree
-
[VSCode插件推薦] Code Runner: 代碼一鍵運行,支持超過40種語言
ⓝ
MaiweiE-com|WeChat ID:Yida_Zhang2
推薦閱讀
(點擊標題可跳轉閱讀)
[1] 超讚的PyTorch資源大列表,GitHub標星9.4k+,中文版也上線了
[2] GitHub標星23k+,從零開始的深度學習實用教程 | PyTorch官方推薦
[3] TPU也能快速運行PyTorch,只需一行代碼安裝即可快速移植
[4] GitHub推出雲端IDE,幾秒完成開發環境配置,今後可以在瀏覽器裏使用VS Code了
關注微信公衆號,內容首發於公衆號。
知識星球:社羣旨在分享AI算法崗的秋招/春招準備攻略(含刷題)、面經和內推機會、學習路線、知識題庫等。