deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

bootgpt, işletim sistemi olmadan 512 baytlık bir boot sector'dan 11,5 KB'lık bir dil modelini çalıştırıyor

Bir geliştirici, karakter düzeyinde bir dil modelini bir PC'nin master boot record'una sıkıştırdı: 510 baytlık elle yazılmış assembly kodu, çıplak donanımda bir Linux boot log'u uyduran 11,5 KB'lık int8 bir ağı çalıştırıyor.

bootgpt, işletim sistemi olmadan 512 baytlık bir boot sector'dan 11,5 KB'lık bir dil modelini çalıştırıyor

Proje ne yapıyor

Hacker News'in ana sayfasında öne çıkan ve GitHub'da kerlenton tarafından yayımlanan bootgpt projesi, karakter düzeyinde bir dil modelini bir disk imajının master boot record'una sıkıştırıyor. Projenin README'sine göre MBR, arkasındaki 23 sector'dan 11,5 KB'lık int8 quantize edilmiş bir modeli çekip 386 sınıfı bir CPU üzerinde 16-bit real mode'da çalıştıran 510 baytlık elle yazılmış assembly kodundan oluşuyor. İşletim sistemi devrede değil, C runtime da yok — modelin altındaki tek yazılım BIOS.

Ürettiği şey ise uydurma bir Linux boot log'u: zaman damgaları, PCI adres aralıkları ve gerçekte var olmayan donanımı tarif eden ACPI interrupt olaylarıyla dmesg tarzı satırlar. Yalnızca 8 karakterlik bağlam ve tek bir hidden layer verildiğinde çıktı kabaca beklediğiniz gibi — tanınabilir yapı ve kernel kelime dağarcığı, anlamsız dizelerle harmanlanmış. Geliştirici yapım sürecini X'te bir başlıkta da belgelemiş.

Çıkarımı 510 bayta sığdırmak

Boot sector yalnızca kodu içeriyor; dizgiler, kelime dağarcığı tablosu ve ağırlıkların tamamı onu izleyen veri sector'lerinde duruyor — README'ye göre bu, çıkarım mantığını ve BIOS iletişimini mevcut alana sığdırmanın tek yoluydu.

Runtime, BIOS servislerine yaslanıyor: 13h interrupt'ı ağırlıkları diskten okuyor, 10h interrupt'ı karakterleri yazdırıyor. Aktivasyon fonksiyonu cdq ve idiv tamsayı bölme komutlarından inşa edilmiş bir softclip, örnekleme ise donanım zamanlayıcısından tohumlanan gürültülü argmax. Herhangi bir tuşa basmak makineyi yeniden başlatıyor.

Quantization şeması, real mode'da çalıştırmayı olanaklı kılan şey. Her şey iki'nin kuvvetleri ölçekli int8 olarak saklanıyor; böylece tüm forward pass, tamsayı çarpma komutları ve tek bir bölmeyle yürüyor ve hesaplamanın tamamı tamsayı aritmetiğinde kalıyor.

Eğitim ve bit düzeyinde doğrulama

Eğitim pipeline'ı olabildiğince yerleşik yöntemlerle ilerliyor. corpus_gen.py 3 MB'lık sahte dmesg metni üretiyor, train.py ise karakter embedding'lerini, tek bir hidden layer'ı ve bir softmax başlığını eğitip sonucu int8'e quantize ediyor. Bilinçli bir tercih: üretilen her boot oturumu tek bir kernel sürümü ve disk tanımlayıcısına sadık kalıyor, çünkü gerçek boot log'ları son derece tekrarlıdır ve bu tekrar, bu kadar küçük bir modelin inandırıcı görünmesini sağlayan şeydir.

Doğrulama yöntemi daha ilginç kısım. Eğitim betiği, assembly'nin gerçekleştireceği tamsayı aritmetiğini, LCG tabanlı rastgele örnekleyici dahil, birebir emüle ediyor; böylece simülatörün çıktısı ile gerçek boot sector'ün çıktısı doğrudan karşılaştırılabiliyor. README'ye göre ikisi tam olarak eşleşiyor.

Uzun geçmişi olan bir tür

Boot sector demoları köklü bir sanat formu ve README, projeyi bu soy içinde konumlandırıyor. Oscar Toledo, 512 baytın içine ünlü bir şekilde satranç, küçük bir işletim sistemi ve bir BASIC yorumlayıcısı sığdırmıştı; başkaları da bir C derleyicisini başarmıştı. En yakın akraba ise sectorllm: gerçek bir llama2 transformer'ını — beş katman, attention ve hepsi — yaklaşık 1,2 KB'lık real mode assembly kodundan boot edip Andrej Karpathy'nin stories260K modelini çalıştırıyor. Başka bir örnekte sectorlisp-nn, boot sırasında bir Lisp yorumlayıcısı üzerinde TensorFlow ile eğitilmiş bir ağı çalıştırıyor; ayrıca modern donanımda doğrudan llama sınıfı modeller yükleyen UEFI uygulamaları da mevcut.

bootgpt, sectorllm'ün tam karşıt kutbundadır: motorun tamamı MBR'nin içinde yaşar, ağırlıklar ve dizgiler arkasındaki sector'lerde durur; ve genel bir hikâye anlatıcısı olmaktan ziyade ağ, tam olarak tek bir iş için eğitilmiştir — kendi başlattığı makinenin boot log'unu uydurmak.

Çalıştırmak

İmajı oluşturmak için nasm, QEMU ve numpy dışında pek bir şeye gerek yok: bir betik imajı assemble ediyor, bir diğeri emülatör altında boot ediyor ve ayrı bir betik demo kaydını headless QEMU'dan alıyor. Ortaya çıkan disk.img normal bir boot edilebilir imaj; dolayısıyla bir USB belleğe yazılıp herhangi bir BIOS dönemi makinede boot edilebilir. Kod yalnızca kendi sector'lerini okuyor.

Neden önemli

Proje, bir dil modelinin ne kadar küçük olabileceğine dair yararlı bir kalibrasyon noktası. Tek bir hidden layer ve 8 karakterlik bağlama sahip 11,5 KB'lık bir ağ, ilk bakışta boot log'una benzeyen metin üretiyor — büyük ölçüde hedef alanın dar ve tekrarlı olmasından, ki bu da görünürdeki akıcılığın gerçekte nereden geldiği hakkında bir şey söylüyor. İki'nin kuvvetleri ölçekli, salt tamsayı quantization — forward pass'i çarpmalara ve tek bir bölmeye indirgemeye yarayan — telefonlar ve edge cihazları için model küçültmede kullanılan tekniklerin aynı ailesinden, uç noktaya götürülmüş hali. Ve bir mühendislik eseri olarak, çıplak BIOS yürütme yolunun hâlâ kullanılabilir bir hesaplama ortamı olduğunu gösteriyor; modern makine öğrenimini PC'nin en eski demo geleneklerinden birine bağlıyor.

  • #machine-learning
  • #assembly
  • #quantization
  • #retrocomputing
  • #open-source

İlgili yazılar