美文网首页大数据程序员
Jupyter DashBoards 另类全家桶

Jupyter DashBoards 另类全家桶

作者: ClarkMMM | 来源:发表于2017-06-11 07:59 被阅读1405次

    概述

    今天看到一个非常好的功能 Jupyter DashBoards

    基于Jupyter的仪表盘,非常Nice的功能,可以实现定制化,可视化与代码的分离

    然后在这个基础上依次修正以及补充,基于Jupyter的一些误区和知识

    本机的环境是 py3jupyter

    感觉今天最大的收货是对学会看 docker 的配置文件 + 学会查找 github issue

    插件-nb extensions

    Git项目地址是,nbextensions 以及 nbextensions_configurator。前者是各类型有用的插件,后者是能够直接在Jupyter 上图形话调节界面的功能。

    这里今天得到的收获主要是基于虚拟环境的一个配置问题

    在官网上,安装完 nbextensions 之后,本质是将一
    大堆插件放在下面目录下

    /Users/{user}/Library/Jupyter/extensions

    接下来进行插件激活和路径指定,官网上的提示使用的是

    jupyter contrib nbextension install --user
    

    如果这么操作的话,是在用户目录 例如 /home/user/.jupyter 下面生成 nbextensions 的配置, 这会导致环境不隔离的情况。

    正确的做法,切换到新的环境下的jupyter,执行

    jupyter contrib nbextension install --sys-prefix
    

    这样就做到只影响该环境下的Jupyter,在某环境下的 /etc/jupyter 文件夹下产生对应的配置文件,nb的 和 notebook的都有,如果对于 notebook的配置有特殊的配置,可以写在这里,例如密码,token等。

    如果要删除该内容,install 替换为 uninstall。

    如果因为选择的是 users 会导致的问题是 no module named nbextensions,某些和root 环境不一致的环境找不到配置文件

    jupynter 版本的问题

    2017年06月04日,jupyter notebook 的版本已经升级到了5.0,但是通过 pip 安装的 nbextensions 的插件所写的代码,是4.x的程序,这个通过找 github issues, 发现作者已经在 master 分支上做了修改,nbextensions.py 这个文件,修改如下代码即可

    try:
        # notebook > 4.2
        from notebook.nbextensions import _get_nbextension_dir as get_nbext_dir
    except:
        # notebook <= 4.2
        from notebook.nbextensions import _get_nbext_dir as get_nbext_dir
    

    Jupyter DashBoard

    代码组成

    这是一个非常另类的套装, 由以下几个部分组成

    jupyter/dashboards, notebook 插件将代码转化为可定制的 dashboard

    dashboards_bundlers,notebook 插件将定制好的dashboard 输出到 server端

    dashboards_server,nodejs web框架,主要作用是与juypter server 通信展示只读功能的dashboard

    kernel_gateway,一个中间的类似于代理的web框架,用于和dashboard server 通信

    dashboards_setup ,一套基于docker的服务范例,讲解各个服务如何配置

    架构流程如下图:

    image.png

    整完这一套,模型开发人员,两行代码就一套定制化的BI系统。这套系统搭建的时候最难的地方是连接

    dashboard 连接

    • Jupyter Notebook

    这个是一端,启动的时候需要配置一下启动token和Server 的端口,方便和另一端加密验证。

    # token 的配置写在了配置文件里
    # 端口设置在环境变量中
    jupyter notebook
    
    • Dashboard Server

    用于HTML展示。有两个主要输入,一个是token作为加密验证的功能,一个是 gateway的地址 http://host:port 即可

    # 和 kernal 指定的ip 一致
    # token 设置在了环境变量里
    jupyter-dashboards-server --KERNEL_GATEWAY_URL=http://{kernal}:8888
    
    • kernal gateway

    这个是在 dashboard_server 和 jupyter server 之间的一道桥梁。它和jupyter server的连接方式比较神奇,应该是通过jupyter 内核来通信,也就是�二者需要在同一台机器上即可。

    但是最合理的方式是,kernal gateway 和 jupyter 在同一目录下,统一端口上启动,否则将会有一些模板加载等小错,这里更神奇的是同一端口。

    jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0
    
    • 环境变量

    除了命令行直接传进去的配置,为了保持独立性,还需要在环境变量中增加两项的设置

    export DASHBOARD_SERVER_URL=http://{dash_server_host}:3000
    export KG_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxx' # 与Jupyter Notebook 的验证Token保持一致
    

    环境隔离

    在安装这些工具的时候,他们很多是 nbextension,所以启用的时候注意环境的隔离
    例如 dashboard的启动方式 jupyter dashboards quick-setup --sys-prefix
    这样就做到与环境隔离了

    Docker当文档

    这一部分,其实我是感觉最精华的一部分。

    首先我大概了解了一下 docker是什么

    相当于 一台机器上的 一个 container 容器,虚拟机,跟本机系统环境无关,能在docker的镜像中跑成功的程序,一定能在其他机器上跑成功。

    我自己按照 dashboards_setup的教程,在本地拉了三个镜像服务,然后启动,结果耗时两小时,发现可以跑成功

    看是看懂了MakeFile的意义,我直接去看了这三个镜像分别干了什么,notebook 和 dserver 都和我想的一样

    后来发现困扰我最久的kernal的启动方式,真实跪了总体配置

    kernel_gateway:
       build:
         context: .
         dockerfile: Dockerfile.kernel
         args:
           # pip versioning by default
           # Replace with local tarballs like /src/jupyter_declarativewidgets-someversion.tar.gz
           DECLWIDGETS_PKG: 'jupyter_declarativewidgets==0.7.*'
           IPYWIDGETS_PKG: 'ipywidgets==5.1.*'
       volumes_from:
         - notebook
       environment:
         KG_ALLOW_ORIGIN: '*'
    

    得出的结论是 和 notebook 共享启动地址

    在看具体配置

    # run kernel gateway, not notebook server
    CMD ["jupyter", "kernelgateway", "--KernelGatewayApp.ip=0.0.0.0"]
    

    得出的结论是用默认端口号,共享端口

    之后我再本地按照这种方式启动了,kernal 直接成功

    这件事情让我得到了很大的启示,docker 真的很强大,这是最清楚的文档,能让机器看懂的文档,人更能看懂

    其他

    这个主要是参考,「工具控」| TL001. 装扮你的Jupyter
    , 学了很厉害的几个小技巧

    magic

    只要在 notebook 执行 %% magic 就能看到介绍
    例如

    %timeit range(1000)
    
    %env PATH
    

    ipython kernal 预加载

    创建配置文件,就能在内核中添加一些预加载的代码了

    ipython profile create
    

    自己添加的代码如下:

    c.InteractiveShellApp.exec_lines = [
            "import pandas as pd",
            "import numpy as np",
            "import scipy.stats as spstats",
            "import scipy as sp",
            "import matplotlib.pyplot as plt",
            "import matplotlib",
            "matplotlib.style.use('ggplot')",
           "%load_ext autoreload",
    616    "%autoreload 2"
    ]
    
    c.IPKernelApp.matplotlib = 'inline'
    
    c.InlineBackend.figure_format = 'retina'
    
    
    
    

    jupyter notebook

    jupyter notebook 的配置文件,分为两种一种是全局的,一种是环境的,环境的上面讲过了,主要是在 etc 环境下,全局的就是按照官网的生成文件的方式就能搞定。

    jupyter-themes

    这是一个很厉害的插件,能实现将Jupyter 设置各种 背景,但是绘图比较蛋疼,还是以白底jupyter 为主吧

    这个知道怎么玩酷炫就好了

    # 设置黑色背景
    jt -t chesterish
    # 恢复原样
    jt -r
    

    相关文章

      网友评论

      • HansPond_1836:我研究了一下弄不出来。想麻烦请教一下
        环境是云,jupyter notebook带登陆密码无token,假设是公网IP是111.111.111.110:1111
        那这个情况下
        jupyter kernelgateway --KernelGatewayApp.ip=
        和jupyter-dashboards-server --KERNEL_GATEWAY_URL=http:
        这两个应该如何设置呢?

        Docker的话发现对小白来说安装都是有点麻烦,尤其是国内云的driver设置之类。。。
      • 8af26d39f4a9:小白看着你的文章研究了好几个小时,还是没明白,能够用您文章中的方法仅在我的电脑上布这样一套系统,可以实现与我电脑同局域网的其他人看到我输出的报告吗?
        ClarkMMM:@dear邓 ...当然可以了...我觉的你直接从 Docker当文档
        这部分往后看就行了,本地跑几个 docker 实例,就都起来了

      本文标题:Jupyter DashBoards 另类全家桶

      本文链接:https://www.haomeiwen.com/subject/svfhqxtx.html