使用 Databricks 和 ❤️ 開發
部落格介紹了創建基於專家的稀疏混合視覺語言模型:https://huggingface.co/blog/AviSoori1x/seemoe 您可以將其視為從頭開始的 Grok 1.5/GPT-4 Vision 的簡單版本,在一個PyTorch 文件。統一的實作位於 seeMoE.py 中。筆記本是 seeMoE_from_scratch.ipynb
介紹此內容的部落格:https://avisoori1x.github.io/2024/04/22/seemore-_Implement_a_Vision_Language_Model_from_Scratch.html
https://huggingface.co/blog/AviSoori1x/seemore-vision-language-model
在視覺語言模型 (VLM) 的這個簡單實作中,有 3 個主要元件。
影像編碼器從影像中提取視覺特徵。在本例中,我使用了 CLIP 中使用的原始視覺轉換器的從頭開始實作。這實際上是許多現代 VLM 中的流行選擇。一個值得注意的例外是 Adept 的 Fuyu 系列模型,它將修補後的影像直接傳遞到投影層。
視覺語言投影機 - 影像嵌入與解碼器使用的文字嵌入形狀不同。因此,我們需要“投影”,即更改圖像編碼器提取的圖像特徵的維度,以匹配在文字嵌入空間中觀察到的內容。因此影像特徵成為解碼器的「視覺標記」。這可以是單層或 MLP。我使用了 MLP,因為它值得展示。
僅解碼器的語言模型。這是最終生成文字的組件。在我的實作中,我透過將投影模組合併到我的解碼器中,與您在 LLaVA 等中看到的有所不同。通常不會觀察到這一點,並且您可以保持解碼器的架構(通常是已經預先訓練的模型)不變。
縮放點積自註意力實現借鑒自 Andrej Kapathy 的 makemore (https://github.com/karpathy/makemore)。此外,解碼器是一個自回歸字元級語言模型,就像 makemore 中一樣。現在您知道「seemore」這個名字的由來了吧:)
一切都是使用 pytorch 從頭開始編寫的。這包括注意力機制(視覺編碼器和語言解碼器)、視覺轉換器的補丁創建以及其他一切。希望這對瀏覽儲存庫和/或相關部落格的任何人都有用。
此實作大量引用的出版品:
seemore.py 是 pytorch 單一檔案中的完整實作。
seemore_from_Scratch.ipynb 直觀地介紹了整個模型架構以及所有內容如何組合在一起。我建議從這裡開始。
seemore_Concise.ipynb 是綜合的可破解實現,我鼓勵您破解、理解、改進並製作自己的
帶有tinyshakespear的input.txt和base64編碼的字串表示+相應的描述位於images目錄中的inputs.csv檔案中。
為方便起見,modules 子目錄將每個元件包含在自己的 .py 檔案中(您是否應該選擇單獨破解/重複使用自己的項目等)
該程式碼完全在 Databricks 上開發,使用單一 A100 進行計算。如果您在 Databricks 上執行此程序,則可以在您選擇的雲端提供者上的任意大型 GPU 叢集上進行擴展,不會出現任何問題。
我選擇使用 MLFlow(它預先安裝在 Databricks 中。它是完全開源的,您可以在其他地方輕鬆安裝),因為我發現它有助於追蹤和記錄所有必要的指標。這完全是可選的,但受到鼓勵。
請注意,該實作強調可讀性和可修改性與效能,因此您可以透過多種方法來改進這一點。請嘗試並讓我知道!
希望您覺得這很有用。黑客快樂!