❤️와 함께 Databricks를 사용하여 개발되었습니다.
전문가 기반 비전 언어 모델의 희박한 혼합을 만드는 과정을 안내하는 블로그: https://huggingface.co/blog/AviSoori1x/seemoe 이것은 Grok 1.5/GPT-4 Vision의 단순한 버전으로 처음부터 하나로 생각할 수 있습니다. 파이토치 파일. 통합 구현은 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-언어-모델
VLM(비전 언어 모델)의 이 간단한 구현에는 3가지 주요 구성 요소가 있습니다.
이미지에서 시각적 특징을 추출하는 이미지 인코더. 이 경우 CLIP에 사용된 원래 비전 변환기를 처음부터 구현하여 사용합니다. 이것은 실제로 많은 현대 VLM에서 인기 있는 선택입니다. 주목할만한 예외 중 하나는 패치된 이미지를 프로젝션 레이어에 직접 전달하는 Adept의 Fuyu 시리즈 모델입니다.
Vision-Language Projector - 이미지 임베딩은 디코더에서 사용되는 텍스트 임베딩과 모양이 다릅니다. 따라서 우리는 '투영'해야 합니다. 즉, 텍스트 임베딩 공간에서 관찰된 것과 일치하도록 이미지 인코더에서 추출한 이미지 특징의 차원을 변경해야 합니다. 따라서 이미지 특징은 디코더의 '시각적 토큰'이 됩니다. 이는 단일 레이어일 수도 있고 MLP일 수도 있습니다. 보여줄 가치가 있기 때문에 MLP를 사용했습니다.
디코더 전용 언어 모델입니다. 이는 궁극적으로 텍스트를 생성하는 구성 요소입니다. 내 구현에서는 프로젝션 모듈을 내 디코더에 통합하여 LLaVA 등에서 보는 것과 약간 다릅니다. 일반적으로 이는 관찰되지 않으며 디코더의 아키텍처(일반적으로 이미 사전 훈련된 모델)는 그대로 둡니다.
스케일링된 내적 self attention 구현은 Andrej Kapathy의 makemore(https://github.com/karpathy/makemore)에서 차용되었습니다. 또한 디코더는 makemore와 마찬가지로 자동 회귀 문자 수준 언어 모델입니다. 이제 'seemore'라는 이름이 어디서 왔는지 알 수 있습니다 :)
모든 것은 pytorch를 사용하여 처음부터 작성됩니다. 여기에는 어텐션 메커니즘(비전 인코더 및 언어 디코더 모두), 비전 변환기를 위한 패치 생성 및 기타 모든 것이 포함됩니다. 이것이 저장소 및/또는 관련 블로그를 이용하는 모든 사람에게 유용하길 바랍니다.
이 구현과 관련하여 많이 참조된 출판물:
seemore.py는 pytorch의 단일 파일에 구현된 전체 내용입니다.
seemore_from_Scratch.ipynb는 전체 모델 아키텍처에 대한 직관과 모든 것이 어떻게 결합되는지 안내합니다. 여기서 시작하는 것이 좋습니다.
seemore_Concise.ipynb는 여러분이 해킹하고, 이해하고, 개선하고, 자신만의 것을 만들도록 권장하는 해킹 가능한 통합 구현입니다.
Tinyshakespear 및 base64로 인코딩된 문자열 표현과 해당 설명이 포함된 input.txt는 이미지 디렉터리의 inputs.csv 파일에 있습니다.
모듈 하위 디렉터리에는 편의를 위해 자체 .py 파일에 각 구성 요소가 포함되어 있습니다(조각을 개별적으로 해킹하거나 자신의 프로젝트에 재사용하도록 선택해야 하는지 등).
이 코드는 컴퓨팅을 위해 단일 A100을 사용하여 Databricks에서 완전히 개발되었습니다. Databricks에서 이를 실행하는 경우 선택한 클라우드 공급자의 임의의 대규모 GPU 클러스터에서 문제 없이 확장할 수 있습니다.
필요한 모든 측정 항목을 추적하고 기록하는 데 도움이 되므로 MLFlow(Databricks에 사전 설치되어 제공됩니다. 완전히 오픈 소스이며 다른 곳에서 쉽게 pip 설치할 수 있음)를 사용하기로 결정했습니다. 이는 전적으로 선택 사항이지만 권장됩니다.
구현에서는 성능 대비 가독성과 해킹 가능성을 강조하므로 이를 개선할 수 있는 방법이 많이 있습니다. 시도해보고 알려주세요!
이것이 도움이 되기를 바랍니다. 즐거운 해킹!!