Geliştirme

Veri: dosyalar, bağlayıcılar ve veri kümeleri

Verileriniz zaten bir yerlerde yaşıyor — bir diskte, bir HTTP uç noktasının arkasında, bir bulut sürücüsünde, bir nesne depolama kovasında, SSH ile eriştiğiniz bir makinede. Scellis bunların tümünün ortasından tek bir keskin çizgi çeker: İçeri gelen baytlar, yalnızca sizde duran kimlik bilgileriyle cihazınıza akar; dışarı çıkan baytlar ise hedefi adıyla anan ayrı ve daha güçlü bir onay gerektirir. Arada veri, Scellis'te zaten her şeyin olduğu şeye dönüşür — sürümlü, içerik adresli, hash ile atıf yapılabilir. Bu sayfa o yolu dolaşır: dosyalar, bağlayıcılar, kimlik bilgileri, yön kuralı — ve ham baytların, hash ile yeniden üretebileceğiniz bir veri kümesine nasıl dönüştüğü.

Yerel dosyalar doğrudan diskten akar#

En yaygın kaynak, en gösterişsiz olanıdır. Yerel bir dosya, bir dosya tanıtıcısı üzerinden doğrudan diskten akar: Gigabaytlarca büyüklükteki bir veri kümesi yerinde okunur — varsayılan olarak asla karşıya yüklenmez ve asla tarayıcının yerel veritabanından geçirilmez. O veritabanı çalışma setinizi tutar — elinizdekilerin yerel-öncelikli kataloğunu — ham verinizi değil. Büyük bir dosyayı açmak bu yüzden yalnızca okumanın maliyetine mal olur, fazlasına değil: içe aktarma adımı yok, gigabaytların tarayıcı depolamasına sessizce kopyalanması yok, sonradan asıl dosyayla uzlaştırmanız gereken bir kopya yok.

Bağlayıcılar içeriktir, motor özelliği değil#

Geri kalan her şey bir bağlayıcı (connector) üzerinden gelir — ve bağlayıcı bir motor özelliği değil, içeriktir. Üç şeyi bir araya getirir: bildirilmiş bir etki — ağa uzanan bir iş akışı bunu çalışmadan önce söyler; tipli IO blokları — gelen veri grafa gerçek bir biçimle girer; ve bir kimlik doğrulama bağlaması — aşağıdaki kimlik bilgisi kuralları her yerde aynı biçimde geçerli olur. Altta yatan kaydın bir biçimi vardır:

yaml
# A connector is content — three parts, checked like any block.
name: user/ada/s3_source           # namespaced — never shadows a builtin
version: 1
effect:  { id: net.ingress, direction: ingress }    # declared before it runs
auth:    { kind: api_key, store: device_only }       # never synced, never provenance-stamped
io:
  in:  [{ name: bucket, dtype: string }, { name: key, dtype: string }]
  out: [{ name: object, dtype: bytes }]               # enters the graph with a real shape
transport: client_signed           # SigV4 signed on device — the secret never leaves

Platformla gelen küme, verilerin çoğunun arkasında yaşadığı protokolleri kapsar — yerel dosyalar ve yüklemeler, HTTP giriş ve çıkış, bir relay üzerinden FTP/FTPS/SFTP, istemci tarafında imzalamayla S3 ve GCS, OAuth üzerinden Google Drive ve Dropbox, SMTP e-posta, bir Telegram botu, giden ve gelen webhook'lar, Google Sheets ekleme ve Colab dışa aktarımı:

ProtokolNasıl bağlanır
Yerel dosyalar & yüklemelerbir dosya tanıtıcısı, doğrudan diskten akış
HTTP(S), giriş ve çıkışdoğrudan tarayıcıdan çekilir — ve gönderilir
Bulut sürücüleriOAuth ile yetkilendirilir (dosya-başı kapsam)
Nesne depolama (S3 / GCS)istekler istemci tarafında imzalanır
SSH/SFTP ve FTPbir relay üzerinden aracılanır — adı konmuş tek istisna
E-posta, webhook, Sheets, Colabact-block'lar ve bir gelen kutusu, her biri açık bir egress ya da ingress

Bağlayıcı sıradan içerik olduğu için, bu küme bir taban çizgisidir, tavan değil. OneDrive, Slack, Discord, bir Gmail-API istemcisi — hiçbiri platformla gelmez ve gelmesine gerek de yoktur: her biri, herhangi bir bloğu yazdığınız gibi bir öğleden sonralık yazım işidir — o da diğerleri gibi kataloglanır, paylaşılır ve onaya tabi olur. Eksik bir entegrasyon asla bir bakımcı kuyruğu değildir — Catalog'u döndüren çarkın ta kendisidir.

