跳到主要內容
工程的博客

新的Databricks集成為Jupyter橋接本地和遠程工作流

將本地Jupyter Notebook集成到Databricks工作區

2019年12月3日 工程的博客

分享這篇文章

簡介

多年來,數據科學家已經使用本地文件係統層次結構、源代碼修訂係統和CI/CD進程開發了特定的工作流程。

另一方麵,可用數據呈指數級增長,需要用於數據分析和建模的新功能,例如易於擴展的存儲、分布式計算係統或用於用於深度學習的gpu等新技術的專用硬件。

這些功能很難在內部以靈活的方式提供。因此,越來越多的公司利用雲中的解決方案,數據科學家麵臨著將現有的本地工作流與這些基於雲的新功能結合起來的挑戰。

這個項目JupyterLab集成,出版於磚實驗室是為連接這兩個世界而建的。數據科學家可以通過JupyterLab使用他們熟悉的本地環境,並通過選擇一個內核來處理遠程數據和遠程集群。

由JupyterLab Integration從本地JupyterLab啟用的示例場景:

  • 在Databricks維護的遠程集群上執行單節點數據科學Jupyter筆記本,並訪問遠程數據湖。
  • 運行深度學習代碼數據GPU集群
  • 使用集成的用戶體驗(進度條、DBFS瀏覽器……)運行遠程Spark作業。
  • 輕鬆遵循深度學習教程,其中設置基於Jupyter或JupyterLab,並在Databricks集群上運行代碼。
  • 本地鏡像遠程集群環境(python和庫版本),並通過選擇Jupyter內核在本地和遠程執行之間無縫切換。

本文首先簡要介紹了如何從本地JupyterLab使用遠程Databricks集群。然後提供了一個使用JupyterLab Integration的端到端示例,然後解釋了兩者之間的區別磚連接.如果您想親自嚐試,最後一節將解釋安裝過程。

從本地Jupyterlab使用遠程集群

JupyterLab Integration遵循Jupyter/JupyterLab的標準方法,並允許您為遠程Databricks集群創建Jupyter內核(這將在下一節中解釋)。要使用JupyterLab集成,您可以使用標準命令啟動JupyterLab:

朱庇特實驗室

在筆記本中,從菜單中選擇遠程內核以連接到遠程Databricks集群,並使用以下Python代碼獲得一個Spark會話:

databrickslabs_jupyterlab.connect進口dbcontextdbcontext ()

下麵的視頻展示了這個過程以及JupyterLab Integration的一些功能。

https://www.youtube.com/watch?v=VUqA8hp9bnk

jupyterlab集成-一個端到端示例

在為JupyterLab Integration配置Databricks集群之前,讓我們先了解如何識別它:Databricks集群運行在雲環境中Databricks數據科學工作區.工具可以從本地終端維護這些工作區磚CLI.Databricks CLI將工作空間的URL和個人訪問令牌存儲在一個可選擇的配置文件名稱下的本地配置文件中。JupyterLab Integration使用這個配置文件名稱來引用Databricks工作空間,例如演示工作空間demo.cloud.www.eheci.com。

為JupyterLab配置遠程內核

讓我們假設已經安裝並配置了JupyterLab Integration,以鏡像名為bernhard-5.5ml的遠程集群(關於安裝的詳細信息在本文末尾)。

第一步是為遠程集群創建一個Jupyter內核規範,例如在配置文件名為demo的工作區中:

(bernhard-6.1ml)$ alias dj=databrickslabs-jupyterlab(bernhard-6.1ml)$ DJ演示-k

下麵的向導允許您在工作區演示中選擇遠程集群,將其驅動程序IP地址存儲在本地ssh配置文件中,並在遠程驅動程序上安裝一些必要的運行時庫:

Databrick-JupyterLab Integration向導允許您在工作區演示中選擇遠程集群,將其驅動程序IP地址存儲在本地ssh配置文件中,並在遠程驅動程序上安裝一些必要的運行時庫。

最後,將在JupyterLab中提供一個新的內核SSH 1104-182503-trust65演示:bernhard-6.1ml(該名稱是遠程集群id 1104-182503-trust65、Databricks CLI配置文件名稱演示、遠程集群名稱bernhard-6.1ml和可選的本地conda環境名稱的組合)。

