HiSparse là một thư viện tính toán hiệu năng cao chuyên xử lý các phép tích chập trên dữ liệu thưa trong không gian ba chiều — đặc biệt phù hợp cho các tác vụ như phân tích điểm đám mây, nhận dạng cấu trúc 3D và mô hình hóa môi trường thưa. Khác với các phương pháp truyền thống dựa trên ma trận dày đặc, HiSparse tận dụng đặc tính phân bố không đồng đều của dữ liệu để loại bỏ hoàn toàn các phép toán dư thừa.
Toán học đằng sau tính thưa: Từ biểu diễn đầy đủ sang biểu diễn chọn lọc
Trong tích chập dày đặc, mỗi vị trí đầu ra yêu cầu duyệt toàn bộ vùng lân cận của nhân tích chập — ngay cả khi phần lớn giá trị đầu vào bằng không. HiSparse thay đổi tư duy này bằng cách định nghĩa lại hàm đầu ra như sau:
def sparse_conv_output(pos_out):
total = 0.0
for offset in kernel_offsets:
pos_in = pos_out + offset
if pos_in in active_coords: # chỉ truy cập nếu tọa độ tồn tại
total += weights[offset] * features[pos_in]
return total
Ở đây, active_coords là tập hợp các tọa độ không rỗng được lưu trữ dưới dạng bảng băm (hash map), giúp truy vấn O(1) và loại bỏ mọi thao tác trên ô "trống". Việc lượng tử hóa tọa độ (ví dụ: làm tròn sang lưới nguyên) còn hỗ trợ nén bộ nhớ và tăng khả năng tái sử dụng cache.
Các thành phần kỹ thuật then chốt
- Quản lý chỉ mục động: Thay vì cấp phát mảng cố định, HiSparse xây dựng bảng băm có thể mở rộng để theo dõi các vị trí hoạt động — giảm tiêu thụ bộ nhớ tới 75% so với CSR/CSC.
- Tối ưu hóa cho GPU hiện đại: Sử dụng luồng warp để đồng bộ hóa truy cập bộ nhớ chia sẻ; tích hợp hỗn hợp FP16/INT8 trong pipeline tính toán nhằm tận dụng tensor core mà không làm mất độ chính xác quan trọng.
- Truyền ngược thông minh: Chỉ lan truyền gradient tới các tọa độ đã tham gia vào phép tính tiến — cắt giảm chi phí tính toán đạo hàm trung bình 62% so với phiên bản đầy đủ.
Cấu trúc triển khai đa lớp
HiSparse được thiết kế theo kiến trúc phân tầng rõ ràng nhằm cân bằng giữa tính linh hoạt và hiệu năng:
1. Lớp biểu diễn dữ liệu
Lớp SparseTensor3D đóng gói bốn thành phần thiết yếu:
values: Mảng 2D chứa đặc trưng của từng điểm không rỗngcoords: Ma trận tọa độ nguyên 3D (x, y, z) tương ứnggrid_shape: Kích thước lưới không gian thưa (không phải kích thước tensor gốc)batch_ids: Mảng định danh batch cho từng điểm — hỗ trợ xử lý đa mẫu song song
2. Lớp tính toán nền tảng
Các hàm CUDA được viết thủ công trong core/cuda/conv3d_kernel.cuh, với các kỹ thuật tối ưu như:
- Phân khối theo vùng lân cận: Mỗi block xử lý một nhóm tọa độ đầu ra sao cho các thread trong cùng warp truy cập các vùng bộ nhớ gần nhau.
- Bảng dịch chuyển trước: Tất cả vector dịch chuyển từ nhân tích chập được tiền xử lý và lưu vào shared memory để tránh tính toán lặp ở runtime.
- Hợp nhất truy cập bộ nhớ: Gộp nhiều truy vấn bảng băm thành một lần tải 128-bit, giảm số chu kỳ bộ nhớ cần thiết.
3. Giao diện Python liền mạch
Thư viện cung cấp API tương thích với PyTorch qua module hisparse.torch:
import hisparse.torch as hs
# Xây dựng mạng thưa 3D
model = hs.Sequential(
hs.Conv3d(in_channels=4, out_channels=32, kernel_size=3, stride=1),
hs.BatchNorm3d(32),
hs.ReLU()
)
# Tạo tensor thưa từ dữ liệu điểm
coords = torch.tensor([[0,1,2], [3,0,4], [1,5,1]], dtype=torch.int32)
features = torch.randn(3, 4) # 3 điểm, mỗi điểm có 4 đặc trưng
grid_shape = (16, 16, 16)
sparse_input = hs.SparseTensor3D(features, coords, grid_shape)
output = model(sparse_input)
Hướng dẫn thực hành hiệu quả
- Ngưỡng kích hoạt: Chỉ nên dùng HiSparse khi mật độ dữ liệu < 8%. Công cụ
analyze_sparsity.pytrong thư mụctools/giúp đo chính xác tỉ lệ phần tử khác không. - Cấu hình bảng băm: Với dữ liệu cực thưa (< 0.1%), tăng
hash_capacitylên 2–4× để giảm va chạm và cải thiện tốc độ truy xuất. - Định dạng dữ liệu: Ưu tiên sắp xếp
coordstheo thứ tự Z-order hoặc Hilbert curve để tăng locality khi duyệt.
Mở rộng tương lai
Phiên bản tiếp theo đang thử nghiệm hai hướng phát triển chính:
- Tích chập thích nghi: Cơ chế điều chỉnh động kích thước vùng lân cận dựa trên mức độ cục bộ của từng điểm — giảm độ phức tạp tính toán trung bình thêm 20–35%.
- Hỗ trợ kiến trúc mới: Các kernel được tái biên dịch tự động cho GPU AMD CDNA3 và Intel PVC thông qua SYCL backend.
- Tích hợp suy luận: Module
hisparse.exportcho phép chuyển đổi mô hình sang định dạng ONNX với metadata về cấu trúc thưa — hỗ trợ triển khai trên TensorRT và TVM.