Dikembangkan menggunakan Databricks dengan ❤️
blog yang membahas pembuatan campuran model bahasa visi berbasis pakar: https://huggingface.co/blog/AviSoori1x/seemoe Anda dapat menganggap ini sebagai Versi sederhana dari Grok 1.5/ GPT-4 Vision dari awal, dalam satu berkas PyTorch. Implementasi konsolidasinya ada di seeMoE.py. Buku catatannya adalah seeMoE_from_scratch.ipynb
Blog yang membahas ini: https://avisoori1x.github.io/2024/04/22/seemore-_Implement_a_Vision_Language_Model_from_Scratch.html
https://huggingface.co/blog/AviSoori1x/seemore-vision-bahasa-model
Dalam implementasi sederhana model bahasa visi (VLM) ini terdapat 3 komponen utama.
Image Encoder untuk mengekstrak fitur visual dari gambar. Dalam hal ini saya menggunakan implementasi dari awal transformator visi asli yang digunakan di CLIP. Ini sebenarnya merupakan pilihan populer di banyak VLM modern. Satu-satunya pengecualian adalah rangkaian model Fuyu dari Adept, yang meneruskan gambar yang ditambal langsung ke lapisan proyeksi.
Proyektor Bahasa Visi - Bentuk penyematan gambar tidak sama dengan penyematan teks yang digunakan oleh decoder. Jadi kita perlu 'memproyeksikan' yaitu mengubah dimensi fitur gambar yang diekstraksi oleh encoder gambar agar sesuai dengan apa yang diamati dalam ruang penyematan teks. Jadi fitur gambar menjadi 'token visual' untuk decoder. Ini bisa berupa lapisan tunggal atau MLP. Saya telah menggunakan MLP karena layak untuk ditampilkan.
Model bahasa khusus dekoder. Ini adalah komponen yang pada akhirnya menghasilkan teks. Dalam implementasi saya, saya sedikit menyimpang dari apa yang Anda lihat di LLaVA dll. dengan memasukkan modul proyeksi ke dekoder saya. Biasanya hal ini tidak diperhatikan, dan Anda membiarkan arsitektur decoder (yang biasanya merupakan model yang sudah dilatih sebelumnya) tidak tersentuh.
Implementasi perhatian mandiri produk titik berskala dipinjam dari makemore Andrej Kapathy (https://github.com/karpathy/makemore). Decoder juga merupakan model bahasa tingkat karakter autoregresif, seperti di makemore. Sekarang Anda tahu dari mana nama 'seemore' berasal :)
Semuanya ditulis dari awal menggunakan pytorch. Hal ini mencakup mekanisme perhatian (baik untuk vision encoder maupun decoder bahasa), pembuatan patch untuk vision transformator, dan lainnya. Semoga bermanfaat bagi siapa pun yang menelusuri repo dan/atau blog terkait.
Publikasi yang banyak direferensikan untuk implementasi ini:
seemore.py adalah keseluruhan implementasi dalam satu file pytorch.
seemore_from_Scratch.ipynb menelusuri intuisi untuk keseluruhan arsitektur model dan bagaimana semuanya bersatu. Saya sarankan mulai dari sini.
seemore_Concise.ipynb adalah implementasi terkonsolidasi yang dapat diretas yang saya anjurkan untuk Anda retas, pahami, tingkatkan, dan buat sendiri
input.txt dengan tinyshakespear dan representasi string yang dikodekan base64 + deskripsi yang sesuai ada di file inputs.csv di direktori gambar.
Subdirektori modul berisi masing-masing komponen dalam file .py masing-masing untuk kenyamanan (jika Anda memilih untuk meretas bagian satu per satu/menggunakannya kembali untuk proyek Anda sendiri, dll.)
Kode ini sepenuhnya dikembangkan di Databricks menggunakan satu A100 untuk komputasi. Jika Anda menjalankan ini di Databricks, Anda dapat menskalakannya pada cluster GPU yang sangat besar tanpa masalah, pada penyedia cloud pilihan Anda.
Saya memilih untuk menggunakan MLFlow (yang sudah diinstal sebelumnya di Databricks. Ini sepenuhnya open source dan Anda dapat melakukan pip install dengan mudah di tempat lain) karena menurut saya akan terbantu untuk melacak dan mencatat semua metrik yang diperlukan. Ini sepenuhnya opsional tetapi dianjurkan.
Harap dicatat bahwa penerapannya menekankan keterbacaan dan kemampuan peretasan vs. kinerja, jadi ada banyak cara yang dapat Anda lakukan untuk meningkatkannya. Silakan coba dan beri tahu saya!
Semoga ini bermanfaat bagi Anda. Selamat meretas!!