使用 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 中。它是完全开源的,您可以在其他地方轻松安装),因为我发现它有助于跟踪和记录所有必要的指标。这完全是可选的,但受到鼓励。
请注意,该实现强调可读性和可修改性与性能,因此您可以通过多种方法来改进这一点。请尝试并让我知道!
希望您觉得这很有用。黑客快乐!!