3 điểm bởi GN⁺ 2024-03-17 | 1 bình luận | Chia sẻ qua WhatsApp

Kiến trúc phần cứng máy học mới

  • Kho lưu trữ này chứa mã nguồn của một kiến trúc phần cứng ML chỉ cần gần một nửa số phép nhân nhưng vẫn đạt hiệu năng tương đương với việc thực hiện các phép toán tích vô hướng (inner product) truyền thống.
  • Nâng cao giới hạn thông lượng lý thuyết và hiệu quả tính toán của bộ gia tốc ML bằng cách chạy một thuật toán tích vô hướng thay thế, dùng phép cộng độ rộng bit thấp (low-bitwidth) để thay thế gần một nửa số phép nhân.
  • Có thể xem chi tiết trong bài báo đã được đăng trên tạp chí IEEE Transactions on Computers.

Thuật toán và kiến trúc phần cứng mới

  • Giới thiệu một thuật toán và kiến trúc phần cứng mới có tên Free-pipeline Fast Inner Product (FFIP).
  • Cải tiến thuật toán tích vô hướng nhanh (FIP) do Winograd đề xuất năm 1968.
  • FIP không liên quan đến thuật toán lọc tối thiểu Winograd áp dụng cho các lớp tích chập (convolutional), và có thể áp dụng cho mọi lớp mô hình ML chủ yếu có thể phân rã thành phép nhân ma trận.
  • Lần đầu tiên triển khai FIP trên bộ gia tốc ML, đồng thời trình bày thuật toán FFIP và kiến trúc tổng quát hóa giúp cải thiện tần số xung nhịp của FIP và thông lượng tạo ra từ đó.
  • Đóng góp các tối ưu hóa chuyên biệt cho ML đối với thuật toán và kiến trúc FIP và FFIP.
  • FFIP có thể được tích hợp liền mạch vào các bộ gia tốc ML dạng systolic array fixed-point hiện có, để đạt cùng thông lượng với một nửa số đơn vị nhân-tích lũy (MAC), hoặc hiện thực kích thước systolic array tối đa lớn hơn trong cùng một ngân sách phần cứng cố định.
  • Việc triển khai FFIP cho các mô hình ML không thưa (non-sparse) dùng đầu vào fixed-point 8~16 bit đạt thông lượng và hiệu quả tính toán cao hơn các giải pháp hàng đầu trên cùng loại nền tảng tính toán.

Cấu trúc mã nguồn

  • compiler: chứa trình biên dịch phân tích mô tả mô hình Python thành các lệnh cho bộ gia tốc, cùng với mã giao tiếp với trình điều khiển PCIe để khởi động việc chạy mô hình trên bộ gia tốc, đọc kết quả và bộ đếm hiệu năng, cũng như kiểm tra độ chính xác của kết quả.
  • rtl: chứa SystemVerilog RTL có thể tổng hợp.
  • sim: chứa các script thiết lập môi trường mô phỏng để kiểm thử.
  • tests: chứa mã nguồn testbench dựa trên UVM để xác minh bộ gia tốc trong mô phỏng bằng Cocotb.
  • utils: chứa các gói Python và script bổ sung được dùng trong dự án, do tác giả tạo ra để phục vụ tiện ích phát triển chung và hỗ trợ.

Ý kiến của GN⁺

  • Bài viết này giới thiệu một bước tiến đổi mới trong kiến trúc phần cứng ML, đặc biệt mô tả một thuật toán và kiến trúc mới có thể giảm số phép nhân mà vẫn giữ nguyên hiệu năng. Đây là một tiến bộ quan trọng có thể cải thiện đáng kể hiệu quả của các phép toán ML.
  • Thuật toán FFIP bổ sung một chiều hướng mới cho thiết kế bộ gia tốc ML hiện có, đồng thời cung cấp cách sử dụng tài nguyên phần cứng hiệu quả hơn. Điều này đặc biệt quan trọng trong môi trường điện toán hiện đại, nơi hiệu quả năng lượng và hiệu quả chi phí được coi trọng.
  • Tuy nhiên, để công nghệ này được chấp nhận rộng rãi, cần cân nhắc các vấn đề như khả năng tương thích với các bộ gia tốc ML hiện có, mức độ hiểu biết của các nhà phát triển về kiến trúc mới, cũng như hiệu năng và chi phí khi triển khai trên phần cứng thực tế.
  • Các dự án hoặc sản phẩm khác cung cấp chức năng tương tự có thể kể đến TPU (Tensor Processing Unit) của Google hoặc các lõi CUDA của NVIDIA; đây đều là các giải pháp bộ gia tốc ML đã được kiểm chứng trên thị trường.
  • Khi áp dụng công nghệ mới hoặc mã nguồn mở, cần cân nhắc khả năng tương thích với hệ thống hiện tại, mức tăng chi phí so với mức cải thiện hiệu năng, cũng như độ phức tạp của việc phát triển và bảo trì. Lợi ích có thể đạt được khi chọn FFIP là tăng thông lượng và hiệu quả tính toán, còn nhược điểm tiềm ẩn là đường cong học tập đối với hệ thống mới và chi phí triển khai ban đầu.

