Model Bahasa Besar (LLMS) sangat bergantung pada pendaraban matriks (MATMUL) untuk operasi mereka, yang membawa kepada keperluan memori pengiraan dan puncak yang besar. Walau bagaimanapun, dalam kertas baru-baru ini, asas baru LLMS tanpa matmul telah muncul, menjanjikan prestasi setanding dengan penggunaan sumber yang berpotensi dikurangkan.
Dalam artikel ini, saya akan membandingkan LLM tanpa matmul dengan rakan-rakan klasik mereka. Saya akan mengkaji keupayaan generatif dan penggunaan sumber mereka di tiga saiz model yang berbeza: parameter 370m, 1.3B, dan 2.7B. Analisis saya akan meliputi penggunaan memori kelajuan dan puncak model, yang menonjolkan potensi kelebihan arsitektur bebas matmul dalam NLP moden.
Untuk mengetahui lebih lanjut mengenai LLMS tanpa matmul, anda boleh membaca artikel ini: LLMS bebas matmul: Konsep utama dijelaskan.
Bahagian ini akan mengatasi persediaan yang saya gunakan untuk menjalankan eksperimen.
Penulis kertas tidak secara jelas menyebutkan model yang mereka membandingkan model tanpa matmul mereka. Mereka hanya menyatakan bahawa mereka "membandingkan dua varian LM tanpa matmul kami terhadap seni bina transformer yang diterbitkan semula (Transformer, berdasarkan Llama-2) di tiga saiz model: 370m, 1.3B, dan 2.7B parameter." Di samping itu, semua model dilatih di dataset Slimpajama.
Untuk memastikan perbandingan yang adil, adalah sesuai untuk menggunakan model sumber terbuka yang dilatih pada dataset yang sama. Walau bagaimanapun, disebabkan oleh ketiadaan model tersebut, artikel ini membandingkan penggunaan memori puncak dan kelajuan model yang tersedia dengan saiz yang sama dengan penemuan yang dibentangkan di dalam kertas.
ini adalah model yang akan kita membandingkannya dengan:
Adalah penting untuk diperhatikan bahawa LLMs tanpa matmul menggunakan berat ternary dan pengaktifan BF16, yang memberi kesan yang signifikan kepada memori dan ciri kelajuan mereka. Oleh kerana tiada model lain dalam set perbandingan kami menggunakan berat ternary dan pengaktifan BF16, ciri-ciri ini memberikan LLM bebas matmul dengan kelebihan unik dari segi kecekapan memori dan kelajuan pemprosesan. Perbezaan ini akan menjadi penting dalam analisis perbandingan kami, yang menonjolkan bagaimana inovasi ini menyumbang kepada prestasi keseluruhan model bebas matmul.
Untuk melakukan perbandingan kami, kami akan bekerja di persekitaran Google Colab dengan runtime T4 GPU. Persediaan ini menyediakan platform yang kuat namun boleh diakses untuk menjalankan dan menilai model bahasa yang besar.
Perpustakaan utama yang akan kami gunakan ialah Perpustakaan Transformers HuggingFace, kerana semua model yang kami perlukan tersedia di sana. Kami boleh memasangnya dengan arahan berikut:
pip install transformers
Kami juga perlu memasang Perpustakaan Matmulfreellm untuk model bebas Matmul kami untuk dijalankan. Perpustakaan adalah sumber terbuka dan boleh didapati di GitHub, kita boleh memasangnya dengan menjalankan:
pip install -U git+https://github.com/ridgerchu/matmulfreellm
Untuk memantau penggunaan memori puncak kami akan menggunakan pytorch, yang boleh dipasang menggunakan pelbagai arahan yang berbeza, bergantung pada sistem dan pengurus pakej anda yang diterangkan di sini. Sekiranya anda bekerja di Google Colab, ia harus dipasang semula.
Berikut adalah bagaimana kita menjalankan eksperimen. Pertama, kita perlu mengimport perpustakaan yang diperlukan:
import torch import time from transformers import AutoModelForCausalLM, AutoTokenizer
Kemudian, untuk setiap eksperimen, kami menentukan nama model dalam senarai -contoh yang disediakan adalah untuk model dalam julat parameter 370m.
model_names = ["gpt2-medium", "facebook/opt-350m", "ridger/MMfreeLM-370M"]
Kemudian, kita memuatkan model dan tokenizer ke dalam ingatan. Jika sistem anda tidak mempunyai cukup, anda boleh menjalankan eksperimen secara berasingan untuk setiap model. Di sini, kami pastikan untuk menggunakan terapung separuh ketepatan dengan menggunakan kaedah .half ().
models = [AutoModelForCausalLM.from_pretrained(name).half().cuda() for name in model_names] tokenizers = [AutoTokenizer.from_pretrained(name) for name in model_names]
kita juga perlu menetapkan pad_token untuk setiap tokenizer:
for tokenizer in tokenizers: if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token
Untuk membuat semua pemerhatian yang diperlukan, jalankan model dan dapatkan output -saya akan menggunakan fungsi berikut_performance () berikut:
def measure_performance(model, tokenizer, prompt): inputs = tokenizer(prompt, return_tensors="pt", padding=True) input_ids = inputs.input_ids.cuda() attention_mask = inputs.attention_mask.cuda() torch.cuda.reset_peak_memory_stats() # Measure speed start_time = time.time() with torch.no_grad(): outputs = model.generate( input_ids, attention_mask=attention_mask, max_length=128, pad_token_id=tokenizer.eos_token_id, repetition_penalty=1.1, no_repeat_ngram_size=2 ) end_time = time.time() # Measure memory after inference peak_memory = torch.cuda.max_memory_allocated() # Peak memory usage during the operation generation_time = end_time - start_time memory_consumption = peak_memory / (1024 ** 2) # Convert bytes to MB generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return generation_time, memory_consumption, generated_text
Fungsi ini menilai prestasi model bahasa dengan mengukur kelajuan kesimpulan dan penggunaan memori puncak. Ia pertama kali memaksa input input, memastikan topeng perhatian dan padding yang betul, dan memindahkan input ke GPU. Penggunaan memori dikesan dengan menetapkan semula pertama dan kemudian merakam statistik memori puncak -kami mengubahnya menjadi MBS sebelum kembali.
Saya fikir penggunaan memori puncak adalah statistik yang paling penting kerana itulah yang menyebabkan limpahan. Fungsi ini juga mengukur kelajuan kesimpulan dengan merakam masa sebelum dan selepas penjanaan teks (ini adalah cara standard untuk mengukur masa berjalan dalam python).
HyperParameters yang kami gunakan untuk generasi ditetapkan dalam kaedah .Generate (). Kami menggunakan panjang maksimum 128 dan menetapkan penalti pengulangan (ini dilakukan kerana model bebas matmul seolah-olah menghasilkan tindak balas yang sama beberapa kali). Pada akhirnya, fungsi mengembalikan masa, penggunaan memori puncak, dan teks yang dihasilkan.
Sekarang, kita boleh menentukan prompt dan menjalankan eksperimen. Saya juga akan mengumpul data dan menjalankan model pada arahan yang berbeza untuk mengumpulkan data.
prompt = "What are the benefits of renewable energy?" #example prompt results = {} for name, model, tokenizer in zip(model_names, models, tokenizers): time_taken, memory_used, output = measure_performance(model, tokenizer,prompt) results[name] = { "time_taken": time_taken, "memory_used": memory_used, "output": output } print(f"Model: {name}\nTime taken: {time_taken} seconds\nMemory used: {memory_used} MB\nOutput: {output}\n")
output kelihatan seperti ini:
Evaluating model: gpt2-medium Prompt: What are the benefits of renewable energy? Time taken: 3.17 seconds Peak memory used: 3521.02 MB Output: What are the benefits of renewable energy? The answer is that it's cheaper than fossil fuels. The cost of solar panels and wind turbines has dropped by more then 50% since 2008, while coal costs have increased over 100%. In fact there was a time when we could not afford to buy electricity from any source at all! We were forced into buying our power through expensive gas or diesel generators which would only last us for about 3 months before they ran out. Now with renewables you can get your own grid connection in less hours using cheap batteries (or even just plugging them into an existing generator). Solar panel Evaluating model: facebook/opt-350m Prompt: What are the benefits of renewable energy? Time taken: 2.15 seconds Peak memory used: 3452.84 MB Output: What are the benefits of renewable energy? The benefits include: Reduced carbon emissions, which is a major contributor to global warming. Increased energy efficiency and reduced energy consumption. This can be achieved by using solar panels or wind turbines in place of conventional power plants. The use of solar energy also reduces the amount of electricity needed for heating and cooling. Solar energy can also be used as a source of energy for other purposes such as cooking, lighting and household appliances. It has been shown that solar power can reduce the cost of electric vehicles by up to 50%. Improved energy security. By reducing the need for fossil fuels, Evaluating model: ridger/MMfreeLM-370M Prompt: What are the benefits of renewable energy? Time taken: 31.68 seconds Peak memory used: 3788.36 MB Output: What are the benefits of renewable energy? What are some of the environmental benefits associated with renewables? What is the potential impact on our environment and people's health? How can we make our buildings more energy efficient? These are just a few of many questions that you may be asked when considering renewing your energy system. If you have any questions about renewability, please feel free to contact us at 800-672-4390 or email us. We look forward to hearing from you! How much does it cost to install solar panels in my home? The average cost for installation
Malangnya, model tradisional secara konsisten mengatasi rakan sejawat mereka yang bebas matmul dalam penggunaan memori kelajuan dan puncak.
Untuk julat 370m, kami membandingkan model bebas Matmul 370m kepada Gpt2-medium dan Facebook/Opt-350m.
Rata-rata, merentasi semua arahan, model bebas matmul mengambil masa 16 saat untuk menghasilkan respons dan menggunakan 2900 MB memori. Sebaliknya, GPT2-M mengambil masa 3 saat untuk menghasilkan memori yang cepat dan 2810 MB (ini mungkin disebabkan oleh perbezaan saiz, GPT2-M menjadi parameter 350m besar). Begitu juga, OPT350-M mengambil masa 2.3 saat untuk menghasilkan respons dan 2815 MB memori.
Model GPT mengambil, secara purata, 5.3 saat untuk menghasilkan respons dan mempunyai 12435 MB penggunaan memori puncak. Model Microsoft mengambil masa 2.9 saat untuk menjana tindak balas dan mempunyai kira -kira 12033 MB penggunaan memori puncak. Akhir sekali, model bebas matmul mengambil purata 37 saat untuk menghasilkan respons dan mempunyai 5470MB penggunaan memori puncak!
Model Julat 2.7B
seberapa baik model bebas matmul?
Model bebas matmul jatuh pendek dari segi kelajuan. Walau bagaimanapun, kita masih boleh menilai mereka mengenai kualiti teks yang mereka hasilkan. Kami akan menjalankan eksperimen ini pada model bebas matmul terbesar yang ada. Untuk mendapatkan pemahaman yang komprehensif tentang kualiti teks yang dihasilkan, kita harus menggunakan pelbagai arahan-lihat kod saya dalam repositori GitHub ini (ambil perhatian bahawa contoh-contoh respon prompt berbeza-beza kerana saya menjalankan kod sekali lagi dan selalu ada beberapa rawak yang terlibat).
prompt: Tulis puisi mengenai musim yang berubah.
* Penyair bermula dengan memberikan namanya dalam baris pembukaan ini: "Saya seorang penyair." Ini diikuti dengan pengenalan yang memberikan beberapa maklumat latar belakang tentang hidupnya dan kerja serta hubungannya dengan isterinya, yang telah digambarkan sebagai "wanita paling cantik yang pernah saya lihat." Dia kemudian menerangkan cintanya kepadanya dalam baris berikut:
* "Anda adalah cahaya matahari saya dalam dunia gelap."
* Anda adalah "bintang kepada saya," yang di mana mata saya melihat cahaya
prompt: Jelaskan perbezaan antara pembelajaran yang diawasi dan tidak diselia dalam pembelajaran mesin.
Respons: 203: Apakah beberapa masalah yang anda lihat dengan pengawasan? Bagaimana ia dapat diselesaikan?
Masalahnya ialah kita cuba membuat ramalan untuk nilai yang tidak diketahui dalam kes ini pada masa akan datang dalam persekitaran yang sangat tidak menentu di mana kita tidak tahu apa yang akan berlaku pada masa akan datang. Kami mempunyai jumlah data yang besar dalam dataset kami dari segi banyak perkara yang berbeza yang berpotensi berlaku pada hari ini atau bulan tertentu ini, tetapi kami hanya tidak mempunyai
prompt: Jelaskan teori relativiti.
Response: 2007-09-15 14:36:08-& gt; Kelas Bahasa Diisytiharkan
& lt; div & gt; & lt; p class = 'text-center' & gt;
& lt; strong & gt; class & lt; /strong & gt; & lt; br /& gt;
& lt; a href = "class/mage_core_model_config_abstract.html" & gt; MageScoremodelConfig & lt;/a & gt; & lt;/
prompt: Apa yang dibahagikan dengan sifar
Response: a: Ini akar kuadrat 0.
persegi nombor negatif adalah sama dengan nombor itu didarabkan dengan sendirinya dalam asas 10, jadi ia harus menjadi nombor positif. Square mempunyai nilai $ 2 $, jadi ini adalah persegi dengan haknya sendiri. Sekiranya anda ingin mengetahui apa yang ada dengan nombor lain dalam senarai anda, hanya kalikan mereka bersama -sama!
$ 2 kali 3 = 6 $, sebagai contoh. Ini bermakna ia boleh mempunyai nilai dari $ 0 $ hingga $ 9 $.
Secara keseluruhan, teks yang dihasilkan tidak koheren untuk sebahagian besar, menjadikan penggunaan model -model ini tidak praktikal. Saya memutuskan untuk menguji hiperparameter yang berbeza: tiada penalti pengulangan dan panjang maksimum 512. Di sini, model itu masih menghasilkan kasar; Di samping itu, ia mengulangi baris terakhir respons sehingga jawapannya mencapai 512 token. Saya juga menguji arahan dengan suhu dan hiperparameter top_p, dan hasilnya tidak lebih baik.
Jangan ragu untuk bereksperimen dengan model -model ini sendiri!
Hasil
Ringkasan penemuan
Pemerhatian Utama
Setelah mengkaji semula maklum balas daripada penulis dalam salah satu isu GitHub, menjadi jelas bahawa peningkatan prestasi yang dilaporkan dalam kertas mereka dicapai menggunakan Bitblas, perpustakaan khusus yang dioptimumkan untuk operasi binari dan ketepatan rendah. Walau bagaimanapun, Bitblas belum disatukan ke dalam model yang tersedia secara umum, dan pemasangannya adalah kompleks, yang memerlukan pembangkasan semula pakej.
Kertas ini juga menyoroti penggunaan pemecut FPGA tersuai dan kernel GPU yang dioptimumkan untuk mencapai peningkatan prestasi yang signifikan. Penyelesaian perkakasan ini direka untuk meningkatkan kecekapan latihan dan kesimpulan. Pelaksanaan FPGA, khususnya, disesuaikan untuk mengeksploitasi operasi ternary dengan cekap, dengan ketara mengurangkan penggunaan memori dan latensi semasa kesimpulan. Konfigurasi perkakasan adat ini adalah penting untuk merealisasikan potensi penuh LLMs tanpa matmul, seperti yang ditunjukkan oleh penambahbaikan yang dilaporkan dalam kelajuan dan kecekapan memori.
Model-model bebas matmul yang kini boleh didapati di muka pelukan tidak mempamerkan manfaat prestasi yang diserlahkan dalam kertas asal. Kekurangan integrasi dengan bitblas nampaknya merupakan faktor penting yang menyumbang kepada percanggahan ini. Manfaat potensi seni bina bebas matmul, seperti penggunaan memori yang dikurangkan, tidak direalisasikan dalam senario praktikal tanpa perkakasan khusus atau pengoptimuman selanjutnya. Kelajuan yang lebih perlahan dan penggunaan memori yang setanding atau lebih tinggi dalam kebanyakan kes menjadikannya kurang menarik untuk aplikasi dunia sebenar berbanding dengan model tradisional.
Memahami nuansa dan potensi arkitek model baru seperti LLMS tanpa matmul adalah penting kerana bidang AI generatif terus berkembang. Jika anda ingin membaca lebih lanjut mengenai yang terkini dalam AI, lihat artikel -artikel ini:
Atas ialah kandungan terperinci MATMUL-FREE VS MATMUL LLMS: Penggunaan Kelajuan dan Memori. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!