§1Kimlik

Bulunduğu yerle değil, içeriğiyle adlandırılır

Commit edilmiş sürümv3İçerik hash'i8f2ac1…e94dAtıf verdiğiniz URLscellis.com/studio?repro=8f2ac1Birebir yeniden çözümlenirmotor 1.4.2 · aynı hassasiyet
Şek. 1 — İddianın arkasındaki zincir: commit içerik hash'ini üretir, hash atıf verdiğiniz URL'yi taşır ve URL, birlikte kaydedilen motor ve hassasiyetle birebir aynı yapıtlara yeniden çözümlenir.

Scellis'te her yapıt — bir iş akışı, bir model, bir veri kümesi sürümü, bir checkpoint, bir şekil — baytlarının SHA-256'sıyla adlandırılır. Bir hash'in altındaki baytlar asla değişmez ve yayımlanmış bir sürüm değişmezdir: değişiklik, eskisinin üzerine yazmak yerine onunla yan yana yaşayan yeni bir sürümdür — üzerine inşa ettiğiniz şey tam olarak inşa ettiğiniz gibi kalır. Kataloğun içeriği dağıtırken kullandığı adlandırma şeması, sonuçlarınızın arşivlendiği şemanın ta kendisidir.

Bu disiplin kolaylıktan derine iner. Aynı içerik, çevrimdışı da eşitlenmiş de olsa her cihazda aynı adı üretir; çünkü her tür şey, hash'lenmeden önce tek bir kanonik biçime getirilir. Kimlik, depolama, eşitleme ve atıf tek bir veritabanı omurgasında yürür: bir bağlantının, bir dosya adının asla veremeyeceği sözü verebilmesinin nedeni budur.

§2Kayıt zinciri

Her çalıştırma kendi kaydını taşır

BileşenNasıl sabitlenirNeden önemli
Programher derleme aşamasıYalnızca çizdiğiniz iş akışı değil, GPU'ya giderken dönüştüğü her aşama — her biri içeriğiyle adlandırılmış ve incelemeye açık.
Veridataset id@versionBirebir veri kümesi sürümleri — kendileri de sürümlü birer yapıt olan eğitim, doğrulama ve test bölmeleri dahil.
Ağırlıklarcheckpoint hash'iAğırlıklar, optimizer durumu, rastgelelik durumu, epoch, adım, metrikler — tek paket; kaldığı yerden sürmek yapısaldır, sonradan eklenmiş bir özellik değil.
Rastgelelikseed + counterAdlandırılmış akışları olan sayaç tabanlı bir üreteç — aynı tohum ve sayaç, her yerde aynı çekiliş.
Motorengine 1.4.2Çalıştırmayı yürüten motorun kendisi — sonuçlar sürümleri aşabilsin diye kayda geçer.
Hassasiyetdebug · prod · fastSeçtiğiniz hassasiyet çalıştırmayla birlikte taşınır — her aşamada açık, asla sessiz bir varsayılan değil.

Kayıttaki her hash getirme sırasında doğrulanır: doğrulamadan geçemeyen her şey bozulma sayılır ve yeniden getirilir — yerine asla sessizce başka bir şey konmaz.

Her çalıştırma, kendisini belirleyen her şeyi birbirine bağlayan bir kayıt üretir: çizdiğiniz iş akışı, derlendiği programın her aşaması, birebir veri kümesi sürümleri, checkpoint'ler, çıktılar — her biri içeriğiyle adlandırılmış — artı motor sürümü ve altında koştuğu hassasiyet. Commit'e atıf verin; paylaştığınız herkes işi yeniden çalıştırabilir ya da çalıştırdığını doğrulayabilir. Bir eğitim çalıştırmasının kimliği defter kenarına düşülmüş bir not değil, kaydın ta kendisidir.