1 bình luận

 
GN⁺ 2024-03-17
Ý kiến Hacker News
  • Kỹ thuật này trông rất hay, nhưng tôi thắc mắc vì sao nó vẫn chưa được triển khai trên các bộ gia tốc, liệu đây chỉ là một thuật toán bị lãng quên hay còn có chi phí hoặc tác động nào khác khi xây dựng bộ gia tốc.
  • Bài báo này nói về việc tổng hợp pipeline nhân ma trận trên phần cứng, và có thể hữu ích trên các nền tảng như FPGA hoặc ASIC. Trên CPU hay GPU, phép nhân và phép cộng thường mất thời gian tương đương, nhưng đơn vị nhân chiếm nhiều transistor hơn, nên nếu giảm được độ phức tạp của mạch thì có thể tăng tốc độ và thông lượng song song, đồng thời giảm điện năng và độ phức tạp của việc định tuyến.
  • Một cách khác để loại bỏ phép nhân trong nhân ma trận là dùng các semiring khác nhau. Ví dụ, Tropical Semiring dùng phép cộng thay cho phép nhân, và dùng giá trị nhỏ nhất (hoặc lớn nhất) thay cho phép cộng. Đây vẫn là nhân ma trận, chỉ là các phép toán nhị phân được thay thế. Nghiên cứu trong lĩnh vực Tropical Algebra được dùng cho các bài toán tối ưu hóa và tối ưu mạng nơ-ron, và hiện vẫn là một hướng rất sôi động, phong phú.
  • Dùng Log Semiring cũng là một cách loại bỏ phép nhân khá hiệu quả. Khi cần nhân một chuỗi xác suất với nhau (ví dụ: chuỗi Markov), các con số sẽ trở nên rất nhỏ khiến số thực dấu phẩy động mất độ chính xác. Nếu đưa các số về thang log, phép nhân sẽ thành phép cộng, còn phép cộng sẽ thành x + log1p(exp(y - x)).
  • Việc phải quyết định giữa dùng phép nhân hay phép cộng có thể còn chậm hơn là chỉ dùng phép nhân, nên thật ngạc nhiên là cách này lại hoạt động được trong thực tế, nhất là khi có khối lượng công việc lớn được xử lý song song.
  • Việc quy trình này được phát minh từ năm 1968 mà đến nay vẫn chưa được dùng cho mục đích này là điều rất thú vị.
  • Tôi từng thử một khái niệm tương tự vào năm 2018, nhưng rồi từ bỏ vì tất cả hồ sơ xin vào chương trình tiến sĩ đều bị từ chối. Khái niệm ở đây là cố gắng sao chép lan truyền ngược bằng một mạng ngoài, và lập luận rằng đó có lẽ cũng là điều bộ não thực sự đang làm.
  • Nếu bạn quan tâm đến lý thuyết toán học của các thuật toán sub-cubic cho nhân ma trận, bạn có thể bắt đầu từ đây. Người ta giả thuyết rằng tồn tại một số ( n ) sao cho mọi ma trận ( n \times n ) đều có thể được nhân trong ( O(n^{2+j}) ) bước (hiện nay đã được chứng minh với ( 2+j = w = 2.3728596 ) hoặc ( j > 0.3728596 )).
  • README này quá thiếu sót trong việc giải thích chính xác điểm cải tiến là gì hoặc làm thế nào để giảm một nửa số phép nhân. Cũng không rõ thời gian chạy Big O là bao nhiêu, hay liệu nó có thay đổi cận tốt nhất đã biết hay không. Các sơ đồ thì rối rắm và không giải thích được vì sao cách tiếp cận này lại nhanh và tốt. Kết quả là tôi thậm chí còn ngại bấm vào file PDF. Để tăng độ tin cậy cho dự án, nên cân nhắc đưa ra phần giải thích và minh họa thẳng thắn, rõ ràng về những gì thực sự đang diễn ra.