Orijinal başlık: Tutkal ve yardımcı işlemci mimarileri

Yazar: Vitalik, Ethereum'un kurucusu Derleyici: Deng Tong, Golden Finance;

Geri bildirimleri ve yorumları için Justin Drake, Georgios Konstantopoulos, Andrej Karpathy, Michael Gao, Tarun Chitra ve çeşitli Flashbots katılımcılarına özellikle teşekkür ederiz.

Modern dünyada devam eden herhangi bir kaynak yoğun hesaplamayı orta düzeyde ayrıntılı olarak analiz ederseniz, hesaplamanın iki parçaya bölünebildiğini tekrar tekrar bulacağınız bir özellik vardır:

  • Nispeten az miktarda karmaşık ancak hesaplama açısından yoğun olmayan "iş mantığı";

  • Çok yoğun ama oldukça yapılandırılmış “pahalı iş”.

Bu iki bilgi işlem biçimi en iyi şekilde farklı şekillerde ele alınır: mimarisi daha az verimli olabilen ancak çok genel olması gereken ilki; mimarisi daha az genel olabilen ancak çok verimli olması gereken ikincisi.

Bu farklı yaklaşımın pratikteki örnekleri nelerdir?

Öncelikle en aşina olduğum ortama bakalım: Ethereum Virtual Machine (EVM). İşte yakın zamanda yaptığım bir Ethereum işleminin geth hata ayıklama izi: ENS'deki blogumun IPFS karmasını güncelleme. İşlemde toplam 46924 gaz tüketildi ve şu şekilde sınıflandırılabilir:

  • Temel maliyet: 21.000

  • Çağrı verileri: 1.556

  • EVM yürütmesi: 24.368

  • SLOAD işlem kodu: 6.400

  • SSTORE işlem kodu: 10.100

  • GÜNLÜK işlem kodu: 2.149

  • Diğerleri: 6.719

JaES4D3UNAAlSuVhxkNkxqkNuopjvB5MPpwGUbYe.jpeg

ENS karma güncellemelerinin EVM izi. Sondan bir önceki sütun gaz tüketimidir.