Genellikle gözden kaçan ayrıntılar da aynı ciddiyetle sabitlenir. Eğitim, doğrulama ve test bölmeleri, hash ile referans verilen sürümlü yapıtlardır — bir metriğin arkasındaki bölme aşağı yukarı hatırlanmaz, birebir yeniden üretilir. Rastgelelik sayaç tabanlıdır ve her checkpoint'in parçasıdır: kaldığı yerden süren bir çalıştırma yeni bir akış açmak yerine aynı akışı sürdürür. Ve veri kümelerinin kendisi de sürümlüdür: aynı veri, aynı hash, aynı çalıştırma.

§3Köken

Grafa iki yönde de soru sorun

Buradaki kayıt zinciri, kaydırıp geçeceğiniz bir günlük değildir. İçerik adresli yapıtlar üzerinde, “üreten” ve “tüketen” kenarları sorgulanabilen bir graftır. İleriye sorun — bir veri kümesi sürümünden bugüne dek türetilen her şey. Geriye sorun — bu modeli hangi veri, hangi program üzerinden, hangi motorda eğitti. Bir sonuç sizi iki hafta sonra şaşırttığında yanıt bir kazı projesi değil, bir sorgudur.

Kayıt eksiksiz olduğu için deney takibi, beslemeyi unutmamanız gereken ikinci bir sistem değildir: çalıştırmalar, yapıtlar, veri kümesi sürümleri ve checkpoint'ler zaten kaydın kendisidir; karşılaştırmalar ve panolar bunların üzerine kurulmuş görünümlerdir. Çalıştırma geçmişi kalıcıdır, oturumu aşar ve Workbench'inizde görünür — paylaşılan bir modelin kartı da değerlendirme metriklerini, hesaplandıkları bölmenin hash'iyle birlikte bildirir: okurun inanmak zorunda kalmadan denetleyebileceği bir iddia.

§4Taslak ve commit

Taslak üzerinde iş birliği yaparsınız; commit'e atıf verirsiniz

canlı taslak — katılım, düzenlemeler, telemetriasla hash'lenmezv1 · 3b9f42v2 · c07df1v3 · 8f2ac1commit edilmiş sürümler — içerik adresli, atıf verilebilirscellis.com/studio?repro=8f2ac1
Şek. 2 — Taslak şeridi asla hash'lenmez; her commit ondan aşağıdaki atıf verilebilir sürüm rayına düşer. Atıf verdiğiniz URL, oturuma değil, bir commit'e bağlanır.

Yeniden üretilebilirlik çok kullanıcılı düzenlemeden sağ çıkar, çünkü kimlik oraya bakmayı reddeder. Bir canlı oturumda — imleçler, katılım, yarım kalmış düzenlemeler, birlikte çalıştığınız kişilere akan çalıştırma telemetrisi — hiçbir şey asla hash'lenmez. Kimlik commit ile başlar; öncesi, dürüstçe söylersek, bir taslaktır.

Hash, yalnızca commit edilen içeriğe bağlıdır, başka hiçbir şeye değil. Yalnız başına ve çevrimdışı yapılan bir commit, canlı oturumda sıralanan bir commit ile tam olarak aynı adı hesaplar — koordinasyon sunucusu düzenlemeleri sıralar, kimliğin sahibi asla olmaz. Bu güvence ile local-first tam burada buluşur: sunucu kapalı, oda boş olabilir — kendi cihazınızdaki bir commit, kalabalıkta üreteceği atıf verilebilir adın aynısını yine üretir.

§5Kalibre edilmiş kesinlik

“Bit'i bit'ine” burada ne anlama gelir

“Bit'i bit'ine”, atıf verilen baytları adlandırır: referans var olduğu sürece URL, birebir aynı yapıtlara çözümlenir — aynı ağırlıklar, aynı veri, aynı program. Yeniden çalıştırma ise ayrı bir sözdür; yukarı yuvarlanmaz, kalibre edilir: aynı cihazda debug ayarında ve CPU referans yolunda bit'i bit'ine; farklı GPU'lar arasında kayan nokta yürütmesi bit düzeyinde kesin değildir, dolayısıyla yeniden çalıştırma beyan edilmiş tolerans içinde uyuşur. Bu gerçeği atlamak sahte teselli satmak olurdu.

