Danh mục: Thời gian biên dịch: Lỗi phân bổ SparseCore
Lỗi này xảy ra khi trình biên dịch XLA:SparseCore không thể phân bổ một khối bộ nhớ liền kề trong dung lượng bộ nhớ được chỉ định mà chương trình SparseCore hiện tại yêu cầu.
Thông báo lỗi mẫu:
INTERNAL:Failed to run pass pipeline. Hlo-Op: result.1:279:1: error: 'memref.alloca' op current allocation offset upper bound (140704 words) exceeds the legitimate user allocatable offset upper bound (131071 words) in memory space 201 when allocating 23440 words. result.1:279:1: note: see current operation: %232 = "memref.alloca"() <{operandSegmentSizes = array<i32: 0, 0>}> : () -> memref<23440xf32, 201>
XLA Backends: TPU
Tổng quan
SparseCore (SC) là một bộ xử lý chuyên dụng cho các khối lượng công việc thưa thớt. Nó dựa vào các hệ thống phân cấp bộ nhớ cụ thể để quản lý hiệu quả việc di chuyển dữ liệu. Trình biên dịch XLA cố gắng định cỡ và phân bổ các vùng đệm một cách tĩnh dựa trên giới hạn phần cứng và các hình dạng do người dùng xác định. Lỗi này cho biết điều kiện Hết bộ nhớ (OOM) trong giai đoạn phân bổ này.
Thông báo lỗi thường chỉ định một mã nhận dạng dung lượng bộ nhớ. Dưới đây là các không gian bộ nhớ phổ biến và mã hoá số nguyên của chúng:
| Mã không gian bộ nhớ | Tên | Mô tả |
|---|---|---|
| 0 | Smem | Bộ nhớ vô hướng cục bộ. Được dùng cho các thanh ghi vô hướng và luồng điều khiển. |
| 201 | TileSpmem | Bộ nhớ của Ghi chú nhanh theo ô. SRAM cục bộ, tốc độ cao có sẵn cho một ô SC cụ thể. |
| 202 | Spmem | Bộ nhớ tạm dùng chung. Được dùng để dàn xếp dữ liệu (đầu vào, đầu ra, trung gian) một cách tuỳ ý nhằm ẩn độ trễ HBM. |
| 203 | HBM | Bộ nhớ băng thông cao. Bộ nhớ dùng chung, có kích thước lớn, được dùng để nhúng các bảng, heap và ngăn xếp. |
| 204 | Đồng bộ hoá cờ | Các nguyên tắc đồng bộ hoá được dùng để điều phối. |
Để tìm hiểu kỹ về SC và hệ thống phân cấp bộ nhớ của SC, hãy tham khảo tài liệu về SparseCore.
Gỡ lỗi
Cách giải quyết tuỳ thuộc vào dung lượng bộ nhớ nào không phân bổ được.
Trường hợp 1. Lỗi phân bổ HBM
Mã không gian bộ nhớ: 203
Lỗi này xảy ra nếu một lần phân bổ tạm thời do chương trình SparseCore yêu cầu có kích thước quá lớn để phù hợp với HBM hiện có. Trong các khối lượng công việc nhúng tiêu chuẩn và các tập hợp được chuyển tải SC, các phân vùng cực lớn trên mỗi lõi hoặc các quy cách phân đoạn không chính xác có thể buộc trình biên dịch yêu cầu các vùng đệm lớn.
Hành động nên thực hiện:
- Kiểm tra phân đoạn: Đảm bảo rằng các bảng nhúng và các tensor đầu vào/đầu ra SC được phân vùng/phân đoạn đúng cách. Nếu một lõi duy nhất chịu trách nhiệm xử lý quá nhiều dữ liệu, thì quá trình phân bổ có thể không thành công.
- Điều chỉnh hạn mức: Xem xét
max_ids_per_partitionvàmax_unique_ids_per_partition. Nếu bạn đặt các giá trị này cao hơn mức cần thiết, trình biên dịch sẽ dành nhiều bộ nhớ hơn mức cần thiết. Tham khảo phần Cách giới hạn được chuyển đổi thành bảng.
Trường hợp 2. Lỗi bộ nhớ trong
Mã nhận dạng không gian bộ nhớ: 0, 201, 202, 204
Lỗi phân bổ trong Smem, TileSpmem, Spmem hoặc Sync Flags thường xảy ra do lỗi trình biên dịch hoặc các hạn chế trong chiến lược phân bổ, trong đó trình biên dịch không tính đến mọi yêu cầu về bộ nhớ.
Hành động nên thực hiện:
- Cách cô lập Thao tác XLA không thành công: Để xác định SC HLO hoặc nhân Mosaic cụ thể gây ra lỗi, hãy tạo các biểu thị trình biên dịch trung gian:
- Kết xuất SparseCore MLIR: Đặt cờ
--xla_sc_dump_mlir_to=/path/to/dump. Thao tác này sẽ tạo MLIR của chương trình SparseCore, cho phép bạn xem kích thước phân bổ nào khớp với thông báo lỗi. - Kết xuất LLO Mosaic: Đối với các nhân tuỳ chỉnh, hãy sử dụng
--xla_mosaic_dump_to=/path/to/dumpđể kiểm tra tất cả các chương trình Trình tối ưu hoá cấp thấp (LLO) do Mosaic phát ra.
- Kết xuất SparseCore MLIR: Đặt cờ
- Giảm kích thước tạm thời (Người dùng Pallas): Nếu lỗi xảy ra trong nhân Mosaic, hãy xem xét cấu hình
scratch_shapes. Đảm bảo rằng các yêu cầupltpu.SMEMcủa bạn phù hợp với quy cách phần cứng cho thế hệ TPU cụ thể. - Tắt tính năng Collective Offload (Tải chung): Nếu lỗi phát sinh từ một hoạt động chung được tải lên SC, hãy thử tắt các tính năng tải lên SC:
--xla_tpu_enable_sparse_core_collective_offload_all_gather=false--xla_tpu_enable_sparse_core_collective_offload_all_reduce=false
- Báo cáo lỗi: Nếu các bước trên không giải quyết được vấn đề, thì có thể đó là lỗi trình biên dịch. Vui lòng gửi báo cáo lỗi.