Hikayenin ana fikri şudur: Uygulamanın çoğunluğu (yalnızca EVM'ye bakarsanız yaklaşık %73, hesaplamayı kapsayan temel maliyet kısmını eklerseniz yaklaşık %85) çok az sayıda yapılandırılmış pahalı operasyonda yoğunlaşmıştır: depolama okumaları ve yazma, günlüğe kaydetme ve şifreleme (temel maliyet, ödeme imzası doğrulaması için 3000'i içerir, EVM ayrıca ödeme karması için 272'yi de içerir). Yürütmenin geri kalanı "iş mantığıdır": ayarlamaya çalıştığım kaydın kimliğini ve onu ayarladığım karma değerini çıkarmak için çağrı verilerinin bitlerini değiştirmek vb. Bir token transferinde bu, bakiyelerin eklenmesini ve çıkarılmasını içerir; daha gelişmiş uygulamalarda bu, rotasyonları vb. içerebilir.

EVM'de bu iki yürütme biçimi farklı şekilde ele alınır. Üst düzey iş mantığı, EVM'ye derlenen, genellikle Solidity olmak üzere daha üst düzey bir dilde yazılmıştır. Pahalı çalışmalar hala EVM işlem kodları (SLOAD vb.) tarafından tetikleniyor, ancak gerçek hesaplamaların %99'undan fazlası doğrudan istemci kodunun (veya hatta kitaplıkların) içine yazılan özel modüllerde yapılıyor.

Bu modele ilişkin anlayışımızı geliştirmek için, bunu başka bir bağlamda inceleyelim: Python'da torch kullanılarak yazılan yapay zeka kodu.

pLGF8omDmigyKSG9Holtr0YEeXlqkEiqjW833sdP.jpeg

Transformatör modeli bloğunun ileri geçişi

Burada ne görüyoruz? Python'da, gerçekleştirilen işlemlerin yapısını açıklayan nispeten az miktarda "iş mantığı" yazıldığını gördük. Gerçek bir uygulamada girdinin nasıl alınacağı, çıktıyla ne yapılacağı gibi detayları belirleyen başka bir tür iş mantığı olacaktır. Bununla birlikte, her bir işlemin kendisini derinlemesine incelersek (self.norm, torch.cat, +, *, self.attn... içindeki bireysel adımlar), vektörleştirilmiş hesaplamalar görürüz: aynı işlemler büyük ölçüde paralel değerde hesaplanır . İlk örneğe benzer şekilde, hesaplamaların küçük bir kısmı iş mantığı için kullanılır ve hesaplamaların büyük kısmı büyük yapılandırılmış matris ve vektör işlemlerini gerçekleştirmek için kullanılır - aslında çoğu yalnızca matris çarpımlarıdır.

Tıpkı EVM örneğinde olduğu gibi bu iki iş türü de iki farklı şekilde ele alınmaktadır. Üst düzey iş mantığı kodu, son derece çok yönlü ve esnek bir dil olan Python'da yazılmıştır, ancak aynı zamanda çok yavaştır ve verimsizliği kabul ederiz çünkü bu, toplam bilgi işlem maliyetinin yalnızca küçük bir kısmını oluşturur. Bu arada, yoğun işlemler yüksek derecede optimize edilmiş kodla, genellikle GPU'da çalışan CUDA koduyla yazılır. ASIC'ler üzerinde LLM çıkarımının yapıldığını giderek artan bir şekilde görmeye başlıyoruz.

SNARK'lar gibi modern programlanabilir kriptografi yine iki düzeyde benzer bir modeli izler. Birincisi, kanıtlayıcı, yukarıdaki AI örneğinde olduğu gibi, ağır işlerin vektörleştirilmiş işlemlerle yapıldığı üst düzey bir dilde yazılabilir. Buradaki dairesel STARK kodu bunu gösteriyor. İkincisi, kriptografi içinde yürütülen programların kendisi, genel iş mantığı ile yüksek düzeyde yapılandırılmış pahalı işler arasında ayrım yapacak şekilde yazılabilir.

Bunun nasıl çalıştığını anlamak için STARK'ın gösterdiği en son trendlerden birine bakabiliriz. Çok yönlü ve kullanımı kolay olmak için ekipler, RISC-V gibi yaygın olarak benimsenen minimal sanal makineler için giderek daha fazla STARK kanıtlayıcıları oluşturuyor. Yürütülmesinin kanıtlanması gereken herhangi bir program RISC-V'ye derlenebilir ve kanıtlayıcı daha sonra bu kodun RISC-V yürütüldüğünü kanıtlayabilir.

AugPMolB2AGUDGPrqj7hJFwSEO1nzB8CVvPhFXwq.jpeg

RiscZero belgelerinden diyagram

Bu çok kullanışlıdır: Bu, kanıt mantığını yalnızca bir kez yazmamız gerektiği anlamına gelir ve o andan itibaren kanıta ihtiyaç duyan herhangi bir program, herhangi bir "geleneksel" programlama dilinde yazılabilir (örn. RiskZero, Rust'u destekler). Ancak bir sorun var: Bu yaklaşım çok fazla yüke neden oluyor. Programlanabilir şifreleme zaten aşırı derecede pahalıdır; RISC-V yorumlayıcısında kod çalıştırmanın getirdiği ek yük çok fazladır. Böylece geliştiriciler bir numara buldular: hesaplamanın büyük kısmını oluşturan belirli pahalı işlemleri (genellikle karmalar ve imzalar) belirleyin ve ardından bu işlemleri çok verimli bir şekilde kanıtlamak için özel modüller oluşturun. Daha sonra verimsiz ancak genel bir RISC-V kanıt sistemini verimli ancak uzmanlaşmış bir kanıt sistemiyle birleştirirsiniz ve her iki dünyanın da en iyisini elde edersiniz.

Çok partili hesaplama (MPC) ve tamamen homomorfik şifreleme (FHE) gibi ZK-SNARK dışındaki programlanabilir şifreleme, benzer yöntemler kullanılarak optimize edilebilir.

Genel olarak bu fenomen nasıldır?

Modern bilgi işlem giderek benim yapıştırıcı ve yardımcı işlemci mimarileri dediğim şeyi takip ediyor: oldukça çok yönlü ancak verimsiz olan ve bir veya daha fazla yardımcı işlemci bileşeni arasındaki görevleri yürütmekten sorumlu bazı merkezi "tutkal" bileşenleriniz var. Bu yardımcı işlemci bileşenlerinin genelliği düşük ancak aktarım verimliliği yüksek. aralarındaki veriler.

abhGUxtZnxYpz5SurIDkzwKHbrWsETbobFSspMFw.jpeg

Bu bir basitleştirmedir: Pratikte verimlilik ve çok yönlülük arasındaki denge eğrisi neredeyse her zaman ikiden fazla seviyeye sahiptir. Endüstride sıklıkla "ortak işlemciler" olarak anılan GPU'lar ve diğer yongalar, CPU'lardan daha az çok yönlüdür ancak ASIC'lerden daha çok yönlüdür. Uzmanlık değişimi karmaşıktır ve algoritmanın hangi bölümlerinin beş yıl içinde aynı kalacağı ve hangi bölümlerinin altı ay içinde değişeceğine ilişkin tahminlere ve sezgilere bağlıdır. ZK kanıt mimarisinde sıklıkla benzer çoklu uzmanlık katmanlarını görüyoruz. Ancak geniş zihinsel modeller için iki düzeyi dikkate almak yeterlidir. Bilgisayar biliminin birçok alanında benzer durumlar mevcuttur:

HcKioeJGDdAT3f9IGBEstGubJoZSMnmddZoSxEYk.jpeg

Yukarıdaki örneklerden, hesaplamaların bu şekilde bölünebilmesi kesinlikle bir doğa kanunu gibi görünmektedir. Aslında onlarca yıla yayılan bilgisayar uzmanlığının örneklerini bulabilirsiniz. Ancak bu ayrılığın giderek arttığını düşünüyorum. Bunun bir nedeni olduğunu düşünüyorum:

CPU saat hızı iyileştirmelerinin sınırlarına ancak yakın zamanda ulaştık, bu nedenle daha fazla kazanım ancak paralelleştirme yoluyla elde edilebilir. Bununla birlikte, paralelleştirme hakkında mantık yürütmek zordur, bu nedenle geliştiricilerin sırayla akıl yürütmeye devam etmesi ve paralelleştirmenin belirli işlemler için oluşturulmuş özel modüllere sarılmış olarak arka uçta gerçekleşmesine izin vermesi genellikle daha pratiktir.

Hesaplama hızları son zamanlarda o kadar hızlı hale geldi ki, iş mantığının hesaplama maliyeti gerçekten göz ardı edilebilir hale geldi. Bu dünyada, hesaplama verimliliği dışındaki hedeflere ulaşmak için iş mantığının üzerinde çalıştığı VM'leri optimize etmek de mantıklıdır: geliştirici kolaylığı, aşinalık, güvenlik ve diğer benzer hedefler. Bu arada, özel "ortak işlemci" modülleri verimlilik için tasarlanmaya devam edebilir ve güvenliklerini ve geliştirici dostu olmalarını yapışkanla olan nispeten basit "arayüzlerinden" alabilirler.

En önemli pahalı operasyonların ne olduğu giderek daha açık hale geliyor. Bu, belirli türdeki pahalı işlemlerin büyük olasılıkla kullanıldığı kriptografide en belirgindir: modüler aritmetik, eliptik eğrilerin doğrusal kombinasyonları (diğer adıyla çok skaler çarpma), hızlı Fourier dönüşümleri vb. Bu aynı zamanda yapay zekada da giderek daha belirgin hale geliyor; burada yirmi yılı aşkın bir süredir çoğu hesaplama (her ne kadar değişen hassasiyet seviyelerinde olsa da) "öncelikle matris çarpımları" ile yapılıyor. Diğer alanlarda da benzer eğilimler ortaya çıkıyor. (Hesaplama yoğun) hesaplamalarda 20 yıl öncesine kıyasla çok daha az bilinmeyen bilinmeyen var.

bu ne anlama gelir?

Önemli bir nokta, yapıştırmacıların iyi yapıştırmacılar olacak şekilde optimize edilmesi gerektiği ve yardımcı işlemcilerin de iyi yardımcı işlemciler olacak şekilde optimize edilmesi gerektiğidir. Bunun sonuçlarını birkaç temel alanda inceleyebiliriz.

EVM

Bir blockchain sanal makinesinin (örneğin EVM) verimli olması gerekmez, sadece tanıdık olması yeterlidir. Verimsiz bir VM'deki hesaplamalar, yalnızca doğru yardımcı işlemcilerin ("ön derleme" olarak da bilinir) eklenmesiyle, aslında yerel olarak verimli bir VM'deki hesaplamalar kadar verimli olabilir. Örneğin, EVM'nin 256 bitlik kayıtlarının yarattığı ek yük nispeten küçükken, EVM'nin aşinalığının ve mevcut geliştirici ekosisteminin faydaları önemli ve uzun ömürlüdür. EVM'yi optimize eden geliştirme ekipleri, paralelleştirme eksikliğinin genellikle ölçeklenebilirlik açısından büyük bir engel olmadığını bile buldu.

EVM'yi iyileştirmenin en iyi yolu (i) daha iyi önceden derlenmiş veya özelleştirilmiş işlem kodları eklemek (örneğin EVM-MAX ve SIMD'nin bazı kombinasyonları makul olabilir) ve (ii) örneğin Verkle ağaçlarının bellek düzenini geliştirmek olabilir. bir yan etki olarak birbirine bitişik depolama yuvalarına erişim maliyetini büyük ölçüde azaltır.

H4kLdEP1RkmcZdXMTO4gmlj9eeT702lD1QmrTAwB.jpeg

Ethereum Verkle ağacı teklifinde depolama optimizasyonu, bitişik depolama anahtarlarının bir araya getirilmesi ve gaz maliyetinin bunu yansıtacak şekilde ayarlanması. Bunun gibi optimizasyonlar, daha iyi ön derlemeyle birleştiğinde EVM'nin kendisini ayarlamaktan daha önemli olabilir.

Güvenli bilgi işlem ve açık donanım

Modern bilgi işlemde güvenliği donanım düzeyinde artırmanın zorluklarından biri, aşırı karmaşık ve özel doğasıdır: çipler verimli olacak şekilde tasarlanmıştır ve bu da özel optimizasyon gerektirir. Arka kapıların gizlenmesi kolaydır ve yan kanallardaki güvenlik açıkları sürekli olarak keşfedilmektedir.

Çeşitli açılardan daha açık ve güvenli alternatifler için çabalar devam ediyor. Bazı bilgi işlem işlemleri, kullanıcıların telefonları da dahil olmak üzere giderek daha fazla güvenilir yürütme ortamlarında yapılıyor ve bu da kullanıcı güvenliğini artırıyor. Daha açık kaynaklı tüketici donanımına yönelik baskı devam ediyor ve Ubuntu çalıştıran RISC-V dizüstü bilgisayarlar gibi yeni kazanımlar da var.

oJ7THWtWl9L3a5Z10FqgQ065AzAGSBaBhWHRf04K.jpeg

Debian çalıştıran RISC-V dizüstü bilgisayar

Ancak verimlilik hâlâ bir sorun olmaya devam ediyor. Yukarıda bağlantılı makalenin yazarı şunu yazıyor:

RISC-V gibi daha yeni açık kaynaklı çip tasarımlarının halihazırda var olan ve onlarca yıldır geliştirilen işlemci teknolojisiyle rekabet etmesi pek olası değildir. İlerlemenin her zaman bir başlangıç ​​noktası vardır.

Bir FPGA üzerinde bir RISC-V bilgisayarı oluşturma tasarımı gibi daha paranoyak fikirler daha büyük yüklerle karşı karşıyadır. Peki ya yapıştırma ve yardımcı işlemci mimarisi bu ek yükün aslında önemli olmadığı anlamına geliyorsa? Açık ve güvenli çiplerin tescilli çiplerden daha yavaş olacağını kabul edersek, gerekirse spekülatif yürütme ve dal tahmini gibi genel optimizasyonlardan vazgeçeriz, ancak bunu çoğu Yoğun Sistemde kullanılan (gerekirse özel) ASIC modülleri ekleyerek telafi etmeye çalışırız. belirli hesaplama türleri, buna ne dersiniz? Güvenlik, açık kaynak tasarımı ve yan kanal direnci için optimize edilecek bir "ana çip"te hassas hesaplamalar yapılabilir. ASIC modüllerinde daha yoğun hesaplamalar (örneğin ZK kanıtları, AI) yapılacak ve yapılan hesaplamalar hakkında daha az bilgi sahibi olacak (muhtemelen kriptografik körleme yoluyla, hatta bazı durumlarda sıfır bilgi).

kriptografi

Bir diğer önemli nokta ise kriptografinin, özellikle de programlanabilir kriptografinin ana akım haline gelmesi konusunda oldukça iyimser bir yaklaşım. SNARK, MPC ve diğer ayarlarda bazı yüksek düzeyde yapılandırılmış hesaplamaların hiper-optimize edilmiş uygulamalarını gördük: bazı hash işlevleri, hesaplamayı doğrudan çalıştırmaktan yalnızca birkaç yüz kat daha pahalıdır ve yapay zeka (temel olarak matris çarpımı) da çok düşüktür. GKR gibi ilave iyileştirmeler bu seviyeyi daha da düşürebilir. Tamamen genel bir VM yürütmesi, özellikle bir RISC-V yorumlayıcısında yürütüldüğünde, yaklaşık on bin kat daha fazla ek yüke neden olmaya devam edebilir, ancak bu makalede açıklanan nedenlerden dolayı bu önemli değildir: sırasıyla verimli özel teknikler kullanıldığı sürece Hesaplama açısından en yoğun parçaların işlenmesiyle genel maliyet kontrol edilebilir.

hTatkTj6wZCWRGAgr4NNmcxFZkkuGq7oW1PT3U2P.jpeg

Yapay zeka modeli çıkarımının en büyük bileşeni olan matris çarpımına ayrılmış basitleştirilmiş MPC diyagramı. Modelinizi ve girişlerinizi nasıl gizli tutacağınız da dahil olmak üzere daha fazla ayrıntı için bu makaleye bakın.

"Yapıştırıcı katmanların yalnızca tanıdık olması gerekir, verimli olmaması gerekir" fikrinin bir istisnası gecikme ve daha az ölçüde veri bant genişliğidir. Hesaplama aynı veriler üzerinde onlarca kez ağır işlemler içeriyorsa (kriptografi ve yapay zekada olduğu gibi), verimsiz tutkal katmanlarından kaynaklanan herhangi bir gecikme, çalışma zamanında büyük bir darboğaz haline gelebilir. Bu nedenle tutkal hatlarının da verimlilik gereksinimleri vardır, ancak bu gereksinimler daha spesifiktir.

Sonuç olarak

Genel olarak, yukarıdaki eğilimlerin birçok açıdan çok olumlu gelişmeler olduğunu düşünüyorum. Birincisi, geliştirici dostu kalarak hesaplama verimliliğini en üst düzeye çıkarmanın mantıklı bir yoludur ve her ikisinden de daha fazlasını elde edebilmek herkes için iyidir. Özellikle, daha fazla verimlilik için istemci tarafında uzmanlaşmaya olanak tanıyarak hassas ve performans gerektiren hesaplamaları (örn. ZK kanıtları, LLM çıkarımı) kullanıcının donanımında yerel olarak çalıştırma yeteneğimizi geliştirir. İkincisi, verimlilik arayışının başta güvenlik, açıklık ve basitlik olmak üzere diğer değerlerden ödün vermemesini sağlamak için büyük bir fırsat penceresi yaratır: bilgisayar donanımında yan kanal güvenliği ve açıklığı, ZK-SNARK'larda azaltılmış Devre karmaşıklığı ve azaltılmış devre karmaşıklığı. sanal makinelerdeki karmaşıklık. Tarihsel olarak, verimlilik arayışı bu diğer faktörlerin ikinci planda kalmasına neden olmuştur. Yapıştırıcı ve yardımcı işlemci mimarisi sayesinde artık buna gerek yok. Makinenin bir kısmı verimliliği optimize ederken, diğer kısmı çok yönlülüğü ve diğer değerleri optimize eder ve ikisi birlikte çalışır.

Bu eğilim, kendisi de "pahalı yapılandırılmış bilgi işlemin" başlıca örneği olan kriptografi için de çok iyidir ve bu eğilim, bu eğilimi hızlandırmaktadır. Bu, güvenliği artırmak için başka bir fırsat ekler. Blockchain dünyasında gelişmiş güvenlik de mümkündür: sanal makineyi optimize etme konusunda daha az endişelenebilir ve ön derlemeyi ve sanal makineyle bir arada bulunan diğer özellikleri optimize etmeye daha fazla odaklanabiliriz.

Üçüncüsü, bu trend daha küçük ve yeni oyuncuların katılımına fırsatlar sağlıyor. Bilgi işlem daha az monolitik ve daha modüler hale gelirse, bu, giriş engelini önemli ölçüde azaltacaktır. Bir tür bilgi işlem için ASIC kullanmak bile potansiyel olarak bir fark yaratabilir. Bu aynı zamanda ZK kanıtları ve EVM optimizasyonu alanında da geçerlidir. En ileri düzeyde verimlilikle kod yazmak daha kolay ve daha erişilebilir hale gelir. Bu tür kodları denetlemek ve resmi olarak doğrulamak daha kolay ve erişilebilir hale gelir. Son olarak, bilişimin bu çok farklı alanları bazı ortak kalıplarda birleştiğinden, aralarında işbirliği ve öğrenmeye daha fazla yer vardır.