Bir çalıştırmanın ne kadar kesin olacağı sizin açık seçiminizdir ve onunla birlikte kaydedilir: denetim için debug, beyan edilmiş tolerans içinde deterministik iş için prod, daha serbest sıralamanın güvenli beyan edildiği yerlerde fast — derlemede de çalışma zamanında da asla sessiz bir varsayılan olmaz. Toleranslar, onları demirleyen CPU referansı ve topluluk kernel'lerine aynı sayıları kanıtlatan uygunluk kanıtı, doğruluk sayfasında anlatılıyor.

§6Sonuçtan referansa

Bir makalenin üzerine basabileceği bağlantı

Atıf ve gömme, erken erişimde tam bu biçimde geliyor — uçtan uca tanımlandı, şu anda geliştiriliyor.

YüzeyTaşıdığıGüvence
Repro derin bağlantısıcommit edilmiş tarifTam olarak o iş akışını Studio'da açar — program, sabitlenmiş sürümler, bağlı olduğu her şey — hepsi açılmadan önce doğrulanır.
Çalıştırma anlık görüntü bağlantısıbiten bir çalıştırmanın çıktılarıMetrikler, şekiller ve nelerden çizildikleri, tek bir commit edilmiş yapıt olarak — kalıcı, girişsiz, atıf verilebilir.
Gömmesalt okunur, commit edilmiş bir görünümSertleştirilmiş, yalıtılmış bir çerçeve — oturum yok, yazma yok, hız sınırlı; her izleyiciye birebir aynı yanıt.
“Cite this”atıf kaydıYazar, sürüm, içerik hash'i, motor sürümü, anlık görüntü URL'si — BibTeX, CFF ya da CSL olarak dışa verilir.
Remix (çatallama)kendi kopyanız, köken korunurÇatal nereden geldiğini kaydeder; hesabı olmayan bir okur da çatallar, kopyayı sonradan sahiplenir.

Bu tablodaki her yüzey, commit edilmiş, içerik adresli bir sürümü çözer — asla canlı bir oturumu, asla oynak bir hedefi değil.

Atıf her iki yönde de tasarıma işlenmiştir. Kurduğunuz şey, üzerine bastığı atıfları taşır; commit edilmiş her sonuç da dışarıya bir atıf kaydı yansıtır — yazar, ad, sürüm, içerik hash'i, motor sürümü, anlık görüntü URL'si — ve bir “Cite this” bağlantısı bunu BibTeX, CFF ya da CSL olarak üretir. DOI üretimi, bağlayıcı sistemi üzerinde adlandırılmış bir ileri yoldur; mimari bir yenisini daha taşır: birinin bir sonucu beyan edilmiş toleransı içinde yeniden çalıştırıp karşı imza atmasıyla kazanılan “yeniden çalıştırmayla doğrulandı” rozeti.

Döngü, okurların olduğu yerde kapanır. Commit edilmiş bir anlık görüntü, sertleştirilmiş ve girişsiz bir çerçeve içinde salt okunur çizilir — oturum yok, yazma yok, her izleyiciye birebir aynı yanıt — böylece bir makale, bir blog yazısı ya da bir README, yapıştırılmış bir ekran görüntüsünü değil, gerçek kayıttan çözülen gerçek şekli gösterir. İki kapı döngüyü canlı tutar: “Open in Studio” ve “Remix” — hesabı olmayan bir okur da çatallar; kopyası, sahiplenene dek cihazında kalır. Rehber döngüyü alıcı ucundan anlatır: bir sonucu yeniden üretin, yazar ucundan da: yeniden üretilebilirlik.