Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon JAX sử dụng kỹ thuật cụ thể nào để giảm thiểu phân mảnh bộ nhớ trên TPUS


JAX sử dụng kỹ thuật cụ thể nào để giảm thiểu phân mảnh bộ nhớ trên TPUS


JAX sử dụng một số kỹ thuật để giảm thiểu phân mảnh bộ nhớ khi chạy trên TPU:

1. Sử dụng phân cấp bộ nhớ: TPU có hệ thống phân cấp bộ nhớ tinh vi, bao gồm bộ nhớ băng thông cao (HBM), bộ nhớ vectơ, bộ nhớ vô hướng và bộ nhớ tích lũy. JAX tối ưu hóa các tính toán bằng cách cấu trúc dữ liệu để giảm thiểu chuyển đổi giữa các mức bộ nhớ này, giúp giảm sự phân mảnh bằng cách đảm bảo sử dụng bộ nhớ hiệu quả [3] [5].

2. Các chiến lược trước và đệm: Việc tìm nạp dữ liệu trước độ trễ truy cập bộ nhớ, trong khi các kỹ thuật như bộ đệm tròn và bộ đệm kép được sử dụng để phát trực tuyến dữ liệu và tính toán liên tục. Những chiến lược này giúp quản lý bộ nhớ hiệu quả hơn, giảm khả năng phân mảnh [3].

3. Xử lý Sharding và xử lý song song: Jax sử dụng Sharding để phân chia các tính toán trên các lõi TPU, giúp quản lý bộ nhớ hiệu quả hơn bằng cách phân phối khối lượng công việc. Cách tiếp cận này đảm bảo rằng bộ nhớ được phân bổ và giải quyết theo cách giảm thiểu sự phân mảnh [3] [7].

4. Bố cục dữ liệu hiệu quả: JAX tối ưu hóa bố cục dữ liệu để phù hợp với kích thước thân thiện với TPU, thường là kích thước đệm với bội số của kích thước tối ưu (ví dụ: 128). Điều này đảm bảo rằng bộ nhớ được phân bổ trong các khối liền kề, giảm phân mảnh [3] [5].

5. Việc biên dịch JIT và tái sử dụng bộ nhớ: Việc biên dịch và tái sử dụng bộ nhớ của JAX (JIT) của JAX giúp giảm thiểu phân bổ không cần thiết. Bằng cách sử dụng lại các khối bộ nhớ khi có thể, Jax sẽ giảm tần suất phân bổ mới, có thể dẫn đến phân mảnh [1] [3].

Các kỹ thuật này cùng nhau góp phần giảm thiểu phân mảnh bộ nhớ và tối ưu hóa hiệu suất trên TPU.

Trích dẫn:
[1)
[2] https://www.datacamp.com/tutorial/combine-google-gemma-with-tpus-fine-tune-and-run-inference-with-enhanced-performance-and-speed
[3] https://app.studyraid.com/en/read/11969/381956/tpu-computation-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/distribut.html
[8] https://jax.readthedocs.io/en/latest/gpu_memory_allocation.html