GN⁺: Lm.rs: 의존성 없는 Rust 기반 최소 CPU LLM 추론 기술
(github.com/samuel-vitorino)lm.rs: Rust로 CPU에서 로컬 언어 모델 추론 실행
-
소개
- lm.rs는 Rust를 사용하여 CPU에서 언어 모델 추론을 실행할 수 있는 프로젝트임.
- Karpathy의 llama2.c와 llm.c에서 영감을 받아 ML 라이브러리 없이 최소한의 코드로 언어 모델을 실행할 수 있도록 설계됨.
- Google의 Gemma 2 모델만 지원했으나, 이제 Llama 3.2 모델과 PHI-3.5 이미지 모델도 지원함.
-
준비된 모델
- 다양한 모델과 토크나이저의 벤치마크 및 다운로드 링크 제공.
- Q8_0, Q4_0 양자화 모델 사용 권장.
- 속도는 16코어 AMD Epyc에서 측정됨.
-
모델 변환
- Google/Meta의 모델을 lmrs 형식으로 변환 가능.
- Python 의존성 설치 후, export.py와 tokenizer.py 스크립트 사용하여 모델과 토크나이저 변환 가능.
-
빌드
- Rust 코드를 cargo로 컴파일하여 실행 가능.
- 멀티모달 기능을 활성화하려면 multimodal 기능 포함 필요.
-
TODOs
- 샘플링 방법 추가.
- 9B 및 27B 모델 테스트.
- 멀티 헤드 어텐션 루프 병렬화.
- 성능 메트릭 추가.
- 시스템 프롬프트 제공 기능 추가.
- 양자화 지원 (int8, int4).
# GN⁺의 정리
- lm.rs는 Rust로 CPU에서 언어 모델을 실행할 수 있는 효율적인 방법을 제공함. 이는 ML 라이브러리 없이도 가능하여 경량화된 환경에서 유용함.
- Rust를 처음 사용하는 개발자에게도 적합하며, 다양한 모델을 지원하여 확장성이 높음.
- PHI-3.5와 같은 멀티모달 모델 지원으로 이미지 처리 기능도 포함되어 있음.
- 유사한 기능을 가진 프로젝트로는 Hugging Face의 Transformers 라이브러리가 있음.
Hacker News 의견
- M2 64GB MacBook에서 1.2G llama3.2-1b-it-q80.lmrs를 실행했을 때 빠르게 작동했으며, CPU 사용량이 13개의 스레드에서 1000%였음
- 코드 예시를 통해 Transformer의 작동 방식을 설명하는 데 유용할 것 같음
- 라이브러리가 stdout에 출력하지 않도록 개선할 필요가 있음
- "unsafe" 없이 구현할 수 있는지에 대한 의문이 있음
- 다양한 Rust 도구를 사용하여 모델 로딩 및 기타 LLM 작업을 수행할 수 있음
- Python 의존성을 줄이는 데 도움이 될 수 있음
- 문법 지원 계획이 있는지 궁금함
- 제목이 명확하지 않음
- "no dependency"라는 표현이 오해를 불러일으킬 수 있음
- 과거에 비슷한 작업을 했지만 성능이 만족스럽지 않았음
- Rust 구현의 벤치마크가 필요함
- LLM 추론 구현이 프로그래머에게 새로운 "hello world!"가 될 수 있음
- Metal/Cuda 지원이 필수적임
- Rust 커뮤니티의 열정을 높이 평가함
- 이 구현들이 모두 CPU에 의존하는지 궁금함
- 다른 프로젝트와의 비교가 필요함
- Vision 모델을 지원하면 시도해볼 의향이 있음