如何在伺服器上使用 Tensorflow, Notebook

Dom_秋發表於2019-02-11

多數情況下我們都是在本地使用 Anaconda 來安裝 tensorflow, notebook 做深度學習, 資料分析.

但有時還是有需要在伺服器上處理這些事, 比如 macbook 空間又雙叕不夠啦, 公司的資料不方便走外網啦, 資料導來導去非常麻煩啦, 還不如直接在伺服器上跑 notebook 分析資料.

好, 不廢話了, 直接上

1. 安裝 conda

Anaconda 其實也是用的 conda 來安裝 package, 所以我們直接用conda 就行了. 下面就以 Ubuntu 環境下安裝 conda:

# Install our public gpg key to trusted store

curl https://repo.anaconda.com/pkgs/misc/gpgkeys/anaconda.asc | gpg --dearmor > /tmp/conda.gpg

install -o root -g root -m 644 /tmp/conda.gpg /etc/apt/trusted.gpg.d/

# Add our debian repo

echo "deb [arch=amd64] https://repo.anaconda.com/pkgs/misc/debrepo/conda stable main" > /etc/apt/sources.list.d/conda.list

apt-get update

apt-get install conda

複製程式碼

2. 常用的 conda 命令

# 把 conda 加入環境變數, 你也可以在 ~/.bash_profile 里加入一行 export PATH
> source /opt/conda/etc/profile.d/conda.sh

# 驗證 conda 命令是否正常
> conda -V
conda 4.5.11

# 更新一下 conda
> conda update conda

# 建立一個 conda 環境
conda create --name <env_name>

# 檢視當前有哪些環境
conda info --envs

# 啟用環境
conda activate <env_name>

# 在這個環境下安裝庫
conda install <packagename>

# 列出當前環境下安裝的庫
conda list

# 刪除環境下的庫
conda remove <packagename>

# 退出環境
conda deactivate
複製程式碼

3. conda 安裝 tf, notebook

下面的例子建立了一個叫 tf 的 conda 環境, 然後安裝 tf, notebook.

conda create --name tf
conda activate tf
conda install tensorflow jupyter notebook
複製程式碼

4. 啟動 notebook

在這個環境下啟動 notebook, 指定ip, port. 埠避開了常用的 8080.

jupyter notebook --ip=127.0.0.1 --port=10082 --allow-root
複製程式碼

啟動時留意一下 token, 一會訪問 notebook 時要用到.

啟動notebook

5. 配置 nginx

通過 nginx 把 test.notebook.domain.com 的請求打到第4步的 notebook 的埠.

因為 notebook 還用了 websocket, nginx需要支援.

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
  server_name test.notebook.domain.com;
  listen 80;

  location / {
    proxy_pass            http://127.0.0.1:10082;
    proxy_set_header      Host $host;
    proxy_http_version    1.1;
    proxy_set_header      Upgrade $http_upgrade;
    proxy_set_header      Connection $connection_upgrade;
  }
}
複製程式碼

6. 熱啟動 nginx

nginx -s reload
複製程式碼

7. 修改本地 hosts

nginx 裡配置的域名 test.notebook.domain.com 不需要做域名解析, 我們修改一下本地hosts 就好.

[雲伺服器ip] test.notebook.domain.com
複製程式碼

8. 訪問 notebook

開啟瀏覽器, 訪問 test.notebook.domain.com 這時熟悉的 notebook 介面出來了.

訪問notebook

9. 新增 notebook 配置

這時雖然能訪問了, 但建立新的 notebook 指令碼時會報錯, 原因是請求跨域了. 要解決這個問題雖然可以按跨域請求思路找辦法, 但 jupyter 已經可以通過配置來解決, 還能去掉token.

touch ~/.jupyter/jupyter_notebook_config.py
複製程式碼

新增4行

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.token = ''
c.NotebookApp.allow_origin = '*'
c.NotebookApp.disable_check_xsrf = True
複製程式碼

這裡再重新啟動 notebook 就可以正常建立了.

有興趣的同學可以把這些步驟做成 ansible playbook, 就不用每次都弄一遍了.

相關文章