مروری بر CUDA – قسمت سوم : اکوسیستم CUDA

این سومین مقاله از مجموعه مروری بر CUDA است که هدف از آن ، بروز کردن مفاهیم کلیدی در CUDA ، ابزارها و بهینه سازی، برای توسعه دهندگان مبتدی یا متوسط است.

سهولت برنامه نویسی و جهشی بزرگ در سطح عملکرد، یکی از دلایل اصلی استفاده گسترده از پلتفرم CUDA است. دومین دلیل موفقیت پلتفرم CUDA ، وجود یک سیستم گسترده و ارزشمند است.

مانند هر پلتفرم جدیدی، موفقیت CUDA ، به ابزارها، کتابخانه ها، برنامه ها و همکاران در دسترس برای اکوسیستم CUDA بستگی دارد. هر پلتفرم محاسباتی جدید نیاز به توسعه دهندگانی دارد تا برنامه ها را به یک پلتفرم جدید منتقل کنند، برای این کار، توسعه دهندگان به پیشرفته ترین ابزارها و محیط های توسعه نیاز دارند.

بعد از اینکه برنامه ها شروع به مقیاس گذاری کردند، ابزارهای بیشتری در سطح مرکز داده ضرورت پیدا می کنند. NVIDIA متعهد به ارائه ابزارهای پیشرفته و خدمات اکوسیستم، به توسعه دهندگان و شرکت ها است.

اکوسیستم CUDA
شکل ۱: اکوسیستمCUDA : بلوک های سازنده برای ساخت پلتفرم CUDA بهترین انتخاب توسعه دهنده است.

NVIDIA اخیرا آخرین معماری A100 و سیستم DGX A100 را براساس این معماری جدید منتشر کرده است. GPU A100 جدید نیز با یک اکوسیستم ارزشمند همراه است.

شکل ۱ مؤلفه های گسترده اکوسیستم را نشان می دهد که در طی یک دوره بیش از ۱۵ سال تکامل یافته اند. در این مقاله، به جزئیات مقدماتی مربوط به هر مؤلفه اکوسیستم می پردازیم.

زبان های برنامه نویسی و API ها

CUDA 1.0 فقط با پشتیبانی از زبان برنامه نویسی C شروع به کار کرد ، اما در طول سال ها، تکامل یافته است. CUDA در حال حاضر امکان برنامه نویسی GPU ها را با چندین زبان برنامه نویسی سطح بالا دارد. از جمله  C ، C++ ،Fortran  ، Python و غیره.

NVIDIA، جعبه ابزار CUDA را منتشر کرد که با استفاده از زبان های برنامه نویسیC / C ++ ، یک محیط توسعه ارائه می دهد. با استفاده از این جعبه ابزار می توانید برنامه های کاربردی را در GPU توسعه داده ، بهینه سازی کنید و به کار بگیرید. NVIDIA همچنین با استفاده از زبان Fortran یک ابزار PGI برای برنامه نویسی ارائه می دهد.

همچنین بسیاری از زنجیره ابزار های شخص ثالث ، وجود دارند:

  • PyCUDA – استفاده از عملیاتCUDA API در یک رابط پایتون
  • Altimesh Hybridizer – تولید کد منبعCUDA  با زبان C از زنجیره .NET (  MSIL) یا آرشیو جاوا ( کد بایتی جاوا )
  • OpenACC – استفاده از دستورالعمل های برنامه نویسی GPU و کدCUDA تولید شده توسط کامپایلر، قبل از اجرا در CUDA GPU
  • OpenCL – استفاده از عملیات API سطح پایین برای برنامه نویسی CUDA GPU
  • Alea – GPU – برنامه نویسی CUDA GPU با چارچوب .NET

کتابخانه ها

کتابخانه ها برای ارائه عملکرد کارهای متداول روزمره در هر محیط برنامه نویسی ضروری هستند. آن ها به خوبی برای معماری محاسبه هدف بهینه سازی شده اند و کیفیت نرم افزاری بالایی دارند. آن ها همچنین زمان توسعه برنامه را ذخیره می کنند و ساده ترین راه را برای سرعت بخشیدن به GPU ارائه می دهند.

NVIDIA بر روی پلتفرم CUDA ، لایه ای به نام CUDA-X ایجاد می کند، که مجموعه ای از کتابخانه ها ، ابزارها و فناوری ها است. کتابخانه های CUDA تسریع شده با  GPU، موجب افزایش سرعت در حوزه های مختلفی از قبیل جبر خطی، پردازش تصویر و ویدیو، یادگیری عمیق و تحلیل نمودار، می شوند. برای ایجاد الگوریتم های سفارشی، می توانید از ترکیب های موجود با زبان های رایج و بسته های عددی همانند عملیات API توسعه یافته نیز استفاده کنید.

