Jax يتعامل مع تجزئة الذاكرة بشكل مختلف على وحدات معالجة الرسومات مقارنة مع TPUs بسبب العمارة المتأصلة وتصميم هذه الأجهزة.
تجزئة الذاكرة على وحدات معالجة الرسومات
- استراتيجية Preallocation: Jax Preallocates 75 ٪ من إجمالي ذاكرة GPU بشكل افتراضي عند تشغيل العملية الأولى. تقلل هذه الاستراتيجية من تخصيص النفقات العامة وتفتيت الذاكرة ولكن يمكن أن تؤدي إلى أخطاء خارج الذاكرة إذا لم تتم إدارتها بشكل صحيح [1] [3].
- مشكلات تجزئة الذاكرة: لدى وحدات معالجة الرسومات التسلسل الهرمي للذاكرة ، والتي يمكن أن تؤدي إلى تفاقم مشكلات تجزئة الذاكرة. هذا التعقيد يجعل من الصعب على Jax إدارة الذاكرة بكفاءة دون تجزئة [6].
- عدم وجود تجزئة تلقائية: على عكس TPUs ، لا تحتوي وحدات معالجة الرسومات على إزالة الذاكرة التلقائية المدمجة في JAX. يعتبر تنفيذ مثل هذه الميزة ولكن غير مخطط له حاليًا [7].
تجزئة الذاكرة على tpus
- التسلسل الهرمي للذاكرة المبسط: TPUs لها تسلسل هرمي أبسط للذاكرة مقارنة مع وحدات معالجة الرسومات ، مما يقلل من احتمال حدوث مشكلات كبيرة في تجزئة الذاكرة [6].
- انتشار الذاكرة التلقائي: تدعم الواجهة الخلفية TFRT TPU إزالة الجثث الذاكرة التلقائي ، مما يساعد على الحفاظ على استخدام الذاكرة الفعال ويقلل من التفتت [7].
-
بشكل عام ، تعتبر إدارة ذاكرة Jax على وحدات معالجة الرسومات أكثر عرضة للتفتت بسبب عدم وجود تجاهل تلقائي والتسلسل الهرمي لذاكرة GPU المعقدة ، في حين أن TPUs تقدم نهجًا أكثر تبسيطًا مع إمكانات إزالة التجزئة المدمجة.
الاستشهادات:[1] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html
[2] https://arxiv.org/pdf/2309.07181.pdf
[3] https://kolonist26-jax-kr.readthedocs.io/en/latest/gpu_memory_allocation.html
[4] https://proceedings.neurips.cc/paper_files/paper/2023/file/42c40aff7814e979666e12053b1c610-paper-conference.pdf
[5] https://docs.jax.dev/en/latest/device_memory_profiling.html
[6] https://massedcompute.com/faq-answers/؟question=how+do+Nvidia+gpus+Handle+Memory+fragmentation+Compared+to+Tpus٪3F
[7] https://github.com/google/jax/issues/9064
[8] https://docs.jax.dev/en/latest/pallas/tpu/details.html
[9] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices