تصور کنید مجبور باشید هزاران خط کد تاییدشدهای را که دههها در صنایع هوافضا یا هستهای کاربرد داشته، برای استفاده در یک مدل یادگیری ماشین بازنویسی کنید. این کابوس اکنون با حذف نیاز به کدنویسی دستی مشتقات یا پذیرش خطاهای روشهای تفاضل محدود، به پایان رسیده است.
طبق اعلام تیم Tesseract در ۱۴ ژوئیه ۲۰۲۶، اکنون میتوان ۹۰۰ مؤلفه گرادیان را از یک حلکننده کامپایلشده فورترن تنها با یک پیمایش معکوس استخراج کرد، بدون اینکه حتی یک خط کد Adjoint نوشته شود. این زیرساخت، پلی میان چارچوبهای مدرن مانند JAX و PyTorch و شبیهسازیهای قدیمی فیزیک ایجاد میکند.
همانطور که در تحلیلهای قبلی ما درباره امنیت مدلهای بازمتن دیدیم، تعامل میان لایههای قدیمی سختافزاری و نرمافزاری همیشه چالشبرانگیز است. در دنیای فیزیک، کدهای بهینهشده در زبان فورترن به دلیل عدم ارائه گرادیانها، برای مدلهای هوش مصنوعی مانند یک «جعبه سیاه» بودند. مهندسان پیش از این باید بین سه گزینه دشوار انتخاب میکردند: ماهها وقت صرف کدنویسی دستی مشتقات کنند، از روشهای کند و نادقیق تفاضل محدود استفاده کنند، یا ریسک بازنویسی کل کد در JAX را بپذیرند که اغلب منجر به ورود باگهای جدید در محاسبات فیزیکی میشد.
به گزارش Tesseract، راهکار جدید به جای تغییر در کد منبع، مشتقگیری خودکار (Automatic Differentiation) — که شبیه داشتن یک ماشینحساب پیشرفته است که میداند هر تغییر کوچک در ورودی، چه تأثیری بر خروجی نهایی میگذارد — را در سطح نمایش میانی LLVM (LLVM IR) اعمال میکند. از آنجا که Enzyme روی LLVM IR عمل میکند، میتواند هر کدی را که به این فرمت کامپایل شود، از جمله فورترن، C، C++ و Rust، مشتقگیری کند.
زنجیره کامپایل
این فرآیند یک حلکننده فورترن را در حدود ۳۰ ثانیه به یک کتابخانه مشترک مشتقپذیر تبدیل میکند:
- LFortran کد منبع را به LLVM IR تبدیل میکند و محاسبات اشارهگر (Pointer) تمیزتری نسبت به کامپایلر رسمی Flang ارائه میدهد.
- یک مرحله بهینهسازی سبک (-O1) برای پاکسازی IR استفاده میشود تا از بروز خطاهای NaN در حالت معکوس جلوگیری شود.
- یک پوشش (Wrapper) ساده در زبان C، تخصیص حافظه را مدیریت میکند.
- Enzyme کد IR را تحلیل کرده و کد مشتق را سنتز میکند؛ در واقع یک مسیر معکوس را به تابع «میرواند».
- در نهایت، بهینهسازی --O3 منجر به تولید یک کتابخانه مشترک (.so) با نقاط دسترسی Forward، JVP و VJP میشود.
اهمیت LFortran
نقش LFortran در اینجا حیاتی است؛ زیرا آرایهها را به عنوان اشارهگرهای ساده میبیند. در مقابل، کامپایلر Flang از ساختارهای پیچیدهای استفاده میکند که ردیابی آنها برای Enzyme دشوار است. با غیرفعال کردن بررسی محدوده آرایهها و انتقال آرایههای پیشتخصیصشده از C، شفافیت IR برای مرحله مشتقگیری تضمین میشود.
محک دقت و عملکرد
تیم پژوهشی برای تایید نتایج، یک حلکننده انتقال حرارت دوبعدی ۲۲۰ خطی را آزمایش کرد. آنها گرادیانهای Enzyme را با گرادیانهای تحلیلی مستقل مقایسه کردند.

