Danh mục: CompileTime: SparseCore No Viable Logical Replica Count
Lỗi này xảy ra khi trình biên dịch XLA:SparseCore không xác định được cấu hình số lượng bản sao logic hợp lệ cho phép khối lượng công việc nằm trong bộ nhớ tạm cục bộ của SparseCore (Tilespmem).
Thông báo lỗi mẫu:
XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...
XLA Backends: TPU
Tổng quan
Lỗi này chỉ xảy ra trong các trường hợp sử dụng SparseCore, đặc biệt là đối với các Mô hình nhúng lớn (LEM).
Số lượng bản sao logic là một tham số trình biên dịch nội bộ, xác định cách phân vùng các lô đầu vào để quản lý áp lực phân bổ bảng nháp. Trình biên dịch cố gắng chia khối lượng công việc thành các phần nhỏ hơn (bản sao) để các vùng đệm trung gian cần thiết cho mỗi phần phù hợp với Bộ nhớ tạm có hạn của SparseCore. Nhìn chung, số lượng bản sao logic càng cao thì áp lực phân bổ càng giảm bằng cách xử lý các lô dữ liệu nhỏ hơn tại một thời điểm.
Lỗi này cho biết rằng ngay cả sau khi thử nhiều cấu hình phân chia, trình biên dịch vẫn không tìm thấy một chế độ thiết lập mà các vùng đệm cần thiết phù hợp với bộ nhớ Tilespmem. Kích thước phân bổ được xác định bằng cách kết hợp:
sample_count: Số lượng mã nhận dạng tra cứu mục nhúng được chỉ định cho mỗi SparseCore (xuất phát từ kích thước lô).feature_width: Kích thước của phương diện nhúng.max_nz_per_row: Số lượng tối đa mã nhận dạng tra cứu mục nhúng không phải là duy nhất trên tất cả SparseCore.max_unique_nz_per_row: Số lượng tối đa mã nhận dạng tra cứu mục nhúng riêng biệt.
Gỡ lỗi
Để giải quyết lỗi này, bạn cần giảm áp lực bộ nhớ trên SparseCore scratchpad.
1. Cải thiện thông tin ước tính về siêu dữ liệu
Trình biên dịch phân bổ bộ nhớ dựa trên max_nz_per_row và max_unique_nz_per_row. Nếu các giá trị này được ước tính một cách thận trọng (tức là được đặt cao hơn nhiều so với yêu cầu của dữ liệu thực tế), thì trình biên dịch sẽ dành không gian không cần thiết, gây ra lỗi này. Đảm bảo các tham số này phản ánh chính xác sự phân phối mã nhận dạng thực tế của tập dữ liệu.
Bạn có thể cân nhắc áp dụng Tối ưu hoá dựa trên ý kiến phản hồi (FDO) để xác định các giá trị tối ưu cho những tham số này.
2. Giảm kích thước lô
sample_count được suy ra trực tiếp từ kích thước lô toàn cầu của bạn. Việc giảm kích thước lô sẽ làm giảm lượng dữ liệu mà mỗi SparseCore phải xử lý cho mỗi bước, từ đó giảm kích thước của các vùng đệm scratchpad bắt buộc.