داود درستکار
داود درستکار
خواندن ۲ دقیقه·۳ سال پیش

راه‌حلی ساده‌تر برای برنامه‌نویسی GPU

شرکت OpenAI یک شرکت هوش مصنوعی است که در زمینه تحقیقات و توسعه هوش مصنوعی و به خصوص هوش مصنوعی عمومی (Artificial General Intelligence) پیشرو محسوب می‌شود، به تازگی نسخه اول زبان برنامه‌نویسی Triton را منتشر کرده است. تریتون یک پروژه متن-باز است که این قابلیت را فراهم می‌کند تا برنامه‌های یادگیری عمیق (Deep learning) را بدون نیاز به دانستن پیچیدگی‌‌های برنامه‌نویسی GPU بنویسند. هرچند که OpenAI آن را زبان برنامه‌نویسی می‌نامد اما شاید بهتر باشد بگوییم فریمورک تریتون.

تریتون ۱.۰ بر پایه پایتون (۳.۶ و بالاتر) کار می‌کند. برنامه‌نویس بایستی کد خود را با پایتون و با استفاده از کتابخانه‌های تریتون بنویسد، سپس کد او به صورت JIT یا Just-In-Time برای اجرا در GPU کامپایل می‌شود. روش کامپایل JIT اجازه می‌دهد تا برنامه در حین اجرا کامپایل شود. این کار کمک می‌کند تا برنامه بتواند در حین اجرا بهینه‌سازی شود. از طرفی سرعت این روش بیشتر از زبان‌های برنامه نویسی Interpreter است. جاوا از این سیستم کامپایل استفاده می‌کند. البته با وجود اینکه کاربر کد خود را با پایتون می‌نویسد اما هسته خود تریتون، عموما با ++C نوشته شده و کامپایلر معروف LLVM را برای ارتباط با GPU استفاده می‌کند.

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

کتابخانه‌های تریتون مجموعه‌ای از ابزارهای اولیه را در اختیار قرار می‌دهند که از این نظر یادآور NumPy است. برای مثال انواعی از عملیات‌های ماتریسی یا توابعی که در کاهش اندازه آرایه‌ها استفاده می‌شود.  کافیست تا در ابتدای کد پایتون، آن را import کرده و عبارت triton.jit@ را اضافه کنید.


مثال‌های عملی ساده تریتون شامل هسته جمع برداری و عملیات fused softmax است. مورد دوم به ادعای OpenAI با تریتون چندین برابر سریعتر از softmax با PyTorch برای عملیات‌هایی که صرفا بر روی حافظه GPU انجام می‌شود، بوده است.

چیز دیگری که خیلی توجه را جلب می‌کند این است که OpenAI می‌گوید کد تریتون در اکثر موارد با کدی که توسط یک متخصص CUDA نوشته شده برابری می‌کند؛ با استفاده از تریتون در کمتر از ۲۵ خط کد می‌توان کد ضرب ماتریسی FP16 را طوری نوشت که کارایی یکسانی با cuBLAS -کتابخانه جبر خطی CUDA- داشته باشد (کاری که اکثر برنامه‌نویسان GPU قادر به انجامش نیستند).


البته تریتون یک پروژه بسیار جوان است و بخش‌های زیادی از آن کامل نشده است. Triton در حال حاضر فقط برای لینوکس در دسترس است و مستندات آن هم هنوز خیلی کم است. این زبان برنامه‌نویسی با پردازنده‌های NVIDIA کاملا سازگار است اما پشتیبانی از CPU و پردازنده‌های شرکت AMD همچنان در مراحل ابتدایی است.

منابع:

OpenAI

Infoworld

Github

gpumachinelearningdeeplearningai
مهندس مکاترونیکی که به هوش مصنوعی، برنامه نویسی و سخت افزار علاقه منده!
شاید از این پست‌ها خوشتان بیاید