Home >> Blog >> 什麼是Jupyter?

什麼是Jupyter Notebooks ?

什麼是 Jupyter,為什引起你的關心?畢竟,Jupyter 從未像數位科學、人工智能或Web 2.0那樣成為流行語。與那些大的抽像概念不同,Jupyter 非常具體。這是一個開源project,一套軟體,這軟體可以做一些特定的事情。

但在沒有引起大肆宣傳的情況下,Jupyter Notebooks 正在徹底改變工程師和數位科學家的合作方式。如果所有重要的工作都是協作的,那麼我們擁有的最重要的工具就是協作工具,這些工具可以讓合作更有效率。

簡而言之,這就是 Jupyter:它是一種協作工具。它是為在網頁上下文中編寫和共享程式碼和文本而構建的。程式碼在伺服器上運行,結果將轉換為 HTML 並合併到您正在編寫的頁面中。該伺服器可以在任何地方:在您的筆記本電腦上、在防火牆後面或在公共互聯網上。您的頁麵包含您的想法、程式碼以及運行程式碼的結果。

程式碼永遠不僅僅是程式碼。它是思考過程、爭論甚至實驗的一部分。對於運用在SEO數位分析尤其如此,但對於幾乎所有應用程式都是如此。Jupyter 讓您可以構建一個“實驗室筆記本”來展示您的工作:程式碼、數位、結果,以及您的解釋和推理。正如IBM 所說,Jupyter 可讓您構建“將數位提煉成洞察力的計算敘事”。如果你不能將數位轉化為洞察力,如果你不能探索、分享和討論數位,那麼數位就毫無意義。如果你不能探索和試驗別人的結果,數位分析就沒有什麼意義。Jupyter 是一個用於探索、分享和討論的工具。

筆記本很容易共享。您可以將其保存並作為附件發送,以便其他人可以使用 Jupyter 打開筆記本。您可以將筆記本放在 GitHub 存儲庫中,讓其他人在那裡閱讀;GitHub 自動將筆記本呈現為靜態網頁。GitHub 用戶可以下載(克隆)他們自己的 notebook 副本和任何支持文件,以便他們可以擴展您的工作:他們可以檢查結果、修改程式碼並查看會發生什麼。在 GitHub 上維護一個最新的存檔比手動分發您的程式碼、數位、支持文件和結果要容易得多。您可以通過使用容器技術(例如Docker )更進一步,將您的筆記本、筆記本伺服器、您需要的任何庫、您的數位和精簡的操作系統打包到一個可下載的對像中。

共享可以隨心所欲地公開。您可以在筆記本電腦上運行 Jupyter 伺服器,其他人基本上無法訪問。您可以在公司防火牆後面運行多用戶 Jupyter 伺服器JupyterHub 。您甚至可以將 Jupyter Notebooks 推送到雲中。GitHub 和GitLab(一個自己託管的 git 伺服器)自動將筆記本轉換為靜態 HTML 以便通過 Web 訪問,而Binder等平台允許其他人在雲中運行您的程式碼。他們可以在私有實例的上下文中對其進行試驗和修改。

雖然 Jupyter 起源於 Python(它從 IPython Notebooks 演變而來),但它現在是多語言的。該名稱本身來自三種語言:Ju(lia) + Py(thon) + (e)R。語言支持來自模塊化內核,許多程式語言都存在或正在開發內核。除了 Julia、Python 和 R,還有用於 JavaScript、Java、Scala、Go、C#、Ruby、Kotlin 和 Haskell 以及 50 多種其他語言的 Jupyter 內核。Toree內核特別有用:它支持 Scala 程式語言和 Spark 分佈式計算平台(加上 Python 和 R),簡化了構建大型數位密集型分佈式應用程式的任務。O'Reilly 的 Orioles(添加了視頻軌道的基於雲的筆記本)演示了Scala和去。

當 Jupyter 與 Docker 結合使用時,共享變得更加容易。任何程式語言的開發人員面臨的最大問題之一是安裝運行他人程式碼所需的軟體和library。版本不兼容和操作系統不兼容讓你的生活痛苦;僅安裝運行複雜project所需的軟體就可能需要幾天時間。通過將 Jupyter 與 Docker 結合使用,可以消除這種痛苦。Docker 允許您構建一個容器,其中包含運行筆記本所需的一切。因此,當您共享容器時,就像共享鏈接一樣簡單,您不僅僅是在共享您的project:您正在共享運行該project所需的所有依賴項,以一種已知可以工作的形式。

當您將 Jupyter 與容器和 GitHub 等源程式碼管理系統結合使用時,您將獲得一個協作平台:編碼、數位分析、可視化,以及可以用大多數程式語言完成的任何事情。

Jupyter 架構

雖然了解 Jupyter 的內部結構並不重要,但重要的是了解它可以讓您構建什麼。它不僅僅是一個工具:它是一個平台、一個生態系統,使其他人能夠在它之上構建工具。

