2023年8月12日 星期六

用Databricks Container Services加速Cluster啟動速度

前言

最近有同事在Databricks的Cluster,每次啟動都很慢,之後他找了一些資料,發現可以執行自訂的Docker container來加快啟動速度,就跑來問我這個東西如何。Blog主從來不知道可以這樣做,看了一下微軟的官方文件,感覺方法也沒特別難,就照著說明試了一下,最後也成功裝上了自訂的Docker image。

先說結論,Blog主試的時候,在沒快取的狀態下,Cluster啟動時間從10分鐘降到5分鐘,大約省了一半時間,還蠻驚人的。在有快取的狀態下,啟動時間甚至來到2分鐘,不過除非很頻繁的啟動Cluster,而且都用同一個Docker image,基本上我們只看沒快取的時間就好。

為什麼我同事的Cluster啟動會特別慢?

我同事有一個Cluster專門跑自然語言處理(NLP),裡面裝了各式各樣的Python以及R的Library,數量很多,這就是最直接的原因。每次Cluster啟動的時候,Databricks都要從網路下載以及安裝,因此拖慢了啟動速度。上述說的啟動時間10分鐘只是狀況好的情況,有時甚至會拖到15~20分鐘。

Databricks的Cluster灌Library的方式有幾種?什麼情況用什麼方式?

  1. 在Cluster的設定頁面指定Library的名稱與版本
  2. 在Notebook內用%pip或%sh指令安裝
  3. 如果使用Azure Data Factory的話,可以在pipeline裡面的Databricks專用activity裡指定Library
  4. 自己建Docker image,並在Cluster設定啟動時使用(本文的主題,後述)

上面簡單整理目前Blog主所知的安裝方法,我們先暫時忽略方法4。取決於你的use case,如果是有不同功能的處理,共用同一個Cluster的情況(通常大公司,或多人開發環境,應該都屬於這個Case),Blog主推薦使用方法2或3,而這裡面又屬方法2最佳。