本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文This site is available in English.View in Englishこのサイトには日本語版があります。日本語で表示이 사이트는 한국어로도 제공됩니다.한국어로 보기Diese Website ist auch auf Deutsch verfügbar.Auf Deutsch ansehenEste sitio web también está disponible en español.Ver en españolQuesto sito è disponibile anche in italiano.Visualizza in italianoCe site est également disponible en français.Afficher en françaisEste site também está disponível em português.Ver em portuguêsDeze website is ook beschikbaar in het Nederlands.In het Nederlands bekijkenЭтот сайт также доступен на русском языке.Смотреть на русскомयह वेबसाइट हिन्दी में भी उपलब्ध है।हिन्दी में देखेंهذا الموقع متاح أيضًا باللغة العربية.عرض بالعربيةSitus ini juga tersedia dalam bahasa Indonesia.Lihat dalam bahasa IndonesiaBu site Türkçe olarak da mevcut.Türkçe görüntüleTa strona jest dostępna także po polsku.Wyświetl po polskuTrang web này cũng có phiên bản tiếng Việt.Xem bằng tiếng Việt

تسریع GPU در PixInsight: تنظیم CUDA و آزمون‌های عملی کارایی

ابزارها و سخت‌افزار2021.12یادداشت‌های اولیه

این مقاله از یادداشت‌های سال‌های 2021 تا 2024 گردآوری شده‌است و بخشی از ابزارها، نسخه‌های CUDA و روند تنظیمات از آن زمان به‌روز شده‌است (به‌ویژه اینکه PixInsight در نسخه‌های متأخر خود از تنظیم با یک کلیک پشتیبانی می‌کند)؛ بنابراین هنگام خواندن به بستر زمانی آن توجه کنید.

از زمانی که فرایندهای (process) مبتنی بر شبکه‌های عصبی، مانند حذف ستاره‌ها، کاهش نویز با هوش مصنوعی و افزایش وضوح با هوش مصنوعی، یکی پس از دیگری وارد گردش کار PixInsight شدند، این پرسش که «آیا برای رایانهٔ پردازش تصویر یک کارت گرافیک بخریم یا نه» به مسئله‌ای کاملاً عملی تبدیل شد. در این مقاله تجربه‌های چند سال اخیرم را در آزمون‌های عملی و تنظیم تسریع GPU جمع کرده‌ام؛ از جمله اینکه چرا باید از GPU استفاده کرد، چگونه باید آن را فعال کرد، چقدر در زمان صرفه‌جویی می‌شود و تفاوت پلتفرم‌ها در چیست.

چرا به تسریع GPU نیاز داریم

فرایندهایی که اکنون در PixInsight از تسریع GPU پشتیبانی می‌کنند عمدتاً همان‌هایی هستند که محاسبات سنگین شبکهٔ عصبی دارند: StarNet++، StarNet 2، StarXTerminator (SXT)، NoiseXTerminator (NXT) و BlurXTerminator (BXT). اگر این فرایندها را فقط با CPU اجرا کنید، به‌ویژه وقتی ابعاد تصویر بزرگ می‌شود، زمان انتظار بسیار چشمگیر خواهد شد.

یک نمونهٔ بسیار ملموس، حذف ستاره‌ها به‌صورت دسته‌ای است: هنگام پردازش دنباله‌دارها به روش جدید، باید در حالت خطی، ستاره‌های هر تصویر دنباله‌دار را که هنوز اینتگریشن (integration) نشده‌است، یکی‌یکی حذف کنید. برای نمونه، با بیش از دویست تصویر 9 مگاپیکسلی، با تسریع کارت RTX 3060 نسخهٔ Laptop هر تصویر تنها حدود 20 ثانیه طول می‌کشد؛ اما اگر فقط به CPU تکیه کنید، آن زمان کل چنان است که به انتخاب‌های زندگی‌تان شک می‌کنید.

وقتی یک بار تسریع GPU را تجربه کنید، احتمالاً دیگر نمی‌توانید به گذشته برگردید.

اولین باری که موفق شدم CUDA را فعال کنم

اواخر سال 2021، پس از چند ساعت آزمودن نسخه‌های مختلف NVIDIA CUDA، cuDNN و TensorFlow، سرانجام موفق شدم از GPU (کارت NVIDIA RTX 3060) برای کمک به حذف ستاره‌ها استفاده کنم:

  • StarXTerminator تنها حدود 15 ثانیه؛
  • StarNet++ کمتر از 10 ثانیه؛

