توظف Jax العديد من التقنيات لتقليل تفتيت الذاكرة عند التشغيل على TPUS:
1. استخدام التسلسل الهرمي للذاكرة: TPUs لها تسلسل هرمي ذاكرة متطور ، بما في ذلك ذاكرة النطاق الترددي العالي (HBM) ، وذاكرة المتجه ، وذاكرة العددية ، وذاكرة التراكم. تعمل Jax على تحسين الحسابات عن طريق هيكلة البيانات لتقليل عمليات النقل بين مستويات الذاكرة هذه ، مما يساعد على تقليل التفتت عن طريق ضمان استخدام الذاكرة الفعال [3] [5].
2. استراتيجيات التذوق والتخزين المؤقت مسبقًا: تُخفي البيانات المسبقة زمن الوصول للوصول إلى الذاكرة ، في حين يتم استخدام تقنيات مثل المخازن المؤقتة الدائرية والتخزين المؤقت المزدوج لتدفق البيانات والحساب المستمر. تساعد هذه الاستراتيجيات في إدارة الذاكرة بشكل أكثر كفاءة ، مما يقلل من احتمال تجزئة [3].
3. Sharding والمعالجة المتوازية: يستخدم Jax Sharding لتقسيم الحسابات عبر نوى TPU ، مما يساعد على إدارة الذاكرة بشكل أكثر فعالية عن طريق توزيع عبء العمل. يضمن هذا النهج تخصيص الذاكرة وتخصيصها بطريقة تقلل من التفتت [3] [7].
4. تخطيط البيانات الفعال: يعمل Jax على تحسين تخطيطات البيانات لمطابقة أحجام TPU الصديقة ، وغالبًا ما تقوم بتجميع أبعاد لمضاعفات الأحجام المثالية (على سبيل المثال ، 128). هذا يضمن تخصيص الذاكرة في كتل متجاورة ، مما يقلل من التفتت [3] [5].
5. تجميع JIT وإعادة استخدام الذاكرة: تساعد آليات تجميع JAX في الوقت المناسب (JIT) وإعادة استخدام الذاكرة في تقليل المخصصات غير الضرورية. عن طريق إعادة استخدام كتل الذاكرة عندما يكون ذلك ممكنًا ، يقلل Jax من تواتر المخصصات الجديدة ، والتي يمكن أن تؤدي إلى تجزئة [1] [3].
تساهم هذه التقنيات بشكل جماعي في تقليل تجزئة الذاكرة وتحسين الأداء على TPUs.
الاستشهادات:[1] https://app.studyraid.com/en/read/11969/381958/memory-management-best-practices
[2] https://www.datacamp.com/tutorial/combine-google-gemma-with-tpus-fine-tune--drun----derfore-with-encance-dorformance-and-appeed
[3] https://app.studyraid.com/en/read/11969/381956/tpu-comptatterithing-strategies
[4] https://stackoverflow.com/questions/60871/how-to-solve-memory-fragmentation
[5] https://cloud.google.com/tpu/docs/performance-guide
[6] https://www.kaggle.com/code/matthewdwatson/gemma-2-tpu-fine tuning
[7] https://docs.jax.dev/en/latest/pallas/tpu/distributed.html
[8] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html