TECH STASH – Telegram
TECH STASH
212 subscribers
115 photos
5 videos
15 files
254 links
اینجا هر چی رو که یاد میگیرم، به اشتراک میزارم...
هوش مصنوعی، لینوکس، اوپن سورس، برنامه نویسی و...

Admin: @D3F4U1T_ARS
Download Telegram
درود به تمامی دوستان کانال TECH STASH.

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

سالی با جیب های پر از پول و ذهنی خالی از ناراحتی.

ارادتمند شما.
− ارشیا (A.R.S)
4👍1
TECH STASH
درود به تمامی دوستان کانال TECH STASH. خواستم که سال نو رو خدمت شما پیشاپیش تبریک بگم. امیدوارم که سالی پر از موفقیت، سلامتی، آرامش و خوشحالی رو داشته باشید و در تمامی عرصه های علمی پیشرفت چشمگیری داشته باشید. سالی با جیب های پر از پول و ذهنی خالی از ناراحتی.…
چشم انداز کانال تو سال بعدی به این صورت هست.

1. میخوام این کانال تبدیل به مرجع و جایی پر از منابع مفید برای حوزه یادگیری ماشین باشه. و میخوام که دوستانی که میخوان به منابع با کیفیت دسترسی داشته باشن بتونن از این کانال برای پیدا کردن همچنین منابعی استفاده کنن.

2. مطالب و توضیحات تخصصی بیشتر بشه. همونطور که میدونید این فیلد خیلی سنگینی هست و بنده همچنان خیلی فاصله دارم تا تسلط نسبتا خوبی داشته باشم. ولی تو سال آینده میخوام که مطالب رو تخصصی تر و عمیق تر کنم.

3. کانال رو فقط به مطالب یادگیری ماشین/عمیق محدود نمیکنم. به عنوان کاربر لینوکس و دوستدار نرم افزار آزاد و همچنین کسی که به مهندسی نرم افزار نیز خیلی علاقه داره قطعا مطالب مرتبطی راجب این موضوعات خواهم گذاشت، هرچند که تمرکز بنده در حال حاضر در حوزه یادگیری ماشین/عمیق هست.

ممنونم که تا الان همراه من بودید.
👍32
Happy nowruz from Tux
6
پردازش سریع دیتا ها (قسمت اول):

چند وقت پیش داشتم روی پردازش یکسری دیتا ها کار میکردم.
کاری که خیلی فرمول و پردازش های ریاضی داشت.
اولین پیاده سازی از الگوریتم نزدیک چند تا for loop داشت.
که پردازشش تقریبا 40 ثانیه طول کشید.

ولی خب طبیعیه. واسه شروع شما بهتره که یه چیزی رو غیر بهینه بنویسید بعدش بهینه کنید. یعنی به صورت شفاف و ساده بنویسید که قابل فهم و به سادگی قابل تایید باشه.

در غیر اینصورت قضیه premature optimization (بهینه سازی زودرس) رخ میده که میبینید هیچ معیاری برای مقایسه و تایید روش کارتون دارید.
میشه ضرب المثل "خشت اول گر نهد معمار کج تا ثریا می‌رود دیوار کج".

بعدش گفتم که برم و از broadcasting استفاده کنم.
و کل عملیات ها رو بدون for loop و تنها با پردازش ماتریس ها انجام بدم.

اینکار پیچیدگی زیادی داشت ولی ارزشش رو داشت.
سرعت خیلی خیلی زیاد شد.
اون 40 ثانیه که گفته بودم تبدیل به 0.5 ثانیه شد.

وقتی که میتونید فرمول های ریاضی رو به صورت broadcast شده پیاده کنید اون موقع میتونید بگید که به اندازه خوبی numpy بلدید.

و اما گفتم که چی میشه اگر با numba برم و compile کنم.
و اونجا دیدم که numba محدودیت هایی داره.
یه سری اوپراتور ها و عملیات های numpy ساپورت نمیشن و خلاصه دردسر های زیادی که باهاشون رو به رو شدم.
دوم اینکه همه قابلیت های پایتون ساپورت نمیشن، که نیازم نیست از اونجایی که زبان به شدت بزرگی هست.

پیاده سازی for loop رو تونستم کامپایل کنم و نزدیک 12 ثانیه شد.
جالبیش این بود که با قابلیت parallel زمان پردازش نزدیک 50 ثانیه شد.
یعنی حتی کند تر از حالت پایه.

ولی نسخه broadcasting اش اصلا کامپایل نمیشد.
به خاطر به کارگیری یکسری عملیات های numpy که توسط numba ساپورت نمیشه.

و اما خواستم یه حرکت نهایی بزنم و ببرم روی PyTorch.
خیلی تغییرات نیاز نداشت از اونجایی که تمام عملیات هایی که روی numpy استفاده میکردم توسط pytorch پشتیبانی میشن.

و در نهایت روی GPU بردم و سرعت از 0.5 ثانیه به 50 میلی ثانیه رسید.
Wow, just wow.

و میدونم که آپشن های دیگه هم هستن.
مثل JAX, cupy, Tensorflow.
ولی خب تا همینجا کافی هست.

احتمالا از JAX تو آینده استفاده کنم.
چون چیز جالبی به نظر میاد.
👍1
یه ایونت هم چند وقت پیش دیدم ولی فراموش کردم که تو کانال اعلام کنم.

Join the 5-Day Gen AI Intensive Course with Google

راجب Generative AI هست و شاید واستون جالب باشه.
شروعش از 31 March هست. تقریبا ۲ روز دیگه و به مدت ۵ روزه.

https://rsvp.withgoogle.com/events/google-generative-ai-intensive_2025q1
TECH STASH
یه ایونت هم چند وقت پیش دیدم ولی فراموش کردم که تو کانال اعلام کنم. Join the 5-Day Gen AI Intensive Course with Google راجب Generative AI هست و شاید واستون جالب باشه. شروعش از 31 March هست. تقریبا ۲ روز دیگه و به مدت ۵ روزه. https://rsvp.withgoogle.com/events/google…
این ایونت اونقدرا هم که فکر میکردم خفن نبود.
البته که برای کسایی که دوست دارن از API گوگل استفاده کنن و برنامه هایی بر پایه Generative AI درست کنن خوبه.

ولی خب خود داستان مدل سازی و train کردن این LLM ها فرق داره.

طبق اولویت هام تصمیم گرفتم که ادامه ندم و بزارم واسه دوره بعدی. چون این دومین دوره هست که این course برگزار میشه.
High Performance Python: Practical Performant Programming for Humans 2nd Edition

کتاب پایتون سریع

بحث و جدال اینکه چه زبانی سریع هست رو بزاریم کنار.
پایتون کلی تجهیزات، لایبرری ها برای پردازش دیتا و سریع تر کردن این پروسه داره.

این کتاب هر چیزی که نیاز دارید راجب اینکه کد سریع برای پردازش دیتای عظیم با پایتون بنویسید رو با خودش داره و میتونم بگم یکی از کتاب های فوق العاده برای افرادی که تو حوزه Data Science کار میکنن هست.

پروفایلر ها، شناسایی گلوگاه ها (bottleneck)، حتی خود data structure های پایتون و تفاوت سرعتشون، numpy و pandas و حتی کامپایل کردن به سی مثل numba, cython و بقیه JIT کامپایلر ها مثل PyPy و حتی FFI ها برای اتصال زبان های دیگه به پایتون و اونقدر چیزایه دیگه که جا نمیشه.
نه فقط راجب پردازش، راجب مصرف بهینه RAM هم صحبت میشه که تاپیک خیلی مهمی هست.

در ضمن خیلی کاربردی هم جلو میره و در آخر کتاب مثال ها و تجربه هایی از بهینه سازی ها تو شرکت ها و پروژه های بزرگ میاره که خیلی بینش خوبی به برنامه نویس میده.

کلا کتابیه که حتما خودم سر فرصت مناسب میخونم.
👍3
High_Performance_Python_Practical_Performant_Programming_for_Humans.pdf
10.6 MB
High Performance Python: Practical Performant Programming for Humans 2nd Edition
🔥2👍1
نکات راجب data pipeline تو PyTorch

ما domain library های مختلف داریم تو PyTorch.
برای سیگنال و صدا: torchaudio
برای تصویر: torchvision
برای متن هم torchtext

هر کدوم هم یه سری ویژگی ها دارن ولی همشون یه چیز مشترک دارن.
اونم transforms هست.

اگر داخل transforms که تو torchvision هست یه نگاه بندازید.

اومده و برای هر تغییری روی دیتاش کلاس تعریف کرده. و توابع خاص init, call و repr رو تعریف کرده.
و در نهایت یه کلاس Compose ساخته که عملا دیزاین پترن composite رو روی اینا پیاده میکنه.

اگر شما دیتایی دارید که خاص هست و کسی واسش لایبرری یا transform ای نساخته.
میتونید خودتون راحت بسازید. و حتی لایبرری واسه حوزه خودتون درست کنید.
یادتون باشه نصف machine learning خط پردازش دیتاتون هست. باید حتما اینا رو بدونید.

عنصر دیگه ای که وجود داره کلاس Dataset هست که تو دوره ZTM PyTorch بهش پرداخته شده و تو کتاب آنلاینش هم هست.

این کلاس توسط DataLoader ها کپی میشه سر همین نباید از خود دیتا چیزی داشته باشه و فقط مکانیزم بارگزاری دیتا از روی دیسک رو داشته باشه.
در غیر اینصورت حتی اگر بتونید این دیتا عظیم رو هم کامل روی RAM لود کنید با کپی کردن این دیتا توسط worker ها حافظه RAM اتون کامل پر میشه، به معنای ساده memory leak.

چند وقت پیش یکی از دوستانم راهکار جالبی پیشنهاد کردن که به صورت زیر هست:

اگر دیتای خام ماتریسی دارید. اول به صورت فایل .npy ذخیره کنید و بعد با np.memmap میتونید بدون بارگزاری روی RAM دیتا رو بخونید.
به این کار میگن memory mapping.
خود پایتون هم ساپورت برای چنین کاری داره. با ماژول mmap.
راجب save کردن هم اینجا توضیحات نوشته شده.

روش های خلاقانه دیگه هم وجود داره قطعا.

راجب apache arrow هم شنیدم که توسط لایبرری huggingface datasets استفاده میشه و خیلی هم قوی هست و memory mapping هم انجام میده ولی خودم ازش فعلا استفاده نکردم.
🔥1
TECH STASH
اگر داخل transforms که تو torchvision هست یه نگاه بندازید.
جالبه که هیچ abstract class ای استفاده نکردن تو کلاس هاشون.
و همینطور یکسری از کلاس هاشون هم از nn.Module استفاده کردن.
یکی از داغ ترین دوره های Stanford برای یادگیری عمیق دوره Transformers United اش هست که جزو دوره های معروف این دانشگاه محسوب میشه.

تو این دوره خیلی عمیق راجب Transformers ها صحبت میشه.
از بلوک های اساسی برای LLM که دنیای هوش مصنوعی رو دگرگون کرد.

Stanford's CS25: Transformers United V5

پلی لیست یوتیوبش هم اینجا هست.

Stanford CS25 - Transformers United YouTube Playlist
اریک، توسعه دهنده آرکو لینوکس داخل این ویدئو پایان پروژه آرکو رو اعلام کرده.


صد حیف و صد حیف می‌تونم بگم، آرکو یکی از توزیع‌های خوب آرچ بیس بود برای مقاصد آموزشی و اینکه ابزارهای خوبی هم داشت.


اریک شخصاً کمک‌هایی رو هم به ما در مسیر توسعه پارچ کرده بود.


امیدوارم هر مسیری رو دنبال می‌کنه، موفق باشه.


@SohrabContents
😐1
پروفایلر ها:

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

تو این پست به چند تاشون اشاره میکنم:
1. Memray
پروفایلر memory که بهتون اجازه میده مصرف RAM و memory leak برنامه هاتون رو پیدا کنید. ساپورت jupyter هم داره که خیلی خوبه و حتما پیشنهاد میکنم بررسی کنید.

2. Scalene
پروفایلر CPU, Memory و GPU که یکی از پروفایلر های محبوبم هست. ساپورت GPU اش متاسفانه اونقدر خوب نیست و بهتره از خود پروفایلر های مخصوص GPU مثلا Nsight Systems تو کارت گرافیک های انویدیا استفاده کنید. ساپورت jupyter هم داره.

3. Pystack
این پروفایلر برای رفع خطا استفاده میشه و خیلی خوبه وقتی که برنامه هنگ میکنه و نمیتونید متوجه بشید مشکل کجاست. مثل pstack میمونه ولی برای پایتون. بهتون اجازه میده که stack trace برنامه پایتونی در حال اجرا رو ببینید یا حتی coredump اش رو بررسی کنید. تنها ساپورت لینوکس داره.

4. py-spy
این یه sampling پروفایلر هست. خیلی واسه کد های تو production مفید هست از اونجایی که نیاز نیست کد رو تغییر بدید یا حتی برنامه رو دوباره اجرا کنید. به صورت یه پروسس جدا اجرا میشه. این ساپورت ویندوز هم داره و بنده برای کار های دیباگینگ جای Pystack ازش استفاده کرده بودم.

اتفاقا یادم میاد که دو تای اولی رو قبلا معرفی کرده بودم. ;)

راجب Nsight Systems یه discussion جالبی تو PyTorch دیدم که ازش استفاده میکرد و خواستم به اشتراک بگذارم. از این پروفایلر استفاده نکردم تو مسئله واقعی ولی قطعا ابزار خیلی قوی هست و شاید نیازتون بشه.

و در نهایت. خود Nsight Systems جزو مجموعه CUDA Toolkit هست که اینجا میتونید نصب کنید.
و تو arch هم بسته cuda-tools شامل Nsight Systems هم میشه و همینطور ابزار های دیگه.

ولی حجمش زیاده. احتمالا تو مخزن AUR بسته مجزا داره.
TECH STASH
همینطور سازنده لایبرری mlxtend هست که یک سری کار های پیچیده و تکراری رو ساده میکنه. https://rasbt.github.io/mlxtend/ اگر torchmetrics رو بشناسید میدونید که توسط lightning.ai داره توسعه داده میشه. (اگر هم نه، بدونید که یه کولکشن از متریک ها برای ارزیابی مدل…
یادم میاد torchmetrics رو هم معرفی کرده بودم.
در واقع torchmetrics رو برای lightning ساختن. و integration خیلی خوبی داره.
البته که میتونید هر جای دیگه هم استفاده کنید.

تو لینک آموزشی که گذاشتم torchmetrics کاور میشه. و خیلی بیشتر.
%autoreload

من خیلی دنبال همچنین قابلیتی تو Jupyter بودم.
قبلش با importlib انجام میدادم.

import importlib

importlib.reload(module)


ولی روی توابع و چیزایی که به این صورت ایمپورت میشن کار نمیکنه.

from module import someclass, func, var


اینکه ماژول لود شده رو دوباره ریلود کنی تا تغییراتی که توش صورت گرفته اعمال بشه و بتونید بدون restart کردن Jupyter ازش استفاده کنید.

IPython extensions - autoreload

این خیلی کارم رو ساده تر میکنه.

البته داکیومنتش رو خوب بخونین. یه سری ریزه کاری هایی داره.
مثلا recursive import ها باید به جای
from module
از
import module
استفاده کنید و خلاصه یه سری چیزایه دیگه.
Mathematics for Machine Learning

کتاب ریاضیات ماشین لرنینگ.

نویسندگان:
Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong.
(Published by Cambridge University Press.)

این کتاب خیلی مطرح هست تو زمینه ریاضیات Machine Learning.

فهرست مطالب این کتاب:

Part I: Mathematical Foundations

1. Introduction and Motivation
2. Linear Algebra
3. Analytic Geometry
4. Matrix Decompositions
5. Vector Calculus
6. Probability and Distribution
7. Continuous Optimization

Part II: Central Machine Learning Problems

8. When Models Meet Data
9. Linear Regression
10. Dimensionality Reduction with Principal Component Analysis
11. Density Estimation with Gaussian Mixture Models
12. Classification with Support Vector Machines

رایگان به صورت PDF در تو این لینک در دسترستون هست.
1
mml-book.pdf
16.8 MB
Mathematics for Machine Learning

By Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong.
(Published by Cambridge University Press.)
1
cuML

یه پروژه خیلی جالبی RAPIDS داده بیرون به اسم cuML که الگوریتم های Machine Learning لایبرری scikit-learn رو روی CUDA میبره و پردازش رو خیلی سریع تر میکنه. انویدیا هم یه بلاگ پست راجبش گذاشته.

مخزن گیت پروژه:
https://github.com/rapidsai/cuml

داکیومنت پروژه:
https://docs.rapids.ai/api/cuml/stable/

اتفاقا RAPIDS پروژه های جالب دیگه ای هم داره. مثل cuDF عملا pandas هست روی GPU. میتونه برای workflow ها و پردازش های سنگین خیلی مناسب باشه.