طول کشید تا حذف ستاره‌های یک تصویر کامل شود. در مقایسه با اجرای صرفاً روی CPU، تفاوت بسیار چشمگیر بود.

تصویر صفحه از نخستین فعال‌سازی موفق تسریع CUDA برای حذف ستاره‌ها روی RTX 3060

چگونه فعالش کنیم: از تنظیم دستی تا نصب با یک کلیک

روش سال‌های نخست: قرار دادن دستی فایل‌ها

در روزهای نخست، برای فعال کردن تسریع GPU باید خودتان فایل‌های CUDA، cuDNN، TensorFlow و مانند آن‌ها را با نسخهٔ متناظر دانلود می‌کردید و در مسیر درست قرار می‌دادید. این روند آستانهٔ ورود پایینی نداشت و افزون بر آن فقط به کار کاربرانی می‌آید که Windows دارند، PixInsight روی رایانه‌شان نصب است و کارت گرافیک NVIDIA با هسته‌های CUDA دارند. کاربران کارت گرافیک AMD (از جمله گرافیک یکپارچه) بهتر است مستقیماً از این بخش بگذرند و کاربران Linux باید معادل‌ها را خودشان تطبیق دهند. پس از پایان تنظیمات، سرعت اجرای StarNet، StarNet++، SXT، NXT و BXT به‌مراتب بالاتر می‌رود.

دردسر ماجرا این بود که با هر بار به‌روزرسانی PixInsight، اغلب باید این فایل‌ها را دوباره سر جایشان می‌گذاشتید و این کار به‌سادگی از یاد می‌رفت.

روش کنونی: تنظیم داخلی PI با یک کلیک

در آغاز سال 2024 اوضاع به‌مراتب بهتر شد — حالا کافی است در PixInsight یک مخزن به‌روزرسانی (repository) اضافه کنید تا بتوانید مستقیماً از تسریع GPU استفاده کنید و از نصب و تنظیمات اضافی بی‌نیاز شوید. این روشی است که RC (Russell Croman)، سازندهٔ مجموعهٔ XTerminator، در انجمن PixInsight ارائه کرده‌است. در آن زمان این قابلیت فقط روی Windows کار می‌کرد و نسخهٔ Linux هنوز در دست توسعه بود؛ اما سیستم‌عامل Mac اصلاً از ابتدا به چنین تنظیماتی نیاز نداشت.

چگونه مطمئن شویم GPU واقعاً در حال محاسبه است

اگر می‌خواهید بدانید هنگام حذف ستاره‌ها یا کاهش نویز، GPU واقعاً کار می‌کند یا نه، در Windows 10/11 چنین کنید: Task Manager را باز کنید، به صفحهٔ «GPU» بروید و زیرصفحهٔ «CUDA» را انتخاب کنید؛ اگر ببینید هسته‌های CUDA درصد استفاده نشان می‌دهند، یعنی GPU به کار گرفته شده‌است (برای نمونه هنگام اجرای SXT می‌توان دید که هسته‌های CUDA تا 87% استفاده بالا می‌روند)؛ و اگر هسته‌های CUDA اصلاً تکان نخورند، یعنی GPU درگیر نشده‌است.

بررسی درصد استفادهٔ GPU در زیرصفحهٔ CUDA در Task Manager نمودار شماتیک روند پردازش روی GPU نمودار شماتیک معماری پایهٔ CUDA

آزمون‌های عملی کارایی

CPU رده‌بالا در برابر GPU ردهٔ متوسط و پایین

خیلی‌ها می‌پرسند: اگر CPU به‌اندازهٔ کافی قوی باشد، دیگر به کارت گرافیک نیازی نیست؟ من یک CPU رده‌بالای مصرفی (AMD R9-7950X) را در برابر یک کارت گرافیک ردهٔ متوسط و پایین مصرفی (RTX 3060 12G) گذاشتم؛ نرم‌افزارها PI 1.8.9-1 و SXT 2.05 AI 11 lite بودند:

  • گروه تصویر نخست M1 (14.75MP): حذف ستاره با CPU: 1 دقیقه و 45 ثانیه؛ حذف ستاره با GPU: 10.2 ثانیه.
  • گروه تصویر دوم Webb NGC 3372 (123MP): حذف ستاره با CPU: 12 دقیقه و 31 ثانیه؛ حذف ستاره با GPU: 1 دقیقه و 05 ثانیه.