بر اساس نتایج، Enzyme گرادیان را با دقت تقریباً ۱۱ رقم معنادار (خطای نسبی ۶e-۱۲) بازتولید کرد. در مقابل، روشهای تفاضل محدود (FD) حتی با بهینهترین گامها، در سطح 1e-10 متوقف شدند و در موارد نادر خطاهایی تا 1e-2 داشتند. یک فراخوانی VJP، گرادیانها را با هزینهای معادل دو بار اجرای مستقیم (Forward pass) فراهم کرد که برای مسئلهای با ۹۰۰ پارامتر، یعنی شتابی ۴۵۰ برابری نسبت به تفاضل محدود است.
ادغام با JAX
برای کاربردی کردن این نتایج، Tesseract کتابخانه کامپایلشده را در قالب یک Primitive در JAX بستهبندی میکند. با استفاده از تابع apply_tesseract و از طریق یک مرز HTTP، مدل هوش مصنوعی زاینده (Generative AI) — مانند کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — میتواند دستورات jax.value_and_grad را مستقیماً به کدهای تولیدشده توسط Enzyme ارسال کند.
کاربرد: جرمشناسی حرارتی
این سیستم در یک مسئله معکوس به کار گرفته شد: بازسازی یک میدان دمایی با ۹۰۰ المان، تنها بر اساس ۱ hundred سنسور نویزی که ۵ ثانیه پس از یک رویداد گرمایشی داده جمع کرده بودند.

با استفاده از بهینهساز SciPy L-BFGS-B که توسط گرادیانهای Enzyme هدایت میشد، سیستم توانست دو نقطه داغ گوسی را شناسایی کند. بازسازی نهایی به ضریب همبستگی ۰.۹۸ با میدان واقعی رسید و ثابت کرد که گرادیانها میتوانند از فورترن کامپایلشده، عبور کرده و به یک بهینهساز استاندارد برسند.
این معماری امکان ترکیبپذیری فوقالعادهای فراهم میکند. کاربر میتواند یک حلکننده CFD در فورترن را مستقیماً به یک شبکه عصبی در JAX متصل کند. هر جزء با ابزار مشتقگیری بومی خود عمل کرده و Tesseract قطعات را به هم میدوزد.
با این حال، نویسندگان هشدار میدهند که این روش هنوز آزمایشی است. LFortran در حال تکامل است و کدهای صنعتی بزرگ ممکن است در مدیریت حافظه با مشکل مواجه شوند؛ زیرا مشتقگیری حالت معکوس، مقادیر میانی را ذخیره میکند و در مسائل با بردارهای حالت عظیم و هزاران گام زمانی، حافظه را به سرعت مصرف میکند، هرچند یادداشتهای Checkpointing در Enzyme میتوانند این مشکل را کاهش دهند.
این رویکرد «سد بازنویسی» در محاسبات علمی را میشکند و به مهندسان اجازه میدهد حلکنندههای تاییدشده قدیمی خود را حفظ کرده و همزمان از قدرت بهینهسازی مشتقگیری خودکار مدرن بهره ببرند.
گام بعدی شما
- اگر از شبیهسازهای قدیمی (Legacy) در پروژههای ML استفاده میکنید، مستندات Enzyme را برای جایگزینی تفاضل محدود بررسی کنید.
- برای کاهش مصرف حافظه در مسائل مقیاسبزرگ، مکانیسم Checkpointing در Enzyme را به طور ویژه مطالعه کنید.
- ترکیب مدلهای فیزیکی با شبکههای عصبی (Physics-Informed ML) را با استفاده از لایههای مشتقپذیر فورترن آزمایش کنید.
اما پیچیدگیهای مدیریت حافظه در این سطح از کامپایل، داستان دیگری دارد — به تحلیل ما درباره بهینهسازی استنتاج در مدلهای عظیم مراجعه کنید.




گفتگو