§1Referans çıpası

Her sonuç bir referansa hesap verir

Üretilen durumlarşekiller · tiplerGPU kernel'iWebGPUReferansCPU|GPU − referans|≤ beyan edilen toleransuygunluk kanıtıpaylaşıma açık
Şek. 1 — Tek sözleşme, iki uygulama: aynı üretilmiş durumlar hem GPU kernel'inde hem referansta çalışır ve kernel'i paylaşıma ancak beyan edilen tolerans içindeki uyum açar.

Motorun tek bir doğruluk çıpası vardır: her yerleşik işlemin amaçlanan sonucunu tanımlayan bir CPU referansı. Tarayıcıda eğitimin arkasındaki elle ayarlanmış yollar dahil her GPU kernel'i, bu referansı gerçekten üzerinde çalıştığı donanımda, beyan edilmiş bir tolerans içinde yeniden üretmek zorundadır. Eksik bir GPU kernel'i düzeltilecek bir hatadır, asla sessizce CPU'ya dönüş değil — sayılarınızı ya da hızınızı değiştiren bir ikame, arkanızdan gerçekleşmez.

Tolerans folklor değil, sözleşmenin parçasıdır. Dört sınıf — exact, tight, default ve loose — her biri beyan edilmiş bir mutlak ve göreli sınır çiftine çözümlenir ve bir işlemin ileri sürdüğü sınıf, yaptığı işle gerekçelendirilmek zorundadır: bir matris çarpımı, sınamadan kaçmak için kendini loose ilan edemez. Beyan edilen sınıf, bir güven sinyali olarak katalogda görünür — gevşek toleranslı bir eğitim işlemi, ona bağımlı olmadan önce gözle görülür biçimde daha düşük güvenlidir.

§2Sınanmadan olmaz

Her yapıt türü, güveni adı konmuş bir sınamayla kazanır

YapıtSınamaKural
Yerleşik kernel'lerreferansHer GPU uygulaması, CPU referansıyla beyan edilmiş tolerans sınıfı içinde eşleşmek zorundadır — her donanım türünde.
Sizin yazdığınız kernel'leruygunluk kanıtıTam olarak bu koda ve kanıtlandığı donanıma bağlıdır; güvenilir, paylaşılabilir kullanımdan önce zorunludur — kendi cihazınızda zaten serbestçe çalışır.
Gradyan kurallarıgradcheckYazarın kendi ileri geçişine karşı sonlu farklar — zorunlu negatif kontrolle birlikte.
Birleştirme kurallarıözellik testleriKısmi sonuçları herhangi bir sırayla birleştirebildiğini ileri süren bir kural, hiçbir planlayıcı ona güvenmeden önce her iki yönde de test edilir.
Başka cihazlardan gelen sonuçlaryeniden yürütme · yeter çoğunlukSayılmadan önce tolerans içinde doğrulanır — gelişte asla güvenilmez ve GPU yolunda asla bit'i bit'ine karşılaştırılmaz.
Baytlar ve önbelleklerSHA-256Hash'i tutmayan her şey bozulmadır — üzeri örtülmez, yeniden indirilir.

Tek denetleyici, iki kitle: sizin içeriğinizi yayım anında denetleyen sınama, bizimkini de denetler — güven kazanılır ve kimin yazdığıyla ilgilenmez.

Güven, yapıtın özelliğidir — mekanizmayla kazanılır ve hemen yanına kaydedilir; asla onu kimin yaptığının özelliği değildir. Kendi yazdığınız hesaplama, hazır gelen içeriğin geçtiği sınamaların aynısından, aynı denetleyiciyle geçer ve sınamalar yukarı doğru birleşir: eğitilmiş bir model, birlikte eğitildiği her şeyin uygunluk durumunu kaydeder. Doğrulanmamış bir gradyanla eğitilmiş bir model, tamamen uygun olandan ayırt edilebilir kalır ve asla sessizce eşdeğer gibi sunulmaz.