از اینجا دو قاعده پیدا است: هرچه ابعاد تصویر بزرگ‌تر باشد، اثر تسریع GPU آشکارتر می‌شود؛ و حتی اگر یک CPU رده‌بالا را در برابر یک GPU ردهٔ متوسط و پایین بگذارید، CPU دست‌کم ده برابر زمان GPU لازم دارد تا همان کار را تمام کند. اگر CPU شما از مدل‌های رده‌بالا نباشد، این فاصله فقط بیشتر می‌شود. بنابراین، تا وقتی گردش کارتان به استفادهٔ مکرر از فرایندهای هوش مصنوعی نیاز دارد، به‌شدت توصیه می‌کنم دست‌کم یک کارت گرافیک ردهٔ متوسط و پایین از سری RTX 30 تهیه کنید.

مقایسهٔ زمان حذف ستاره میان CPU رده‌بالا و GPU ردهٔ متوسط و پایین

فقط با به‌روزرسانی نرم‌افزار CUDA، سرعت نزدیک به دو برابر می‌شود

یک کشف شگفت‌انگیز دیگر هم هست. حدود یک سال و اندی پیش برای نخستین بار روی لپ‌تاپ مجهز به RTX 3060 Laptop تسریع CUDA را فعال کردم؛ کمی بیش از یک سال بعد، بدون آنکه هیچ سخت‌افزار محاسباتی عوض شود (لپ‌تاپ که اصلاً قابل تعویض نیست)، تنها نرم‌افزارهای مربوط را به‌روز کردم و با همان تصویر دوباره اندازه‌گیری کردم؛ سرعت نزدیک به دو برابر شده بود.

برای نمونه، حذف ستاره‌ها از یک تصویر 120 مگاپیکسلی (PI 1.8.9-1، SXT 2.05 AI 11 lite، RTX 3060 Laptop 6GB):

  • تنظیم CUDA شمارهٔ یک (CUDA 11.2.2، TensorFlow 2.6، cuDNN 8.2.1): حدود 2.5 دقیقه.
  • تنظیم CUDA شمارهٔ دو (CUDA 11.8، TensorFlow 2.9، cuDNN 8.7، ZLib DLL x64 1.2.3): تنها 1 دقیقه و 20 ثانیه.

پس اگر از آن دوستانی هستید که CUDA را در همان سال‌های نخست نصب کرده‌اید و پس از آن دیگر به‌روزش نکرده‌اید، یادتان باشد نرم‌افزار CUDA را به‌روز کنید؛ می‌توانید ترکیب «تنظیم شمارهٔ دو» بالا را مبنا بگیرید که مثل این است که نصف کارایی را مجانی برداشته باشید.

مقایسهٔ زمان حذف ستاره پیش و پس از به‌روزرسانی نرم‌افزار CUDA تفاوت زمان پردازش میان نسخه‌های مختلف CUDA

کارت گرافیک نسخهٔ دسکتاپ در برابر نسخهٔ لپ‌تاپ

اتفاقاً هر دو کارت RTX 3060 12G و RTX 3060 Laptop 6G را در اختیار داشتم؛ زمان حذف ستاره‌ها با نسخهٔ یکسانی از نرم‌افزار چنین بود:

  • RTX 3060 12G: 1 دقیقه و 4 ثانیه؛
  • RTX 3060 Laptop 6G: 1 دقیقه و 20 ثانیه.

تراشهٔ هر دو یکی است و تفاوتشان تنها در ظرفیت حافظه و طراحی مصرف توان نسخهٔ دسکتاپ و نسخهٔ لپ‌تاپ است؛ به همین دلیل اختلاف زمان حذف ستاره‌ها چندان زیاد نیست. از نظر صرفهٔ اقتصادی، یک لپ‌تاپ گیمینگ مجهز به کارت گرافیک NVIDIA (که آن زمان حدود 30000 دلار تایوان قیمت داشت) انتخاب کاملاً به‌صرفه‌ای به شمار می‌آید.

مقایسهٔ زمان حذف ستاره میان RTX 3060 نسخهٔ دسکتاپ و نسخهٔ لپ‌تاپ

