برای بررسی اختلاف دو اجرای مدل، ثبت تنظیمات کافی نیست؛ باید رفتار محاسبات را با آزمایش کنترلشده مقایسه کنیم. این راهنما تفاوت «تثبیت مولد تصادف» و «محدودکردن الگوریتمهای غیرقطعی» را به یک پروتکل عملی تبدیل میکند. هیچ آزمایش GPU روی دستگاه اپرا یا نتیجه بنچمارک واقعی در این نوشته گزارش نشده است.
دو مسیر آزمایش بسازیم
یک ورودی ساختگی کوچک، وزن ثابت و دستگاه مشخص انتخاب کنید. در مسیر اول فقط بذرها را تثبیت کنید؛ در مسیر دوم همان ورودی را با درخواست الگوریتم قطعی اجرا کنید. حالت آموزش یا ارزیابی، ترتیب نمونهها و مقدار اولیه باید برابر بمانند. اگر هر بار برنامه تازه شروع میشود، تمام مراحل راهاندازی نیز دوباره اجرا شوند؛ مقایسه دو فراخوانی پشتسرهم با وضعیت تصادفِ جلورفته، همان آزمایش نیست.
کنترل مرتبط در PyTorch
در مستندات بررسیشده PyTorch 2.15، manual_seed برای مولدهای PyTorch است. کنترل الگوریتمهای شناختهشده غیرقطعی، تنظیم دیگری دارد. گزینه warn_only صرفاً هشدار میدهد و نباید نتیجه آن را بهعنوان الزام سختگیرانه معرفی کرد.
import torch
torch.manual_seed(17)
torch.use_deterministic_algorithms(True, warn_only=False)برای کتابخانههای دارای مولد تصادف مستقل، سیاست همان کتابخانه را نیز بررسی کنید. این چند خط تضمین برابری میان نسخهها، CPU و GPU یا همه سختافزارها نیست. انتخاب الگوریتم convolution با benchmark نیز موضوعی جدا از قطعیبودن خود الگوریتم است؛ فقط یک کلید را تغییر دهید تا علت تفاوت قابل پیگیری بماند.
جدول ثبت نتیجه، نه نتیجه ازپیشساخته
| مسیر آزمایشی | آنچه ثبت میکنیم | تفسیر مجاز |
|---|---|---|
| بذر ثابت، کنترل قطعی خاموش | خروجی تکرارها و اختلاف عددی | برابری یا اختلاف باید واقعاً سنجیده شود |
| همان ورودی، کنترل سختگیرانه روشن | خروجی یا نام عملیاتِ دارای خطا | خطا، نشانه نیاز به بررسی مسیر محاسبه است |
| حالت فقط هشدار | پیام هشدار و خروجی | هشدار، اثبات قطعیبودن نیست |
| نسخه یا دستگاه دیگر | محیط و دامنه مقایسه تازه | آن را تکرار همان آزمایش هممحیط ننامیم |
با اختلاف یا خطا چه کنیم؟
ابتدا کوچکترین ورودی بازتولیدکننده را پیدا کنید. اگر فقط یک عملیات خطا دارد، نام عملیات، شکل داده و نسخه backend را همراه مورد آزمایشی نگه دارید. حذف بیخبر کنترل سختگیرانه، خطا را حلشده نمیکند؛ نتیجه باید «مسیر قطعی فراهم نشد» باقی بماند. اگر خروجی عددی کمی متفاوت است، معیار مقایسه را پیش از دیدن نتیجه تعیین کنید: برابری بیتی برای یک هدف و تحمل عددی مستند برای هدفی دیگر است. حد تحمل دلخواه را پس از مشاهده اختلاف بزرگ نکنید.
کاربرگ و محدودیت استفاده
کاربرگ چهار مسیر آزمایش ستون نتیجه را خالی دارد تا اندازهگیری واقعی خودتان را ثبت کنید. داده حساس لازم نیست. این پروتکل برای تشخیص منشأ اختلاف است و سرعت یا کیفیت مدل را ثابت نمیکند. اگر هدف نهایی دستیار سازمانی است، معیار پذیرش پاسخ را جدا از برابری محاسبات تعریف کنید؛ نمونه معیار پذیرش کاربرد تفاوت این دو سطح را روشن میکند.
منبع فنی
راهنمای رسمی Reproducibility در PyTorch 2.15، تاریخ بهروزرسانی نمایشدادهشده ۱۴ مه ۲۰۲۶؛ مطالعه در ۱ نوامبر ۲۰۲۶. برای نسخه نصبشده خود، مستندات همان نسخه را بخوانید.