You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
اگر این را روی GPU اجرا میکنید، همانطور که ما این کار را میکنیم، باید افزایش سرعت قابل توجه دیگری را ببینید.
431
428
432
-
433
429
### خلاصه
434
430
435
431
به نظر ما، JAX برنده برای عملیات برداری شده است.
@@ -444,7 +440,6 @@ with qe.Timer(precision=8):
444
440
445
441
برای اکثر موارد مواجه شده در اقتصاد، اقتصادسنجی و امور مالی، بسیار بهتر است که برای موازیسازی کارآمد به کامپایلر JAX تحویل دهیم تا اینکه سعی کنیم این روالها را خودمان کدنویسی دستی کنیم.
446
442
447
-
448
443
## عملیات ترتیبی
449
444
450
445
برخی عملیات ذاتاً ترتیبی هستند -- و از این رو برداری کردن آنها دشوار یا غیرممکن است.
@@ -453,7 +448,6 @@ with qe.Timer(precision=8):
453
448
454
449
برای مقایسه این انتخابها، مسئله تکرار روی نقشه درجه دوم را که در {doc}`سخنرانی Numba <numba>` خود دیدیم، دوباره بررسی خواهیم کرد.
455
450
456
-
457
451
### نسخه Numba
458
452
459
453
در اینجا نسخه Numba آمده است.
@@ -497,9 +491,6 @@ Numba این عملیات ترتیبی را به طور بسیار کارآمد
497
491
(ما `n` را ایستا نگه میداریم زیرا بر اندازه آرایه تأثیر میگذارد و از این رو JAX میخواهد روی مقدار آن در کد کامپایل شده تخصصی شود.)
@@ -542,7 +533,6 @@ JAX نیز برای این عملیات ترتیبی کاملاً کارآمد
542
533
543
534
هم JAX و هم Numba عملکرد قوی پس از کامپایل ارائه میدهند، با این که Numba معمولاً (اما نه همیشه) سرعتهای کمی بهتری در عملیات کاملاً ترتیبی ارائه میدهد.
544
535
545
-
546
536
### خلاصه
547
537
548
538
در حالی که هم Numba و هم JAX عملکرد قوی برای عملیات ترتیبی ارائه میدهند، *تفاوتهای قابل توجهی در خوانایی کد و سهولت استفاده وجود دارد*.
@@ -555,4 +545,30 @@ JAX نیز برای این عملیات ترتیبی کاملاً کارآمد
555
545
556
546
علاوه بر این، آرایههای تغییرناپذیر JAX به این معنی است که نمیتوانیم به سادگی عناصر آرایه را در جا بهروزرسانی کنیم و تکرار مستقیم الگوریتم مورد استفاده توسط Numba را سخت میکند.
557
547
558
-
برای این نوع عملیات ترتیبی، Numba برنده واضح از نظر وضوح کد و سهولت پیادهسازی، و همچنین عملکرد بالا است.
548
+
برای این نوع عملیات ترتیبی، Numba برنده واضح از نظر وضوح کد و سهولت پیادهسازی، و همچنین عملکرد بالا است.
549
+
550
+
## توصیههای کلی
551
+
552
+
حال قدمی به عقب بر میداریم و مبادلات را خلاصه میکنیم.
553
+
554
+
برای **عملیات برداریسازیشده**، JAX قویترین انتخاب است.
555
+
556
+
به لطف کامپایل JIT و موازیسازی کارآمد روی CPU و GPU، در سرعت با NumPy برابری میکند یا از آن پیشی میگیرد.
557
+
558
+
تبدیل `vmap` مصرف حافظه را کاهش میدهد و اغلب نسبت به برداریسازی سنتی مبتنی بر meshgrid، کد روشنتری ارائه میدهد.
559
+
560
+
علاوه بر این، توابع JAX بهصورت خودکار مشتقپذیر هستند، همانطور که در {doc}`autodiff` بررسی میکنیم.
561
+
562
+
برای **عملیات ترتیبی**، Numba مزایای آشکاری دارد.
563
+
564
+
کد طبیعی و خوانا است --- صرفاً یک حلقه پایتون با یک decorator --- و کارایی آن عالی است.
565
+
566
+
JAX میتواند مسائل ترتیبی را از طریق `lax.scan` مدیریت کند، اما نحو آن کمتر شهودی است و برای کارهای کاملاً ترتیبی، بهرهوری اضافی ناچیز است.
567
+
568
+
با این حال، `lax.scan` یک مزیت مهم دارد: از مشتقگیری خودکار در طول حلقه پشتیبانی میکند، که Numba قادر به انجام آن نیست.
569
+
570
+
اگر نیاز دارید از طریق یک محاسبه ترتیبی مشتق بگیرید (مثلاً محاسبه حساسیتهای یک مسیر نسبت به پارامترهای مدل)، JAX علیرغم نحو کمتر طبیعیاش، انتخاب بهتری است.
571
+
572
+
در عمل، بسیاری از مسائل ترکیبی از هر دو الگو هستند.
573
+
574
+
یک قاعده سرانگشتی مناسب: برای پروژههای جدید، بهویژه زمانی که شتابدهی سختافزاری یا مشتقپذیری ممکن است مفید باشد، بهطور پیشفرض از JAX استفاده کنید، و هنگامی که یک حلقه ترتیبی فشرده نیاز به سرعت و خوانایی دارد، به Numba متوسل شوید.
0 commit comments