حتی کارت ماینینگ قدیمی هم فرق محسوسی دارد

در خانه یک رایانهٔ قدیمی دارم که حدود چهار سال پیش مونتاژ کردم (AMD R5-3600) و کارت گرافیک اصلی‌اش (R9-270) به پایان عمرش نزدیک شده بود. از اینترنت یک کارت ماینینگ کمتر از 3000 دلار تایوان تهیه کردم — NVIDIA GTX 1660s — و روی همان دستگاه حذف ستاره‌های یک تصویر فول‌فریم (حدود 60 مگاپیکسل) را آزمودم:

  • فقط با CPU: 5 دقیقه و 40 ثانیه؛
  • با GPU: 51 ثانیه؛

یعنی اختلاف زمان حدود 6.6 برابر. با اینکه تعداد هسته‌های CUDA در 1660s تنها کمی بیش از هزار و چهارصد است، زمان صرفه‌جویی‌شده همچنان بسیار چشمگیر است. تا وقتی کارهایی مانند حذف ستاره‌ها، کاهش نویز با هوش مصنوعی و افزایش وضوح با هوش مصنوعی را بارها و بارها اجرا می‌کنید، تسریع GPU سرمایه‌گذاری کاملاً ارزشمندی است.

مقایسهٔ زمان حذف ستاره با تسریع GPU روی GTX 1660s

تفاوت پلتفرم‌ها

اینکه فرایندهای هوش مصنوعی می‌توانند از تسریع GPU استفاده کنند یا نه، در سیستم‌عامل‌ها و سخت‌افزارهای مختلف یکسان پشتیبانی نمی‌شود. من وضعیت سه پلتفرم Windows، Mac و Linux را جمع‌بندی کرده‌ام (بخشی از نتایج آزمون Mac را یکی از دوستان هم‌علاقه در اختیارم گذاشت):

  • Windows + NVIDIA: کافی است تنظیمات را انجام دهید تا بتوانید CUDA را فراخوانی کنید و SXT، BXT، NXT و StarNet را همگی با GPU تسریع کنید.
  • Mac با تراشهٔ Apple Silicon (مانند M1 / M1 Ultra): BXT و NXT بدون هیچ تنظیمی به‌طور خودکار Metal را فراخوانی می‌کنند و از تسریع GPU بهره می‌برند؛ SXT هنگام اجرا تنها بخشی از منابع CPU را می‌گیرد و سراغ GPU نمی‌رود؛ و اما برای StarNet 2 باید به نسخهٔ آزمایشی موجود در وب‌سایت رسمی (که فقط حالت خط فرمان CLI دارد) روی بیاورید تا بتوانید با موفقیت از تسریع GPU استفاده کنید.
  • Mac نسخهٔ Intel: StarNet فقط می‌تواند از CPU استفاده کند؛ اما SXT، BXT و NXT می‌توانند از تسریع GPU بهره ببرند و این حتی با GPU شرکت AMD هم کار می‌کند.

در پلتفرم Apple Silicon، فرایندهایی مانند SXT چون به‌طور بومی از تسریع GPU پشتیبانی می‌کنند، کارایی‌شان کمابیش هم‌تراز «Windows + تسریع CUDA شرکت NVIDIA» است. و اما سیستم Linux روی PC هم می‌تواند به همان شکل GPU را برای تسریع محاسبات فراخوانی کند.

نتایج آزمون اینکه فرایندهای هوش مصنوعی روی هر پلتفرم می‌توانند از تسریع GPU استفاده کنند یا نه

جمع‌بندی

نگاهی به تغییرات این چند سال: تسریع GPU از تنظیمات دشوار و فنی‌ای که «چند ساعت وقت می‌گرفت تا نسخه‌های CUDA را با هم جور کنید» به «PI به‌صورت داخلی و با یک کلیک آن را حل می‌کند» رسیده‌است؛ فرایندهایی که می‌توان تسریعشان کرد بیشتر و بیشتر می‌شوند و حتی کارت ماینینگ قدیمی به قیمت چند صد دلار تایوان هم می‌تواند چند برابر شتاب بدهد. اگر گردش کارتان به‌شدت به فرایندهای هوش مصنوعی وابسته است، یک کارت گرافیک NVIDIA ردهٔ متوسط و پایین (یا یک Mac با تراشهٔ Apple Silicon) تقریباً ضروری است.