- mamba-minimal adalah proyek yang mengimplementasikan Mamba secara sederhana dan minimal dalam satu berkas PyTorch
- Bertujuan menghasilkan keluaran numerik yang sama dengan implementasi resmi pada forward/backward pass
- Kodenya disederhanakan dan disusun dalam bentuk berkomentar agar mudah dibaca
- Tidak menyertakan optimasi inti dari implementasi resmi, sehingga tidak menawarkan kecepatan, dan juga tidak mencakup inisialisasi parameter yang tepat
- Demo menjalankan contoh penyelesaian prompt menggunakan
state-spaces/mamba-370mdan tokenizerEleutherAI/gpt-neox-20b
Gambaran proyek
- mamba-minimal adalah implementasi minimal sederhana dari Mamba dalam satu berkas PyTorch
- Tujuannya adalah menunjukkan perilaku yang sama seperti implementasi resmi dengan kode yang lebih mudah dibaca
- Fitur utama:
- Keluaran numerik yang setara dengan implementasi resmi pada forward pass dan backward pass
- Kode yang disederhanakan
- Implementasi yang mudah dibaca dan diberi komentar
Yang tidak disertakan
- Kecepatan bukanlah tujuannya
- Implementasi resmi sangat dioptimalkan
- Optimasi tersebut merupakan bagian dari kontribusi utama makalah Mamba
- Implementasi ini mempertahankan sebagian besar kode tetap sederhana demi keterbacaan
- Inisialisasi parameter yang tepat tidak disertakan
- Disebutkan sebagai hal yang bisa ditambahkan tanpa mengorbankan keterbacaan
Contoh penggunaan demo
- Contoh penyelesaian prompt dapat dilihat di
demo.ipynb - Contoh menggunakan
model.MambadanAutoTokenizerdari Hugging Facetransformers - Model dan tokenizer yang digunakan:
state-spaces/mamba-370mEleutherAI/gpt-neox-20b
- Contoh prompt adalah
Mamba is the, dan hasil generasinya mencakup kalimat yang menjelaskan Mamba sebagai ular berbisa
Referensi
- Arsitektur Mamba diperkenalkan dalam Mamba: Linear-Time Sequence Modeling with Selective State Spaces
- Penulis makalahnya adalah Albert Gu dan Tri Dao
- Implementasi resmi tersedia di repositori
state-spaces/mamba
1 komentar
Komentar Hacker News
Dulu saya membuat library bersama seorang rekan yang memisahkan sebagian besar kode model bersama, dan dengan ini banyak model bisa diimplementasikan dalam sekitar 100 baris jika tidak menghitung Python import dan komentar
BERT: https://github.com/explosion/curated-transformers/blob/main/...
Llama 1/2: https://github.com/explosion/curated-transformers/blob/main/...
MPT: https://github.com/explosion/curated-transformers/blob/main/...
Juga mendukung fitur seperti TorchScript JIT dan PyTorch flash attention
xformers menangani masalah yang mirip, tetapi lebih berfokus menyediakan modul Transformer berperforma tinggi dengan Triton. Namun, tidak mudah mengambil dan memakai hanya komponen tertentu dari library itu, dan saya terus menemui runtime error jadi untuk sementara saya tunda. Saya sedang membuat sesuatu berbasis arsitektur BERT, jadi akan saya jadikan referensi
Saya berencana mencobanya di proyek berikutnya
Kode Mamba aslinya sulit langsung dipahami karena banyak optimasi kecepatan dan elemen lainnya, tetapi implementasi ini sepertinya akan membantu untuk belajar
Saat melakukan inferensi token satu per satu, semuanya menjadi jauh lebih sederhana. Saya juga punya implementasi inferensi Mamba buatan sendiri: https://github.com/rbitr/llm.f90/tree/master/ssm
Saya tahu itu adalah fondasi kode komputasi ilmiah yang sudah lama teruji dan sering dibungkus oleh library seperti PyTorch atau Numpy, tetapi sekarang bukan bahasa yang populer. Saya penasaran apa alasan Anda memilihnya
Ada bagian yang saya harap bisa menjelaskan Mamba dengan cara yang bisa dipahami bahkan oleh orang yang bukan peneliti machine learning
Wawasan inti Mamba terletak pada penyelesaian masalah lama pada model ruang-keadaan. Model ruang-keadaan bagus untuk mengompresi konteks masukan, tetapi dalam proses mengompresi masukan menjadi keadaan tersembunyi, informasi yang dibutuhkan untuk memanfaatkan konteks secara efektif seperti pada Transformer menjadi terhapus
Solusinya adalah membuat apa yang dalam makalah disebut mekanisme seleksi. Mekanisme ini bergantung pada masukan, sehingga setiap kali masukan berubah, model dapat menyesuaikan keluaran pada tiap langkah. Untuk itu, beberapa variabel ruang-keadaan dibuat bergantung pada masukan alih-alih invarian terhadap masukan, dan lapisan linear serta sejenisnya ditambahkan untuk memproyeksikan masukan pada tiap waktu ke variabel ruang-keadaan
Namun, membuat variabel ruang-keadaan bergantung pada masukan menimbulkan overhead komputasi. Ini diatasi dengan algoritme sadar-perangkat-keras yang memanfaatkan struktur memori GPU modern semaksimal mungkin, sehingga perpindahan data masuk dan keluar HBM dihindari sebisa mungkin
Tri Dao adalah orang yang membuat Flash Attention, dan itu juga merupakan cara untuk menggunakan perangkat keras secara lebih efisien pada Transformer. Bidang ini memang benar-benar keahliannya
Mamba dan Based, yang muncul tepat sebelum NeurIPS 2023, memasukkan multi-query associative recall (MQAR) serta ketergantungan data pada gating/seleksi yang terinspirasi dari multi-head Attention. Keduanya adalah unsur kunci yang hilang pada Hyena dan arsitektur ruang-keadaan sebelumnya, dan membuat model baru ini menjadi sebaik Attention pada tugas associative recall, serta mungkin sedikit lebih baik daripada Attention pada tugas lain yang bukan sekadar lookup
Tentu saja, detail besar pada Mamba adalah implementasi CUDA yang efisien. Tanpa itu, arti penting arsitektur ini bisa berkurang pada tugas-tugas yang memang sudah cocok untuk Transformer
Bahkan jika Anda tidak terlalu mengkhawatirkan panjang konteks, banyak wilayah baru tetap terbuka. Analisis sekuens DNA adalah tugas linear dengan ketergantungan panjang, dan kita juga bisa memikirkan citra, video, serta informasi berdimensi tinggi sebagai aliran token. Mirip seperti memindai piksel pada monitor CRT lama
Salah satu impian awal AI adalah lintasan pembelajaran tunggal dari agen yang terus berinteraksi dengan lingkungan dan berevolusi terus-menerus, dan model dengan panjang konteks tak terbatas seperti ini mungkin bisa mempermudah terwujudnya impian tersebut
Namun untuk saat ini, aplikasi hilir pada tugas nyata yang penting untuk model semacam ini umumnya masih kurang tervalidasi dan kurang dituning dibanding aplikasi berbasis Attention yang sudah matang. Analogi dengan jaringan saraf berulang lama cukup membantu sampai batas tertentu, tetapi selama 5 tahun terakhir orang terlalu terspesialisasi pada Attention dan Transformer, sehingga inersia ke arah Transformer sangat kuat
Dalam makalah aslinya dijelaskan bahwa setelah parameter ditransformasikan, model dapat dihitung dengan dua cara: relasi rekurensi linear atau konvolusi global. Umumnya, saat pelatihan ketika seluruh sekuens masukan bisa dilihat lebih dulu, digunakan mode konvolusi yang mudah diparalelkan, sedangkan pada inferensi autoregresif yang melihat masukan satu langkah waktu demi satu langkah waktu, model beralih ke mode rekuren yang efisien
Jadi pelatihan dapat diparalelkan, mirip mode forward paralel pada RetNet. Inferensi dasarnya dijalankan dalam mode rekuren untuk memperoleh konteks sepanjang mungkin, dan karena tidak ada chunking, sulit menilai seberapa besar RAM dan VRAM yang akan dipakai selama inferensi
Video ini menjelaskan makalahnya sambil juga memberi banyak konteks tentang posisinya dalam gambaran besar. Alur penjelasannya cukup menarik untuk diikuti
https://youtu.be/ouF-H35atOY?si=y2Ckp9MCFd7ulLL3
Alih-alih Attention kuadratik yang menghitung seberapa besar setiap token memperhatikan semua token lain, pendekatannya adalah entah bagaimana menghitung kernel konvolusi panjang yang panjangnya sama dengan masukan, lalu menerapkan
conv1dDari pemahaman saya yang terbatas, ini sedikit berkaitan dengan menerapkan FFT, melakukan perkalian matriks, lalu kembali dengan IFFT. Saya tahu itu bekerja, tetapi lambat. Ada berbagai cara menghitung FFT, dan salah satunya adalah matriks kupu-kupu. Mungkin itu hanya pendekatan aproksimasi, tetapi tampaknya cukup bagus dan sangat cepat serta efisien pada perangkat keras saat ini
Kompleksitas kuadratik terdengar buruk, tetapi dalam praktiknya algoritme subkuadratik sering kali lebih lambat karena keterbatasan perangkat keras. Jadi, meskipun ekspektasi terhadap model ruang-keadaan besar, masih sulit mengatakan bahwa Llama sudah selesai. Kita juga belum tahu apakah Mamba tetap bekerja baik saat diskalakan besar, dan untuk mengetahuinya perlu benar-benar menghabiskan jutaan dolar untuk pelatihan. Meski begitu, saya tetap optimistis
Model lain yang menarik dalam keluarga subkuadratik adalah RWKV. Layak dilihat, tetapi sepertinya itu sudah pernah dibahas di podcast
Saya belajar sendiri dan hanya pernah menelusuri makalahnya secara sepintas dulu, jadi mungkin banyak yang salah. Selain itu, Attention biasanya punya cache KV yang sangat membantu performa, dan menurut saya Mamba tidak bisa melakukan hal itu
Saya tertawa pada kalimat “Mamba adalah ular berbisa terpanjang di dunia dengan panjang yang diperkirakan melebihi 150 m”
Tetap saja, ini benar-benar luar biasa, dan karena merujuk ke makalah arXiv, orang seperti saya yang mengonsumsi tulisan seperti ini alih-alih menafsirkan makalahnya langsung jadi bisa sedikit mengintip bagian dalamnya
Akan lucu juga kalau nanti perlu menerbitkan koreksi untuk kalimat itu
Saya menduga inti algoritmenya adalah parallel prefix scan. Rasanya itulah poin utama Mamba
for i in range(l):x = deltaA[:, :, i] * x + deltaB_u[:, :, i]y = einsum(x, C[:, i, :], 'b d_in n , b n -> b d_in')ys.append(y)Mungkin ini pertanyaan bodoh, tapi saya penasaran seberapa sulit melatih model Mamba yang diunggah ke Hugging Face
Model terbesarnya tampak 2.8B; kalau dilatih dengan dataset seperti The Pile, kira-kira butuh berapa GPU dan berapa lama?
Inferensinya juga tampaknya 3–5x lebih cepat sambil hanya memakai setengah RAM
Saya sempat mencoba membedah versi CUDA resminya, tapi setelah percobaan pertama gagal akhirnya tidak jadi saya sentuh lagi, dan implementasi ini terlihat jauh lebih baik
Satu lagi implementasi PyTorch satu file, benar-benar luar biasa. Saya berharap hlb-CIFAR10 dan proyek terkait yang saya lakukan sebelumnya, serta pengaruh pendahulu seperti minGPT dan DawnBench, sedikit banyak membantu mendorong format satu file yang sederhana
Pekerjaan seperti ini penting untuk riset machine learning yang efisien, dan mungkin merupakan salah satu hal terpenting yang bisa dilakukan untuk bidang ini saat ini
Riset bergerak maju dengan kecepatan inovasi, dan inovasi makin cepat sebanding dengan kebalikan dari waktu eksekusi eksperimen, yang jelas terkait dengan kompleksitas Kolmogorov dari kode untuk keperluan riset atau hacking sederhana
Sulit untuk melebih-lebihkan betapa pentingnya alat seperti ini bagi riset, dan seberapa besar secara pribadi ini mempercepat proses penemuan pengetahuan bagi saya. Kemampuan untuk dengan cepat membuat sketsa ide dalam hitungan menit dan segera mendapatkan hasil dengan rasio signal-to-noise yang tinggi telah menjadi unsur penting dalam kemajuan riset
Saya melihat distilasi pengetahuan dan MDL(https://en.wikipedia.org/wiki/Minimum_description_length) sebagai hal yang sangat penting untuk membalikkan ornamen yang tidak perlu, sampah, dan persaingan topik bernilai rendah yang terlalu padat demi “tidak ketinggalan”, yang tampaknya didorong oleh proses submit/review makalah saat ini
Belakangan ini, untuk menghindari masalah itu dan bergerak ke solusi penskalaan yang sedikit lebih baik, saya mulai merilis kode sebagai “code sketch”, yaitu gist pendek satu file yang mandiri. Ini mengurangi waktu pengembangan, dan memungkinkan saya langsung menyampaikan kode kerja yang kasar dan belum dipoles yang memuat konsepnya kepada orang lain. Sejauh ini tampaknya cukup berhasil dan saya ingin terus melakukannya
Saya ingin melihat lebih banyak kode seperti ini. Jika Anda peneliti yang melatih data dalam skala besar, Anda juga harus efisien terhadap data dalam cara menyebarkan informasi
Mungkin belum pernah ada manusia yang mengembangkan sesuatu dengan kompleksitas sebesar ini secepat ini
Satu-satunya tempat lain yang tampak memiliki kecepatan serupa mungkin SpaceX, yang tahun ini juga meluncurkan dua roket mutakhir. Penasaran apa yang akan muncul pada 2024
x_projtidak memiliki bias, jadi tampaknya bobot x_proj dan dt_proj bisa digabungkanJika ada kebutuhan penyesuaian bobot, mungkin itu bisa dilakukan begitu saja saat runtime, dan kernel tunggal plus bias pada akhirnya mungkin lebih cepat. Tidak yakin juga
Saya penasaran apakah ada diskusi untuk makalah aslinya. Mungkin saya melewatkannya, tapi ini cukup menarik
Saya kurang paham bagian yang mengatakan “karena kurangnya implementasi efisien menimbulkan kehabisan memori atau kebutuhan komputasi yang tidak realistis, hasil penuh pada panjang konteks 8k untuk baseline RWKV dan RetNet, model rekuren kuat sebelumnya yang juga dapat ditafsirkan sebagai SSM, tidak disertakan”
RetNet tidak banyak memakai memori, dan jika menggunakan implementasi forward berbasis chunk, penggunaan VRAM dibatasi oleh ukuran chunk. Bagian inilah yang penting saat menguji panjang konteks
Saya penasaran apakah ada yang sudah menguji model Mamba asli. Dibandingkan dengan RetNet dalam mode forward paralel, kira-kira bagaimana kecepatan latihnya?
https://openreview.net/forum?id=AL1fq05o7H
Implementasi yang merangkum hal kompleks hanya menyisakan intinya selalu bagus