deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (hnrss.org)

Tithon, Jupyter kernel'lerini ve canlı çıktıları istemcide değil sunucuda tutuyor

Hacker News'te ortaya çıkan Tithon, bir daemon ile VSCode eklentisinden oluşuyor; Jupyter kernel'lerini editör sürecinden ayırıyor ve çıktıları sunucuda günlüklüyor, böylece notebook oturumları bağlantı kesintilerinden ve yeniden açmalardan etkilenmiyor.

Tithon, Jupyter kernel'lerini ve canlı çıktıları istemcide değil sunucuda tutuyor

GitHub deposu üzerinden Hacker News'in ana sayfasında ortaya çıkan Tithon adlı proje, veri çalışmalarında tanıdık bir sorunu hedefliyor: istemcisi ölür ölmez ölen Jupyter kernel'i. Proje, uzun ömürlü bir daemon ile bir VSCode eklentisini bir araya getiriyor; böylece kernel ve bastığı her şey, editör açık olsun ya da olmasın, ağ çalışsın ya da çalışmasın, sunucuda çalışmaya devam ediyor.

Projenin README'sine göre kurulumun iki parçası var. Python daemon'u kernel'i sahipleniyor ve istemcilere hizmet verirken, VSCode eklentisi yüzde formatındaki bir Python dosyasını notebook olarak açıyor. Pencereyi kapatabilir, SSH bağlantınızı kaybedebilir ya da saatler sonra geri dönebilirsiniz; aynı oturum hâlâ orada ve hâlâ akışta.

Hedeflediği sorun

README, uzak bir GPU makinesinde uzun işler çalıştırırken karşılaşılan üç yaygın başarısızlık modunu ele alıyor. JupyterLab geri döndüğünüzde yeniden bağlanır ama siz yokken yazdırılan her şey kaybolur; çünkü iopub çıktısı WebSocket üzerinden akıtılır ve sunucu tarafında hiç saklanmaz, geri oynatılacak bir şey kalmaz. VSCode'un yerleşik Jupyter desteği kernel'in ömrünü extension-host sürecine bağlar; böylece pencereyi kapatmak ya da ağı düşürmek kernel'i oturumla birlikte öldürür. tmux artı jupyter console ise bağlantı kesintisinden kurtulur ama grafikler, HTML ve widget'lar gibi zengin çıktıyı feda eder ve ikinci bir istemciden açılamaz.

Proje ortak bir kök neden tespit ediyor: oturumun doğruluk kaynağı istemcide ya da bağlantı kopmasını atlatamayan bir kanalda yaşıyor. Tithon bu doğruluk kaynağını sunucuya taşıyor.

Nasıl çalışıyor

Kernel setsid kullanarak daemon'dan ayrık çalışır, yani bir alt süreç değildir. Daemon çökebilir, yeniden başlayabilir veya yükseltilebilir; kernel çalışmaya devam eder ve kalıcı bir connection file üzerinden yeniden bağlanır. Her iopub ve shell mesajı, WAL modundaki yalnızca ekleme yapılan bir SQLite veritabanına birebir günlüklenir; yanında, yeniden bağlanmaları hızlı tutan, mevcut görüntüleme durumunun katlanmış her-yürütme-başına anlık görüntüsü de yer alır. İstemciler en son gördükleri sıra numarasıyla bağlanır, önce bir anlık görüntü ardından sıralı ve boşluksuz bir delta akışı alır; böylece yeniden bağlanmak yalnızca akışı sürdürmektir.

Görseller gibi zengin çıktılar base64 olarak gömülmek yerine karma değeriyle referanslanan gerçek dosyalar olarak saklanır ve ipywidgets trafiği bir widget-durumu anlık görüntüsüne katlanır; böylece bir tqdm ilerleme çubuğu ya da bir kaydırıcı gerçek değerinde geri döner. Backpressure sınırlıdır: abone başına kuyruklar sınırlıdır ve çok geride kalan bir istemci düşürülüp yeniden bağlandığında yeniden senkronize edilir; böylece yavaş bir tüketici daemon belleğini şişiremez ya da diğerlerini engelleyemez. Daemon 0600 izinli bir Unix domain socket'e bağlanır ve hiçbir TCP portu açmaz. Kernel'in kendisi düz ipykernel'dir; yani Tithon, yürütme motorunun çevresindeki oturum yönetimi katmanını değiştirir, motoru değil.

