§1Tek yol

Sizin işiniz ile bizimki aynı türden şeylerdir

matmulop · yerleşikuser/mira/rms-normop · kullanıcı yazımıTek katalogaynı denetimlerGPU'nuztek yürütme yolu
Şek. 1 — Tek yol: yerleşik bir op ile birinin kendi yazdığı op aynı kataloğa girer, aynı denetimlerden geçer ve GPU'nuzda aynı biçimde çalışır. Bir şeyin nereden geldiği üstveridir; çalıştırma onu hiç okumaz.

Ç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.

§2Bizde kalan

Üç gramer, bir denetleyici, bir referans — hepsi bu

Bizde kalanNeyi yönetirSize ne kazandırır
Şekil ve imza diliBir operatörün verdiği söz — şekiller, eksenler, indirgemeler, sayı türleriHerhangi bir operatörü tanımlayın; motor bu sözü genel biçimde okur
GPU kernel'leri için bellek düzeniBir kernel'in verisine nasıl eriştiği — tamponlar, paylaşımlı ara alan, sabitlerParçalı matris çarpımları, indirgemeler, stencil'ler — ayrıcalık değil, yazılabilir
Gradyanların yazılma biçimiSıradan bileşik grafikler olarak türev kurallarıBileşimle ifade edebildiğiniz her gradyanı yazabilirsiniz
DenetleyiciYazılan her şey — oluşturulurken ve her düzenlemedeAynı 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 denetimleriSizin 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.

§3Malzeme listesi

Yerleşikler yalnızca başlangıç setidir

AdTürKökenGeçtiği çıta
matmulop + GPU kernel'ibuilt-indenetlendi · tolerans içinde referansla örtüştü
user/mira/rms-normop + GPU kernel'iuserdenetlendi · tolerans içinde referansla örtüştü
training/optimizer/adamoptimizerbuilt-indenetlendi · her bağımlılık tam bir sürüme sabitlendi
user/kav/adam-cautiousoptimizeruserdenetlendi · her bağımlılık tam bir sürüme sabitlendi
training/loss/focalkayıpbuilt-indenetlendi · bileşimle türevlenebilir
user/ada/quantile-huberkayıpuserdenetlendi · 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.

§4Çıta

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.

§5Bileşim ve yeniden kullanım

Bir kütüphane gibi içe aktarın ve kullanın

Sizin op'unuzkatalogdakileri çağırıruser/ada/quantile@1matmul@4Sabitlenmiş sürümlermatmul@4 · 9f3a…user/ada/quantile@1 · c41d…scellis.com/studio?repro=8f2ac1
Şek. 2 — İçe aktar ve kullan: op'unuzun içindeki iki çağrı da tam bir sürüme ve içerik hash'ine çözülür ve onay, kümenin tamamı için bir kerede alınır. Bir bağlantı tam olarak bu kümeyi yeniden çalıştırır.

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.

§6Döngü

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.