使用Databricks集成啟動JupyterLab

現在我們有兩個選擇來啟動JupyterLab,首先是通常的方式:

(bernhard 6.1ml)$ jupyter lab

如果遠程集群已經啟動並運行,並且其本地配置是最新的,那麼這將非常有效。但是,對於JupyterLab Integration,啟動JupyterLab的首選方法是

(bernhard-6.1ml)$ DJ demo -l -c

該命令會自動啟動遠端集群(如果終止),在驅動上安裝運行時庫“ipykernel”和“ipywidgets”,並在本地保存驅動的遠端IP地址。作為一個很好的副作用,使用flag -c,個人訪問令牌會自動複製到剪貼板。在筆記本的下一步中,您將需要令牌來根據遠程集群進行身份驗證。需要注意的是,個人訪問令牌不會存儲在遠程集群上。

在Jupyter筆記本中獲取Spark上下文

要在連接到遠程內核的Jupyter Notebook中創建Spark會話,請在Notebook單元格中輸入以下兩行:

databrickslabs_jupyterlab.connect進口dbcontext, is_remotedbcontext ()

這將請求輸入個人訪問令牌(複製到上麵的剪貼板中的令牌),然後將筆記本連接到遠程Spark Context。

本地和遠程運行超參數調優

下麵的代碼將在本地Python內核和遠程Databricks內核上運行。在本地運行,它將使用GridSearchCVscikit-learn用一個小的超參數空間。運行在遠程Databricks內核上,它將利用spark-sklearn將超參數優化分布到Spark執行器中。對於本地和遠程環境的不同設置(例如數據路徑),可以使用JupyterLab Integration中的函數is_remote()。

  1. 定義本地和遠程的數據位置並加載GridSearchCV

    如果is_remote ():functools進口部分spark_sklearn進口GridSearchCVGridSearchCV = partial(GridSearchCV, sc)#添加Spark上下文data_path =“/ dbfs / bernhard / digits.csv”其他的sklearn.model_selection進口GridSearchCVData_path = (“/用戶/ bernhardwalter /數據/數字/ digits.csv”
  2. 加載數據

    進口熊貓作為pd數字= pd。read_csv (data_path index_col =沒有一個X, y = digits.iloc[:,1:-1], digits.iloc [:,1
  3. 為本地和遠程執行定義不同的超參數空間

    sklearn.ensemble進口RandomForestClassifier如果is_remote ():Param_grid = {“max_depth”:【3.51015],“max_features”:【“汽車”“√”“log2”沒有一個],“min_samples_split”:【2510],“min_samples_leaf”:【13.10],“n_estimators”:【1015255075One hundred.}# 864選項其他的Param_grid = {“max_depth”:【3.沒有一個],“max_features”:【13.],“min_samples_split”:【210],“min_samples_leaf”:【110],“n_estimators”:【1020.}# 32選項cv= GridSearchCV(RandomForestClassifier(), param_grid, cv=3.cv.fit (X, y)
  4. 最後,評估模型

    Best = cv.best_index_Cv_results = cv.cv_results_打印“mean_test_score”, cv_results [“mean_test_score”(最好的),“std_test_score”, cv_results [“std_test_score”最好][])cv_results [“參數”)(最好的)

下麵是一個本地和遠程運行的視頻演示:

https://www.youtube.com/watch?v=Dih6RcYS7as

JupyterLab集成和Databricks連接

磚連接允許您將喜愛的IDE、筆記本服務器和其他自定義應用程序連接到Databricks集群。它提供了一個特殊的本地Spark上下文,基本上是遠程Spark上下文的代理。隻有Spark代碼將在遠程集群上執行。這意味著,例如,如果你在Databricks中啟動一個GPU節點進行一些深度學習實驗,使用Databricks Connect,你的代碼將在筆記本電腦上運行,而不會利用遠程機器的GPU:

Databricks Connect允許您將喜愛的IDE、筆記本服務器和其他自定義應用程序連接到Databricks集群。

Databricks連接架構

