ฟังก์ชันเอ็กซ์โพเนนเชียลตัวใหม่ที่ทำให้ SiLU และ SoftMax เร็วขึ้น 2 เท่า โดยยังคงความแม่นยำไว้ครบถ้วน
(github.com/ggerganov)GGML: เขียน SiLU และ Softmax สำหรับ CPU ใหม่
การเปลี่ยนแปลงหลัก
-
เพิ่มฟังก์ชัน
expf()แบบเวกเตอร์:- ทำให้สามารถคำนวณ Softmax และ SiLU ได้แม่นยำกว่า lookup table แบบ
short[65536]ที่GGMLใช้อยู่เดิม - รองรับ
aarch64และsse2+และในกรณีแย่ที่สุดมีข้อผิดพลาดจากการปัดเศษ 2 ULP - มีการเขียนอิมพลีเมนเทชัน
avx2และavx512ด้วย แต่ไม่ได้ใช้งาน เพราะเมื่อเทียบกับsse2+fmaแล้วแทบไม่มีข้อดีมากพอเมื่อเทียบกับความซับซ้อนของโค้ด
- ทำให้สามารถคำนวณ Softmax และ SiLU ได้แม่นยำกว่า lookup table แบบ
-
เสียงตอบรับหลัก:
- ผู้มีส่วนร่วมหลายคนแสดงความเห็นเชิงบวกต่อการเปลี่ยนแปลงนี้
SOFT_MAXเร็วขึ้นราว 1.5 เท่าบนAMD Ryzen 9 5950XและM2 Ultra
การเปลี่ยนแปลงของโค้ด
- สรุปการเปลี่ยนแปลงหลัก:
- ลบ
#defineที่ถูกคอมเมนต์ไว้ - แยกโค้ดซ้ำ 5 บรรทัดออกมาเป็น
ggml_vec_soft_max_f32() - ลบฟังก์ชันที่เกี่ยวข้องกับ
GGML_SILU_FP16 - เพิ่ม
ggml_v_expf() - เพิ่ม
ggml_v_silu() - ปรับ
ggml_vec_silu_f32()ด้วยคำสั่งพรีโปรเซสเซอร์ตามแฟลกSSE2หรือ__ARM_NEON
- ลบ
การปรับปรุงประสิทธิภาพ
- ผลการเบนช์มาร์ก:
SOFT_MAXเร็วขึ้นราว 1.5 เท่าบนAMD Ryzen 9 5950XและM2 Ultra- เมื่อรวม
AVX2ข้อได้เปรียบเพิ่มจาก 1.5 เท่าเป็น 1.9 เท่า - บน
znver4เมื่อรวมavx512เพิ่มเป็น 2.1 เท่า
ความเห็นเพิ่มเติม
- ความเห็นจากผู้มีส่วนร่วม:
- เมื่อใช้
AVX512หากใช้vscalefpsจะสามารถจัดการ overflow และ underflow ได้อย่างเหมาะสม และตัดการตรวจสอบกับการ blend ออกได้ - ยืนยันการปรับปรุงประสิทธิภาพบน
Skylake-AVX512/Cascadelake
- เมื่อใช้
ความเห็นของ GN⁺
- การปรับปรุงประสิทธิภาพ: การเปลี่ยนแปลงนี้สามารถเพิ่มประสิทธิภาพบน CPU ได้อย่างมาก โดยเฉพาะบนฮาร์ดแวร์รุ่นใหม่ที่ใช้
AVX2และAVX512 - ความซับซ้อนของโค้ด: เนื่องจากอิมพลีเมนเทชัน
AVX2และAVX512ไม่ได้ให้ข้อได้เปรียบมากนักเมื่อเทียบกับSSE2+fmaการลดความซับซ้อนของโค้ดจึงเป็นเรื่องสำคัญ - ความเข้ากันได้ของฮาร์ดแวร์: การรองรับชุดคำสั่ง SIMD ที่หลากหลายเป็นสิ่งสำคัญเพื่อเพิ่มประสิทธิภาพบนฮาร์ดแวร์หลายประเภท
- เบนช์มาร์ก: จำเป็นต้องมีการทดสอบเบนช์มาร์กบนฮาร์ดแวร์ที่หลากหลายเพื่อยืนยันการปรับปรุงประสิทธิภาพ
- การใช้เทคโนโลยีล่าสุด: การใช้ชุดคำสั่ง SIMD รุ่นล่าสุดเพื่อดึงประสิทธิภาพสูงสุดเป็นสิ่งสำคัญ
1 ความคิดเห็น
ความเห็นจาก Hacker News
สรุปรวมความคิดเห็นจาก Hacker News
เรื่องเล่าเกี่ยวกับตัวประมวลผลสัญญาณเรดาร์ของ Hughes เมื่อ 20 ปีก่อน
ผลกระทบของการปรับปรุง silu และ softmax ต่อความเร็วในการอนุมานของ LLM
ความทึ่งต่อการปรับแต่งโค้ด
ข้อสงสัยเกี่ยวกับขนาดของ LUT
การเปรียบเทียบ llama.cpp กับ ggml บน CPU
การเปรียบเทียบประสิทธิภาพบนอุปกรณ์ CUDA
ความเป็นไปได้ในการทำ LUT ให้เป็นเวกเตอร์
การคำนวณ tanh แบบเร็ว
ประสิทธิภาพของ llama บน CPU