Server Manual (User)

 

Dandanman使用手冊

Notation:

  • somebody: 本機使用者帳號
  • PC: 本機
  • user_name: 遠端主機帳號
  • user_password: user_name對應密碼
  • $: bash prompt
  • #: root prompt
  • env_name: 虛擬環境名稱
  • ~: 通常是shell環境變數中的$HOME,也就是/home/user_name這個目錄 Other: nano為一個輕量級的編輯器,是很多linux distro有附裝的編輯器,厲害的大大們也可以用vimemacs等(附帶一提,nano中的^為ctrl鍵; M為alt鍵)

.bashrc Example

新硬碟使用手冊

ToC

[toc]

0. 準備SSH軟體

Windows users可使用的ssh client: putty、BitviseSSH 推薦:thumbsup:MobaXterm DL助教推薦
其他建議使用:

  • zsh: z-shell,個人認為比bash方便(更好的auto-complete、typo糾正等),尤其在搭配oh-my-zsh後,實用度up up
  • tmux: tl;dr: 神器,你值得擁有:thumbsup:
    tmux是一個session manager。人話翻譯:當你不小心把你的ssh client關掉(不小心把putty關掉,或win10自動更新、重開機等慘劇),原本在執行的程式例如jupyter、nvtop等(session)就會被關掉,有了tmux,就沒有這個問題(tmux會繼續幫你管理這些sessions),另外還可以在一個ssh client畫面分割出不同小視窗,同時執行jupyter、用nvtop監控顯卡情況等,想要炫泡一點,可以搭配oh-my-tmux

1. 新增帳號

1.1 使用主帳密登入

somebody@PC:~$ ssh dandanman@server_ip

Windows users請開啟安裝的ssh client

1.2 使用adduser指令新增帳號

adduser指令教學useradd指令較學

dandanman@dandanman:~$ sudo adduser user_name

基本上只要在意Unix password就好,其他可以不填

2. 設定anaconda PATH參數

重灌後應該已經不再需要設定了,請直接跳到5!!!
重灌後應該已經不再需要設定了,請直接跳到5!!!
重灌後應該已經不再需要設定了,請直接跳到5!!!
hen重要,所以說3遍!!!
如果大家都開虛擬環境裝最新版的tf和keras(先不論版本間可能不相容,導致code無法共用的問題),硬碟容量會不夠!!!
如果有特別想裝的package(卻遇到權限問題),可以1. 偷用dandanman主帳號下sudo指令安裝 2. 參考3.3

以下步驟已有懶人包,可以直接將上面的.bashrc的內容貼到自己home目錄下的.bashrc檔,跳到3.0.3

2.1 編輯.bashrc

user_name@dandanman:~$ nano .bashrc

2.2 在文件底部加入:

export PATH="/opt/anaconda3/bin:$PATH"

2.3 重新載入.bashrc

user_name@dandanman:~$ source .bashrc

3. 安裝TensorFlow及Keras

Installing with Anaconda

3.0 設定CUDA PATH參數

3.0.1 開啟.bashrc

user_name@dandanman:~$ nano .bashrc

3.0.2 在文件底部加入:

export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/extras/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME="/usr/local/cuda-9.0"

3.0.3 重新載入.bashrc

user_name@dandanman:~$ source .bashrc

3.1 使用conda建立虛擬環境

不用建立虛擬環境的方法請見3.3

Managing environments

方法0. 手動安裝

∵開新的虛擬環境時,會缺少很多常用的python packages

建議直接用(跳到)方法2,直接複製root環境安裝的conda packages

user_name@dandanman:~$ conda create -n env_name python=3.6 # 記得將env_name替換為想取的名字
user_name@dandanman:~$ source activate env_name            # 進入虛擬環境
(env_name) user_name@dandanman:~$ conda install numpy scipy matplotlib    # 安裝常用package
(env_name) user_name@dandanman:~$ source deactivate        # 離開虛擬環境

方法1. Build from package-list

# 產生package list
user_name@dandanman:~$ conda list --export > package-list.txt
# 用package list建立新虛擬環境
user_name@dandanman:~$ conda create -n env_name -f package-list.txt
# or 根據package list安裝至虛擬環境
user_name@dandanman:~$ conda install -n env_name -f package-list.txt
user_name@dandanman:~$ source activate env_name            # 進入虛擬環境
(env_name) user_name@dandanman:~$ source deactivate        # 離開虛擬環境

方法2. Clone from existing env 推薦:thumbsup:

# 列出所有虛擬環境
user_name@dandanman:~$ conda env list
# 複製已存在虛擬環境,例:root
user_name@dandanman:~$ conda create -n env_name --clone cloned_env
user_name@dandanman:~$ source activate env_name            # 進入虛擬環境
(env_name) user_name@dandanman:~$ source deactivate        # 離開虛擬環境

3.2 使用pip安裝tensorflow及keras

先進入虛擬環境再執行以下步驟

pip安裝的版本較新(同時也是官方文件的作法);若是複製其他虛擬環境,也只是複製了用conda安裝的packages,無法複製用pip安裝的tensorflow及keras

(env_name) user_name@dandanman:~$ pip install --ignore-installed --upgrade tfBinaryURL
# 初次安裝其實可以將--ignore-instaled --upgrade這兩個flag拿掉
(env_name) user_name@dandanman:~$ pip install keras

tfBinaryURL (dandanman python version: 3.6.2)

3.3 使用pip install --user安裝local pip package

