1P by neo 6달전 | favorite | 댓글 1개

GGML: CPU용 SiLU 및 Softmax 재작성

주요 변경 사항

  • 벡터화된 expf() 함수 도입:

    • 기존의 GGML에서 사용하던 short[65536] 조회 테이블보다 더 정확하게 Softmax와 SiLU를 계산할 수 있게 됨.
    • aarch64sse2+를 지원하며, 최악의 경우 반올림 오류가 2 ULP임.
    • avx2avx512 구현도 작성되었으나, sse2+fma에 비해 코드 복잡성 대비 큰 이점이 없어 사용하지 않음.
  • 주요 반응:

    • 여러 기여자들이 이 변경 사항에 대해 긍정적인 반응을 보임.
    • AMD Ryzen 9 5950XM2 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 5950XM2 Ultra에서 SOFT_MAX가 약 1.5배 더 빠름.
    • AVX2를 포함하면 이점이 1.5배에서 1.9배로 증가.
    • znver4에서 avx512를 포함하면 2.1배로 증가.

추가 의견

  • 기여자 의견:
    • AVX512를 사용할 때 vscalefps를 사용하면 오버플로우와 언더플로우를 적절히 처리할 수 있으며, 체크 및 블렌드를 제거할 수 있음.
    • Skylake-AVX512/Cascadelake에서 성능 향상을 확인함.

GN⁺의 의견

  • 성능 개선: 이 변경 사항은 CPU에서의 성능을 크게 향상시킬 수 있으며, 특히 AVX2AVX512를 사용하는 최신 하드웨어에서 더 큰 이점을 제공함.
  • 코드 복잡성: AVX2AVX512 구현이 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가 너무 느릴 수 있다는 의견.