Hàm mũ mới giúp SiLU và SoftMax nhanh gấp 2 lần, giữ nguyên hoàn toàn độ chính xác
(github.com/ggerganov)GGML: Viết lại SiLU và Softmax cho CPU
Các thay đổi chính
-
Bổ sung hàm
expf()được vector hóa:- Giờ đây có thể tính Softmax và SiLU chính xác hơn so với bảng tra cứu
short[65536]trước đây được dùng trongGGML. - Hỗ trợ
aarch64vàsse2+, với sai số làm tròn trong trường hợp xấu nhất là 2 ULP. - Cũng đã có triển khai
avx2vàavx512, nhưng không được dùng vì lợi ích không đủ lớn so với độ phức tạp mã tăng thêm khi so vớisse2+fma.
- Giờ đây có thể tính Softmax và SiLU chính xác hơn so với bảng tra cứu
-
Phản hồi chính:
- Nhiều cộng tác viên đã phản hồi tích cực về thay đổi này.
- Trên
AMD Ryzen 9 5950XvàM2 Ultra,SOFT_MAXnhanh hơn khoảng 1,5 lần.
Thay đổi mã nguồn
- Tóm tắt các thay đổi chính:
- Xóa
#defineđã bị comment. - Tách 5 dòng trùng lặp thành
ggml_vec_soft_max_f32(). - Xóa các hàm liên quan đến
GGML_SILU_FP16. - Thêm
ggml_v_expf(). - Thêm
ggml_v_silu(). - Điều chỉnh
ggml_vec_silu_f32()bằng các chỉ thị tiền xử lý theo cờSSE2hoặc__ARM_NEON.
- Xóa
Cải thiện hiệu năng
- Kết quả benchmark:
- Trên
AMD Ryzen 9 5950XvàM2 Ultra,SOFT_MAXnhanh hơn khoảng 1,5 lần. - Nếu tính cả
AVX2, mức cải thiện tăng từ 1,5 lần lên 1,9 lần. - Trên
znver4, nếu tính cảavx512, mức cải thiện tăng lên 2,1 lần.
- Trên
Ý kiến bổ sung
- Ý kiến của cộng tác viên:
- Khi dùng
AVX512, có thể dùngvscalefpsđể xử lý tràn số và hụt số đúng cách, đồng thời loại bỏ kiểm tra và blend. - Đã xác nhận có cải thiện hiệu năng trên
Skylake-AVX512/Cascadelake.
- Khi dùng
Ý kiến của GN⁺
- Cải thiện hiệu năng: Thay đổi này có thể cải thiện đáng kể hiệu năng trên CPU, đặc biệt trên phần cứng mới dùng
AVX2vàAVX512. - Độ phức tạp mã: Việc giảm độ phức tạp mã là quan trọng vì các triển khai
AVX2vàAVX512không mang lại lợi ích đủ lớn so vớiSSE2+fma. - Tương thích phần cứng: Hỗ trợ nhiều bộ lệnh SIMD là điều quan trọng để tối ưu hiệu năng trên nhiều loại phần cứng khác nhau.
- Benchmark: Cần benchmark trên nhiều phần cứng khác nhau để xác nhận mức cải thiện hiệu năng.
- Áp dụng công nghệ mới nhất: Việc tận dụng các bộ lệnh SIMD mới nhất là rất quan trọng để tối đa hóa hiệu năng.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt các bình luận trên Hacker News
Câu chuyện về bộ xử lý tín hiệu radar Hughes từ 20 năm trước
Tác động của việc cải thiện silu và softmax đối với tốc độ suy luận LLM
Sự thán phục với tối ưu hóa mã
Nghi vấn về kích thước LUT
So sánh llama.cpp và ggml trên CPU
So sánh hiệu năng trên thiết bị CUDA
Khả năng vector hóa LUT
Tính tanh nhanh
Hiệu năng của llama trên CPU