§ Platform / Doğruluk
Kanıtlanır, vaat edilmez.
Tüketici GPU'ları farklıdır, sürücüler farklıdır ve kayan nokta aritmetiği teslim tarihinizi umursamaz — bu yüzden burada doğruluk bir tutum değil, mekanizmadır. Bir CPU referansı her hesaplama yolunu sabitler, doğrulanmamış her şey sayılmadan önce sınanır ve doğrulama takımının kendisi serbest lisansla yayımlanır — bu sayfadaki hiçbir iddiaya körü körüne inanmanız gerekmez.
Her sonuç bir referansa hesap verir
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.
Her yapıt türü, güveni adı konmuş bir sınamayla kazanır
| Yapıt | Sınama | Kural |
|---|---|---|
| Yerleşik kernel'ler | referans | Her 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'ler | uygunluk 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ı | gradcheck | Yazarın kendi ileri geçişine karşı sonlu farklar — zorunlu negatif kontrolle birlikte. |
| Birleştirme kuralları | özellik testleri | Kı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çlar | yeniden yürütme · yeter çoğunluk | Sayı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 önbellekler | SHA-256 | Hash'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.
Bir çalıştırmanın ne kadar tekrarlanabilir olduğunu siz seçersiniz — hiçbir şey bunu sessizce değiştirmez
| Ayar | Güvence | Açık ifadeyle |
|---|---|---|
| debug | Bit düzeyinde özdeş — aynı tohum, aynı cihaz | Deterministik GPU kodu: sabit bir işlem sırası, kestirme yok — hızda gerçek ve görünür bir bedel. |
| prod | Beyan edilmiş tolerans içinde deterministik | Eğitim ve tekrarlanabilir analiz için çalışma ayarı — işlemin beyan ettiği sınırlar içinde uyum. |
| fast | Yalnızca güvenli beyan edilen yerde daha serbest sıralama | Azami hız; her gevşetme beyanlıdır ve hiçbiri sessiz değildir. |
| (ayarlanmamış) | Derlemede reddedilir | Ayar 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.
Kernel'iniz güveni bizimkilerle aynı yoldan kazanır
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.
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.
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.