Keras 安装在Docker容器中运行
将Keras放到Docker+Jupyter中运行,不仅便于安装、兼容性好、容易迁移,而且可以通过Notebook的浏览器界面远程访问。这里介绍将Keras安装在Docker容器中运行的方法和步骤,通过Jupyter Notebook进行容器服务的Python代码编写,通过web浏览器进行远程访问。
先获取一个现成的镜像:
docker pull kaixhin/keras
把这个镜像作为一个容器运行起来:
docker run -it --name keras -p 8880:8888 -v /***/OpenAI:/Users kaixhin/keras
- -it 选项启动一个交互式的shell,注意退出时容器实例也会退出。
- --name 容器的名称,建议取一个自己的名称,如果没有,系统将自动给一个。
- -p 映射端口,8880为外部访问端口,8888为容器内部端口,否则外面主机访问不到服务。
- -v 上面的/***/OpenAI为自己的本地目录,映射到容器中访问,用于与宿主机的共享数据存放。
查看容器状态:
- 查看所有的镜像:docker images
- 查看运行的容器:docker ps
- 查看所有的容器:docker ps -a
然后,就可以:
- 退出后重新启动容器:docker start keras
- 保存当前容器到镜像:docker commit keras openthings/keras
安装Jupyter, Web界面
sudo apt-get install vim -y
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install python3-pip -y
sudo pip3 install jupyter
ipython3 kernel install
安装Python2内核:
python2 -m pip install ipykernel
python2 -m ipykernel install --user
安装Jupyter扩展
Jupyter已经有很多扩展,可以支持很多种开发语言,查看https://github.com/ipython/ipython/wiki。
交互界面扩展组件
pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension
安装Scala支持
sudo apt-get install openjdk-7-jre
sudo curl -L -o jupyter-scala https://git.io/vrHhi && chmod +x jupyter-scala && ./jupyter-scala && rm -f jupyter-scala
安装Spark的支持
Spark的Jupyter支持已经发展了多个项目,各有侧重,目前代替Spark Shell的功能已经绰绰有余。
- https://github.com/jupyter/docker-stacks,Jupyter官方Docker技术栈。
- https://github.com/alexarchambault/jupyter-scala
- https://github.com/andypetrella/spark-notebook,集成Spark和Jupyter的独立运行Docker。
- https://github.com/apache/incubator-toree
- https://github.com/apache/incubator-zeppelin,Apache准官方的Jupyter技术栈。
- https://github.com/tribbloid/ISpark
#配置Jupyter远程访问
jupyter notebook --generate-config
将生成文件:~/.jupyter/jupyter_notebook_config.py
然后,编辑:
vim ~/.jupyter/jupyter_notebook_config.py
按“I”键,进入修改状态,修改为如下:
144: c.NotebookApp.ip = '*'
185: c.NotebookApp.open_browser = False
注意,如果不在局域网使用,需要设置密码,参考Jupyter相应的设置:
- 密码设置: http://jupyter-notebook.readthedocs.io/en/latest/public_server.html?highlight=NotebookApp.password
- 更多参考:http://jupyter.readthedocs.io/en/latest/index.html )。
按“Esc”、“:”键,输入“wq”,保存,退出vim。
客户端在浏览器运行
- 然后esc:wq退出vim。
- 运行:jupyter notebook。
- 访问:http://127.0.0.1:8880 。
** 注意,启动容器时一定要映射端口到宿主机,如前“-p 8880:8888”参数,里面的8888为缺省的Jupyter端口,8880为外面可访问的主机端口。**
GPU/CUDA支持
要在Docker中启用CUDA,建议使用NVidia-docker容器宿主程序。
##下载NVidia官方驱动
到NVidia官网下载驱动。默认的Linux使用的开源驱动运行nvidia-docker会有问题。
需要的话,安装Cuda专用支持软件。
##安装nvidia-docker
按照https://github.com/NVIDIA/nvidia-docker的说明安装。
# Install nvidia-docker and nvidia-docker-plugin
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
# Test nvidia-smi
nvidia-docker run --rm nvidia/cuda nvidia-smi
##启用CUDA版的Docker容器
启动时应使用CUDA对应的Docker版本。
docker pull kaixhin/cuda-keras
nvidia-docker run -it --name keras -p 8880:8888 -v /***/OpenAI:/Users kaixhin/cuda-keras
- 注意:把上面/***/OpenAI改成自己的宿主机目录,是用来做宿主机存储的。
运行的时候如果出错,可能是显卡驱动的原因。参考https://my.oschina.net/u/2306127/blog/748110更新为NVidia的官方驱动后就可以了。