§ Platform / Genişletilebilirlik
Bizim hesaplayabildiğimiz her şeyi siz de yazabilirsiniz.
Yeni op'lar, GPU kernel'leri, gradyan kuralları, optimizer'lar, kayıp fonksiyonları, görüntüleyiciler, bağlayıcılar — Studio'nun içinden yazılır, yerleşiklerle birebir aynı denetimden geçer ve çalışırken onlardan ayırt edilemez: motor, yürütme anında sizin işinizi bizimkinden ayıramaz. Bizde üç gramer, bir denetleyici ve karşılaştırılacak bir referans kalır. Geri kalan her şey sizindir.
Sizin işiniz ile bizimki aynı türden şeylerdir
Çoğu platform iki tür kod barındırır: ürünün içine derlenmiş kendi kodları ve bir eklenti arayüzünün arkasında mesafede tutulan sizinki. Scellis'te tek tür vardır. Motorun çalıştırabildiği her şey — bizim eklediklerimiz dahil — tek bir katalogda içeriktir: tek giriş, aynı denetimler, aynı çalışma biçimi. Yazdığınız bir op, yerleşik bir op ile birebir aynı yoldan yürütülür; motorda hiçbir şey onun nereden geldiğini sormaz.
Bu özdeşlik kozmetik değil yapısaldır — ta yürütmeye kadar iner ve bir yerleşiği kayırmak, diğer her geriye gidiş gibi otomatik olarak yakalanan bir hata sayılır. Görünür farklar yalnızca süstür: adın başındaki bir user/ öneki, kartta bir köken rozeti. Biz kendimiz bir op eklediğimizde de onu içerik olarak, aynı kurallar altında ekleriz.
Üç gramer, bir denetleyici, bir referans — hepsi bu
| Bizde kalan | Neyi yönetir | Size ne kazandırır |
|---|---|---|
| Şekil ve imza dili | Bir operatörün verdiği söz — şekiller, eksenler, indirgemeler, sayı türleri | Herhangi bir operatörü tanımlayın; motor bu sözü genel biçimde okur |
| GPU kernel'leri için bellek düzeni | Bir kernel'in verisine nasıl eriştiği — tamponlar, paylaşımlı ara alan, sabitler | Parçalı matris çarpımları, indirgemeler, stencil'ler — ayrıcalık değil, yazılabilir |
| Gradyanların yazılma biçimi | Sıradan bileşik grafikler olarak türev kuralları | Bileşimle ifade edebildiğiniz her gradyanı yazabilirsiniz |
| Denetleyici | Yazılan her şey — oluşturulurken ve her düzenlemede | Aynı denetleyici her yerleşiği de bağlar |
| Referans uygulaması | Hesaplamanın güveni nasıl kazandığı — karşılaştırılacak bir referans, toleranslar, gradyan denetimleri | Sizin kernel'iniz bizimkiyle tam olarak aynı kanıtı kazanır |
Bu tablonun dışındaki her şey, sizin yazabileceğiniz içeriktir. Bizim kendi eklediğimiz bir op da içerik olarak girer ve aynı kurallarla denetlenir.
Elimizde tuttuğumuz her şey, motorun genel biçimde okuduğu üç gramere sığar. Bir şekil ve imza dili, bir operatörün ne söz verdiğini belirtir: hangi şekilleri aldığını, hangi eksenleri indirgediğini, hangi sayı türlerini kabul ettiğini. GPU kernel'leri için bir bellek düzeni, bir kernel'in verisine nasıl eriştiğini tarif eder; böylece parçalı bir matris çarpımı, bir indirgeme ya da bir stencil, bize ayrılmış bir şey değil, yazabileceğiniz bir şey olur. Bir de gradyan yazma biçimi, bir türev kuralını sıradan, bileşik bir grafik hâline getirir — herhangi bir ileri geçiş kadar ifade gücüyle. Bu üçünde yazılan her şey sizindir.
Bunların altındaki taban da aynı kesinlikle açıklanır. Küçük bir küme bilinçli olarak kapalıdır — sayı türleri, şekil kuralları, duyarlık kademeleri ile toleransları, bir avuç kontrol akışı biçimi. Her op'u, kernel'i ya da gradyanı bunların üzerine yazarsınız; gerçekten yeni bir şey gerekirse — karmaşık bir sayı türü, sekizinci bir döngü türü — bu, motorun sürümlenmiş bir yayını olarak eklemeli biçimde gelir: asla yerleşik içerik olarak değil, asla size söylemediğimiz bir ayrıcalık olarak değil.
Kendimizi sınadığımız ölçüt bilinçli olarak makine öğrenmesi değildir. Bir sonlu farklar stencil'i, yeni bir istatistik, bir simülasyon adımı — op'lar, kernel'ler, bloklar, kontrol akışı, tipler — birebir aynı yoldan gitmelidir; eğitim düzeneğinden hiçbir şey işin içinde olmadan. Kural nettir: bizsiz bir Laplasyen yazamıyorsanız, alt katman sizin değil bizimdir.
Yerleşikler yalnızca başlangıç setidir
| Ad | Tür | Köken | Geçtiği çıta |
|---|---|---|---|
| matmul | op + GPU kernel'i | built-in | denetlendi · tolerans içinde referansla örtüştü |
| user/mira/rms-norm | op + GPU kernel'i | user | denetlendi · tolerans içinde referansla örtüştü |
| training/optimizer/adam | optimizer | built-in | denetlendi · her bağımlılık tam bir sürüme sabitlendi |
| user/kav/adam-cautious | optimizer | user | denetlendi · her bağımlılık tam bir sürüme sabitlendi |
| training/loss/focal | kayıp | built-in | denetlendi · bileşimle türevlenebilir |
| user/ada/quantile-huber | kayıp | user | denetlendi · bileşimle türevlenebilir |
Yerleşik ve kullanıcı satırları birebir aynı okunur, çünkü birebir aynıdır — tek katalog, aynı denetimler, tek çalışma biçimi. Köken sunumdur; motor ona göre asla dallanmaz.
Yerleşik katalog bir başlangıç setidir, asla bir tavan değil: ürünle gelen optimizer'lar, kayıplar ve zamanlayıcılar, sizinkinin gireceği kapıdan girmiştir — yazıldı, denetlendi, yayımlandı, teslim edildi. Yazmak da Studio'nun eksiksiz bir yüzeyidir, yalnızca koddan girilen bir kapak değil: bir şeyi oluştururken ya da düzenlerken, desteklediği her öznitelik önünüzdedir — imzasından nasıl akıttığına, atıflarından lisansına kadar.
Aşağıdaki listeyi iki yönde de okuyun. Aynı türden bir yerleşik satır ile bir kullanıcı satırı aynı sözü verir, aynı denetimlerden geçer, aynı biçimde çalışır; köken sütunu farklı olan tek hücredir ve motor onu hiç okumaz. “Birinci sınıf”ın mekanik anlamı budur — kataloğun servis kapısı yoktur.
Yazılmış demek denetlenmiş demek — iki yönde de
Yazdığınız her şey — yalnızca bloklar değil, her tür — oluşturulurken ve her düzenlemede tek bir ortak denetimden geçer. Aynı denetim her yerleşiği de bağlar; yani güvence iki yönde işler: sizin işiniz bizimki gibi doğrulanır, bizimkinin de size uygulanan kuralların tam olarak aynısı altında eksiksiz olduğu kanıtlanır. Eksik üstveri, beyan etmediğiniz bir etki, tamamlanmamış bir imza — kim yazmış olursa olsun açıkça reddedilir.
Hesaplama güveni iddia etmez, kazanır. Yazdığınız bir kernel, sade bir referans uygulamasıyla eşleştirilir ve GPU sürümünün — sizin beyan ettiğiniz bir tolerans içinde — bu referansla örtüştüğüne dair kanıt, başkalarının ona güvenmesini sağlayan şeydir; kendi cihazınızda ise denetlenmemiş kendi kernel'inizi her zaman çalıştırabilirsiniz. Gradyanlar, sizin kendi ileri geçişinize karşı sayısal olarak denetlenir; bir indirgeme için beyan ettiğiniz cebir bile, hiçbir şey ona bel bağlamadan önce test edilir.
Düzenleme, yazmanın kardeşidir. Yerleşikler hiç değişmez — birini “düzenlemek”, size ait bir kopyayı çatallamaktır — sizin kendi şeyleriniz ise onları oluşturan aynı denetimli yoldan yerinde düzenlenir. Güven ise kimin yazdığından bağımsız kazanılır: kanıtla unverified'dan community'ye, verified'a, official'a tırmanılır; yani bir kullanıcının yazdığı iş de bizimkiyle tam olarak aynı rozeti taşıyabilir.
Bir kütüphane gibi içe aktarın ve kullanın
Yazdığınız her şeyin içinde — bir op, bir blok, bir kernel'in referansı, bir bağlayıcının girdisi — katalogdaki diğer şeyleri, içe aktarılmış bir kütüphaneyi kullanır gibi çağırırsınız ve içe aktarmalar kendini yazar: denetleyici çağrı noktalarınızı okur ve neye bağlı olduğunuzu kaydeder; görsel bir bağımlılıklar paneli, import ifadesinin *kendisidir* — bir şeyi sürükleyin, bağ kurulsun. Çağrı çağrı ayrıntı rehberde: kendi eklentilerinizi yazmak.
Her çağrı tam bir sürüme ve tam bir içerik hash'ine çözülür — asla “en son ne varsa”ya değil — dolayısıyla bir araya getirdiğiniz şey yapısı gereği yeniden üretilebilirdir, çevrimdışı çalışır ve bir bağlantı tam olarak bu kümeyi yeniden çalıştırır. Etkiler de baştan sona taşınır: “saf” bir yardımcı, bağlı olduğu bir şey üzerinden ağa çıkış kaçıramaz; çünkü onay, kümenin tamamı için bir kerede alınır. İsimler de taklit edilemez — bir başkasının yazdığı relu adlı bir op, yerleşik relu'yu asla gölgeleyemez.
Marketplace'ten kurulan bir Pack anında canlıdır ve içindekiler hemen çağrılabilir hâle gelir — kurun, sonra çağırın; bir kütüphaneyi not defterine çeker gibi. Ona bağlı olan her şey, çözdüğü tam sürüme sabit kalır: yukarıdaki bir düzenleme sizin kurduğunuzu asla değiştirmez ve güncelleme sizin verdiğiniz bir karardır, başınıza gelen bir şey değil.
Kimse hiçbir şeyi yeniden derlemeden yayımlayın
Yayımlamadan önce bir prova çalışır: sürümlerin hepsi sabitlenmiş mi, kanıt yerinde mi, etkiler beyan edilmiş mi, üstveri eksiksiz mi, herkese açtığınız her şeyin bir lisansı var mı? Gönderilen şey imzalı, sürümlü bir Pack'tir; onu kuran kişi önce hash'ini denetler ve uygulama yeniden derlenmeden onda canlı olur — sizde de, herkeste de.
Eksik bir entegrasyonun asla bizden beklenecek bir şey olmamasının nedeni budur. Yerleşik bağlayıcı seti bilinçli olarak küçüktür: bir sonraki bağlayıcı, format ya da eğitim yöntemi bir öğleden sonralık iş uzaklıktadır; aynı gün yayımlanır, aynı gün bulunur. Daha çok insanın yazması, platformun daha çoğunu yapabilmesi demektir; biz üç grameri, bir denetleyiciyi ve bir referansı bakımda tutarız. Döngü — yaz, denetle, yayımla, keşfet, çalıştır — bir yol haritası değil, başlangıç noktanızdır.
Yayımlamak at-ve-unut da değildir. Yayımlanmış bir sürüm için açılan bir güvenlik duyurusu ya da kullanımdan kaldırma bildirimi, ona sabitlenmiş herkese ulaşır; çatallar soylarını ve lisanslarını beraberinde taşır — yani katalogdan aldığınız her şey, çıkmaz sokak bir kopya değil, üzerine inşa etmeye bir davettir.