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

1,523 阅读2分钟

多数情况下我们都是在本地使用 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, 就不用每次都弄一遍了.