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

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 trong GGML.
    • Hỗ trợ aarch64sse2+, 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 avx2avx512, 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ới sse2+fma.
  • 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 5950XM2 Ultra, SOFT_MAX nhanh 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ờ SSE2 hoặc __ARM_NEON.

Cải thiện hiệu năng

  • Kết quả benchmark:
    • Trên AMD Ryzen 9 5950XM2 Ultra, SOFT_MAX nhanh 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.

Ý kiến bổ sung

  • Ý kiến của cộng tác viên:
    • Khi dùng AVX512, có thể dùng vscalefps để 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.

Ý 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 AVX2AVX512.
  • Độ phức tạp mã: Việc giảm độ phức tạp mã là quan trọng vì các triển khai AVX2AVX512 không mang lại lợi ích đủ lớn so với SSE2+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

 
GN⁺ 2024-05-16
Ý 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

    • Chia sẻ kinh nghiệm tối ưu hóa phép tính e^x trên bộ xử lý tín hiệu radar Hughes.
    • Sử dụng 256 bảng e^x cho từng giá trị 8 bit trong mỗi từ 32 bit, rồi nhân lại để ra giá trị cuối cùng.
    • Chạy nhanh hơn 5 lần so với trước đây.
    • Cỗ máy này giờ đã lỗi thời, nhưng vào thời đó từng có tốc độ xử lý rất nhanh.
  • Tác động của việc cải thiện silu và softmax đối với tốc độ suy luận LLM

    • Có ý kiến cho rằng tác động lên tốc độ suy luận LLM sẽ không lớn.
    • Phần lớn thời gian được dùng cho phép nhân ma trận.
  • Sự thán phục với tối ưu hóa mã

    • Ngạc nhiên và thán phục trước công việc tối ưu hóa phức tạp.
    • Sau khi biết người đóng góp là jart thì thấy cũng dễ hiểu.
  • Nghi vấn về kích thước LUT

    • Có ý kiến cho rằng LUT kích thước 65536 bằng toàn bộ kích thước cache L1 nên có thể kém hiệu quả.
    • Tuy nhiên, nhờ điều chỉnh theo xác suất nên có thể vẫn hoạt động tốt.
  • So sánh llama.cpp và ggml trên CPU

    • Có ý kiến thắc mắc ggml so với tensorflow lite, onnxruntime v.v. thì như thế nào.
  • So sánh hiệu năng trên thiết bị CUDA

    • Câu hỏi về việc gguf/llama.cpp có tốt hơn trong suy luận không batch hay exllamav2+flashattention vẫn chiếm ưu thế.
  • Khả năng vector hóa LUT

    • Có ý kiến cho rằng LUT có thể được vector hóa.
    • Có cung cấp liên kết tài liệu liên quan.
  • Tính tanh nhanh

    • Có cung cấp liên kết về cách tính tanh nhanh.
  • Hiệu năng của llama trên CPU

    • Có ý kiến cho rằng dù đã tối ưu, llama với nhiều tham số trên CPU vẫn có thể quá chậm.