Jupyter 由三個部分組成:

  1. 筆記本前端。前端允許您編輯和運行筆記本。前端是一個 JavaScript 應用程式,它與任何其他 Web 應用程式一樣,交付給您的瀏覽器。前端負責存儲您的筆記本,在本地文件系統中管理您的筆記本,並將它們發送到 Jupyter 伺服器。
  2. Jupyter 伺服器,它可以是在您的筆記本電腦上運行的相對簡單的應用程式,也可以是多用戶伺服器。Jupyter project的JupyterHub是 Jupyter 使用最廣泛的多用戶伺服器。
  3. 內核協議,它允許伺服器將運行程式碼的任務卸載到特定語言的內核。Jupyter 附帶了適用於 Python 2 和 Python 3 的內核,但也有適用於許多其他語言的內核。

這種架構雖然簡單,但非常靈活。您可以替換自己的前端,就像nteract所做的那樣:它的主要職責是管理文檔。您可以構建一個實現實時介面的前端;可以使用 Jupyter 協議來實現對其他語言的支持;您可以實現自定義伺服器來創建新的媒體類型。O'Reilly Media 的 Orioles將 Jupyter Notebooks 與並行流式視頻敘述相結合,與筆記本同步。

Jupyter 工作流程

將 Jupyter 與Git和Docker結合使用是最有效率的,這兩個工具是許多研究人員不熟悉的。

Git 是一個版本控制系統:它用於追蹤軟體的不同版本,並記錄版本之間的差異。它允許您回滾到早期版本;它還允許程式碼共享,並且允許多人在同一個程式碼庫上工作並解決他們的更改之間的衝突。Jupyter Notebooks 只是字母數字數位結構:它們看起來像程式碼,Git 使用它們沒有問題。

Docker 是用於自動化應用程式部署的工具。它允許您“收縮包裝”應用程式運行所需的一切:Jupyter 本身、筆記本、所有庫以及運行應用程式所需的任何其他工具(數位等)——甚至是精簡的操作系統(通常是 Linux)。在任何非常流行的程式語言中共享程式碼最痛苦的部分之一是解決庫、程式語言、操作系統等之間的衝突。如果您嘗試安裝其他人的軟體,您可能經歷過版本地獄:他們的project需要數位庫 X,但 X 需要庫 Y 版本 1.9,並且您安裝了版本 1.8。當您嘗試獲取 1.9 時,您會發現它無法構建。要構建庫 Y 的 1.9 版,您需要庫 Z 的 3.4 版,但是 Z 從未移植到您的操作系統中。等等。Docker 解決了這個問題:您無需自己交付程式碼,而是交付整個包——運行時環境所需的一切。你啟動容器,容器啟動它自己的操作系統,它啟​​動 Jupyter,一切正常。

