پرش به مطلب اصلی
امیرحسین رازلیقی
امیرحسین رازلیقی
کارشناسی ۱۳۹۹

Open to Open Source

امروز میخوام یه‌کمی از تجربۀ شروع کارم توی دنیای open source بنویسیم. توی عید، با یک کتاب‌خونه آشنا شدم که یه تیم کوچیکی چندماه پیش شروع کرده بودن به اسم MLX این کتاب‌خونه یک چیزی شبیه PyTorch عه ولی بصورت خاص طراحی شده که با GPU های Apple Silicon کار کنه. بعد چندماه، اپل این تیمو کامل استخدام می‌کنه توی تیم تحقیقاتش و این پروژه میشه یکی از پروژه‌های اپن سورس تازۀ اپل. 

منم همین‌جوری داشتم با این کتاب‌خونه یه‌کمی کار می‌کردم که ببینم چه فرقایی با پایتورچ داره، چقدر بهینه‌تره و این صحبتا. به یه باگ خوردم (بدیهتاً چون هنوز stable release نیست و روی ورژن 0.9.0ش هست، باگ کاملا محتمله👀). رفتم روی ریپوش یه ایشو باز کردم. افراد اون تیمه اومدن کامنت گذاشتن و ازم سوال کردن و بعد هم تأیید کردن ایشو رو. گفتم حالا که تا اینجا اومدیم، بذار ببینم می‌تونم خودم یه PR بزنم و حلش کنم یا نه. 

خلاصه که پروژه رو clone کردم و شروع کردم به خوندن کدهای cpp. کاری که باید می‌کردم نسبتاً ساده بود، ولی قسمت سخت ماجرا، فهمیدن ساختار کلی و کارکرد بخش‌های مختلف و پیاده‌سازی اون پروژۀ بزرگ بود. اونم برای منی که همیشه cpp کد زدن برام عذابه!

خلاصه که بعد از تلاش‌های بسیار و نوشتن تعدادی تست، PR رو ثبت کردم. نکتۀ جذابش اینه که با فاصلۀ زمانی کمی، یکی از اعضای اون تیم (که research scientist توی اپله) اومد و کامنت گذاشت. سطح دقتش به جزئیات واقعا جذاب بود! مثلا یک بار یه جای کدم چنین چیزی بود:

If (x || y || z) {
Do something
}

و کامنت داد که «به نظرم جای x و y رو عوض کن. چون اتفاق افتادن y در فلان کیس‌ها محتمل‌تره و باعث میشه سرعت ساخت tensor کند نشه».

خلاصه که انگار یه منتور اختصاصی داری و بهت کمک می‌کنه کدهای اصولی‌تر و بهتری بزنی.

از اون موقع واقعاً جذب این کار شدم. البته که کتاب‌خونه‌اش ظرافت‌های خیلی زیادی داره که جذابش می‌کنه. مثلا، توی سیستم‌های apple silicon  چیزی به اسم to(device). که توی پایتورچ همش درگیرشیم نیاز نداریم! چرا؟ چون یه‌چیزی هست به اسم unified memory که همۀ رم شما، مشترکا توسط cpu و gpu استفاده میشه. یعنی اگه رم شما ۱۶ گیگه، انگار ۱۶ گیگ رم gpu هم داری! و هر تنسوری توسط mlx ساخته میشه، هم در دسترس cpu عه و هم gpu. درنهایت، پیشنهاد می‌کنم توی وقتای آزادتون، یکمی open source رو بگردین و investigate کنین :) خیلی چیزای جذابی برای یادگیری و ارائه دادن داره! و البته حواس‌تون باشه، چون به‌شدت اعتیاد آوره 👀😁🔥