کد خطا: E3001

رده: هسته پراکنده: تعداد کپی منطقی قابل قبولی وجود ندارد

این خطا زمانی رخ می‌دهد که کامپایلر XLA:SparseCore نتواند پیکربندی معتبری برای شمارش کپی‌های منطقی تعیین کند که به حجم کار اجازه دهد در حافظه محلی SparseCore (Tilespmem) قرار گیرد.

نمونه پیام‌های خطا:

XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...

پایه‌های XLA: TPU

نمای کلی

این خطا مختص موارد استفاده SparseCore ، به ویژه برای مدل‌های جاسازی بزرگ (LEMها) است.

تعداد کپی‌های منطقی یک پارامتر داخلی کامپایلر است که نحوه تقسیم دسته‌های ورودی را برای مدیریت فشار تخصیص دفترچه یادداشت تعیین می‌کند. کامپایلر تلاش می‌کند تا حجم کار را به تکه‌های کوچکتر (کپی‌ها) تقسیم کند تا بافرهای میانی مورد نیاز برای هر تکه در حافظه محدود دفترچه یادداشت SparseCore جای گیرند. به طور کلی، تعداد کپی‌های منطقی بالاتر با پردازش دسته‌های کوچکتر داده در یک زمان، فشار تخصیص را کاهش می‌دهد.

این خطا نشان می‌دهد که حتی پس از تلاش برای پیکربندی‌های مختلف تقسیم‌بندی، کامپایلر نتوانسته تنظیماتی را پیدا کند که در آن بافرهای مورد نیاز در حافظه Tilespmem جای بگیرند. اندازه تخصیص با ترکیبی از موارد زیر تعیین می‌شود:

  • sample_count : تعداد شناسه‌های جستجوی جاسازی اختصاص داده شده به هر SparseCore (مشتق شده از اندازه دسته).
  • feature_width : اندازه بُعد جاسازی.
  • max_nz_per_row : حداکثر تعداد شناسه‌های جستجوی جاسازی غیرمنحصر به فرد در تمام SparseCoreها.
  • max_unique_nz_per_row : حداکثر تعداد شناسه‌های جستجوی منحصر به فرد برای جاسازی.

اشکال‌زدایی

برای رفع این خطا، باید فشار حافظه روی حافظه موقت SparseCore را کاهش دهید.

۱. بهبود تخمین‌های فراداده

کامپایلر حافظه را بر اساس max_nz_per_row و max_unique_nz_per_row اختصاص می‌دهد. اگر این مقادیر به صورت محافظه‌کارانه تخمین زده شوند (یعنی بسیار بالاتر از آنچه داده‌های واقعی نیاز دارند تنظیم شوند)، کامپایلر فضای غیرضروری را رزرو می‌کند و باعث این خطا می‌شود. مطمئن شوید که این پارامترها به طور دقیق توزیع شناسه واقعی مجموعه داده‌های شما را منعکس می‌کنند.

می‌توانید برای تعیین مقادیر بهینه برای این پارامترها ، از بهینه‌سازی مبتنی بر بازخورد (FDO) استفاده کنید.

۲. کاهش اندازه دسته

sample_count مستقیماً از اندازه دسته سراسری شما مشتق می‌شود. کاهش اندازه دسته، مقدار داده‌ای را که هر SparseCore باید در هر مرحله پردازش کند، کاهش می‌دهد و در نتیجه اندازه بافرهای مورد نیاز برای scratchpad را کاهش می‌دهد.