DSC , một thư viện tensor tương thích với PyTorch được thiết kế cho suy luận machine learning, đã thu hút sự chú ý của các nhà phát triển nhờ thiết kế API sạch sẽ và ít phụ thuộc. Tuy nhiên, các cuộc thảo luận trong cộng đồng đã tiết lộ một mối quan ngại đáng kể về hiệu suất có thể ảnh hưởng đến việc áp dụng trong môi trường sản xuất.
Thư viện này, được tạo ra bởi nhà phát triển nirw4nna , nhằm cung cấp giao diện giống NumPy với hỗ trợ mạng neural tích hợp và chuyển đổi backend liền mạch giữa CPU và CUDA . DSC có tính năng phân bổ bộ nhớ tùy chỉnh để tránh các lệnh gọi malloc trong thời gian chạy và hỗ trợ nhiều ngôn ngữ lập trình thông qua API C chung.
Các tính năng chính của DSC:
- Thư viện tensor tương thích với PyTorch cùng API giống NumPy
- Hỗ trợ mạng nơ-ron tích hợp với nn.Module
- Hỗ trợ đa backend ( CPU và CUDA )
- Bộ cấp phát bộ nhớ tùy chỉnh với khả năng cấp phát trước
- Ít phụ thuộc bên ngoài tối thiểu
- API cấp thấp tương thích C được bao bọc trong Python
Nút thắt hiệu suất từ thiết kế giao diện
Vấn đề cấp bách nhất được cộng đồng xác định tập trung vào việc DSC sử dụng ctypes cho giao tiếp Python-to-C . Một số nhà phát triển đã chỉ ra rằng lựa chọn thiết kế này tạo ra chi phí hiệu suất đáng kể so với các giải pháp thay thế hiện đại.
Chi phí gọi của việc sử dụng ctypes so với nanobind/pybind là rất lớn... ctypes chỉ gọi ra libffi được biết đến là cách chậm nhất để thực hiện ffi.
Khoảng cách hiệu suất này trở nên quan trọng đối với các khối lượng công việc machine learning nơi mỗi micro giây đều có giá trị. Người tạo ra đã thừa nhận mối quan ngại này và bày tỏ sự quan tâm đến việc khám phá nanobind , một giải pháp ràng buộc hiệu quả hơn biên dịch giao diện thay vì sử dụng các lệnh gọi hàm ngoại lai trong thời gian chạy.
Thông tin so sánh hiệu suất:
- Giao diện ctypes tạo ra chi phí gọi hàm đáng kể so với nanobind/pybind
- Việc tạo kernel C++ thử nghiệm cho thấy hiệu suất tăng khoảng 20%
- llama.cpp vẫn nhanh hơn nhờ các kernel được tối ưu hóa thủ công
- Kiến trúc hiện tại sử dụng nhiều kernel riêng biệt (ví dụ: 5 kernel cho softmax)
Các quyết định kiến trúc bị xem xét kỹ lưỡng
Các thành viên cộng đồng cũng đã đặt câu hỏi về cách tiếp cận kiến trúc tổng thể. Một số đề xuất rằng việc DSC sử dụng nhiều template và câu lệnh switch có thể được hưởng lợi từ biểu diễn trung gian giống như trình biên dịch. Người tạo ra đã xác nhận quan sát này, chia sẻ rằng công việc thử nghiệm về tạo ra các kernel C++ được tối ưu hóa cho thấy khoảng 20% cải thiện hiệu suất so với cách tiếp cận đa kernel hiện tại.
Việc triển khai C++ theo phong cách C của thư viện đã gây ra tranh luận về các thực hành phát triển hiện đại. Trong khi một số nhà phát triển thích mã rõ ràng, cấp thấp để lý luận về hiệu suất, những người khác ủng hộ tối ưu hóa dựa trên profiler thay vì giả định về hiệu quả tạo mã.
Dự án học tập với khát vọng sản xuất
Ban đầu được hình thành như một dự án học tập cá nhân lấy cảm hứng từ llama.cpp , DSC đã phát triển vượt ra ngoài nguồn gốc giáo dục của nó. Người tạo ra thừa nhận rằng trong khi llama.cpp vẫn nhanh hơn do các kernel được tối ưu hóa thủ công cho các kiến trúc cụ thể, DSC nhằm cung cấp một bộ công cụ đa mục đích hơn giúp việc thử nghiệm mô hình dễ dàng hơn cho các nhà phát triển không có nền tảng ML sâu.
Dự án hiện tại hỗ trợ các phép toán tensor cơ bản và có thể tải mô hình từ các tệp safetensors , với kế hoạch thêm hỗ trợ tệp GGUF . Tuy nhiên, các mối quan ngại về hiệu suất được cộng đồng nêu ra cho thấy rằng những thay đổi kiến trúc đáng kể có thể cần thiết trước khi DSC có thể cạnh tranh với các framework đã được thiết lập trong môi trường sản xuất.
Cuộc thảo luận làm nổi bật thách thức đang diễn ra trong không gian cơ sở hạ tầng ML : cân bằng giữa tính dễ sử dụng với tối ưu hóa hiệu suất trong khi duy trì các kiến trúc mã sạch, có thể bảo trì.
Tham khảo: dsc