GN⁺: SiLU와 SoftMax를 2배 빠르게 만드는 새로운 지수 함수, 정확도 완전 유지
(github.com/ggerganov)GGML: CPU용 SiLU 및 Softmax 재작성
주요 변경 사항
-
벡터화된
expf()
함수 도입:- 기존의
GGML
에서 사용하던short[65536]
조회 테이블보다 더 정확하게 Softmax와 SiLU를 계산할 수 있게 됨. -
aarch64
와sse2+
를 지원하며, 최악의 경우 반올림 오류가 2 ULP임. -
avx2
와avx512
구현도 작성되었으나,sse2+fma
에 비해 코드 복잡성 대비 큰 이점이 없어 사용하지 않음.
- 기존의
-
주요 반응:
- 여러 기여자들이 이 변경 사항에 대해 긍정적인 반응을 보임.
-
AMD Ryzen 9 5950X
와M2 Ultra
에서SOFT_MAX
가 약 1.5배 더 빠름.
코드 변경 사항
-
주요 변경 사항 요약:
- 주석 처리된
#define
제거. - 중복된 5줄을
ggml_vec_soft_max_f32()
로 추출. -
GGML_SILU_FP16
관련 함수 제거. -
ggml_v_expf()
추가. -
ggml_v_silu()
추가. -
ggml_vec_silu_f32()
를SSE2
또는__ARM_NEON
플래그에 따라 조정하는 전처리기 문으로 조정.
- 주석 처리된
성능 개선
-
벤치마크 결과:
-
AMD Ryzen 9 5950X
와M2 Ultra
에서SOFT_MAX
가 약 1.5배 더 빠름. -
AVX2
를 포함하면 이점이 1.5배에서 1.9배로 증가. -
znver4
에서avx512
를 포함하면 2.1배로 증가.
-
추가 의견
-
기여자 의견:
-
AVX512
를 사용할 때vscalefps
를 사용하면 오버플로우와 언더플로우를 적절히 처리할 수 있으며, 체크 및 블렌드를 제거할 수 있음. -
Skylake-AVX512
/Cascadelake
에서 성능 향상을 확인함.
-
GN⁺의 의견
-
성능 개선: 이 변경 사항은 CPU에서의 성능을 크게 향상시킬 수 있으며, 특히
AVX2
와AVX512
를 사용하는 최신 하드웨어에서 더 큰 이점을 제공함. -
코드 복잡성:
AVX2
와AVX512
구현이SSE2+fma
에 비해 큰 이점을 제공하지 않기 때문에 코드 복잡성을 줄이는 것이 중요함. - 하드웨어 호환성: 다양한 하드웨어에서의 성능을 최적화하기 위해 다양한 SIMD 명령어 세트를 지원하는 것이 중요함.
- 벤치마크: 성능 개선을 확인하기 위해 다양한 하드웨어에서의 벤치마크 테스트가 필요함.
- 최신 기술 적용: 최신 SIMD 명령어 세트를 활용하여 성능을 극대화하는 것이 중요함.
Hacker News 의견
해커뉴스 댓글 모음 요약
-
20년 전 Hughes 레이더 신호 프로세서 이야기
- Hughes 레이더 신호 프로세서에서 e^x 계산을 최적화한 경험 공유.
- 32비트 단어의 각 8비트 값에 대해 256개의 e^x 테이블을 사용하여 최종 값을 곱셈으로 계산.
- 이전보다 5배 빠르게 동작했음.
- 이 기계는 이제는 구식이지만 당시에는 매우 빠른 처리 속도를 자랑했음.
-
LLM 추론 속도에 대한 silu와 softmax 개선의 영향
- LLM 추론 속도에 미치는 영향이 크지 않을 것이라는 의견.
- 대부분의 시간은 행렬 곱셈에 소비됨.
-
코드 최적화에 대한 감탄
- 복잡한 최적화 작업에 대한 놀라움과 감탄.
- 기여자가 jart라는 것을 알고 나서 이해하게 됨.
-
LUT 크기에 대한 의문
- 65536 크기의 LUT가 L1 캐시 전체 크기와 같아 비효율적일 수 있다는 의견.
- 그러나 확률적 조정으로 인해 잘 작동할 수도 있음.
-
CPU에서의 llama.cpp와 ggml 비교
- ggml이 tensorflow lite, onnxruntime 등과 비교해 어떤지 궁금해하는 의견.
-
CUDA 장치에서의 성능 비교
- gguf/llama.cpp가 비배치 추론에서 더 나은지, 아니면 exllamav2+flashattention이 여전히 우세한지에 대한 질문.
-
LUT 벡터화 가능성
- LUT를 벡터화할 수 있다는 의견.
- 관련 자료 링크 제공.
-
빠른 tanh 계산
- 빠른 tanh 계산에 대한 링크 제공.
-
CPU에서의 llama 성능
- 최적화에도 불구하고 CPU에서 많은 파라미터를 가진 llama가 너무 느릴 수 있다는 의견.