پرش به محتوای اصلی
پرش به محتوای مقاله

مدیریت نشست‌های Tithon در برابر مدل شکنندهٔ مبتنی بر کلاینت

·۱۹ شهریور ۱۴۰۵۷ دقیقه مطالعه
اجرای پایدار هسته Jupyter و پخش زنده خروجی در VSCode
اجرای پایدار هسته Jupyter و پخش زنده خروجی در VSCode
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

جایگزینی مدیریت نشست‌های موقت WebSocket با یک ژورنال SQLite در سمت میزبان؛ این اولین بار است که خروجی‌های غنی نوت‌بوک (مانند نمودارها) به‌صورت مستقل از کلاینت و به‌طور دائمی در سرور ذخیره می‌شوند.

تصور کنید ساعت‌ها زمان صرف اجرای یک مدل یادگیری عمیق روی سرور کرده‌اید و ناگهان به دلیل نوسان شبکه یا بسته شدن لپ‌تاپ، تمام خروجی‌ها و وضعیت اجرای کدتان از بین می‌رود. 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 اجرا می‌شود، به این معنی که فرزند دیمون نیست؛ بنابراین اگر دیمون کرش کند، ری‌استارت شود یا به‌روزرسانی شود، هسته به اجرای خود ادامه داده و دوباره از طریق یک فایل اتصال متصل می‌شود.

اجرای پایدار هسته Jupyter و پخش زنده خروجی در VSCode

برای اطمینان از عدم حذف داده‌ها، دیمون تمام پیام‌های 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 مراجعه کنید.

چرا این موضوع مهم است؟

این ابزار با تکیه بر معماری دیمون و SQLite، پایداری اجرای کدهای علوم داده را به سطح استانداردهای نرم‌افزاری می‌برد. این تغییر برای تیم‌های پژوهشی که با مدل‌های سنگین و اتصالات ناپایدار سر و کار دارند، به معنای حذف ریسک از دست رفتن ساعت‌ها محاسبات است.

تأثیر برای ایران

برای پژوهشگران ایرانی که اغلب از سرورهای راه دور با کیفیت اتصال پایین استفاده می‌کنند، Tithon ابزاری حیاتی برای جلوگیری از توقف پردازش‌های سنگین GPU در اثر قطع شدن VPN یا اینترنت است.

·نگاه ما
تحریریه دات‌هوش

Tithon با حذف وابستگی هسته به نشست‌های WebSocket، در واقع نوت‌بوک را از یک ابزار آموزشی به یک ابزار مهندسی تبدیل می‌کند. نکته کلیدی اینجاست که با تمیز کردن داده‌های ورودی (جایگزینی base64 با فایل)، Tithon مسیر را برای ادغام عمیق‌تر عامل‌های هوش مصنوعی در چرخه توسعه داده‌ها هموار می‌کند؛ چرا که LLMها با کد خالص و فایل‌های مجزا بسیار بهتر از ساختارهای تو در توی JSON تعامل می‌کنند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.