تصور کنید ساعتها زمان صرف اجرای یک مدل یادگیری عمیق روی سرور کردهاید و ناگهان به دلیل نوسان شبکه یا بسته شدن لپتاپ، تمام خروجیها و وضعیت اجرای کدتان از بین میرود. Tithon که در ۹ سپتامبر ۲۰۲۶ عرضه شد، دقیقاً برای پایان دادن به این کابوس توسعهدهندگان طراحی شده است. این ابزار به توسعهدهنده اجازه میدهد لپتاپ خود را ببندد یا اتصال SSH را از دست بدهد، بدون اینکه یک پردازش طولانیمدت GPU متوقف شود.
به نقل از مستندات این پروژه، Tithon با انتقال «منبع حقیقت» (Source of Truth) از کلاینت به میزبان، مشکل شکستهای مداوم هستههای Jupyter در برابر قطع اتصال کلاینت را حل میکند. برای سالها، دانشمندان داده با مشکل «نشستهای شکننده» دستوپنجه نرم میکردند؛ در حالت استاندارد، اگر از طریق SSH به یک سرور متصل شوید و نوتبوکی را اجرا کنید، بستن پنجره معمولاً باعث مرگ هسته یا پاک شدن خروجیهای چاپشده میشود.
اگرچه ابزارهایی مثل tmux میتوانند پردازش را زنده نگه دارند، اما خروجیهای غنی — مثل نمودارها، جداول HTML و ویجتها — که ارزش اصلی نوتبوکها هستند را حذف میکنند. همانطور که در تحلیلهای قبلی ما دربارهی زیرساختهای رایانش ابری اشاره کردیم، این شکاف باعث ایجاد یک گلوگاه قابل توجه برای پژوهشگرانی میشود که حلقههای آموزشی چند ساعته را اجرا میکنند. در چنین شرایطی، شما مجبور هستید یا برای مدت نامحدود متصل بمانید یا به روشهای ابتدایی و دستوپاگیر ثبت گزارش در فایلها روی بیاورید. Tithon به عنوان یک اصلاح ساختاری وارد میشود و با هسته به عنوان یک موجودیت مستقل (Detached Entity) برخورد میکند، به جای اینکه آن را فرزندِ فرآیند ویرایشگر بداند.
ریشهٔ از دست رفتن نشستها
طبق گزارش توسعهدهندگان Tithon، این ابزار سه حالت شکست رایج در جریانهای کاری علوم داده مدرن را هدف قرار داده است:
- JupyterLab: اگرچه ممکن است دوباره متصل شود، اما خروجیهای iopub از طریق WebSocket ارسال میشوند و هرگز در سمت سرور ذخیره نمیشوند؛ بنابراین هر چه در زمان قطع اتصال چاپ شود، برای همیشه از بین میرود.
- VSCode Jupyter: هسته به فرآیند extension-host گره خورده است. اگر پنجره بسته شود یا شبکه قطع شود، هسته میمیرد و نشست از دست میرود.
- tmux + jupyter console: این ترکیب در برابر قطع اتصال مقاوم است اما تمام خروجیهای غنی (نمودارها، HTML و ویجتها) را از دست میدهد و مانع از آن میشود که کلاینت دومی بتواند همان نشست را باز کند.
معماری پایداری
Tithon از طریق یک دیمون (Daemon) — شبیه به یک مدیر پشتصحنه که بدون نیاز به رابط کاربری، وظایف را در پسزمینه اجرا میکند — روی میزبان عمل میکند که مالک هسته است. هسته با استفاده از setsid اجرا میشود، به این معنی که فرزند دیمون نیست؛ بنابراین اگر دیمون کرش کند، ریاستارت شود یا بهروزرسانی شود، هسته به اجرای خود ادامه داده و دوباره از طریق یک فایل اتصال متصل میشود.

