Dandanman使用手冊
Notation:
somebody
: 本機使用者帳號PC
: 本機user_name
: 遠端主機帳號user_password
:user_name
對應密碼$
: bash prompt#
: root promptenv_name
: 虛擬環境名稱~
: 通常是shell環境變數中的$HOME,也就是/home/user_name這個目錄 Other:nano
為一個輕量級的編輯器,是很多linux distro有附裝的編輯器,厲害的大大們也可以用vim
、emacs
等(附帶一提,nano
中的^為ctrl鍵;M
為alt鍵)
.bashrc Example
新硬碟使用手冊
ToC
[toc]
0. 準備SSH軟體
Windows users可使用的ssh client: putty、BitviseSSH 推薦、MobaXterm DL助教推薦
其他建議使用:
- zsh: z-shell,個人認為比bash方便(更好的auto-complete、typo糾正等),尤其在搭配oh-my-zsh後,實用度up up
- tmux: tl;dr: 神器,你值得擁有
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
指令新增帳號
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
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
方法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 推薦
# 列出所有虛擬環境
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
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)
- Running a notebook server
- JupyterLab
- JupyterHub
5.1 產生default config file
user_name@dandanman:~$ jupyter notebook --generate-config
5.2 開啟並編輯config file
產生hash、加salt的密碼:
方法一: 使用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
介面比較美!
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名稱
# 如果執行後沒東西,代表沒有安裝
主機間的檔案複製
$ 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