zoukankan      html  css  js  c++  java
  • docker中安装anaconda+ jupyter(远程访问)+tensorflow

    一、docker安装anaconda

    1、到anaconda清华镜像网站下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

    注意版本:Anaconda2表示python2,Anaconda3表示python3。查看:https://blog.csdn.net/yuejisuo1948/article/details/81043823

    2、如下载的是Anaconda3-5.3.0-Linux-x86_64.sh,则安装的命令是 sh Anaconda3-5.3.0-Linux-x86_64.sh

    3、更新环境变量

    # source ~/.bashrc

    # conda -V

    4、安装相关包:conda install 包名

    如安装jupyter notebook,详细看一; conda install jupyter notebook

    启动:jupyter notebook

    5、创建tensorflow环境:

    • conda create -n tf1.13.1-py3.6 python=3.6
      激活环境:source activate tf1.4-py3.6
       
      查看conda有哪些环境:conda info -e
       

    二、安装jupyter

    进入docker交互式环境:docker exec -it ***** bash

    安装jupyter:

    • 安装python dev包 :  apt-get install python-dev
    • 安装jupyter :  pip install jupyter [若pip没安装好,需要安装sudo apt install python3-pip]

    配置文件:

    • 生成jupyter配置文件:jupyter notebook --generate-config
    • 使用ipython生成密码 

    In [1]: from notebook.auth import passwd

    In [2]: passwd()

    Enter password:

    Verify password:

    Out[2]: 'sha1:******'

    • 到配置文件/root/.jupyter/jupyter_notebook_config.py中修改以下参数

    c.NotebookApp.ip='*'                          #绑定所有地址,即所有IP 地址都可以访问
    c.NotebookApp.password = u'sha1:******'
    c.NotebookApp.open_browser = False            #启动后是否在浏览器中自动打开
    c.NotebookApp.port =8100                      #指定一个访问端口8100,默认8888

    c.NotebookApp.allow_remote = True     #将远程访问设置成True

    启动:

    jupyter notebook --allow-root

    本机访问:

    • 查看docker IP,需安装  apt install net-tools ,然后输入命令ifconfig -a。

    找到inet后的IP地址即为docker地址。如:inet  153.16.0.1

      • 远程访问:http://153.16.0.1:8100即可。8100为配置文件时修改的启动端口,若有密码,即token=  后面输入密码。/

     远程访问:

    在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。

    1、若没有启动容器时,即docker run -it ***,则可以通过以下命令指定容器8888端口映射成主机端口8000。-p 后面接主机端口:容器端口,-d表示后台执行,-it是进入交互式。

      docker run -d -it -p 8000:8888 tensorlow_gpu:latest /bin/bash

      【然后通过docker ps可以查看映射成功】

    2、若容器已经执行了,即docker ps -a是存在的容器可以通过以下两种方式:本人只成功了第一种:

    (1)

      • 提交一个运行中的容器为镜像,先查询该容器的ID *****,通过docker ps -a查询,以下tensorflow1_13_1是自己取的新容器名字。
    docker commit ****(containerid) tensorflow1_13_1
      • 运行镜像并添加端口
    docker run -d -it -p 8000:8888 tensorflow1_13_1 /bin/bash
      • 进入docker 中,docker exec -it *****(新容器ID,docker ps -a查询) bash
      • 启动jupyter notebook,jupyter notebook --allow-root,默认端口8888
      • 远程访问jupyter,浏览器中输入网址:主机IP+映射端口8000,即http://11.161.112.1:8000

    (2)试得不成功,没理解inspect ,过后再补

    http://www.yinxi.net/doc/show.php?DocID=10732

    1、获得容器IP

    将container_name 换成实际环境中的容器名

    docker inspect `container_name` | grep IPAddress

    2、 iptable转发端口

    将容器的8000端口映射到docker主机的8001端口

    复制代码 代码如下:
    iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

    三、安装tensorflow

    1、安装cuda和cudnn

    CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
    链接:https://www.jianshu.com/p/622f47f94784
    只要把cuDNN文件复制到CUDA的对应文件夹里就可以,即是所谓插入式设计,把cuDNN数据库添加CUDA里,cuDNN是CUDA的扩展计算库,不会对CUDA造成其他影响。

    (1)注意显卡型号:

    输入命令lshw -c video,查看显卡型号driver version。找到对应的cuda版本下载。

    看到以下这些结果表明支持nvidia以及显卡类型为GP102 [TITAN Xp]

    product: GP102 [TITAN Xp]

    vendor: NVIDIA Corporation

    (2)安装显卡驱动

    NVDIA driver search page搜索你的显卡需要的驱动型号并下载(如图)。

    或者输入命令查询可用 驱动版本:ubuntu-drivers devices

    要想安装440:sudo apt install nvidia-440

    测试安装成功:输入nvidia-smi命令测试是否有结果

    (3)安装cuda

    如果训练中用到了 tensorflow,应该确认一下 cuda 版本与 tensorflow 版本的兼容性问题

    https://tensorflow.google.cn/install/source#linux

    确定安装cuda10.0+cudnn7.4+tensorflow1.13.1

    cuda下载地址:https://developer.nvidia.com/cuda-toolkit-archive

     根据命令安装cuda

    (4)安装cudnn

    https://developer.nvidia.com/rdp/cudnn-archive

    下载对应版本的tgz文件,然后解压 tar xfz

     (5)安装tensorflow1.13.1

  • 相关阅读:
    关于StringBuilder拼成的json格式数据,在转化成string数据类型后,转义符失效
    jQuery 引用地址{包括jquery和google提供的地址}, 节省你不必要的流量
    jQuery的.bind()、.live()和.delegate()之间区别
    使用Jquery Easy UI要导入的js顺序
    babygin
    card
    DecimalFormat用法
    DATEDIFF 函数 [日期和时间]
    IsDirectory( )的用法
    Arrays.asList()函数
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/12163947.html
Copyright © 2011-2022 走看看