另一方麵,JupyterLab Integration在本地保存筆記本,但如果選擇了遠程內核,則在遠程集群上運行所有代碼。這使得您的本地JupyterLab可以在Databricks維護的遠程環境上運行單節點數據科學筆記本(使用pandas, scikit-learn等),或者在遠程Databricks GPU機器上運行深度學習代碼

本地JupyterLab也可以在Databricks集群上執行分布式Spark作業進度條提供Spark作業的狀態。

JupyterLab集成允許您在Databricks遠程環境上運行單節點數據科學筆記本,或在遠程Databricks GPU機器上運行深度學習代碼。

JupyterLab集成架構

此外,您可以設置一個本地conda環境來鏡像遠程集群。您可以開始在本地構建您的實驗,在那裏您可以完全控製您的環境,流程和輕鬆訪問所有日誌文件。當代碼穩定時,您可以使用遠程集群將其應用於完整的遠程數據集,或者在遠程集群上執行分布式超參數優化,而無需每次運行時都上傳數據。

注意:如果筆記本連接到遠程集群,它的Python內核運行在遠程集群上,Python和Spark不能訪問本地配置文件和本地數據。要在本地筆記本電腦和遠端集群的DBFS之間交換文件,可以使用Databricks CLI命令來回複製數據:

$ databricks——配置文件美元的概要文件cp /DATA/abc.csv dbfs:/ DATA .csv

因為例如Pandas不能通過DBFS:/訪問DBFS中的文件,所以有一個掛載點/ DBFS /允許使用Python的標準庫訪問DBFS中的數據(如/ DBFS /data/abc.csv)。

JupyterLab集成安裝

在我們看過之後JupyterLab集成工作,讓我們看看如何安裝它。

先決條件

JupyterLab集成將在AWS和Azure Databricks上運行。該設置基於Databricks CLI配置,並假設:

  1. 水蟒已安裝(稍後將安裝JupyterLab Integration的庫)
  2. Databricks CLI已安裝並配置為您想要使用的工作空間
  3. 為要使用的集群創建SSH密鑰對
  4. 您要使用的集群啟用了SSH,並安裝了3的公鑰

注意:它目前隻運行在MacOS和Linux上,並使用Databricks Runtime 5.5, 6.0和6.1(標準和ML)進行了測試。

在AWS或Azure Databricks上運行JupyterLab Integration所需的設置,基於Databricks CLI配置。

約定SSH密鑰對以Databricks CLI配置文件名稱命名。有關先決條件的詳細信息,請參見文檔中的“先決條件”部分

安裝

  1. 創建本地conda環境並安裝JupyterLab集成
    (基地)conda美元創建-n db-jlab python3.6使用conda激活數據庫-jlab(db-$ PIP安裝——升級databrickslabs-jupyterlab

    本文中命令示例的前綴(db-jlab)$表明conda環境db-jlab已被激活。

    終端命令名稱databrickslabs-jupyterlab相當長,因此讓我們創建一個別名

    (db-jlab)$ alias dj=databrickslabs-jupyterlab
  2. Bootstrap JupyterLab集成:

    這將安裝必要的庫和擴展(使用上麵的別名):

    $ DJ -b
  3. 如果你想在本地和遠程(鏡像)運行同一個筆記本,可以選擇:

    這將要求鏡像一個集群的名稱,並在匹配所有版本的本地conda環境中安裝所有與數據科學相關的庫。

    (db-jlab)美元dj美元的概要文件- m

開始使用JupyterLab集成

在這篇博客文章中,我們展示了JupyterLab Integration如何通過ssh在Databricks集群上運行Python內核,將遠程Databricks集群集成到本地建立的工作流中。這使得數據科學家可以在他們熟悉的本地環境中使用JupyterLab工作,並以一致的方式訪問遠程數據和遠程集群。我們已經展示了JupyterLab Integration通過使用ssh遵循與Databricks Connect不同的方法。與Databricks Data Science工作區和Databricks Connect相比,這支持一組額外的用例。

https://github.com/databrickslabs/Jupyterlab-Integration

相關資源

免費試用Databricks

相關的帖子

看到所有工程的博客的帖子
Baidu
map