Öğretim
Bir sınıf dolusu robot
İstenmeye değer bir atölye: otuz koltuk, doksan dakika, eller klavyede. Herkes küçük bir iş akışı kuruyor, üzerinde minicik bir model eğitiyor ve gelecek hafta da çalışır durumda olan bir şeyle evine dönüyor. Şimdi de bunun yanında gelen rahatsız edici soru. Otuz gerçek insandan doksan dakikalık dikkatlerini istemeden önce, odanın dayanacağını nereden bilirsiniz — ummak değil, bilmek?
Bu platformun doğru bulduğu yanıt, var olmayan otuz öğrenci. Mecaz değil: gerçek tarayıcıları gerçek sisteme karşı süren sentetik aktörler — böylece o doksan dakika, herkesin önünde çökmeden önce kapalı kapılar ardında çökebilir. Bu yazı, o sınıfın tasarımı: neyin üzerine oturduğu ve bir provanın neyi kanıtlaması gerektiği.
Ne kurulu, ne değil
Sınıf tasarımının dayandığı her şey kurulu ve doğrulanmış durumda: GPU'suz cihaz için CPU yolu, girişsiz kimlik, çatal kökeni, bir bağımlılık değil bir eklenti olan iş birliği ve commit edilmiş anlık görüntü bağlantıları. Provanın kendi düzeneği — aşağıda anlatılan simülasyon yüzeyi — uçtan uca tanımlanmış ve şu anda inşa ediliyor; yani hiçbir atölyenin provası yapılmadı ve hiçbiri verilmedi (bugün neredeyiz). Bunu, sayıları ölçülmüş değil türetilmiş, sonuna kadar düşünülmüş bir tasarım olarak okuyun.
Var olmayan otuz öğrenci#
Simülasyon yüzeyi tek bir ilkeye dayanıyor: sentetik girdi, gerçek sistem. Bir mock, sentetik bir girdidir — asla paralel bir uygulama değil. Otuz aktör gerçek oturum açma yolundan üretilir; her biri oturumu ve kullanıcı adı olan gerçek bir kimliktir (sentetik e-posta adresleri de .invalid ile biter; var olmayan insanlar bile veri hijyeni alır). Otuz dizüstü ise gerçek başsız tarayıcı bağlamlarıdır: oturuma gerçek koordinatör üzerinden katılır, içeriği gerçek eşitleme yolundan çeker ve iş akışlarını gerçek motorda çalıştırır. Bir robotun oluşturduğu her satır, sonradan süpürülebilsin diye simüle edilmiş olarak damgalanır — ve hiçbir çalışma zamanı yolunun bu damgaya göre dallanmasına izin yoktur. Sistem robotlara gizlice daha iyi davranamaz; onların yaşadığı neyse, insanların alacağı da tam olarak odur.
Her şeyi tek bir kök tohum bağlar: 40712 tohumunun 17 numaralı aktörü her çalıştırmada aynı kullanıcı adını, aynı uydurma e-postayı, aynı senaryolaştırılmış davranışı taşır. Senaryoyu yeniden oynattığınızda o doksan dakikayı yeniden oynatmış olursunuz. Bir prova için bütün değer tam da bu determinizmde: tek bir şeyi değiştirin, yeniden çalıştırın — gördüğünüz her fark, değiştirdiğiniz şeydir.
Not
Simülasyon yüzeyi bir geliştirme aracıdır: yalnızca geliştirme ve hazırlık sürümlerinde vardır; üretim sürümünde yapısal olarak yoktur. Bir sınıfın eline geçen, provası yapılmış üründür — robotlar değil.
Doksan dakikanın senaryosu#
Prova bir dosyadır. Senaryolar bildirimseldir: bir tohum; fikstürler (kaç aktör, hangi tarayıcılar, hangi veri kümeleri); kimin ne zaman ne yaptığını söyleyen bir zaman çizelgesi; ve sonunda tutması gereken doğrulamalar. Scellis'te her yetenek bir API komutu olduğundan — arayüz de aynı yüzeyin yalnızca bir istemcisidir — senaryonun söz dağarcığı platformun kendi komut kümesi artı tarayıcı eylemleridir. Kimsenin bir atölye-simülasyonu özelliği geliştirmesi gerekmez; gramer zaten ürünün kendisidir.
seed: 40712
fixtures:
actors: 30
browsers: { webgpu: 20, wasm_only: 10 }
datasets: [workshop/tabular-10k]
timeline:
- { at: 0m, actor: instructor, action: doc.open }
- { at: 2m, actor: "seats[1..30]", action: join.session }
- { at: 12m, actor: "seats[1..30]", action: doc.fork }
- { at: 14m, actor: "seats[1..30]", action: run.start }
- { at: 38m, actor: "seats[1..30]", action: doc.commit }
faults:
- { at: 20m, kind: peer_churn, seats: "12..17", rejoin: +2m }
- { at: 30m, kind: coordinator_loss, duration: 3m }
assertions:
- run.completed: { every: seat, within: lab_window }
- commit.exists: { every: seat }
- diagnostics: { silent_failures: none }Dersin akışı şöyle: Eğitmen on iki dakika boyunca paylaşılan bir tuvalde anlatır, otuz imleç izler; sonra her koltuk iş akışını çatallar ve alıştırmayı kendi cihazında çalıştırır; kapanıştan önce herkes commit eder. En sıkıcı ilk satır bile yerini hak eder: otuz soğuk sekme aynı bağlantıyı açıp alıştırmanın çalışma kümesini — iş akışı, veri kümesi, bloklar — veritabanından her koltuğun yerel Catalog'una çeker. Otuz eşzamanlı ilk yükleme, başınıza gelmeden önce bir kez izlemiş olmak isteyeceğiniz türden bir olaydır.
Kafanızdaki makine, odadaki makine değildir#
O fikstür listesindeki otuz tarayıcının onunda hiç WebGPU yok. Bu karamsarlık değil, bir odanın dürüst hâli: dışarıda kabaca her yedi cihazdan birinde WebGPU yoktur ve eğitim salonları daha da kötüdür — kurumca yönetilen dizüstüler, kilitlenmiş tarayıcılar, yeniyken orta sınıf olan donanım. Epey bir süre önce yeniyken.
WebGPU'suz bir koltuğun karşılaştığı şey tasarlanmış bir durumdur, boş bir ekran değil: İş akışının tamamı CPU referans yolunda çalışır — bunu aynen söyleyen gürültülü, kalıcı bir şeridin arkasında: CPU'da çalışıyor, daha yavaş. Derste hiçbir şey değişmez. Zaman hariç. Bir ders planı da zamandan başka bir şey değildir.
O hâlde hesabı alıştırmayı yazmadan önce yapın, sonra değil. CPU yolu, GPU'dan küçük bir çarpanla değil, büyük bir çarpanla yavaştır — bu biçimdeki işlerde bir ila iki büyüklük mertebesi. 40.000 satır üzerinde yaklaşık 170.000 parametrelik bir model düşünün: bir dizüstü GPU'sunda rahatlıkla bir dakikanın altında; dolayısıyla odanın en yavaş koltuğunda yarım saatin ötesinde bir yerde. Laboratuvar penceresinin tamamından uzun. Bu çarpımdan sağ çıkan alıştırma daha alçakgönüllüdür: on altı öznitelikten iki gizli katmana, on bir bine yakın parametre, on bin satır — kabaca iki büyüklük mertebesi daha az aritmetik; en kötü koltuğu pencerenin içine almak, en iyisinin de saniyeler içinde bitirmesi için gereken tam olarak budur. Kural ders planının başına yazılmalı: alıştırmayı en yavaş koltuğa göre boyutlandırın; GPU onu konforlu kılsın — asla mümkün kılmasın.
Otuz imleç bir demodur, laboratuvar değil#
Provanın ikinci işi hesaplamayla değil, sosyal dokuyla ilgilidir. Üzerinde otuz imleç dolaşan tek bir canlı belge harikadır — ta ki laboratuvara dönüşmesi gerekene kadar. İki koltuğu, eğitmen anlatırken düzenlemeye devam edecek şekilde senaryolaştırın (her gerçek sınıfta o ikisi vardır); platform bunu doğru işler: düzenlemeler doğrulanır, geri alma kesin olarak kişiye özeldir — eğitmenin Cmd+Z'i bir öğrencinin işine asla dokunmaz. Ama doğru işlendi demek, pedagojik olarak doğru demek değildir. Tek grafın üzerindeki otuz kişi bir kalabalıktır, sınıf değil.
İşleyen format iki kipi ayırır: demoda birlikte, alıştırmada yalnız. Her koltuk iş akışını çatallar — kökeni kayıtlı kendi kopyası. İşler sonradan toplandığında, bu kimin çatalı ve nereden türedi sorusu kendi kendini yanıtlar.
Yirminci dakikada senaryo, altı dizüstünün kapağını çalıştırmanın ortasında kapatır ve iki dakika sonra yeniden açar. Yeniden katılım olaysızdır: düzenlemeler yeniden hizalanır, hiçbir şey kaybolmaz; geç katılan koltuk, oturumun tüm durumunu ve metrik eğrisini t = 0'dan itibaren eksiksiz alır. Geç kalan öğrenci geridedir — kayıp değildir.
Otuzuncu dakikada senaryo, oturum koordinatörünü üç dakikalığına öldürür — sınıfların klasik Wi-Fi ölümü. Oturum askıya alınır; imleçler kaybolur. Otuz çalıştırmanın ise umurunda bile değildir; çünkü her çalıştırma koltuğun kendi cihazındaki yerel hesaplamadır; sunucu mevcudiyeti taşıyordu, hesaplamayı asla. Demo Wi-Fi ile birlikte ölür. Laboratuvar işi ondan sağ çıkar. Bu platformda iş birliği kesinlikle eklemelidir ve bir sınıfta bu bir dipnot değildir — küçük bir aksama ile kaybedilmiş bir ders arasındaki farktır.
Sıfırıncı dakikada hesap yok, doksanıncı dakikada bir URL#
Otuz koltuğun hiçbirinin hesabı yoktur. Bu bir taviz değil; işin özü budur. Sıfırıncı dakikadaki bir kayıt duvarı, on dakikaya ve odanın iyi niyetinin üçte birine mal olur. Girişsiz gelen bir ziyaretçi oturuma sabit, atfedilebilir bir kullanıcı adıyla katılır; çatallar, kurar ve çalıştırır — hesaplama hiçbir zaman bir plana bağlanmaz; hiç hesabı olmayanlar için bile. Çalışması, saklamaya değer bulunana dek o anonim kimliğin altında kendi cihazında kalır; sonradan bir hesapla sahiplenmek tek bir hamledir — her şeyi taşır, hiçbir şeyi kaybetmez.
Teslim edilen de bir dosya değil, bir URL'dir. Her koltuk çatalını commit eder ve bir anlık görüntü bağlantısı çıkarır: donmuş, içerik adresli, girişsiz açılabilir. Gelecek haftanın sorusunun — işim nereye gitti? — yanıtı bir bağlantıdır ve o bağlantı hâlâ çözümlenir. Sonuçları atıf yapılabilir kılan özellik, ödevleri de kalıcı kılar.
Bir sınıfın gerçekten neye ihtiyacı var#
- Kurulum yok. Odanın yazılımı bir URL'dir; otuz makinedeki sürüm karmaşası, birinci dakikadan itibaren sizin sorununuz olmaktan çıkar. Uygulamalı atölyelerin geleneksel ilk perdesi — araç zinciri triyajı — düpedüz yoktur.
- Başlarken hesap yok. Kimlik, saklamaya değer bir şey ortaya çıkana kadar bekleyebilir.
- En kötü makineyi varsayın. Her alıştırmayı CPU yoluna göre boyutlandırın; GPU bir ikramiyedir, asla bir bağımlılık değil.
- Demoda birlikte, alıştırmada yalnız. Çatal, ikisi arasındaki kapıdır.
- URL'lerle bitirin. Commit edilmiş, içerik adresli iş; oturumu da Wi-Fi'yi de dönemi de atlatır.
Otuz robotun size asla söyleyemeyeceği şey, atölyenin iyi olup olmadığıdır. Onlar sıkılmaz; durun, neden? sorusunu nedenin tam önem kazandığı anda sormazlar; yalnızca senaryo öyle yazınca yanlış yazarlar. Yeşil bir prova, odanın dayandığının kanıtıdır — otuz koltuk, en yavaş makine, alıştırmanın ortasındaki Wi-Fi ölümü —; öğretimin iyi olduğuna dair bir hüküm değildir. O kısım insan ister. Gerçek otuz kişi geldiğinde, hiçbir tohumun üretmediği şeyler ters gidecektir. Ama bunlar, ters gitmenin ilginç türünden olacaktır — altyapıyla değil, öğretmekle ilgili olan türden. Bir provadan istenebilecek olan da zaten budur: geriye kalan tek sürprizin insan olduğu bir sınıf.