# SiLU와 SoftMax를 2배 빠르게 만드는 새로운 지수 함수, 정확도 완전 유지

> Clean Markdown view of GeekNews topic #14851. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14851](https://news.hada.io/topic?id=14851)
- GeekNews Markdown: [https://news.hada.io/topic/14851.md](https://news.hada.io/topic/14851.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-16T22:34:34+09:00
- Updated: 2024-05-16T22:34:34+09:00
- Original source: [github.com/ggerganov](https://github.com/ggerganov/llama.cpp/pull/7154)
- Points: 1
- Comments: 1

## Topic Body

### 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 명령어 세트를 활용하여 성능을 극대화하는 것이 중요함.

## Comments



### Comment 25311

- Author: neo
- Created: 2024-05-16T22:34:35+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40371612) 
##### 해커뉴스 댓글 모음 요약

* **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가 너무 느릴 수 있다는 의견.
