Tinygrad: انقلابی در یادگیری عمیق با کارایی سبک
TinyGrad یک کتابخانه شیب دار سبک، کارآمد و سازگار است که روش آموزش مدل های یادگیری ماشین را متحول می کند. TinyGrad برای محققان و توسعه دهندگانی ایده آل است که می خواهند مدل های یادگیری ماشینی بهتری را بدون به خطر انداختن عملکرد بسازند. استفاده از TinyGrad بسیار ساده است و آن را به یک جایگزین عالی برای هر کسی که به دنبال شروع یادگیری ماشین است تبدیل می کند.
تینیگراد چیست؟
TinyGrad یک کتابخانه نزولی گرادیان یادگیری ماشینی است که سبک وزن، کارآمد و سازگار است. این به زبان C++ نوشته شده است و عملکرد و استفاده از حافظه بهینه شده است. TinyGrad همچنین با انواع الگوریتم های بهینه سازی مانند Adam، Adagrad و RMSProp کار می کند.
استفاده از TinyGrad ساده است. این یک API ساده ارائه می دهد که درک و اعمال آن ساده است. TinyGrad همچنین شامل تعدادی مثال است که نحوه استفاده از کتابخانه برای آموزش انواع مدلهای یادگیری ماشین را نشان میدهد.
TinyGrad ابزاری قوی برای آموزش مدلهای یادگیری ماشینی با دقت و سرعت بالا است. TinyGrad برای محققان و توسعه دهندگانی که به دنبال بهبود مدل های یادگیری ماشین خود هستند ایده آل است.
چگونه کار می کند؟
TinyGrad از یک رویکرد اساسی و در عین حال قدرتمند به نام نزول گرادیان استفاده می کند. گرادیان نزول تکنیکی برای محاسبه حداقل یک تابع است. تابع ضرر تابعی است که ما سعی داریم در زمینه یادگیری ماشینی آن را به حداقل برسانیم. تابع ضرر عملکرد مدل را روی داده های آموزشی اندازه می گیرد.
نزول گرادیان با شروع با یک حدس تصادفی برای پارامترهای مدل کار می کند. سپس پارامترها به صورت دوره ای در جهت گرادیان منفی تابع ضرر به روز می شوند. گرادیان منفی نشان می دهد که ما باید پارامترها را برای به حداقل رساندن تلفات تغییر دهیم.
از تعدادی استراتژی برای بهبود کارایی شیب نزول استفاده می کند. به عنوان مثال، از روشی به نام نرخ های یادگیری تطبیقی استفاده می کند تا به طور خودکار اندازه مراحلی را که برمی دارد تغییر دهد. این کمک میکند تا تضمین شود که مدل با حداکثر سرعت ممکن به حداقل تابع ضرر همگرا میشود.
TinyGrad ابزاری قوی برای آموزش مدلهای یادگیری ماشینی با دقت و سرعت بالا است. این یک جایگزین عالی برای دانشگاهیان و توسعه دهندگانی است که به دنبال بهبود مدل های یادگیری ماشین خود هستند.
در اینجا برخی از مراحل مربوط به نحوه عملکرد TinyGrad آمده است:
- مدل را تعریف کنید: اولین مرحله، تعریف مدلی است که باید آموزش داده شود. معماری مدل، تابع تلفات و بهینه ساز همگی باید مشخص شوند.
- راهاندازی اولیه پارامترها: مرحله بعدی مقداردهی اولیه پارامترهای مدل است. این را می توان به صورت تصادفی یا با یک مدل از پیش آموزش دیده انجام داد.
- آموزش مدل: این مدل باید به عنوان مرحله نهایی آموزش داده شود. این با به روز رسانی مداوم پارامترهای مدل در جهت گرادیان منفی تابع ضرر انجام می شود.
TinyGrad دارای چندین ویژگی است که آموزش مدل های یادگیری ماشین را ساده می کند. این ویژگی ها به شرح زیر است:
- یک API ساده که یادگیری و استفاده از آن آسان است.
- گستره وسیعی از الگوریتم های بهینه سازی
- پشتیبانی از انواع مختلف مدل های یادگیری ماشین
- یک انجمن بزرگ و فعال
همچنین InternGPT: راهی جدید برای تعامل با ChatGPT را بخوانید.
نصب
برای نصب Tinygrad، دو گزینه دارید:
گزینه 1: نصب از طریق pip
python3 -m pip install git+https:// محافظت شده]/geohot/tinygrad.git
گزینه 2: نصب دستی
1. مخزن Tinygrad را از GitHub شبیه سازی کنید:
git clone https://github.com/geohot/tinygrad.git
2. به دایرکتوری شبیه سازی شده بروید:
cd tinygrad
3. Tinygrad را با استفاده از pip:
نصب کنید
python3 -m pip install -e .
این دستورات Tinygrad را روی سیستم شما نصب خواهند کرد. قبل از ادامه نصب مطمئن شوید که پایتون 3 و پیپ را نصب کرده اید.
Tinygrad: A Matmul Example
Tinygrad قابلیت استفاده و سادگی را بر افزایش سرعت در اولویت قرار می دهد. در حالی که نمیتواند از نظر عملکرد با چارچوبهای یادگیری عمیق بالغتر و تنظیمشدهتر رقابت کند، اما همچنان میتواند برای مدلها و مجموعه دادههای کوچک تا متوسط عملکرد بسیار خوبی داشته باشد.
Tinygrad توانایی خود را در انجام ضرب ماتریس (matmul) به سرعت با استفاده از ارزیابی تنبل و همجوشی عملیات در مثال همراه نشان میدهد. Tinygrad محاسبات بیهوده و تخصیص حافظه را با استفاده از تنبلی و سادهسازی جریان اجرا حذف میکند که منجر به افزایش عملکرد میشود.
برای مشاهده عملکرد matmul Tinygrad میتوانید دستور زیر را اجرا کنید.
DEBUG=3 OPTLOCAL=1 python3 -c "from tinygrad.tensor import Tensor;
N = 1024; a، b = Tensor.randn(N، N)، Tensor.randn(N، N);
c = (a.reshape(N, 1, N) * b.permute(1,0).reshape(1, N, N)).sum(axis=2);
print((c.numpy() - (a.numpy() @ b.numpy())).mean())"
کد بالا دو ماتریس تصادفی به اندازه 1024×1024 تولید می کند، آنها را ضرب می کند، سپس نتایج را با اجرای numpy مقایسه می کند. عملکرد سیستم شما بر اساس سخت افزار و بهینه سازی های خاص موجود متفاوت خواهد بود.
میتوانید بهطور اختیاری پرچم DEBUG را روی DEBUG=4 تنظیم کنید تا کد تولید شده را بررسی کنید، که بینش بیشتری در مورد فرآیندهای Tinygrad ارائه میدهد.
تمرکز اصلی Tinygrad روی سادگی و ارزش آموزشی است، نه اینکه یک کتابخانه یادگیری عمیق با کارایی بالا باشد. چارچوبهای بهینهشدهتر، مانند TensorFlow یا PyTorch، اغلب برای برنامههای کاربردی سطح تولید یا مدلهای مقیاس بزرگ ترجیح داده میشوند.
شبکه های عصبی
کتابخانه tinygrad
به عنوان یک کتابخانه تانسور اتوگراد کوچک مشخص میشود که قابلیتهای اولیه شبکه عصبی را فراهم میکند.
از tinygrad.tensor import Tensor
tinygrad.nn.optim را به عنوان optim
وارد کنید
این قسمت اجزای مورد نیاز کتابخانه tinygrad
را وارد می کند، مانند کلاس Tensor برای ساخت و دستکاری تانسورها و ماژول optim
برای بهینه سازها.
کلاس TinyBobNet:
def __init__(self):
self.l1 = Tensor.uniform(784, 128)
self.l2 = Tensor.uniform(128, 10)
دف جلو (خود، x):
بازگشت x.dot(self.l1).relu().dot(self.l2).log_softmax()
TinyBobNet
، یک مدل پایه شبکه عصبی، در اینجا تعریف شده است. مدل شامل دو لایه l1 و l2 است که با اشیاء Tensor
با مقادیر یکنواخت تصادفی نشان داده می شوند. رویکرد forward
با استفاده از محصول نقطهای، فعالسازی ReLU، دوباره محصول نقطهای، و در آخر log فعالسازی softmax، یک پاس رو به جلو شبکه را اجرا میکند.
model = TinyBobNet()
optim = optim.SGD([model.l1, model.l2], lr=0.001)
یک نمونه مدل TinyBobNet
ایجاد میشود و یک بهینهساز شروع میشود. نزول گرادیان تصادفی (SGD) از ماژول tinygrad.nn.optim
در این سناریو با استفاده از پارامترهای model.l1
و model.l2
برای بهینه سازی و نرخ یادگیری 0.001 استفاده می شود.
out = model.forward(x)
loss = out.mul(y).mean()
optim.zero_grad()
loss.backward()
optim.step()
گذر به جلو شامل اجرای دادههای ورودی x
از طریق مدل و ایجاد یک خروجی out
است. سپس ضرر با ضرب خروجی در هدف y
و گرفتن میانگین محاسبه میشود. گرادیان بهینهساز با zero_grad()
بازنشانی میشود، از دست دادن از طریق شبکه با backward()
منتشر میشود، و پارامترها با step()
بهروزرسانی میشوند.
استنتاج ImageNet
این نمونه ای از استفاده از کتابخانه tinygrad
برای استنتاج با استفاده از مدل EfficientNet است. نشان می دهد که چگونه می توان یک تصویر را به مدل ارسال کرد و آن را تعیین کرد که چه چیزی در تصویر است.
برای اجرای کد، دستور زیر را در ترمینال خود تایپ کنید:
python3 examples/efficientnet.py
را با مسیر یا URL تصویری که میخواهید طبقهبندی کنید، جایگزین کنید.
python3 examples/efficientnet.py https://media.istockphoto.com/photos/hen-picture-id831791190
این مثال نحوه استفاده از مدل EfficientNet ارائه شده توسط tinygrad
را برای کارهای طبقه بندی تصاویر نشان می دهد. این نشان می دهد که چگونه می توان یک تصویر را به مدل ارسال کرد و پیش بینی هایی در مورد محتوای تصویر بدست آورد.
Tinygrad از LLaMA پشتیبانی می کند
پس از قرار دادن وزنها در فهرست weights/LLaMA
، میتوانید از این اسکریپت برای برقراری ارتباط با Stacy استفاده کنید.
برای اجرای اسکریپت، دستور زیر را در ترمینال خود تایپ کنید:
python3 examples/llama.py
Tinygrad از GAN ها پشتیبانی می کند
شبکههای متخاصم مولد (GAN) توسط کتابخانه tinygrad
پشتیبانی میشوند. اسکریپت examples/mnist_gan.py
کتابخانه tinygrad
نمونه ای از اجرای یک GAN برای تولید ارقام MNIST را ارائه می دهد.
برای اجرای اسکریپت، دستور زیر را در ترمینال خود تایپ کنید:
python3 examples/mnist_gan.py

Tinygrad از انتشار پایدار پشتیبانی می کند
اگر کتابخانه tinygrad
شما از Stable Diffusion پشتیبانی میکند و وزنهای مربوطه را دانلود کردهاید، میتوانید با اجرای اسکریپت stable_diffusion.py
از آن استفاده کنید.
برای اجرای اسکریپت، یک ترمینال را باز کنید و دستور زیر را وارد کنید:
python3 examples/stable_diffusion.py
بررسی کنید که همه وابستگیهای لازم برای اجرای صحیح اسکریپت را دارید. علاوه بر این، مطمئن شوید که وزنهای مربوط به انتشار پایدار بهدست آمده و در فهرست weights/
ذخیره شدهاند.
این مقاله به شما کمک می کند تا در مورد Tinygrad بیاموزید. ما اطمینان داریم که برای شما مفید بوده است. لطفاً نظرات و انتقادات خود را در بخش نظرات زیر به اشتراک بگذارید.