Katalog, siz herhangi bir şeye bağımlı olmadan önce bunların hepsini gösterir: nereden geldiğini, ne kadar güvenildiğini, sınanıp sınanmadığını ve hangi toleransı ileri sürdüğünü — kartın üzerinde süs değil, gerçek sinyaller. Topluluk işi verified olabilir; official ise sınamaların yanından geçen bir kestirme değildir — çünkü sınamaların yanından geçen bir yol yoktur.

§3Beyanlı determinizm

Bir çalıştırmanın ne kadar tekrarlanabilir olduğunu siz seçersiniz — hiçbir şey bunu sessizce değiştirmez

AyarGüvenceAçık ifadeyle
debugBit düzeyinde özdeş — aynı tohum, aynı cihazDeterministik GPU kodu: sabit bir işlem sırası, kestirme yok — hızda gerçek ve görünür bir bedel.
prodBeyan edilmiş tolerans içinde deterministikEğitim ve tekrarlanabilir analiz için çalışma ayarı — işlemin beyan ettiği sınırlar içinde uyum.
fastYalnızca güvenli beyan edilen yerde daha serbest sıralamaAzami hız; her gevşetme beyanlıdır ve hiçbiri sessiz değildir.
(ayarlanmamış)Derlemede reddedilirAyar yoksa çalıştırma da yok — adı konmuş bir tanı, asla sizin adınıza sessiz bir varsayım değil.

Farklı cihazlar arasında bit düzeyinde aynılık yalnızca CPU referans yolunda vardır — GPU aritmetiği sabit bir sırayla toplamaz; GPU çalıştırmaları beyan edilmiş toleranslarına kadar tekrarlanır. Yuvarlamak yerine dürüst sınırlar sayfasında yayımladığımız fiziksel bir sınır.

Bir çalıştırmanın ne kadar kesin olacağı, sizin çevirdiğiniz bir düğmedir — ve bu ayar en aşağıya, GPU'da çalışan koda kadar taşınır ve çalıştırmanın kaydına işlenir. Düğmenin gizli bir konumu yoktur: ayarı tanımsız bir iş akışı, sessiz bir varsayılanla yamalanmak yerine adı konmuş bir tanıyla reddedilir. Çünkü doğru görünen yanlış bir sayı, bilimsel bir aracın üretebileceği en kötü şeydir.

Rastgelelik, yeniden oynatma için tasarlanmıştır. Üreteç sayaç tabanlıdır: aynı tohum, aynı konumda her donanımda aynı değeri verir; dropout, karıştırma ve veri artırma her biri kendi adlandırılmış akışına sahiptir; ve üretecin durumunun tamamı her checkpoint'in içinde yaşar. Böylece kaldığı yerden devam eden bir eğitim çalıştırması tam olarak bıraktığı akışı sürdürür ve başka bir cihaza gönderilen bir iş parçası, nereye düşerse düşsün aynı sayıları çeker.

§4Sizin kernel'iniz de

Kernel'iniz güveni bizimkilerle aynı yoldan kazanır

Beyan ettiğiniz gradyankendi backward kuralınızSayısal olarak sınanırkendi forward'ınıza karşı(f(x+ε)−f(x−ε))/2εNegatif kontrolyanlış bir gradyan elenmelidirelenmek zorundaGradyan güvenilirsınamalar geçildi
Şek. 2 — Gradyan sınaması: beyan edilen bir gradyan, kendi ileri geçişinizin sonlu farklarına karşı sınanır. Gerçeğine güvenilmeden önce, kasıtlı olarak yanlış bir gradyanın elenmesi gerekir.