在虛擬環境外,直接pip install會將package裝到/opt下,出現permission denied的問題,此時可嘗試加上--user,將package安裝在local端(自己的home目錄下)

user_name@dandanman:~$ pip install --user package_name

使用--user安裝的package會在$HOME/.local下,記得在PATH環境變數中加入.local路徑:

export PATH=$HOME/.local/bin:$PATH

4. iPython Kernel (Spyder Users) ← currently unavailable, reason unknown

Cookbook

4.1 確認jupyter runtime目錄

(env_name) user_name@dandanman:~$ jupyter --runtime-dir
# 將會回傳jupyter runtime目錄 (/run/user/user_id/jupyter)

4.2 開啟kernel

# 新增kernel
(env_name) user_name@dandanman:~$ ipython kernel
# 將會顯示kernel的json檔 (--existing kernel-一串數字.json)
# or 使用既有kernel的json檔 (forget this)
# (env_name) user_name@dandanman:~$ ipython kernel --existing kernel-一串數字.json

4.3 複製json檔到本機端

somebody@PC:~$ scp server_ip:/run/user/user_id/jupyter/kernel-一串數字.json 本機端位置

Windows Users可用Bitvise SSH提供的SFTP介面

4.4 Spyder連接remote ipython kernel設定

4.4.1

開啟Spyder→Consoles→Connecting to an existing kernel

4.4.2

點擊Browse選擇剛剛複製下來的json檔

4.4.3

勾選This is a remote kernel,並輸入

  • Host name: user_name@server_ip
  • Password: user_password

注意!!!無論是使用Spyder或是Jupyter Notebook,檔案都是要放在dandanman上的!!!

5. Jupyter Notebook (Jupyter Users)

方法一: 使用shell

user_name@dandanman:~$ jupyter notebook password

此方法會產生json格式的config file,會override前面generate-config產生的.py

方法二:在iPython或Spyder或自己的Jupyter Notebook上執行下列程式碼:

from notebook.auth import passwd
passwd()
# 將Output複製起來

開啟config file:

user_name@dandanman:~$ nano .jupyter/jupyter_notebook_config.py

常用config設定(使用nano時,ctrl-w 可搜尋關鍵字):

修改設定後,千萬記得將註解拿掉!

c.NotebookApp.ip = '0.0.0.0'          # default: localhost
c.NotebookApp.port = 8888             # 不要和其他人重複(查詢使用中port,見7.其他)
c.NotebookApp.open_browser = False    # 不改的話,會在dandanman桌面開啟瀏覽器@_@
c.NotebookApp.password = ''           # 產生密碼時若是使用方法二,將複製的值貼在這裡(ctrl-shift-v)
c.NotebookApp.password_required = True
c.NotebookApp.notebook_dir = '/mnt/sda/<usr name>'

5.3 開啟Jupyter Notebook

user_name@dandanman:~$ jupyter notebook
# 在自己的電腦開啟瀏覽器,到設定的JpyterNotebook url(http://server_ip:你設定的port)

(Optional) JupyterLab Setup :thumbsup:

介面比較美!

5.3.1 conda install

(env_name) user_name@dandanman:~$ conda install -c conda-forge jupyterlab

5.3.2 Enable extension

(env_name) user_name@dandanman:~$ jupyter serverextension enable --py jupyterlab --sys-prefix

5.3.3 Visit JupyterLab

(env_name) user_name@dandanman:~$ jupyter lab
# or
(env_name) user_name@dandanman:~$ jupyter notebook
# 在自己的電腦開啟瀏覽器,到設定的JpyterNotebook url(http://server_ip:你設定的port),將/tree改為/lab

(Optional)設定default url(直接進JupyterLab)

在.jupyter/jupyter_notebook_config.py中更改:

c.NotebookApp.default_url = '/lab'

(Optional)調整字體大小等

當你覺得字太小了

6. 使用Keras時,GPU Memory的調配 (重要!!!)

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.1
set_session(tf.Session(config=config))

關於如何在所有程式(cells)跑完後,自動shutdown jupyter notebook的kernel,請參考這裡
自動釋出GPU memory請參考這裡

7. 其他

Jupyterlab Extensions

查詢登入使用者

user_name@dandanman:~$ who
# or 
user_name@dandanman:~$ w

查詢GPU使用狀況

user_name@dandanman:~$ nvidia-smi
# or
user_name@dandanman:~$ nvtop

查詢port使用狀況

user_name@dandanman:~$ netstat -tulpn | grep LISTEN

查詢硬碟使用狀況(disk usage)

user_name@dandanman:~$ du -sh ~/*

廣播訊息

user_name@dandanman:~$ wall 'Hello world!'

私訊

user_name@dandanman:~$ write 對象user_name 對方的tty(可由w指令查得)

按下enter後,開始輸入訊息,ctrl-d關閉對話

查詢使否有安裝某python package

user_name@dandanman:~$ conda list | grep 要查詢的package名稱
# 如果執行後沒東西,代表沒有安裝

主機間的檔案複製

ref

$ scp 檔案來源位置 目標位置
# 從本地複製test下所有檔案檔案到遠端主機(若是同樣user_name則只須給ip就好)的hdd目錄
scp ./test/* [email protected]:~/hdd/
# 從遠端主機(user_name相同)複製hello_world.txt到本地的~/honey/lemon目錄下並改名為juejuejue.txt
scp 192.168.94.87:~/hello_world.txt ./honey/lemon/juejuejue.txt