تا کجا میتوانیم محدودیتهای یک CPU را جابهجا کنیم؟
به فریمورکهای حجیم و وابستگی به GPU بسنده نکنید. pdefa را کشف کنید — یک موتور استنتاج از صفر ساختهشده که مدلهای یادگیری عمیق را مستقیماً روی CPU اجرا میکند.
تا کجا میتوانیم محدودیتهای یک CPU را جابهجا کنیم؟
سالها، پاسخ به «اجرای یادگیری عمیق» یکسان بوده است: یک GPU بخرید. اما این پاسخ یک سؤال بنیادی را نادیده میگیرد — چه مقدار از آن سختافزار را واقعاً استفاده میکنیم و چه مقدار را صرف سربار فریمورک هدر میدهیم؟
برای رهایی از نرمافزارهای حجیم کتابخانههای خارجی و مهار تمام قدرت سختافزار با حداکثر کارایی، سفر مهندسی و پروژه متنباز خود را به اشتراک میگذارم: pdefa (hasnard/pdefa).
pdefa چیست؟
pdefa یک موتور استنتاج یادگیری عمیق است که از صفر با استفاده از C++20 و معماری AVX2 SIMD ساختم تا مدلها را مستقیماً روی CPU اجرا کنم — بدون نیاز به GPU، بدون زمان اجرای سنگین، بدون درخت وابستگی که قبل از اجرای یک استنتاج باید باز شود.
انگیزه اصلی من ساده بود: تجربه اینکه چگونه منابع سیستم را میتوان با کارایی مطلق مدیریت کرد، و آوردن این معماری فوقالعاده سبک به اکوسیستم تحت مجوز AGPL-3.0، در حالی که بدون سازش به فلسفه واقعی متنباز وفادار بمانم.
اصلاً چرا به استنتاج روی CPU اهمیت بدهیم؟
زیرا بیشتر استقرارهای دنیای واقعی لوکس یک GPU اختصاصی را ندارند. دستگاههای لبه، سیستمهای نهفته، خطوط لوله CI، نمونههای کوچک VPS، ماشینهای کارخانه و خوشههای دانشگاهی همه روی CPU اجرا میشوند. در آن محیطها، هر مگابایت سربار فریمورک و هر وابستگی غیرضروری یک هزینه است — در حافظه، در زمان راهاندازی، در پیچیدگی استقرار.
یک فریمورک ۳۰۰ مگابایتی که یک دوجین کتابخانه اشتراکی را وارد میکند «رایگان» نیست. این مالیاتی است که در هر استقرار میپردازید.
نکات برجسته فنی:
*- اندازه فوق سبک
فایل باینری بومی کامپایلشده تنها ۳۲۰ کیلوبایت است. بدون مگابایتهای حجیم، بدون زمان اجرایی که ابتدا نصب کنید — فقط آنچه برای اجرای استنتاج لازم است.
*- صفر وابستگی خارجی
رابط پایتون تنها به ماژول داخلی ctypes متکی است. بدون pip install، بدون تضاد نسخه، بدون ژیمناستیک محیط مجازی.
*- بهینهسازی سختافزار
ظرفیت پردازش برداری را با استفاده از مجموعه دستورالعملهای AVX2 به حداکثر میرساند و کنترل مستقیم بر تعداد رشتهها میدهد — بنابراین میتوانید آن را دقیقاً با CPU خود تنظیم کنید.
*- پشتیبانی گسترده از معماریها
قادر به اجرای معماریهای YOLO (v8 تا v12)، ResNet، MobileNet، EfficientNet و DeepLabV3 به صورت آماده است.
*- پردازش تصویر داخلی
دارای لودر PNG/JPEG خود و الگوریتم پسپردازش YOLO داخلی است و کاملاً نیاز به کتابخانههای سنگین مانند OpenCV را دور میزند.
*- گردش کار تبدیل انعطافپذیر
مدلهای PyTorch موجود خود را به فرمت استاندارد ONNX صادر کنید، سپس از مبدل داخلی موتور برای ترجمه یکپارچه آنها به فرمت .engine سفارشی و کمتأخیر pdefa استفاده کنید.


نقشه راه توسعه:
به زودی ابزار pytorchtoengine را منتشر خواهم کرد، که به کاربران PyTorch اجازه میدهد مرحله میانی ONNX را کاملاً دور بزنند و مدلها را مستقیماً به فرمت بومی موتور تبدیل کنند. یک پرش کمتر، یک چیز کمتر برای اشکالزدایی.
این برای چه کسانی است:
امیدوارم این به عنوان یک جایگزین قدرتمند برای توسعهدهندگانی باشد که با سرورهای محدود از نظر منابع، دستگاههای لبه، یا سیستمهای سبک کار میکنند — هر کسی که تا به حال فکر کرده است: «من فقط باید این مدل را اجرا کنم، به یک اکوسیستم کامل برای آن نیاز ندارم.»
از اینجا به کجا:
مخزن باز است. بازخورد در مورد معماری کد واقعاً مورد استقبال است — به ویژه از افرادی که سیستمهای مشابهی ساختهاند یا به همان دیوارها خوردهاند. و اگر این با شما طنینانداز میشود، یک ستاره کمک زیادی به حمایت از پروژه میکند.
$code = @'
import pdefa
import cv2
model = pdefa.load('D:/PROJE/yolov8s.engine')
img_path = 'D:/PROJE/bus.jpg'
boxes = model(img_path, conf_thres=0.75)
img = cv2.imread(img_path)
class_names = {0: 'person', 1: 'bicycle', 2: 'car', 3: 'motorcycle', 5: 'bus', 7: 'truck'}
for b in boxes:
cls = int(b['cls'])
conf = b['conf']
x1, y1 = int(b['x1']), int(b['y1'])
x2, y2 = int(b['x2']), int(b['y2'])
names_attr = getattr(model, 'names', {})
cls_name = class_names.get(cls, names_attr.get(cls, f'cls_{cls}'))
label = f'{cls_name} {conf:.2f}'
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2, cv2.LINE_AA)
print(f'{cls_name} | conf={conf:.3f} | box=[{x1}, {y1}, {x2}, {y2}]')
cv2.imwrite('D:/PROJE/output_bus.png', img)
'@
خوش آمدید
برای استفاده از دستیار هوش مصنوعی وارد شوید
منو
خانه
همه ابزارها
ویرایشگر
ویرایش متن و اشکال
وبلاگ
نکات و راهنماها
تحقیق
مقالات و مطالعات علمی
قالب
زبان
اقدامات اخیر
Lokal Geçmiş