Kimlik bilgileri cihazınızdan asla ayrılmaz#

Kimlik bilgileri kökten istemci tarafındadır. Bir token, anahtar ya da parola cihazınızda şifrelenmiş olarak durur — cihaza bağlı bir anahtarla AES-256-GCM — ve hayatı orada biter. Asla eşitlenmez. Diğer değişikliklerinizi sunucuya sıraya koyan eşitleme kuyruğuna asla yazılmaz. Köken kaydına asla damgalanmaz. Bir çalıştırma neyin geldiğini kaydeder — içeri nasıl girdiğinizi asla. Kendiniz için parola ile sarmalanmış bir kopyayı dışa aktarabilirsiniz; platform hiçbir kopya tutmaz. Güven modelinin tamamı güvenlik ve gizlilik sayfasının konusudur.

Not

Cihazı kaybederseniz kimlik bilgileri de onunla gider: Bir kurtarma yolu olmadığı için bir sonraki makinede yeniden girersiniz. Bu, tasarımın bozulması değil, çalışmasıdır — çalınabilecek bir sunucu kopyası hiç var olmaz.

İçerik olarak edinilen OAuth#

Bir OAuth token'ı edinmek bile içeriktir. Bir OAuthProviderSpec, bir sağlayıcının uç noktalarını, kapsamlarını ve PKCE akışını bildirir; böylece yeni bir sağlayıcı motor kodu değil, yazdığınız bir spec olur — ve kullanıcı yazımı bir sağlayıcı kendi client id'sini getirir. Kapsam-asgariliği yazarlık denetiminden geçer: Google yalnızca dosya-başı seçici kapsamıyla gelir, asla toptan Drive erişimiyle değil. Relay'den geçen tek sır (bir tarayıcının gerçekten kaçınamayacağı SSH/FTP kimlik doğrulaması) onaylıdır, bağlantı kapsamlıdır ve yalnızca bellekte tutulur.

Gizlilik çizgisi yöndür#

Scellis “ağ erişimini” tek bir izin olarak ele almaz. İçeri alma (ingress) — veriyi cihazınıza çekmek — onaylı bir ağ etkisidir: Bağlayıcı bunu bildirir, siz onaylarsınız ve sonrasında baytlar yerelde yaşar — bildiğiniz yerel-öncelikli hikâyenin içinde. Dışarı çıkış (egress) — cihazınızdan ayrılan veri — hedefi adıyla anan ayrı ve daha güçlü bir onaydır ve asla bir içeri-alma onayının üzerine binemez. “Bu kaynaktan çek” demek, hiçbir şeyi hiçbir yere göndermeye sessizce yetki vermez.

s3 · http · sftpveriyi içeri çekmekcihazınızkimlik bilgilerişifreliasla eşitlenmezveriyi dışarı göndermekikinci bir onayhedefi adıyla anarapi.lab.org
Şek. 1 — İki yön aynı izin değildir. Veriyi içeri çekmek, baytları — ve kimlik bilgilerinizi — cihazınızda tutar. Herhangi bir şeyi dışarı göndermek ise hedefi adıyla anan ikinci ve daha güçlü bir onaydan geçmek zorundadır; kapı yolu gerçekten keser: siz demedikçe hiçbir şey dışarı çıkmaz.

Çizgi, iş cihazlara yayıldığında da geçerlidir. Dağıtık bir işte bağlayıcılar cihaz-yerel kalır: İçeri alma, iş bölünmeden önce işi başlatanın cihazında çalışır; dışarı çıkış, sonuçlar birleştikten sonra. Eşler hesaplanacak işi alır — kimlik bilgilerinizi asla.

Dışarı göndermek — ve dünyayı içeri almak#

İki an kendi disiplinini hak eder: veriyi dışarı göndermek ve bir şeyin içeri uzanmasına izin vermek. Her act-block — bir e-posta, bir webhook, bir mesaj — önce saf bir kuru çalıştırma (dry-run) yapar. Sıfır egress ile tam giden zarfı üretir; böylece herhangi bir şey gönderilmeden önce tam olarak neyin gönderileceğini görürsünüz:

text
# Every act-block runs a pure dry-run first — the exact envelope, zero egress.
dry_run  email_send
  to       ada@example.org         # consent copy names this recipient
  subject  "run 812 finished"
  body     2.4 KB
  egress   none                    # nothing left the device
  ledger   send-key 5f1a…          # idempotent — a re-run will not double-send

