Docker+VSCode 配置屬於自己的深度學習煉丹爐

來自 | 知乎
作者 | 常慶豐
地址 | 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

版本管理擴展

  • SVN:VSCode 的 SVN 擴展,可以查看下 svn 提交歷史,在使用時可以直接查看已修改代碼與原始代碼區別,推薦用 svn 的同學裝一個

  • 其他擴展

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 解釋器。

最後祝大家都能配置好自己煉丹爐,不受別人的爐子干擾,也不干擾別人的爐子…

參考資料

  1. VSCode+Docker: 打造最舒適的深度學習環境

  2. PyCharm+Docker:打造最舒適的深度學習煉丹爐

  3. 在 VS Code 中使用容器開發

  4. 使用vscode進行遠程煉丹

  5. 如何構建包含TensorFlow/Python3/Jupyter的Docker?

  6. 萬字長文把 VSCode 打造成 C++ 開發利器

  7. 如何讓 VS Code 更好用10倍?這裏有一份VS Code 新手指南

  8. [VS Code]如何通過跳板機連接服務器進行遠程開發:Remote-SSH 篇

  9. vscode 插件推薦 todo-tree

  10. [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了

[5] 有了這些珍藏的實用工具/學習網站,自學更快樂!

關注微信公衆號,內容首發於公衆號。

在這裏插入圖片描述

△微信掃一掃關注「邁微電子研發社」公衆號

知識星球:社羣旨在分享AI算法崗的秋招/春招準備攻略(含刷題)、面經和內推機會、學習路線、知識題庫等。
在這裏插入圖片描述

△掃碼加入「邁微電子研發社」學習輔導羣

在這裏插入圖片描述

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