جعبه ابزار NVIDIA CUDA با مجموعه گسترده ای از کتابخانه های متداول مورد استفاده، همراه است. همکاران زیادی در بسیاری از کتابخانه ها روی پلتفرم CUDA کار می کنند. در اینجا لیستی از برخی از کتابخانه های پرکاربرد آورده شده است:

  • کتابخانه های ریاضی: cuBLAS،  cuRAND،  cuFFT، cuSPARSE ،  cuTENSOR، cuSOLVER
  • کتابخانه های الگوریتم موازی: nvGRAPH، Thrust
  • کتابخانه های تصویر و ویدیو: nvJPEG، NPP ، جریان های نوری  SDK
  • کتابخانه های ارتباطی: NVSHMEM، NCCL
  • کتابخانه های یادگیری عمیق: cuDNN , TensorRT , Jarvis , DALI
  • کتابخانه های همکار: OpenCV , FFmpeg , ArrayFire , MAGMA

ابزارهای پروفایل سازی و اشکال زدایی

یکی از عوامل مهم هر معماری برنامه نویسی ، ابزارهای قدرتمند و کارآمد برای نوشتن، رفع اشکال و بهینه سازی برنامه ها است. اکوسیستم CUDA قدرتمند است و NVIDIA تلاش زیادی برای اطمینان از اینکه شما تمام ابزارهای لازم برای نوشتن سریع، آسان و موثر را در اختیار دارید، انجام داده است.

در اینجا نگاهی به ابزارهای پروفایل سازی و اشکال زدایی CUDA میندازیم:

  • NVIDIA Nsight – این یک ابزار کم هزینه پروفایل سازی ، ردیابی و اشکال زدایی است. این سیستم یک محیط مبتنی بر GUI(رابط گرافیکی کاربران) را برای طیف وسیعی از پلت فرم های NVIDIA ، مانند سرورهای بزرگ multi-GPU x86 ، ایستگاه های کاری Quadro و غیره ارائه می دهد.
  • CUDA GDB – این یک افزونه Linux GDB است ، که یک رابط اشکال زدایی مبتنی بر میز فرمان را ارائه می دهد که می توانید از خط فرمان استفاده کنید. CUDA GDB می تواند در سیستم محلی شما یا هر سیستم از راه دور استفاده شود. افزونه های مبتنی بر GUIنیز در دسترس هستند ، برای مثال ، DDD ، EMACS یا  Nsight Eclipse Edition.
  • CUDA – Memcheck – ابزاری ضروری است که با بررسی هزاران رشته به صورت همزمان، یک دید کلی در رابطه با موضوع دسترسی به حافظه، ارائه می دهد.

همچنین بسیاری از راه حل های شخص ثالث نیز وجود دارد که شامل موارد زیر است:

ابزارهای مرکز داده و مدیریت خوشه ای

GPU های NVIDIA سرعت زیادی به برنامه ها می دهند و این برنامه ها به تعداد زیادی از GPU ها مقیاس گذاری می شوند. بسیاری از کاربردهای علمی، مانند دینامیک مولکولی و شیمی کوانتومی، و همچنین کاربردهای هوش مصنوعی به دسته ای از GPU ها نیاز دارند تا بتوانند عملکرد برنامه را در هزاران GPU متصل به یک شبکه پرسرعت انجام دهند. مراکز داده مدرن با استفاده از GPU های NVIDIA و اتصال پر سرعت Mellanox ساخته شده اند تا برنامه ها را به مقیاس عملکرد وسیع مقیاس گذاری کنند.

شما برای استفاده آسان مراکز داده به یک اکوسیستم پیشرفته نیاز دارید. شرکت ها به ابزارهایی نیاز دارند تا بتوانند این مراکز داده متراکم را به راحتی مدیریت و اداره کنند. NVIDIA با شرکای اکوسیستم همکاری نزدیک دارد تا ابزارهای نرم افزاری را برای هر مرحله از چرخه کار نرم افزار AI (هوش مصنوعی) و HPC (محاسبات سریع) در اختیار توسعه دهندگان و متخصصان DevOps قرار دهد.

در اینجا برخی از تلاش ها برای تقویت این اکوسیستم ارائه شده است:

  • رجیستری کانتینر
  • زمان بندی و هماهنگی
  • ابزارهای مدیریت خوشه
  • ابزارهای نظارت

کانتینر ها

کانتینرها روشی مدرن برای پیاده سازی آسان برنامه ها هستند. NVIDIA تمام کانتینرهای یادگیری عمیق و HPC را توسط NVIDIA NGC ارائه می دهد. این کانتینر ها توسط NVIDIA مورد آزمایش ، نگهداری و بهینه سازی قرار گرفته اند. NGC همچنین راهی برای کانتینر های شخص ثالث میزبان ارائه می دهد. سازمان ها همچنین می توانند مخازن کانتینر خصوصی را انتخاب کنند.

زمان بندی و هماهنگی

زمان بندی و هماهنگی از دیگر جنبه های مهم مدیریت و عملیات مرکز داده است. Kubernetes یک سیستم هماهنگی کانتینر مدرن و متداول برای خودکار سازی برنامه ها ، مقیاس گذاری، و مدیریت می باشد. Kubernetes در GPU های NVIDIA ، پلتفرم هماهنگی کانتینر استاندارد صنعتی را با قابلیت های شتاب GPU توسعه می دهد. Kubernetes پشتیبانی از پیشرفته ترین برنامه ریزی منابع NVIDIA GPU را ارائه می دهد.