這裡不會詳細描述如何使用 Git 和 Docker;它們是可以更簡單的工具,許多組織(包括 O'Reilly)正在開發工具來簡化 Jupyter 與 Git 和 Docker 的集成。使用圖中的 Git 和 Docker,工作流程如下所示:

  • 在本地使用 Git(或使用外部服務,如 GitHub):每當您在工作中達到重要的一點時,將結果提交到 Git 存儲庫。如果需要,您現在可以恢復到當前版本。
  • 在您的存儲庫中保留一個 Dockerfile 以及您的筆記本。使用 Dockerfile 記錄運行筆記本所需的一切:庫、數位、實用程式。對於許多常見環境,有預構建的 Docker 映像包含您需要的大部分內容,因此,在實踐中,您不必對 Dockerfile 進行太多修改。
  • 在 Docker 容器內運行 Jupyter 伺服器。這樣可以保持一切清潔和隔離。
  • 您可以將 Docker 映像推送到註冊表,例如DockerHub。那時,其他用戶可以拉取您的鏡像,構建與您的鏡像匹配的容器,並運行您的程式碼,而不必擔心版本不同。

Jupyter 工作流程需要一些紀律,但這是值得的。Jupyter project維護了許多常見配置的 Dockerfile 集合:帶有用於數位分析的數字庫的 Python、帶有 Apache Spark(用於分佈式數位計算的通用引擎)的 Python 和 Scala、帶有 R 的 Python 等等。使用這些容器完全消除了安裝痛苦;您需要做的就是安裝 Docker,並發出命令來啟動和構建容器。您可以使用單個命令下載並啟動容器。

Jupyter 在工作和學校

IBM 最近發布了一份案例研究,描述了他們為在紐約市運營的黑色汽車服務公司 Executive Transportation Group 所做的工作。數位分析師使用 Jupyter 分析有關遊樂設施和司機的數位,使用 Apache Spark 將計算分佈在多台計算機上。他們通過Toree內核使用 Spark 的分佈式計算能力;Toree 和 Spark 使他們能夠及時處理數以千萬計的地理查詢。

為了創建 ETG project,IBM 貢獻並利用了 Jupyter 的幾個擴展——一種只有在開源project中才有可能實現的讓步關係。該團隊使用 Jupyter 交互式(“聲明性”)小模組來構建介面,使他們能夠與 ETG 的員工交流結果。交互式小模組讓開發人員可以為圖形應用程式提供您期望的各種控件:滑塊、按鈕和其他 Web 組件。介面擴展使構建複雜佈局成為可能,而不是筆記本默認為您提供的線性從上到下的佈局。

IBM 和 ETG 團隊在改進分析工具時能夠快速迭代:他們可以將介面部署為 Web 應用程式、收集用戶的反饋和問題、修改應用程式並進行迭代。Jupyter 啟用了一個敏捷的流程來分析數位和構建 ETG 所需的工具。

喬治華盛頓大學機械工程教授Lorena Barba是在教學中使用 Jupyter 的領導者。她稱 Jupyter Notebooks 為“可計算的內容”,並稱其為“STEM 教育的殺手級應用”,因為筆記本可以直接與學生共享材料。它不只是寫在黑板上;它以允許學生直接互動的方式共享,並且可以與文本、鏈接、圖像、視頻相結合。您不會通過講座來學習編碼;你通過互動和實驗來學習。

加州大學伯克利分校所有本科生都需要開設的新的數位科學基礎課程,大規模地展示了這種方法。成千上萬的學生收到作業、訪問大型數位集以及以筆記本形式完成作業的說明。所有程式碼都運行在雲端的 JupyterHub 上,免去了軟體安裝的問題。根據教師的說法,“如果沒有 Jupyter Notebooks,這門課程是不可能實現的,它支持基於瀏覽器的計算,避免了學生安裝軟體、傳輸文件或更新庫的需要。” Jupyter 的擴展將被合併到未來的版本中,支持學生和教師之間的實時交互:問題、答案、作業幫助,所有這些都在學生正在編寫的實際程式碼的上下文中。

擴展 Jupyter

我們剛剛討論了小模組和介面擴展。還有一些用於更高級任務的小模組,例如基於OpenStreetMap創建地圖,以及在2D和3D中進行交互式數位可視化。還有一個“橋接” Jupyter 和d3.js的擴展,這是用於構建數位驅動的 Web 文檔的最先進的庫。

Jupyter 生態系統還包括用於以不同方式發布文檔的工具。例如,nbviewer是一個簡單的工具,允許非程式員查看 Jupyter Notebooks。它不運行程式碼或允許修改;它只是將“成品”呈現為網頁。nbviewer可以本地安裝;還有一個公共的nbviewer服務,它可以呈現任何在線可用的筆記本。您只需要 URL。

Nbviewer 基於nbconvert,它將筆記本轉換為許多不同的靜態格式,包括 HTML、LaTeX、PDF、腳本(只是程式碼,作為可執行腳本,沒有筆記本的其餘部分)和幻燈片。

雖然沒有列出所有 Jupyter 擴展、小模組和工具的單一來源,但有一個活躍的開發人員生態系統致力於為 Jupyter 平台構建功能。

JupyterLab 和未來

JupyterLab 是 Jupyter 宇宙的下一個重要變化。JupyterLab 計算環境將 Jupyter 重新視為一個集成開發環境,用於處理軟體。

JupyterLab 中的大部分內容已經內置到 Jupyter 中。JupyterLab project實際上是關於獲取已經嵌入的功能並公開它們,以便更靈活地使用它們。有一個文件管理器;圖形控制台;用於監控系統的終端窗口;高級文本編輯器;當然,還有一個集成的幫助系統。新的是這些功能以新的方式公開:更容易構建介面,更容易訪問創建和調試更複雜的應用程式所需的工具。

JupyterLab 尚未準備好進行一般使用;不過,如果你喜歡冒險,你可以在 GitHub 上找到它。我們希望在JupyterCon 之前會有一個公開測試版。

從零到 JupyterHubproject使在雲中運行 JupyterHub 變得更加容易:特別是 Google Compute Engine 和 Microsoft Azure(未來還會有更多)。在雲中運行 JupyterHub 意味著您可以讓非常廣泛的受眾可以訪問筆記本,而無需擔心計算資源。從零到 JupyterHub 使用 Kubernetes、Helm 和 Docker project來管理雲中服務的使用,並提供標準和強大的計算環境。

Jupyter project正在努力實現筆記本中的實時協作:允許多個用戶同時編輯一個筆記本。我們習慣於在 Google Docs 和其他在線平台上進行動態協作。為什麼不是 Jupyter?有一些擴展允許筆記本託管在 Google Drive 上;我們希望看到協作直接融入 JupyterHub,這樣它就可以在工作組和企業部署的任何地方使用。

Jupyter 已成為科學研究和數位分析的標準。它將計算和參數打包在一起,讓您構建“計算敘事”;它允許您以多種格式發布您的敘述,從實時在線筆記本到幻燈片;它支持許多流行的程式語言;它簡化了將工作軟體分發給隊友和同事的問題。從傳統的 IDE 到分析平台,有許多工具可以解決其中的一個或兩個問題。Jupyter 是唯一能解決所有問題的。為了在數字化轉型中取得成功,企業需要採用經過驗證的工具:支持協作、共享和快速部署的工具。這就是 Jupyter 的意義所在。