Gerçek gönderim idempotenttir, bir gönderim-defteriyle korunur; böylece bir yeniden çalıştırma iki kez göndermez; onay metni alıcıyı adıyla anar; bütçeler yüksek seslidir. Gelen taraf bilerek mütevazıdır. Bir webhook-in, platformun aracıladığı bir gelen kutusudur — döndürülebilir bir capability URL'i, boyutu sınırlı ve TTL'li — tarayıcının dinlediği bir soket değil. Ve tetikleyiciler yalnızca bir sekme açıkken ateşlenir: Sekme yoksa olaylar, siz dönene kadar yüksek sesle sınırlı biçimde sıraya girer. Bir tetikleyiciyi kurmak onayın kendisidir — iş akışının tüm etki kapanışı üzerinde, bilinçli bir jestle basılmış ve bir düzenleme o kapanışı genişlettiği anda otomatik olarak devre dışı bırakılan, duran bir onay. Bu, kesinlikle gözetimsiz otomasyon değildir: Kapalı bir sekme hiçbir şey çalıştırmaz. (Gönderim yinelenmezliği cihaz başınadır; başka bir makinede bir yeniden çalıştırma tekrar gönderebilir — köken kaydı anahtarları tutar — platformun sakladığı değil açıkça belirttiği bir sınır.)

Biçimler de veri kümeleri de içeriktir#

Yabancı bir dosya biçimi, motorun tesadüfen anladığı bir şey değildir; bir çözme (decode) bloğudur — dönüş yolunda da bir kodlama (encode) bloğu. Yerleşik set; CSV, Parquet ve Arrow'u; ONNX, safetensors ve PyTorch state-dict'leri; XLSX ve DOCX dışa aktarımını; ve sözlüğü kendisi içerik adresli bir yapıt olan BPE/WordPiece tokenizer'ları kapsar. Yabancı bir dosyayı tuvale sürükleyin, tek bir hamlede bağlayıcı ve codec üzerinden veri kümesi oluşturmaya yönlensin; eksik bir codec, platformdaki her şey gibi yazılabilir. Yüzeyin tamamı kataloglanmış içeriktir — veri sayfasında görebilirsiniz.

Çözülen veri bir veri kümesine dönüşür: birinci sınıf, sürümlü bir katalog varlığı. Her sürüm içerik adreslidir — aynı veri, aynı hash — ve bir eğitim çalıştırması tükettiği veri kümesi sürümüne tam olarak bu hash ile başvurur. “Bu modeli hangi veri eğitti?” bir sorgudur, arkeoloji değil. Bölmeler (split) de aynı derinliğe iner: Bir eğitim/doğrulama/test bölmesi, kendi başına sürümlü, içerik adresli bir yapıttır — deterministik, sabit tohumlu bir bölümleme — böylece bir sonucun arkasındaki tam bölme yeniden üretilebilirdir, aşağı yukarı yeniden çekilmez.

Her veri kümesi bir veri kümesi kartı taşır — köken kaydı, lisans, onay dayanağı, bilinen sınırlar — ve bir profil görünümü sunar: sütunlar, veri tipleri, eksik değerler, sınıf dengesi. Veri, gözetimli eğitim başlamadan önce etikete ihtiyaç duyuyorsa, etiketleme ve işaretleme yüzeyi platformun parçasıdır — platformu terk etmenizi gerektiren bir araç değil.

Bellekten büyük olmak normal durumdur#

Gigabaytlarca girdi, atlatılacak bir uç durum değildir; motorun planladığı asıl durumdur. Her blok akış sınıfını bildirir — tek geçişli, sınırlı çok geçişli ya da tam somutlaştırmalı — ve motor bu bildirimlerle, RAM, VRAM ve depolama için açık bütçelere karşı parça parça yürütme planlar. Uygulanabilirlik yürütmeden önce denetlenir, yürütme sırasında keşfedilmez: Sığmayan bir çalıştırma, adı konmuş seçeneklerle baştan reddedilir — batch'i küçült, akışı aç, hassasiyeti değiştir — asla çalıştırmanın ortasında bir bellek-tükendi sürprizi olarak değil. Harekete geçebileceğiniz bir ret, nedenini sonradan kazıp çıkarmanız gereken bir çökmeden iyidir — Scellis her yerde aynı takası yapar.

bellekten büyük42 GBparçalı planlanırher seferinde tek geçişçalıştırmadan öncebellek · diskçalışırakıtır, hepsini yüklemezbaştan reddedilirçözümü adıyla
Şek. 2 — Bellekten büyük veri bir plandır, panik değil. 42 GB'lık bir girdi, parçalardan oluşan bir akış olarak planlanır ve hiçbir şey çalışmadan önce belleğinize ve diskinize karşı denetlenir: ya her seferinde bir geçiş akıtarak çalışır ya da çözümü adıyla söylenerek baştan reddedilir.