ابزارهای مدیریت خوشه

ابزارهای اصلی مدیریت خوشه استاندارد از GPU های NVIDIA پشتیبانی می کنند. برخی از نمونه ها شاملBright Cluster  ، Ganglia ، StackIQ و Altair PBS Works هستند.

ابزارهای نظارت

NVIDIA همچنین مجموعه ای از ابزارها به نام DCGM را برای مدیریت و نظارت بر GPU ها در محیط های خوشه ای ارائه می دهد. NVIDIA همچنین یک رابط مبتنی بر API را برای نظارت بر پردازنده های گرافیکی توسط API های NVML در معرض نمایش قرار می دهد. با کمک این ابزارها، تیم تیم مرکز داده ops می تواند به طور مداوم، پایش سلامت، تشخیص همه جانبه، سیستم هشدار، و سیاست های حاکمیتی شامل مدیریت انرژی و زمان را انجام دهد. این ابزارها می توانند بصورت مستقل یا با هر مجموعه ابزار استاندارد صنعتی مورد استفاده قرار گیرند. همچنین می توانید ابزارهای خود را با استفاده از عملیات NVML API بسازید.

اکوسیستم CUDA و برنامه های سرعت یافته با GPU

پس از انتشار CUDA در سال ۲۰۰۶، توسعه دهندگان، بسیاری از برنامه ها را به CUDA منتقل کردند.

اولین گروه از توسعه دهندگان که شروع به انتقال برنامه ها کردند ، انجمن های علمی بودند. این انجمن، بسیاری از برنامه های استاندارد و همچنین کد خانگی را منتقل کرد. برنامه های داری موازی سازی ذاتی، مانند پردازش تصویر و ویدئو، یکی از اولین موارد استفاده ای است که به CUDA منتقل شده است.

یادگیری عمیق، نمونه دیگری بود که در آن موازی سازی سنگین، به تسریع برنامه ها کمک کرد. تقریبا امروزه هر چارچوب یادگیری عمیق از محاسبات CUDA / GPU برای تسریع آموزش و استنتاج یادگیری عمیق استفاده می کند.

NVIDIA یک کاتالوگ برای فهرست تمام برنامه های سرعت یافته با GPU بوجود آورده است. این فهرست، تنها زیر مجموعه برنامه هایی است که توسط محاسبات GPU تسریع شده است. بسیاری از برنامه ها، خصوصی هستند و آن ها را در این لیست قرار نمی دهیم.

GPU در همه جا

پذیرش گسترده CUDA به توسعه دهنده ای احتیاج دارد که برای توسعه کد CUDA و کاربرد های  port، به یک GPU نیاز داشته باشد. سال ها پیش، NVIDIA تصمیم گرفت که هر GPU طراحی شده در NVIDIA از معماری CUDA پشتیبانی کند:

  • GPU های GeForce برای بازی و نوت بوک
  • GPU های Quadro برای تجسم حرفه ای
  • GPU های مرکز داده
  • Tegra برای SoC های تعبیه شده (توکار)

یک معماری محاسباتی واحد، در تمام خطوط تولید با سازگاری برگشتی CUDA این پلتفرم را به انتخاب توسعه دهنده تبدیل می کند. شما می توانید در لپ تاپ ها و رایانه های شخصی ، ایستگاه های کاری (کارگاه ها) ، سرورها و دستگاه های تعبیه شده، به GPU دسترسی داشته باشید و کد CUDA یکسان را در همه جا اجرا کنید. هر ارائه دهنده خدمات ابری از GPU های پشتیبانی شده با CUDA پشتیبانی می کند.

خلاصه

NVIDIA متعهد به پشتیبانی گسترده و ارزشمند از اکوسیستم برای توسعه دهندگان CUDA است. تیم بزرگی از مهندسان به طور مداوم در تلاش هستند تا مطمئن شوند که شما می توانید تمام ابزارهای مناسب را بدست آورید. این چیزی است که توسعه دهندگان CUDA می توانند از آن بهره مند شوند:

  • توسعه کد CUDA با پشتیبانی زبان برنامه نویسی قوی و ابزارهای محیط توسعه مانند اشکال زدا ، گزارش گیر و غیره.
  • سرعت بخشیدن به برنامه توسط کتابخانه های تنظیم شده ، آزمایش شده و چکاب شده.
  • سهولت استفاده از کانتینر های تنظیم شده و آزمایش شده و در دسترس بودن آن ها در NVIDIA NGC
  • ابزارهایی برای پشتیبانی از مقیاس گذاری برنامه ها در یک محیط خوشه ای.
  • طیف وسیعی از برنامه ها با استفاده از CUDA تسریع شدند.

بیشتر بخوانید :

درباره‌ی امیر اقتدائی

همچنین ببینید

تشخیص اشیا با داده های اندک برای کاربرد سنجش از راه دور

تشخیص اشیا با داده های اندک برای کاربرد سنجش از راه دور

تشخیص اشیا یک مساله قدیمی در زمینه سنجش از راه دور و بینایی رایانه ای …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *