概述
今天看到一個(gè)非常好的功能 Jupyter DashBoards
基于Jupyter的儀表盤谨朝,非常Nice的功能带膜,可以實(shí)現(xiàn)定制化,可視化與代碼的分離
然后在這個(gè)基礎(chǔ)上依次修正以及補(bǔ)充,基于Jupyter的一些誤區(qū)和知識(shí)
本機(jī)的環(huán)境是 py3jupyter
感覺今天最大的收貨是對(duì)學(xué)會(huì)看 docker 的配置文件 + 學(xué)會(huì)查找 github issue
插件-nb extensions
Git項(xiàng)目地址是竟秫,nbextensions 以及 nbextensions_configurator彼棍。前者是各類型有用的插件灭忠,后者是能夠直接在Jupyter 上圖形話調(diào)節(jié)界面的功能。
這里今天得到的收獲主要是基于虛擬環(huán)境的一個(gè)配置問題
在官網(wǎng)上座硕,安裝完 nbextensions 之后弛作,本質(zhì)是將一
大堆插件放在下面目錄下
/Users/{user}/Library/Jupyter/extensions
接下來(lái)進(jìn)行插件激活和路徑指定,官網(wǎng)上的提示使用的是
jupyter contrib nbextension install --user
如果這么操作的話华匾,是在用戶目錄 例如 /home/user/.jupyter
下面生成 nbextensions 的配置, 這會(huì)導(dǎo)致環(huán)境不隔離的情況映琳。
正確的做法,切換到新的環(huán)境下的jupyter蜘拉,執(zhí)行
jupyter contrib nbextension install --sys-prefix
這樣就做到只影響該環(huán)境下的Jupyter刊头,在某環(huán)境下的 /etc/jupyter 文件夾下產(chǎn)生對(duì)應(yīng)的配置文件,nb的 和 notebook的都有诸尽,如果對(duì)于 notebook的配置有特殊的配置原杂,可以寫在這里,例如密碼您机,token等穿肄。
如果要?jiǎng)h除該內(nèi)容,install 替換為 uninstall际看。
如果因?yàn)檫x擇的是 users 會(huì)導(dǎo)致的問題是 no module named nbextensions
咸产,某些和root 環(huán)境不一致的環(huán)境找不到配置文件
jupynter 版本的問題
2017年06月04日,jupyter notebook 的版本已經(jīng)升級(jí)到了5.0仲闽,但是通過 pip 安裝的 nbextensions 的插件所寫的代碼脑溢,是4.x的程序,這個(gè)通過找 github issues, 發(fā)現(xiàn)作者已經(jīng)在 master 分支上做了修改,nbextensions.py 這個(gè)文件屑彻,修改如下代碼即可
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
代碼組成
這是一個(gè)非常另類的套裝, 由以下幾個(gè)部分組成
jupyter/dashboards验庙, notebook 插件將代碼轉(zhuǎn)化為可定制的 dashboard
dashboards_bundlers,notebook 插件將定制好的dashboard 輸出到 server端
dashboards_server社牲,nodejs web框架粪薛,主要作用是與juypter server 通信展示只讀功能的dashboard
kernel_gateway,一個(gè)中間的類似于代理的web框架搏恤,用于和dashboard server 通信
dashboards_setup 违寿,一套基于docker的服務(wù)范例,講解各個(gè)服務(wù)如何配置
架構(gòu)流程如下圖:
整完這一套熟空,模型開發(fā)人員藤巢,兩行代碼就一套定制化的BI系統(tǒng)。這套系統(tǒng)搭建的時(shí)候最難的地方是連接
dashboard 連接
- Jupyter Notebook
這個(gè)是一端息罗,啟動(dòng)的時(shí)候需要配置一下啟動(dòng)token和Server 的端口菌瘪,方便和另一端加密驗(yàn)證。
# token 的配置寫在了配置文件里
# 端口設(shè)置在環(huán)境變量中
jupyter notebook
- Dashboard Server
用于HTML展示阱当。有兩個(gè)主要輸入俏扩,一個(gè)是token作為加密驗(yàn)證的功能,一個(gè)是 gateway的地址 http://host:port 即可
# 和 kernal 指定的ip 一致
# token 設(shè)置在了環(huán)境變量里
jupyter-dashboards-server --KERNEL_GATEWAY_URL=http://{kernal}:8888
- kernal gateway
這個(gè)是在 dashboard_server 和 jupyter server 之間的一道橋梁弊添。它和jupyter server的連接方式比較神奇录淡,應(yīng)該是通過jupyter 內(nèi)核來(lái)通信,也就是?二者需要在同一臺(tái)機(jī)器上即可油坝。
但是最合理的方式是嫉戚,kernal gateway 和 jupyter 在同一目錄下,統(tǒng)一端口上啟動(dòng)澈圈,否則將會(huì)有一些模板加載等小錯(cuò)彬檀,這里更神奇的是同一端口。
jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0
- 環(huán)境變量
除了命令行直接傳進(jìn)去的配置瞬女,為了保持獨(dú)立性窍帝,還需要在環(huán)境變量中增加兩項(xiàng)的設(shè)置
export DASHBOARD_SERVER_URL=http://{dash_server_host}:3000
export KG_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxx' # 與Jupyter Notebook 的驗(yàn)證Token保持一致
環(huán)境隔離
在安裝這些工具的時(shí)候,他們很多是 nbextension诽偷,所以啟用的時(shí)候注意環(huán)境的隔離
例如 dashboard的啟動(dòng)方式 jupyter dashboards quick-setup --sys-prefix
這樣就做到與環(huán)境隔離了
Docker當(dāng)文檔
這一部分坤学,其實(shí)我是感覺最精華的一部分。
首先我大概了解了一下 docker是什么
相當(dāng)于 一臺(tái)機(jī)器上的 一個(gè) container 容器报慕,虛擬機(jī)深浮,跟本機(jī)系統(tǒng)環(huán)境無(wú)關(guān),能在docker的鏡像中跑成功的程序眠冈,一定能在其他機(jī)器上跑成功飞苇。
我自己按照 dashboards_setup的教程,在本地拉了三個(gè)鏡像服務(wù),然后啟動(dòng)布卡,結(jié)果耗時(shí)兩小時(shí)雨让,發(fā)現(xiàn)可以跑成功
看是看懂了MakeFile的意義,我直接去看了這三個(gè)鏡像分別干了什么羽利,notebook 和 dserver 都和我想的一樣
后來(lái)發(fā)現(xiàn)困擾我最久的kernal的啟動(dòng)方式,真實(shí)跪了總體配置
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: '*'
得出的結(jié)論是 和 notebook 共享啟動(dòng)地址
在看具體配置
# run kernel gateway, not notebook server
CMD ["jupyter", "kernelgateway", "--KernelGatewayApp.ip=0.0.0.0"]
得出的結(jié)論是用默認(rèn)端口號(hào)刊懈,共享端口
之后我再本地按照這種方式啟動(dòng)了这弧,kernal 直接成功
這件事情讓我得到了很大的啟示,docker 真的很強(qiáng)大虚汛,這是最清楚的文檔匾浪,能讓機(jī)器看懂的文檔,人更能看懂
其他
這個(gè)主要是參考卷哩,「工具控」| TL001. 裝扮你的Jupyter
, 學(xué)了很厲害的幾個(gè)小技巧
magic
只要在 notebook 執(zhí)行 %% magic 就能看到介紹
例如
%timeit range(1000)
%env PATH
ipython kernal 預(yù)加載
創(chuàng)建配置文件蛋辈,就能在內(nèi)核中添加一些預(yù)加載的代碼了
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)境下尊浓,全局的就是按照官網(wǎng)的生成文件的方式就能搞定逞频。
jupyter-themes
這是一個(gè)很厲害的插件,能實(shí)現(xiàn)將Jupyter 設(shè)置各種 背景栋齿,但是繪圖比較蛋疼苗胀,還是以白底jupyter 為主吧
這個(gè)知道怎么玩酷炫就好了
# 設(shè)置黑色背景
jt -t chesterish
# 恢復(fù)原樣
jt -r