VSCode deneyimi

Eklenti, # %% hücre işaretleyicilerine sahip düz bir .py dosyasını her zamanki hücreler, çalıştırma düğmeleri ve zengin çıktıyla notebook olarak açar. Tithon kernel'ini seçmek oturumu otomatik olarak bağlar ve çıktı sunucuda günlüklenir; böylece notebook'u sonra yeniden açmak herhangi bir komut gerektirmeden geri yükler ve akışı sürdürür. VSCode Tunnel ya da Remote-SSH üzerinden davranış aynıdır; çünkü extension host uzak makinede çalışır ve daemon'un sunucu-yerel socket'iyle doğrudan konuşur, port yönlendirmesi gerekmez.

Çıktılar içerik karmasıyla hücrelere eşlenir, böylece düzenlemelerden ve yeniden açmalardan kurtulur; çalıştırdıktan sonra düzenlenmiş bir hücrenin çıktısı eski olarak işaretlenir. .py dosyasının kendisi salt kaynak olarak kalır ve diff'leri temiz tutar. Paylaşım için daemon, katlanmış çıktı durumunu proje içindeki .tithon dizini altında metin olarak da yazar; hücre başına JSON ve sha256 ile yinelenenlerden arındırılmış görsellerle. Bu dizin commit edilebilir, böylece depoyu klonlayan herkes sonuçları elde eder; ya da tamamen gitignore edilebilir.

README bir yapay zeka ajanı açısını da ekliyor: yaklaşık 250 satırlık JSON iskeleti gerektiren aynı notebook yaklaşık 50 satır temiz Python'a dönüşür ve gerçek dosyalar olarak saklanan görseller, modelin okuyamadığı base64 yerine gerçek görseller olarak modele verilebilir.

Gereksinimler ve durum

Tithon, daemon ve CLI için Python 3.11+ ve Linux'ta geliştirilip test edilmiş Unix benzeri bir sunucu gerektirir; Windows kullanıcıları WSL eklentisiyle WSL'e yönlendirilir. CLI PyPI'de, eklenti ise VSCode Marketplace'te; kod çalıştırma, olay akışı ve durum kontrolü komutlarıyla birlikte geliyor; attach --since ise yeniden bağlanma düğmesidir. Proje bunun alfa yazılımı olduğunu açıkça belirtiyor: çalışıyor ve günlük kullanımda, ancak kullanıcılar kaba kenarlar beklemeli; hata raporları memnuniyetle karşılanıyor.

Neden önemli

Kernel'ler ile istemciler arasındaki sıkı bağ, uzak makinelerde uzun hesaplamalar çalıştıran herkes için uzun zamandır bir acı noktası olmuştur ve standart geçici çözümlerin her biri bir şeyden vazgeçer; ister geçmişten, ister zengin çıktıdan, ister çok istemcili erişimden. Mesajları sunucu tarafında günlükleyerek ve kernel'i hem daemon'un hem editörün yaşam döngüsünden ayırarak Tithon, bir notebook oturumunu bir pencereye geçici bir ekten çok dayanıklı bir hizmet olarak ele alıyor. Alfa durumu ve Linux odaklı daemon gerçek uyarılar, ancak sürdürülebilir akışlar, katlanmış anlık görüntüler ve dosya referanslı çıktılarla tasarım, çoğu notebook kullanıcısının en az bir kez karşılaştığı bir soruna inandırıcı bir yanıt.

  • #vscode
  • #jupyter
  • #python
  • #open-source
  • #developer-tools

İlgili yazılar