Ο Jax χρησιμοποιεί αρκετές τεχνικές για να ελαχιστοποιήσει τον κατακερματισμό της μνήμης όταν εκτελείται σε TPUs:
1. Χρησιμοποιώντας ιεραρχία μνήμης: Τα TPU έχουν μια εκλεπτυσμένη ιεραρχία μνήμης, συμπεριλαμβανομένης της μνήμης υψηλού εύρους ζώνης (HBM), μνήμης φορέα, μνήμης κλιμακωτή μνήμη και μνήμης συσσωρευτή. Το JAX βελτιστοποιεί τους υπολογισμούς με τη δομή των δεδομένων για να ελαχιστοποιήσει τις μεταφορές μεταξύ αυτών των επιπέδων μνήμης, γεγονός που συμβάλλει στη μείωση του κατακερματισμού εξασφαλίζοντας αποτελεσματική χρήση μνήμης [3] [5].
2. Προειδοποιητικές και ρυθμιστικές στρατηγικές: Το Prefetching Data κρύβει την καθυστέρηση της πρόσβασης μνήμης, ενώ τεχνικές όπως κυκλικές αποδόσεις και διπλά buffering χρησιμοποιούνται για τη ροή δεδομένων και τον συνεχή υπολογισμό. Αυτές οι στρατηγικές συμβάλλουν στην αποτελεσματικότερη τη διαχείριση της μνήμης, μειώνοντας την πιθανότητα κατακερματισμού [3].
3. Sharding και παράλληλη επεξεργασία: Ο Jax χρησιμοποιεί το Sharding για να χωρίσει τους υπολογισμούς σε πυρήνες TPU, γεγονός που βοηθά στη διαχείριση της μνήμης πιο αποτελεσματικά με τη διανομή του φόρτου εργασίας. Αυτή η προσέγγιση εξασφαλίζει ότι η μνήμη κατανέμεται και συντηρείται με τρόπο που ελαχιστοποιεί τον κατακερματισμό [3] [7].
4. Αποτελεσματική διάταξη δεδομένων: Το JAX βελτιστοποιεί τις διατάξεις δεδομένων για να ταιριάζει με τα φιλικά προς την ΤΡΕ μεγέθη, συχνά διαστάσεις με πολλαπλάσια των βέλτιστων μεγεθών (π.χ. 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-and-run-inference-with-enhanced-performance-
[3] https://app.studyraid.com/en/read/11969/381956/tpu-computation-strategies
[4] https://stackoverflow.com/questions/60871/how-to-solve-memory-restragation
[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