# LLaMA, 이제 CPU에서 더 빠른 속도로 작동

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

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14115](https://news.hada.io/topic?id=14115)
- GeekNews Markdown: [https://news.hada.io/topic/14115.md](https://news.hada.io/topic/14115.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-04-02T10:28:43+09:00
- Updated: 2024-04-02T10:28:43+09:00
- Original source: [justine.lol](https://justine.lol/matmul/)
- Points: 14
- Comments: 2

## Topic Body

### LLaMA의 CPU에서의 속도 향상  
- Mozilla의 llamafile 프로젝트에서 84개의 새로운 행렬 곱셈 커널을 작성함  
- F16과 Q8_0 가중치를 CPU에서 사용할 때 llama.cpp에 비해 프롬프트 평가 시간이 30%에서 500% 더 빨라짐  
- ARMv8.2+ (예: RPI 5), Intel (예: Alderlake), AVX512 (예: Zen 4) 컴퓨터에서 가장 극적인 개선이 이루어짐  
- L2 캐시에 맞는 행렬에 대해 MKL보다 2배 빠른 속도를 보임  
- 1,000개 미만의 토큰을 가진 프롬프트에 대해 속도 향상이 가장 잘 작동함  
  
### 배경  
- llamafile은 2023년 11월 Mozilla와 함께 시작한 로컬 LLM 프로젝트임   
- Cosmopolitan Libc를 사용하여 llama.cpp를 단일 파일 크로스 플랫폼 바이너리로 패키징함  
- AMD64와 ARM64용 6개 OS에서 실행되며 약간의 수정이 이루어짐  
- 핵심 기술을 개선함으로써 사용자에게 최상의 llama.cpp 경험을 제공하고 두 프로젝트가 더 넓은 청중에 다가갈 수 있도록 도울 수 있다고 믿음  
- Mozilla는 이를 위한 리소스를 제공해 왔음  
  
### 엔터프라이즈 하드웨어에서의 성능 향상  
- 처음 LLM에 관심을 가졌을 때 작업 환경은 회전 디스크, 느린 RAM, AVX2 프로세서, GPU 없이 Alpine을 실행하는 검소한 Hewlett Packard였음  
- llama.cpp가 마음에 들었던 점은 그들이 자신과 같은 사람들을 가장 먼저 신경 썼다는 것임  
- 전임으로 자원 봉사를 시작했고 Slaren과 같은 사람들과 협력하여 mmap() 지원을 도입했는데, 이는 RAM 사용량을 절반으로 줄이면서 가중치를 즉시 로드할 수 있게 해줌  
- 당시 로컬 LLM에 있어 큰 도약이었지만 평가 속도 개선에는 거의 기여하지 못함  
- 추론 코드의 대부분은 Georgi Gerganov 자신이 작성했으며 너무 훌륭해서 결국 1년이 더 걸려서야 개선할 수 있었음  
- 이제 개선했으니 옛 Hewlett Packard에서 얼마나 더 빨라졌는지 살펴보자는 것  
  
### 취미용 하드웨어에서의 성능 향상  
- 대형 컴퓨터가 없어도 대형 언어 모델을 실행할 수 있음  
- 오늘날 매장에서 구할 수 있는 최고의 개인용 컴퓨터 중 하나는 Raspberry Pi임  
- 저렴한 가격에 우수한 성능을 제공하며 전력 소모량이 매우 적음  
- Raspberry Pi는 5세대를 며칠 전에 출시했는데 이전 모델에 비해 엄청나게 빠름  
- ARMv8.2 dotprod 및 fp16 산술 ISA에 대한 지원도 도입했는데, 이는 LLM에 매우 유용함  
- 이 두 가지 기능만으로도 작년에 llama.cpp가 f16 가중치에 대해 10배의 성능 향상을 달성할 수 있게 해줌  
- 이번 주에는 원래 AVX512를 위해 의도했던 커널을 사용하여 그 위에 2배의 성능 향상을 더 이끌어냄  
- 데이터 센터 장비용으로 설계된 커널이 작고 가벼운 Raspberry Pi에 잘 맞을 거라고는 생각하지 못했지만, 두 CPU 모두 32개의 벡터 레지스터를 가지고 있기 때문에 실제로 딱 들어맞았음  
  
### 게이밍 하드웨어에서의 성능 향상  
- 게이머는 가치 소비자 중 가장 높은 품질 기대치를 가지고 있어서 게이머를 위해 만들어진 하드웨어는 보통 꽤 훌륭함  
- 기계 학습 업계에서는 게이머를 위한 하드웨어를 전용하여 수년간 번성해 왔음   
- 게이머들의 중요한 기여가 없었다면 AI 겨울은 10년 더 지속되었어야 했을 것임  
- 몇 달 전, 옛 Hewlett Packard를 대체할 수 있는 컴퓨터를 만들어달라고 게이머에게 부탁함  
- Alderlake는 훌륭한 CPU라고 생각하지만 float16 성능을 5배나 쉽게 높일 수 있었던 것으로 보아 널리 오해받고 있음  
- ARMv8.2와 달리 x86 커널은 내부적으로 float32 연산 유형을 사용하므로 반올림 오차를 발생시키지 않고 그렇게 할 수 있었음  
- 이는 더 스마트한 스팸 필터를 만들 수 있음을 의미함  
- spam.sh 셸 스크립트를 실행하면 420밀리초밖에 걸리지 않는데, 이는 Raspberry Pi 5보다 7배 빠른 것임  
- 작은 작업량에 있어서는 CUDA가 시작되기도 전에 이 칩이 마무리할 수 있는 것  
- Alderlake 소유자들은 llamafile이 효율성 코어에서 실행되지 않도록 특별히 주의를 기울인다는 사실을 기대할 수 있음  
- 이는 llamafile이 llama.cpp보다 빠르게 실행되는 데 도움이 되는 것들 중 하나임  
- 또한 LLM을 24시간 내내 실행해도 컴퓨터의 다른 프로그램에 여전히 충분한 리소스가 남아 있음을 의미함  
- llama.cpp는 쓰레드를 lockstep으로 디스패치하므로, 1개의 코어가 다른 코어보다 오래 작업을 수행하면 다른 모든 n개의 코어가 완료될 때까지 busy loop를 수행해야 했을 것임  
- 이 마이크로프로세서의 가장 큰 특징은 Cosmopolitan monorepo의 260만 줄의 코드를 얼마나 빨리 빌드할 수 있는지임  
- Hewlett Packard는 항상 64초가 걸렸지만 이 게이밍 컴퓨터는 20초면 됨  
- 원래는 35초가 걸렸는데, 액체 금속과 AI 오버클로킹을 적용하여 더 빨라졌음  
- Alderlake에서 시스템 코드가 매우 빠른 또 다른 이유는 이 CPU 제작 과정에서 해커와 과학자 사이에 격렬한 싸움이 있었고 해커가 이겼기 때문임  
- 앞으로 AVX512에 대해 더 나은 타협점을 마련하기를 바라지만, 이전 모델에 비해 상당한 진전을 나타낸다고 믿기에 이 칩에 대해 전반적으로 매우 만족함  
  
### 애플 하드웨어에서의 성능 향상   
- 가장 수준 높은 개인용 컴퓨터라면 단연 Mac Studio일 것임  
- 여기서 성능 우위를 차지하는 것은 llama.cpp 개발자들이 가장 신경 쓰는 하드웨어 플랫폼이기 때문에 나에게 더 어려웠고, Stallman의 컴파일러를 사용하기로 한 선택 때문에 애플의 독점 도구 대신 핸디캡을 안고 작업하고 있음  
- M2 마이크로프로세서가 llamafile을 합성 콘텐츠의 급수관으로 만드는 것에 놀라지 않을 것임  
- 애플이 이를 위해 사용한 트릭은 수직 통합을 활용하는 것임  
- Mac Studio를 구입하고 내부를 들여다보면 RAM DIMM을 CPU 안에 넣었다는 것을 발견하게 될 것임  
- CPU가 더 이상 이러한 장거리 전화를 걸 필요가 없기 때문에 토큰 생성과 같은 대기 시간에 따른 작업 속도가 훨씬 빨라짐  
- 그러나 순수한 flop 측면에서 (프롬프트 tok/sec로 측정) M2 Ultra ARM ISA는 내 훨씬 저렴한 Intel 컴퓨터에 비해 30% 더 많은 계산만 노출함을 알 수 있음  
- Metal이나 Accelerate와 같은 독점 프레임워크를 통해야만 더 많은 것에 액세스할 수 있음  
- xcode가 설치되어 있다면 llamafile은 기본적으로 당신과 실리콘 사이에 있는 모든 폐쇄 소스 라이브러리 앞에 서도록 도와주는 작은 스텁 모듈을 컴파일할 것임  
- Mac Studio 구매를 고려하고 있다면 중요한 한 가지는 Windows Executive와 마찬가지로 XNU가 데스크톱을 안정적으로 유지하는 데 정말 좋은 일을 한다는 것이고, 그것은 시스템을 당신으로부터 보호한다는 의미임  
- 이러한 모든 안전 기능 때문에 Mac Studio에서 Cosmo monorepo를 컴파일하는 데 45초가 걸리지만 포크 폭탄을 터뜨려도 Netflix가 단 한 프레임도 건너뛰지 않을 것 같음  
- spam.sh 스크립트도 430ms로 실행되어 Intel보다 느림  
- 그러나 Asahi Linux가 M2의 잠재력을 최대한 발휘할 수 있는 방법을 보았기 때문에 이 중 어느 것도 나를 걱정시키지 않음  
  
### 전문가용 하드웨어에서의 성능 향상  
- llamafile은 GPU가 부족한 사람들을 돕는 데 큰 관심을 기울이지만 상위 1%에게도 최고 수준의 경험을 제공함  
- AMD Ryzen Threadripper PRO 7995WX는 몇 달 전에 출시되었으며 현재 돈으로 살 수 있는 가장 비싼 CPU임  
- 1만 달러의 비용이 들지만 Zen4 아키텍처를 기반으로 96코어의 AVX512를 얻을 수 있음  
- 두 배의 가격임에도 불구하고 7995WX x86 ISA는 M2 Ultra ARM ISA보다 7배 더 많은 원시 컴퓨팅 성능을 제공하며 거의 동일한 토큰 생성 속도를 보임  
- 이는 384MB L3 캐시 덕분일 가능성이 큼  
- AVX512의 한 가지 장점은 Google의 Gemma 모델이 AVX512에서는 수학 수수께끼를 풀 수 있지만 AVX2에서는 그렇지 않다는 것인데, 더 큰 벡터가 일반적으로 반올림 오차를 줄이기 쉽기 때문임  
- VDPBF16PS 명령은 VNNI 및 ARM dotprod와 유사하게 bf16을 updot하는 데 도움이 됨  
- Mistral 및 TinyLLaMA와 같은 모델은 정식 형식으로 bfloat16을 사용하여 가중치를 배포하므로 bf16에 대한 기본 지원이 좋음  
- bf16을 fp16으로 변환하면 가능한 숫자의 13%만 정확하게 표현될 수 있음  
- 실제로 Mistral 7b가 사용하는 숫자의 99.71%가 해당 13% 중에 있기 때문에 거의 중요하지 않음  
- 그러나 llamafile은 주장되는 비트 수를 최선을 다해 전달

## Comments



### Comment 24175

- Author: savvykang
- Created: 2024-04-02T15:46:20+09:00
- Points: 1

인텔 14600이나 라이젠 5600 같은 중급기에 대한 데이터가 없네요. 라즈베리 파이에서 돌아는 간다는 걸 의도한거 같긴 한데 실사용에는 무리가 있을거 같아 보입니다. 그럼에도 불구하고 로컬 LLM 구동에 필요한 하드웨어 스펙이 점점 내려가고 있다는 것을 위안으로 삼고 싶습니다

### Comment 24169

- Author: neo
- Created: 2024-04-02T10:28:43+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39890262) 
- Fortran `SGEMM` 구현에 대한 의견:
  - 현대의 Fortran 컴파일러는 추가적인 변경 없이도 AVX와 FMA 최적화를 적용할 수 있음.
  - 루프 언롤링(loop unrolling) 최적화는 컴파일러 플래그(`-funroll-all-loops`)를 통해 가능.
  - Intel 컴파일러는 사용자의 명시적 요청 없이도 루프 언롤링을 수행.
  - Fortran 77 소스에 병렬화를 추가하는 것은 어려울 수 있지만, OpenMP 구문을 추가하거나 현대 Fortran의 병렬화 구조를 사용할 수 있음.
  - Fortran 77 함수를 과소평가하지 말 것. 플랫폼 특정 세부 사항으로부터 개발자를 해방시키고 컴파일러에게 작업을 맡기는 것이 Fortran의 목적임.

- cuBLAS 대체에 대한 의견:
  - cuBLAS를 CUDA 내에서 다시 작성하려는 시도로 보임.
  - 다음 단계는 CUDA 의존성을 제거하고 Vulkan이나 Metal 컴퓨트 셰이더를 직접 사용하는 것일 수 있음.

- LLM(Local Language Model) 실행에 대한 의견:
  - 모든 사람이 최소한의 요구 사항으로도 로컬에서 LLM을 다운로드하고 실행할 수 있어야 함.
  - 이는 인간 지식의 큰 부분을 백업하는 역할을 할 수 있음.

- 성능 측정에 대한 의견:
  - C++를 사용하여 서브루틴을 정의하는 것을 선호함. C++는 Python보다 세 오더 이상 빠름.
  - 성능 차이를 "무어의 법칙의 연도"로 측정하는 아이디어를 좋아함.

- 관련 링크 제공:
  - 성능 개선과 관련된 자료로 [UTexas LAFF](https://www.cs.utexas.edu/users/flame/laff/pfhp/index.html)와 [Nadav Rotem의 Gist](https://gist.github.com/nadavrot/5b35d44e8ba3dd718e595e40184d03f0)를 참조할 것.

- 제목에 대한 의견:
  - 제목이 혼란스러움. 처음에는 모델이 CPU에서 GPU보다 빠르다고 주장하는 것으로 오해할 수 있음.
  - "LLaMa on CPU의 성능 개선"과 같이 더 명확한 제목이 좋을 것.

- MKL-DNN 대비 성능 개선에 대한 의견:
  - 제한된 행렬 크기에 대해 MKL-DNN을 능가하려 했지만 실패한 경험이 있음.
  - CPU에서 이러한 에너지 효율성은 물리적으로 불가능함.

- LLM 실행에 대한 의견:
  - 큰 컴퓨터 없이도 큰 언어 모델을 실행할 수 있음.
  - 작은 파라미터 모델을 실행하는 것도 기술적으로 언어 모델 실행에 해당하지만, 대부분의 사람들이 유용하다고 생각하는 기준을 충족하지 못할 수 있음.

- Pixar의 CPU 사용에 대한 의견:
  - Pixar와 같은 대형 스튜디오가 비용/성능 및 더 큰 RAM 접근성 때문에 영화 렌더링에 CPU를 사용함.
  - [관련 뉴스 링크](https://news.ycombinator.com/item?id=25616372) 제공.

- AMD Zen4와 AVX512에 대한 의견:
  - 7995WX x86 ISA는 M2 Ultra ARM ISA보다 가격은 두 배지만, 7배 더 많은 원시 컴퓨팅 파워를 제공하며, 토큰 생성 속도도 거의 동일함.
  - 이는 384MB L3 캐시 덕분일 가능성이 있음.
  - Zen4에서 LLaMA를 이전보다 2.8배 빠르게 실행할 수 있게 하는 작업을 수행함.