برای اطمینان از عدم حذف دادهها، دیمون تمام پیامهای iopub و shell را عیناً در یک پایگاهداده SQLite (WAL) با قابلیت append-only ذخیره میکند. این سازوکار به کلاینتها اجازه میدهد دوباره متصل شوند و یک «اسنپشات» از وضعیت فعلی بههمراه یک استریم دلتای بدون شکاف (gapless delta stream) از تمام اتفاقاتی که در زمان غیبت آنها رخ داده است را درخواست کنند.
مکانیزمهای فنی کلیدی
- Unix Domain Sockets: Tithon به جای TCP از یک سوکت یونیکس با دسترسی 0600 استفاده میکند تا سربار شبکه را کاهش و امنیت ارتباطات محلی را افزایش دهد. این سیستم به طور کلی از TCP استفاده نمیکند.
- مدیریت خروجیهای غنی: برخلاف نوتبوکهای استاندارد که تصاویر را به صورت رشتههای base64 ذخیره میکنند، Tithon تصاویر را به عنوان فایلهای واقعی که توسط هش ارجاع داده میشوند، ذخیره میکند. این کار از «تورم JSON» که اغلب باعث کرش کردن ویرایشگرها یا گیج شدن عاملهای هوش مصنوعی (AI Agents) میشود، جلوگیری میکند.
- مدیریت فشار معکوس (Backpressure): برای جلوگیری از کرش کردن دیمون توسط یک کلاینت کند، Tithon بافرهای هر مشترک را محدود میکند. اگر کلاینتی بیش از حد عقب بماند، دیمون اتصال را قطع کرده و او را مجبور به همگامسازی مجدد (resync) هنگام اتصال دوباره میکند. این امر تضمین میکند که یک کلاینت کند نتواند حافظه دیمون را افزایش دهد یا مانع عملکرد دیگران شود.
- آینهسازی وضعیت: ترافیک ipywidgets در یک اسنپشات state+json ادغام میشود تا نوار پیشرفت (tqdm) یا اسلایدرها پس از اتصال مجدد به مقادیر دقیق خود بازگردند.
- موتور اجرا: Tithon از همان
ipykernelمعمولی استفاده میکند. این ابزار لایه مدیریت نشست در اطراف هسته را جایگزین کرده است، نه خودِ موتور اجرا را.
یکپارچگی با VSCode و جریان کاری
این سیستم از طریق یک افزونه اختصاصی مستقیماً در VSCode ادغام میشود. Tithon به جای فایلهای .ipynb — که آنها را به دلیل حجم زیاد دادههای غیرضروری «تورم JSON» مینامد (جایی که ۲۵۰ خط نویز نماینده ۵۰ خط کد است) — از فایلهای .py با فرمت درصد استفاده میکند. اینها اسکریپتهای پایتون سادهای هستند که با نشانگرهای # %% به سلول تقسیم شدهاند.
وقتی هسته Tithon در VSCode انتخاب شود، افزونه به سوکت محلی دیمون متصل میشود. چون در جلسات Remote-SSH یا Tunnel، میزبان افزونه روی ماشین راه دور اجرا میشود، نیازی به Port Forwarding نیست. در ویندوز، توصیه میشود Tithon داخل WSL با استفاده از افزونه WSL اجرا شود، زیرا در حال حاضر پشتیبانی بومی از ویندوز وجود ندارد.
خروجیها با استفاده از هش محتوا به سلولها متصل میشوند. اگر سلولی را پس از اجرا ویرایش کنید، Tithon خروجی موجود را «کهنه» (Stale) علامتگذاری میکند تا پیوند بین نسخه کد و دادههای حاصله حفظ شود. فایل .py خالص میماند و خروجیها هرگز وارد فایل نمیشوند تا diffهای گیت تمیز بمانند.
اشتراکگذاری مشارکتی خروجیها
Tithon روشی برای اشتراک نتایج بدون ثبت فایلهای حجیم JSON در گیت معرفی کرده است. دیمون یک پوشه .tithon/ در پوشه پروژه ایجاد میکند که شامل JSONهای سلول و تصاویر حذفتکرار شده است.
با ثبت این پوشه، سایر همکاران میتوانند مخزن را کلون کرده و نتایج را فوراً ببینند. اگر یک نمودار ۱۰۰ بار در یک حلقه رسم شود، Tithon تنها یک فایل برای هر تصویر منحصربهفرد ثبت میکند که حجم مخزن را به شدت کاهش میدهد. کاربران میتوانند این پوشه را در .gitignore قرار دهند تا خروجیها خصوصی بماند؛ در این صورت نشست همچنان از ژورنال محلی بازیابی میشود.
مرجع CLI و پیکربندی
رابط خط فرمان Tithon امکان تعامل مستقیم با هسته پایدار را فراهم میکند. دستورات کلیدی عبارتند از:
tithon daemon: اجرای دیمون در پیشزمینه برای مالکیت هسته و سرویسدهی به کلاینتها.tithon run -c CODE: ارسال کد و دریافت استریم خروجی. پرچم--no-waitشناسه اجرا (exec id) را چاپ کرده و خارج میشود.tithon attach: دریافت رویدادها به صورت NDJSON. پرچم--since 0یک اسنپشات کامل و تاشده ارائه میدهد، در حالی که--since -1فقط دادههای زنده را ارسال میکند.tithon status: نمایش وضعیت فعلی نشست، صف، هسته و مدل ویجت.
پیکربندی از طریق متغیرهای محیطی انجام میشود. TITHON_HOME (به طور پیشفرض ~/.tithon) محل ذخیره سوکت، لاگ و ژورنال است. عملکرد سیستم از طریق TITHON_SUB_QUEUE_MAX (۱۰,۰۰۰ رویداد) و TITHON_WRITE_BUFFER_HIGH (۱,۰۴۸,۵۷۶ بایت) برای محدود کردن حافظه دیمون تنظیم میشود.
تحلیل: تغییر پارادایم نوتبوکها
این چرخش از وضعیت کلاینتمحور به ژورنالینگ میزبان، فرض بنیادی رایانش تعاملی را تغییر میدهد. Tithon با تبدیل نوتبوک از یک سند استاتیک به یک «نمای کلی از یک استریم پایدار»، تجربه Jupyter را به محیطهای IDE حرفهای نزدیک میکند.
در عصر عاملهای هوش مصنوعی، این موضوع حیاتی است. عاملها معمولاً در تحلیل هزاران توکن مربوط به تصاویر base64 در JSON مشکل دارند. Tithon با ارائه فایلهای واقعی تصویر و کد خالص .py، مانع «JSONهای احمقانه» را حذف کرده و نوتبوکها را برای مدلهای زبانی بزرگ (LLM) — مثل کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — خواناتر میکند.
در نهایت، Tithon نوتبوک را از یک تختهسیاه فرار و ناپایدار به یک محیط اجرای استوار تبدیل میکند و اضطراب «قطع اتصال» را از بین میبرد و اجازه میدهد جریان کاری پژوهشی به صورت غیرهمزمان و منعطفتر پیش برود. حتی تلفات اجباری — مانند ریاستارت دیمون، ریبوت میزبان یا Garbage Collection در حالت بیکاری — به طور خودکار بازیابی میشوند.
گام بعدی شما
- اگر از VSCode و SSH برای کارهای سنگین GPU استفاده میکنید، Tithon را از طریق
pip install tithon(یاuv add tithon) نصب کنید و افزونه مربوطه را از VSCode Marketplace اضافه کنید. - فایلهای
.ipynbخود را به فرمت.py(Percent format) تبدیل کنید تا از تورم JSON خلاص شوید. - پوشه
.tithonرا برای اشتراکگذاری سریع نتایج با همتیمیها در گیت ثبت کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو