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 هم انجام میده ولی خودم ازش فعلا استفاده نکردم.
ما 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 استفاده کردن.
و همینطور یکسری از کلاس هاشون هم از nn.Module استفاده کردن.
یکی از داغ ترین دوره های Stanford برای یادگیری عمیق دوره Transformers United اش هست که جزو دوره های معروف این دانشگاه محسوب میشه.
تو این دوره خیلی عمیق راجب Transformers ها صحبت میشه.
از بلوک های اساسی برای LLM که دنیای هوش مصنوعی رو دگرگون کرد.
Stanford's CS25: Transformers United V5
پلی لیست یوتیوبش هم اینجا هست.
Stanford CS25 - Transformers United YouTube Playlist
تو این دوره خیلی عمیق راجب Transformers ها صحبت میشه.
از بلوک های اساسی برای LLM که دنیای هوش مصنوعی رو دگرگون کرد.
Stanford's CS25: Transformers United V5
پلی لیست یوتیوبش هم اینجا هست.
Stanford CS25 - Transformers United YouTube Playlist
CS25
CS25: Transformers United V5
CS25 has become one of Stanford's hottest and most seminar courses, featuring top researchers at the forefront of Transformers research such as Geoffrey Hinton, Ashish Vaswani, and Andrej Karpathy. Our class has an incredibly popular reception within and…
Forwarded from محتوای آزاد سهراب
اریک، توسعه دهنده آرکو لینوکس داخل این ویدئو پایان پروژه آرکو رو اعلام کرده.
صد حیف و صد حیف میتونم بگم، آرکو یکی از توزیعهای خوب آرچ بیس بود برای مقاصد آموزشی و اینکه ابزارهای خوبی هم داشت.
اریک شخصاً کمکهایی رو هم به ما در مسیر توسعه پارچ کرده بود.
امیدوارم هر مسیری رو دنبال میکنه، موفق باشه.
@SohrabContents
صد حیف و صد حیف میتونم بگم، آرکو یکی از توزیعهای خوب آرچ بیس بود برای مقاصد آموزشی و اینکه ابزارهای خوبی هم داشت.
اریک شخصاً کمکهایی رو هم به ما در مسیر توسعه پارچ کرده بود.
امیدوارم هر مسیری رو دنبال میکنه، موفق باشه.
@SohrabContents
YouTube
Arco Final : 4468 Farewell to ArcoLinux and all its projects and farewell to a community
https://www.arcolinux.info/a-farewell-to-the-arcolinux-university-we-will-update-this-article-during-the-transition-to-arch/
thanks for the many kind words
thank you from Erik
thank you from the team
==========Vast Knowledge Sharing Websites ==========…
thanks for the many kind words
thank you from Erik
thank you from the team
==========Vast Knowledge Sharing Websites ==========…
😐1
محتوای آزاد سهراب
اریک، توسعه دهنده آرکو لینوکس داخل این ویدئو پایان پروژه آرکو رو اعلام کرده. صد حیف و صد حیف میتونم بگم، آرکو یکی از توزیعهای خوب آرچ بیس بود برای مقاصد آموزشی و اینکه ابزارهای خوبی هم داشت. اریک شخصاً کمکهایی رو هم به ما در مسیر توسعه پارچ کرده بود.…
اریک. توسعه دهنده Arco Linux جزو کسایی بود که کلی آموزش راجب لینوکس و بخصوص Arch میگذاشت.
پروفایلر ها:
ابزار هایی هستند که گزارشاتی از نحوه اجرای کد ما نشون میدن و به رفع خطا و بهینه سازی کد ما کمک میکنند.
تو این پست به چند تاشون اشاره میکنم:
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 بسته مجزا داره.
ابزار هایی هستند که گزارشاتی از نحوه اجرای کد ما نشون میدن و به رفع خطا و بهینه سازی کد ما کمک میکنند.
تو این پست به چند تاشون اشاره میکنم:
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 بسته مجزا داره.
دوستمون anthonywritescode یه ویدیو یوتیوب گذاشته راجب اینکه چطور میاد و یه باگ تو کدبیس سی krb5 که اینقدر عمیق هست رو پیدا میکنه.
خیلی ویدیو جالب و باحالی هست.
خیلی ویدیو جالب و باحالی هست.
YouTube
using memray to debug (and fix) a memory leak in krb5! (advanced) anthony explains #567
today I show how I utilized memray to both find, debug, and ultimately fix a memory leak in krb5 -- sadly this was not the leak I was looking for though!
playlist: https://www.youtube.com/playlist?list=PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY
==========
twitch:…
playlist: https://www.youtube.com/playlist?list=PLWBKAf81pmOaP9naRiNAqug6EBnkPakvY
==========
twitch:…
اگر از نوشتن training loop و کلی boilerplate تو کد های PyTorch اتون خسته شدید.
حتما با PyTorch Lightning کار کنید.
اگر هم نه. باز هم کار کنید.
اونقدر خوبه که نمیتونم براتون تعریف کنم.
PyTorch Lightning Docs
PyTorch Lightning GitHub
همینطور Aladdin Persson آموزش خیلی خوب و جامعی راجبش ضبط کرده که میتونید ببینید.
حتما با PyTorch Lightning کار کنید.
اگر هم نه. باز هم کار کنید.
اونقدر خوبه که نمیتونم براتون تعریف کنم.
PyTorch Lightning Docs
PyTorch Lightning GitHub
همینطور Aladdin Persson آموزش خیلی خوب و جامعی راجبش ضبط کرده که میتونید ببینید.
GitHub
GitHub - Lightning-AI/pytorch-lightning: Pretrain, finetune ANY AI model of ANY size on 1 or 10,000+ GPUs with zero code changes.
Pretrain, finetune ANY AI model of ANY size on 1 or 10,000+ GPUs with zero code changes. - Lightning-AI/pytorch-lightning
TECH STASH
همینطور سازنده لایبرری mlxtend هست که یک سری کار های پیچیده و تکراری رو ساده میکنه. https://rasbt.github.io/mlxtend/ اگر torchmetrics رو بشناسید میدونید که توسط lightning.ai داره توسعه داده میشه. (اگر هم نه، بدونید که یه کولکشن از متریک ها برای ارزیابی مدل…
یادم میاد torchmetrics رو هم معرفی کرده بودم.
در واقع torchmetrics رو برای lightning ساختن. و integration خیلی خوبی داره.
البته که میتونید هر جای دیگه هم استفاده کنید.
تو لینک آموزشی که گذاشتم torchmetrics کاور میشه. و خیلی بیشتر.
در واقع torchmetrics رو برای lightning ساختن. و integration خیلی خوبی داره.
البته که میتونید هر جای دیگه هم استفاده کنید.
تو لینک آموزشی که گذاشتم torchmetrics کاور میشه. و خیلی بیشتر.
%autoreload
من خیلی دنبال همچنین قابلیتی تو Jupyter بودم.
قبلش با importlib انجام میدادم.
ولی روی توابع و چیزایی که به این صورت ایمپورت میشن کار نمیکنه.
اینکه ماژول لود شده رو دوباره ریلود کنی تا تغییراتی که توش صورت گرفته اعمال بشه و بتونید بدون restart کردن Jupyter ازش استفاده کنید.
IPython extensions - autoreload
این خیلی کارم رو ساده تر میکنه.
البته داکیومنتش رو خوب بخونین. یه سری ریزه کاری هایی داره.
مثلا recursive import ها باید به جای
از
استفاده کنید و خلاصه یه سری چیزایه دیگه.
من خیلی دنبال همچنین قابلیتی تو 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 در تو این لینک در دسترستون هست.
کتاب ریاضیات ماشین لرنینگ.
نویسندگان:
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.)
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 ها و پردازش های سنگین خیلی مناسب باشه.
یه پروژه خیلی جالبی RAPIDS داده بیرون به اسم cuML که الگوریتم های Machine Learning لایبرری scikit-learn رو روی CUDA میبره و پردازش رو خیلی سریع تر میکنه. انویدیا هم یه بلاگ پست راجبش گذاشته.
مخزن گیت پروژه:
https://github.com/rapidsai/cuml
داکیومنت پروژه:
https://docs.rapids.ai/api/cuml/stable/
اتفاقا RAPIDS پروژه های جالب دیگه ای هم داره. مثل cuDF عملا pandas هست روی GPU. میتونه برای workflow ها و پردازش های سنگین خیلی مناسب باشه.
NVIDIA Technical Blog
NVIDIA cuML Brings Zero Code Change Acceleration to scikit-learn
Scikit-learn, the most widely used ML library, is popular for processing tabular data because of its simple API, diversity of algorithms, and compatibility with popular Python libraries such as pandas…
TECH STASH
cuML یه پروژه خیلی جالبی RAPIDS داده بیرون به اسم cuML که الگوریتم های Machine Learning لایبرری scikit-learn رو روی CUDA میبره و پردازش رو خیلی سریع تر میکنه. انویدیا هم یه بلاگ پست راجبش گذاشته. مخزن گیت پروژه: https://github.com/rapidsai/cuml داکیومنت…
cuML is only supported on Linux operating systems.
این لایبرری تنها روی سیستم های لینوکسی کار میکنه.
این لایبرری تنها روی سیستم های لینوکسی کار میکنه.
👌1
Low Level Learning
این یکی از کانال های YouTube محبوبم بود که آموزش های C و هر چیز مربوط به سخت افزار میزاشت.
https://www.youtube.com/@LowLevelTV
یه سری دوره های آموزشی با کیفیت داره داخل وبسایتش.
https://lowlevel.academy/courses
و یکسری دوره هاشو داخل downloadly پیدا کردم.
Low Level Academy - Zero2Hero C Programming
Low Level Academy - Fundamentals of ARM Assembly
Low Level Academy - Network Applications in C
Low Level Academy - Multi Threaded C Applications
اگر علاقه دارید به C و برنامه نویسی سطح پایین. حتما دوره هاشو ببینید.
چون کیفیت خوبی دارن.
این یکی از کانال های YouTube محبوبم بود که آموزش های C و هر چیز مربوط به سخت افزار میزاشت.
https://www.youtube.com/@LowLevelTV
یه سری دوره های آموزشی با کیفیت داره داخل وبسایتش.
https://lowlevel.academy/courses
و یکسری دوره هاشو داخل downloadly پیدا کردم.
Low Level Academy - Zero2Hero C Programming
Low Level Academy - Fundamentals of ARM Assembly
Low Level Academy - Network Applications in C
Low Level Academy - Multi Threaded C Applications
اگر علاقه دارید به C و برنامه نویسی سطح پایین. حتما دوره هاشو ببینید.
چون کیفیت خوبی دارن.
❤3👍1
دیروز یاد یه جمله ای از Primeagen افتادم. که میگفت.
"(تو دنیای طراحی الگوریتم) خیلی از مسائل تبدیل به مسائل گراف میشن."
حق میگفت. انگار خیلی از مسائل تبدیل به مسائل گراف میشن.
برای مثال. مسئله محاسبه گرادیان تو PyTorch هم مسئله گراف هست.
یعنی خود الگوریتم های Deep Learning هم از گراف برای بهینه سازی استفاده میکنن.
تمام عملیات هایی که بین دو tensor (که requires_grad=True براشون ست شده) انجام میشن تبدیل به یه node تو گراف محاسباتی میشن.
و وقتی که میخوایم که backward انجام بدیم. میاد و گرادیان هارو با طی کردن گراف محاسباتی از انتها به ابتدا (که برگ یا leaf ها هستن) محاسبه میکنه.
که این کارو autograd تو PyTorch انجام میده که خیلی سیستم جالبی هست. و به همین دلیل خیلی ماژولار و منعطف هست و میتونید لایه های شبکه های عصبی رو خودتون از صفر پیاده کنید.
بزودی ویدیو هایی در این باره براتون میفرستم.
"(تو دنیای طراحی الگوریتم) خیلی از مسائل تبدیل به مسائل گراف میشن."
حق میگفت. انگار خیلی از مسائل تبدیل به مسائل گراف میشن.
برای مثال. مسئله محاسبه گرادیان تو PyTorch هم مسئله گراف هست.
یعنی خود الگوریتم های Deep Learning هم از گراف برای بهینه سازی استفاده میکنن.
تمام عملیات هایی که بین دو tensor (که requires_grad=True براشون ست شده) انجام میشن تبدیل به یه node تو گراف محاسباتی میشن.
و وقتی که میخوایم که backward انجام بدیم. میاد و گرادیان هارو با طی کردن گراف محاسباتی از انتها به ابتدا (که برگ یا leaf ها هستن) محاسبه میکنه.
که این کارو autograd تو PyTorch انجام میده که خیلی سیستم جالبی هست. و به همین دلیل خیلی ماژولار و منعطف هست و میتونید لایه های شبکه های عصبی رو خودتون از صفر پیاده کنید.
بزودی ویدیو هایی در این باره براتون میفرستم.
Autograd Part 1
Patrick Leober
یه آموزش کوتاه راجب PyTorch گذاشته.
سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه.
PyTorch Tutorial 03 - Gradient Calculation With Autograd
ویدیو سوم راجب این صحبت میکنه که autograd چطوری میاد و عملیات های بین tensor هارو track میکنه و backward چه کاری انجام میده.
PyTorch Tutorial 04 - Backpropagation - Theory With Example
اینجا هم متوجه میشید که با استفاده از Chain rule و گراف عملیاتی ضبط شده چطور میشه مشتق تابع کاهشی (loss function) رو برای تک تک tensor های مد نظر بدست آورد. مثال خیلی ساده ای هم آورده. مثالش linear regression سادست.
PyTorch Tutorial 05 - Gradient Descent with Autograd and Backpropagation
تو این ویدیو هم یه شبیه سازی از مسئله قبل (linear regression) با استفاده از numpy خالص انجام میشه. و بعدش پیاده سازی PyTorch اش نوشته میشه.
پلی لیست کامل آموزشش هم اینجا هست.
PyTorch Tutorial - Complete Beginner Course
ویدیو های دیگش هم شاید بعدا نگاه کنم ولی خب فعلا عجله ای نیست.
Patrick Leober
یه آموزش کوتاه راجب PyTorch گذاشته.
سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه.
PyTorch Tutorial 03 - Gradient Calculation With Autograd
ویدیو سوم راجب این صحبت میکنه که autograd چطوری میاد و عملیات های بین tensor هارو track میکنه و backward چه کاری انجام میده.
PyTorch Tutorial 04 - Backpropagation - Theory With Example
اینجا هم متوجه میشید که با استفاده از Chain rule و گراف عملیاتی ضبط شده چطور میشه مشتق تابع کاهشی (loss function) رو برای تک تک tensor های مد نظر بدست آورد. مثال خیلی ساده ای هم آورده. مثالش linear regression سادست.
PyTorch Tutorial 05 - Gradient Descent with Autograd and Backpropagation
تو این ویدیو هم یه شبیه سازی از مسئله قبل (linear regression) با استفاده از numpy خالص انجام میشه. و بعدش پیاده سازی PyTorch اش نوشته میشه.
پلی لیست کامل آموزشش هم اینجا هست.
PyTorch Tutorial - Complete Beginner Course
ویدیو های دیگش هم شاید بعدا نگاه کنم ولی خب فعلا عجله ای نیست.
YouTube
PyTorch Tutorial 03 - Gradient Calculation With Autograd
New Tutorial series about Deep Learning with PyTorch!
⭐ Check out Tabnine, the FREE AI-powered code completion tool I use to help me code faster: https://www.tabnine.com/?utm_source=youtube.com&utm_campaign=PythonEngineer *
In this part we learn how to…
⭐ Check out Tabnine, the FREE AI-powered code completion tool I use to help me code faster: https://www.tabnine.com/?utm_source=youtube.com&utm_campaign=PythonEngineer *
In this part we learn how to…
TECH STASH
Autograd Part 1 Patrick Leober یه آموزش کوتاه راجب PyTorch گذاشته. سه تا ویدیو پارت ۳، ۴ و ۵ اش خیلی خوب توضیح میدن که چطور autograd PyTorch کار میکنه. PyTorch Tutorial 03 - Gradient Calculation With Autograd ویدیو سوم راجب این صحبت میکنه که autograd چطوری…
Autograd Part 2
در ادامه پست قبل یه ویدیویی معرفی میکنم.
PyTorch Autograd Explained - In-depth Tutorial
این ویدیو رو میتونید ادامه پارت چهارم پلی لیست پست قبل (که مرتبط با backpropagation هست) ببینید.
با این ویدیو خیلی عمیق تر کارکرد autograd رو میبینید.
برای تمرین هم میتونید گرادیان هر کدوم از مثال ها رو به صورت دستی بدست بیارید
من که خودم انجام دادم و کاملا درست بود.
فقط حواستون به دو نکته باشه:
1. قانون chain rule: اگر برای بدست آوردن گرادیان tensor ای بیشتر از یک مسیر تو گراف محاسباتی وجود داشته باشه. باید هر دو مسیر محاسبه و جمع بشن.
2. مثال آخر تقسیم داره. لطفا حواستون به اون بخش باشه. اینکه مشتق تقسیم چی هست؟ و دارید بر حسب چی مشتق میگیرید؟
در ادامه پست قبل یه ویدیویی معرفی میکنم.
PyTorch Autograd Explained - In-depth Tutorial
این ویدیو رو میتونید ادامه پارت چهارم پلی لیست پست قبل (که مرتبط با backpropagation هست) ببینید.
با این ویدیو خیلی عمیق تر کارکرد autograd رو میبینید.
برای تمرین هم میتونید گرادیان هر کدوم از مثال ها رو به صورت دستی بدست بیارید
من که خودم انجام دادم و کاملا درست بود.
فقط حواستون به دو نکته باشه:
1. قانون chain rule: اگر برای بدست آوردن گرادیان tensor ای بیشتر از یک مسیر تو گراف محاسباتی وجود داشته باشه. باید هر دو مسیر محاسبه و جمع بشن.
2. مثال آخر تقسیم داره. لطفا حواستون به اون بخش باشه. اینکه مشتق تقسیم چی هست؟ و دارید بر حسب چی مشتق میگیرید؟
YouTube
PyTorch Autograd Explained - In-depth Tutorial
In this PyTorch tutorial, I explain how the PyTorch autograd system works by going through some examples and visualize the graphs with diagrams. As you perform operations on PyTorch tensors that have requires_grad=True, you build up an autograd backward graph.…
❤1
Einsum
Einstein Summation
به یک notation یا دستگاه نوشتاری میگن که عملیات هایی که روی ماتریس ها میخوایم انجام بدیم رو توصیف میکنه.
مثلا، سینتکس نوشتاری ضرب ماتریسی به این صورت هست.
خیلی مثال های بیشتر هست. میتونید بیشتر عملیات های پایه ای numpy رو پیاده کنید.
مثل diag, dot, sum و ...
حالا چرا از این استفاده کنیم؟
اول، چون راحت تر هست.
چون میفهمم که چه اتفاقی سر این dimension ها میفته.
درسته اولش به نظر سخت میاد ولی وقتی که بیشتر کار میکنید میبینید که راحت تره.
دوم، چون وابسته به کتابخونه نیست. هر جا برید سینتکس یکیه.
چه روی PyTorch باشید، چه روی Tensorflow یا numpy یا هر کتابخونه دیگه ای که پیاده کنه.
یه ویدیو یوتیوب که کامل توضیح میده einsum چطور کار میکنه.
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
همینطور یه article ای که یه سری چیزایه جا افتاده رو توضیح میده. مثلا سینتکس "...".
و یه سری توضیحات راجب einops که به شخصه ازش استفاده نکردم.
Einsum is easy and useful
Einstein Summation
به یک notation یا دستگاه نوشتاری میگن که عملیات هایی که روی ماتریس ها میخوایم انجام بدیم رو توصیف میکنه.
مثلا، سینتکس نوشتاری ضرب ماتریسی به این صورت هست.
a = np.random.randn(10, 5)
b = np.random.randn(5, 3)
# Matrix Multiplication (einsum)
np.einsum("ij,jk->ik", a, b) # Output shape: (10, 3)
# Matrix Multiplication (numpy)
np.matmul(a, b) # Output shape: (10, 3)
# More than 2 dimensions
# Inner dimensions not matching?
# Use "..." notation to indicate arbitrary dimensions
a = np.random.randn(9, 15, 10, 5)
b = np.random.randn(9, 15, 3, 5)
# Batch matrix Multiplication (einsum)
np.einsum("...ij,...kj->...ik", a, b) # Output shape: (9, 15, 10, 3)
# Batch matrix Multiplication (numpy)
np.matmul(a, b.swapaxes(-1, -2)) # Output shape: (9, 15, 10, 3)
خیلی مثال های بیشتر هست. میتونید بیشتر عملیات های پایه ای numpy رو پیاده کنید.
مثل diag, dot, sum و ...
حالا چرا از این استفاده کنیم؟
اول، چون راحت تر هست.
چون میفهمم که چه اتفاقی سر این dimension ها میفته.
درسته اولش به نظر سخت میاد ولی وقتی که بیشتر کار میکنید میبینید که راحت تره.
دوم، چون وابسته به کتابخونه نیست. هر جا برید سینتکس یکیه.
چه روی PyTorch باشید، چه روی Tensorflow یا numpy یا هر کتابخونه دیگه ای که پیاده کنه.
یه ویدیو یوتیوب که کامل توضیح میده einsum چطور کار میکنه.
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
همینطور یه article ای که یه سری چیزایه جا افتاده رو توضیح میده. مثلا سینتکس "...".
و یه سری توضیحات راجب einops که به شخصه ازش استفاده نکردم.
Einsum is easy and useful
YouTube
Einsum Is All You Need: NumPy, PyTorch and TensorFlow
In this video I explain how Einstein Summation (einsum) works and why it is amazing, at the end of the video you too will realize that einsum is all you need. It works similar in all libraries with the following function call: torch.einsum, tf.einsum, numpy.einsum…
پردازش سریع دیتا ها (قسمت دوم): وقتی هزینه کپی زیاد میشود
تو پست قبل راجب اینکه چطور یه الگوریتم رو با broadcasting سریع تر کردم صحبت کردیم.
قبل از اینکه این پست رو بخونید یه سری مفاهیم رو مرور کنیم.
vectorization:
که بهش SIMD هم میگن به اعمال کردن یک عملیات روی تعداد بی شماری از دیتا به صورت همزمان میکن.
تو اصطلاح برنامه نویسی هم همینه. تبدیل کردن یک loop که یه عملیاتی رو تکرار میکنه به یک عملیاتی که همزمان روی کل دیتا ها انجام میشه.
broadcasting:
در واقع broadcasting یکی از تکنیک هاست که vectorization رو ممکن میکنه.
با تغییر دادن شکل آرایه ها تا اعمال عملیات های element-wise (عضو به عضو) روشون ممکن بشه.
خب بریم سراغ داستان.
چند روز پیش داشتم روی پیاده سازی یه الگوریتمی روی numpy کار میکردم.
میخواستم این الگوریتم رو مثل الگوریتم های دیگه vectorize کنم.
تو پست قبلیم یکی از تلاش هایی که موفقیت آمیز بود و نتایج چشم گیری داشت رو نمایش دادم.
و از تکنیک broadcasting استفاده کرده بودم.
ولی این بار یه مشکلی داشت. تابع cov که covariance رو محاسبه میکرد تنها آرایه دو بعدی قبول میکرد.
همین کل فرصت هارو برای اینکه vectorize کنم ازم میگرفت.
اومدم و تابع cov رو از رو از صفر پیاده کردم و مستقل از بعد ماتریس نوشتم.
و درون الگوریتمم استفاده کردم و دیدم که خیلی سریع نشد.
خواستم واسه تست واقعی یک batch بزرگ از دیتا رو پاس بدم بهش و دیدم که memory ام کامل پر شد.
خلاصه فهمیدم که الگوریتمم خیلی غیر بهینه عملیات هارو vectorize میکنه.
در واقع دو dimension ای که برای vectorize کردن استفاده و expand کرده بودم خیلی دیتا رو تکرار کرده بودن.
خلاصه نتیجه اصلی اینجاست. هزینه کپی کردن هم کم نیست.
واسه بهینه سازی شما باید حواستون به مموری باشه.
البته که ما همیشه مبادله داریم بین سرعت و فضای مموری.
ولی کپی کردن هم خودش هزینه زمانی داره و سرعت رو پایین میاره.
فکر میکنم راه حل بهتری باشه که یک روزی حتما سراغشون میرم.
تو پست قبل راجب اینکه چطور یه الگوریتم رو با broadcasting سریع تر کردم صحبت کردیم.
قبل از اینکه این پست رو بخونید یه سری مفاهیم رو مرور کنیم.
vectorization:
که بهش SIMD هم میگن به اعمال کردن یک عملیات روی تعداد بی شماری از دیتا به صورت همزمان میکن.
تو اصطلاح برنامه نویسی هم همینه. تبدیل کردن یک loop که یه عملیاتی رو تکرار میکنه به یک عملیاتی که همزمان روی کل دیتا ها انجام میشه.
broadcasting:
در واقع broadcasting یکی از تکنیک هاست که vectorization رو ممکن میکنه.
با تغییر دادن شکل آرایه ها تا اعمال عملیات های element-wise (عضو به عضو) روشون ممکن بشه.
خب بریم سراغ داستان.
چند روز پیش داشتم روی پیاده سازی یه الگوریتمی روی numpy کار میکردم.
میخواستم این الگوریتم رو مثل الگوریتم های دیگه vectorize کنم.
تو پست قبلیم یکی از تلاش هایی که موفقیت آمیز بود و نتایج چشم گیری داشت رو نمایش دادم.
و از تکنیک broadcasting استفاده کرده بودم.
ولی این بار یه مشکلی داشت. تابع cov که covariance رو محاسبه میکرد تنها آرایه دو بعدی قبول میکرد.
همین کل فرصت هارو برای اینکه vectorize کنم ازم میگرفت.
اومدم و تابع cov رو از رو از صفر پیاده کردم و مستقل از بعد ماتریس نوشتم.
و درون الگوریتمم استفاده کردم و دیدم که خیلی سریع نشد.
خواستم واسه تست واقعی یک batch بزرگ از دیتا رو پاس بدم بهش و دیدم که memory ام کامل پر شد.
خلاصه فهمیدم که الگوریتمم خیلی غیر بهینه عملیات هارو vectorize میکنه.
در واقع دو dimension ای که برای vectorize کردن استفاده و expand کرده بودم خیلی دیتا رو تکرار کرده بودن.
خلاصه نتیجه اصلی اینجاست. هزینه کپی کردن هم کم نیست.
واسه بهینه سازی شما باید حواستون به مموری باشه.
البته که ما همیشه مبادله داریم بین سرعت و فضای مموری.
ولی کپی کردن هم خودش هزینه زمانی داره و سرعت رو پایین میاره.
فکر میکنم راه حل بهتری باشه که یک روزی حتما سراغشون میرم.
❤1