Bir GPU kernel'i yazın ve onu kendi referansınızla eşleyin. Uygunluk sınaması, test durumlarını imzanızdan ve şekil sözleşmenizden kendisi üretir ve GPU kodunuzun referansınızla, beyan ettiğiniz tolerans içinde eşleştiğini kanıtlar. Onu güvenilir bir yapıt olarak paylaşmak, ortaya çıkan uygunluk kanıtını gerektirir — bu kanıt tam olarak o koda ve kanıtlandığı donanıma bağlıdır; başkasının makinesi güveninizi ithal etmek yerine kanıtı yerelde yineler.

Kapı güveni sınırlar, çalıştırmayı asla: kendi cihazınız kendi kanıtlanmamış kernel'inizi her zaman çalıştırır — sınama, neyin paylaşılabileceğini, neyle eğitilebileceğini ve neyin güvenilir olarak yürütüleceğini belirler; neyi deneyebileceğinizi değil. Gradyanlar aynı merdiveni tırmanır: beyan edilen bir gradyan, kendi ileri geçişinizin sonlu farklarına karşı sınanır ve düzenek bir negatif kontrolde ısrar eder — kasıtlı olarak yanlış bir gradyanı da yakalamak zorundadır, yoksa sınamanın kendisi sayılmaz. Sınır da yanında gelir: geçilmiş bir gradyan sınaması güçlü kanıttır, biçimsel bir ispat değil.

§5Cihazlar arasında

Başka cihazlardan gelen sonuçlar doğrulanır — asla peşinen kabul edilmez

GPU'lar son bitlerde anlaşamaz: kayan nokta toplaması sabit bir sırayla toplamaz ve tarayıcının GPU standardı cihazlar arasında bit düzeyinde aynılık vaat etmez. Bu yüzden cihazlar hesaplama gücünü havuzladığında, geri dönen bir iş parçası asla hash karşılaştırmasıyla doğrulanmaz — sayılmadan önce beyan edilmiş toleransı içinde yeniden çalıştırılır ya da birden çok cihazın uzlaşmasıyla karara bağlanır. Tekrarlanabilirlik iki dürüst kademede beyan edilir: referans yolunda bit'i bit'ine, GPU yolunda toleransla sınırlı — ve her çalıştırma hangisi olduğunu söyler.

Beyan edilmiş bir kestirme bile test edilir. İş cihazlara bölündüğünde, planlayıcı kısmi sonuçları geldikleri sırayla birleştirebilir — ama yalnızca onları birleştiren kural bunun güvenli olduğunu söylüyorsa. Bunu yanlışlıkla söyleyen bir kural, sessizce yanlış bilim üretirdi; bu yüzden iddia, ona güvenilmeden önce negatif kontrol dahil özellik testinden geçer. Dürüstçe bu biçimde çalışamayan bir birleştirme kuralı, kestirmeyi yapısı gereği reddeder ve tek toplayıcının açıkça belirtilmiş bedelini öder.

§6Kendiniz doğrulayın

Bu sayfadaki her iddia bağımsızca denetlenebilir

Doğrulama takımının kendisi serbest, Apache sınıfı bir lisansla yayımlanır: spesifikasyonlar ve şemalar, beyan edilmiş toleranslarıyla birlikte uygunluk derlemi ve CPU referansı — platformun değişim halkası. Herkes — bir hakem, bir denetçi, bir rakip — sınamaları aynı referanslara karşı yeniden çalıştırabilir ve buradaki her doğruluk iddiasını izin istemeden doğrulayabilir.

Kanıt, sürümlerimizden de uzun yaşar. Önceki motorlardan gelen dondurulmuş bir iş derlemi, her motor sürümünde otomatik olarak yeniden çalıştırılır; bir güncelleme, eski bir işlemin ne hesapladığını asla sessizce değiştiremez. İşinizin sürümlerimizden uzun yaşaması sınanan bir güvencedir, öne sürülen değil. Ayrıca her çalıştırma, kendisini üreten motor sürümünü ve hassasiyet ayarını sabitler — yeniden üretilen bir sonuç, hesap verdiği motoru tam olarak adlandırır.