概述
今天看到一個非常好的功能 Jupyter DashBoards
基于Jupyter的儀表盤,非常Nice的功能,可以實現定制化,可視化與代碼的分離
然后在這個基礎上依次修正以及補充,基于Jupyter的一些誤區(qū)和知識
本機的環(huán)境是 py3jupyter
感覺今天最大的收貨是對學會看 docker 的配置文件 + 學會查找 github issue
插件-nb extensions
Git項目地址是,nbextensions 以及 nbextensions_configurator。前者是各類型有用的插件,后者是能夠直接在Jupyter 上圖形話調節(jié)界面的功能。
這里今天得到的收獲主要是基于虛擬環(huán)境的一個配置問題
在官網上,安裝完 nbextensions 之后,本質是將一
大堆插件放在下面目錄下
/Users/{user}/Library/Jupyter/extensions
接下來進行插件激活和路徑指定,官網上的提示使用的是
jupyter contrib nbextension install --user
如果這么操作的話,是在用戶目錄 例如 /home/user/.jupyter
下面生成 nbextensions 的配置, 這會導致環(huán)境不隔離的情況。
正確的做法,切換到新的環(huán)境下的jupyter,執(zhí)行
jupyter contrib nbextension install --sys-prefix
這樣就做到只影響該環(huán)境下的Jupyter,在某環(huán)境下的 /etc/jupyter 文件夾下產生對應的配置文件,nb的 和 notebook的都有,如果對于 notebook的配置有特殊的配置,可以寫在這里,例如密碼,token等。
如果要刪除該內容,install 替換為 uninstall。
如果因為選擇的是 users 會導致的問題是 no module named nbextensions
,某些和root 環(huán)境不一致的環(huán)境找不到配置文件
jupynter 版本的問題
2017年06月04日,jupyter notebook 的版本已經升級到了5.0,但是通過 pip 安裝的 nbextensions 的插件所寫的代碼,是4.x的程序,這個通過找 github issues, 發(fā)現作者已經在 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的服務范例,講解各個服務如何配置
架構流程如下圖:
整完這一套,模型開發(fā)人員,兩行代碼就一套定制化的BI系統(tǒng)。這套系統(tǒng)搭建的時候最難的地方是連接
dashboard 連接
- Jupyter Notebook
這個是一端,啟動的時候需要配置一下啟動token和Server 的端口,方便和另一端加密驗證。
# token 的配置寫在了配置文件里
# 端口設置在環(huán)境變量中
jupyter notebook
- Dashboard Server
用于HTML展示。有兩個主要輸入,一個是token作為加密驗證的功能,一個是 gateway的地址 http://host:port 即可
# 和 kernal 指定的ip 一致
# token 設置在了環(huán)境變量里
jupyter-dashboards-server --KERNEL_GATEWAY_URL=http://{kernal}:8888
- kernal gateway
這個是在 dashboard_server 和 jupyter server 之間的一道橋梁。它和jupyter server的連接方式比較神奇,應該是通過jupyter 內核來通信,也就是?二者需要在同一臺機器上即可。
但是最合理的方式是,kernal gateway 和 jupyter 在同一目錄下,統(tǒng)一端口上啟動,否則將會有一些模板加載等小錯,這里更神奇的是同一端口。
jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0
- 環(huán)境變量
除了命令行直接傳進去的配置,為了保持獨立性,還需要在環(huán)境變量中增加兩項的設置
export DASHBOARD_SERVER_URL=http://{dash_server_host}:3000
export KG_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxx' # 與Jupyter Notebook 的驗證Token保持一致
環(huán)境隔離
在安裝這些工具的時候,他們很多是 nbextension,所以啟用的時候注意環(huán)境的隔離
例如 dashboard的啟動方式 jupyter dashboards quick-setup --sys-prefix
這樣就做到與環(huán)境隔離了
Docker當文檔
這一部分,其實我是感覺最精華的一部分。
首先我大概了解了一下 docker是什么
相當于 一臺機器上的 一個 container 容器,虛擬機,跟本機系統(tǒng)環(huán)境無關,能在docker的鏡像中跑成功的程序,一定能在其他機器上跑成功。
我自己按照 dashboards_setup的教程,在本地拉了三個鏡像服務,然后啟動,結果耗時兩小時,發(fā)現可以跑成功
看是看懂了MakeFile的意義,我直接去看了這三個鏡像分別干了什么,notebook 和 dserver 都和我想的一樣
后來發(fā)現困擾我最久的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 執(zhí)行 %% magic 就能看到介紹
例如
%timeit range(1000)
%env PATH
ipython kernal 預加載
創(chuàng)建配置文件,就能在內核中添加一些預加載的代碼了
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 的配置文件,分為兩種一種是全局的,一種是環(huán)境的,環(huán)境的上面講過了,主要是在 etc 環(huán)境下,全局的就是按照官網的生成文件的方式就能搞定。
jupyter-themes
這是一個很厲害的插件,能實現將Jupyter 設置各種 背景,但是繪圖比較蛋疼,還是以白底jupyter 為主吧
這個知道怎么玩酷炫就好了
# 設置黑色背景
jt -t chesterish
# 恢復原樣
jt -r