Show HN: LLM, CPU 추론을 위한 Rust 크레이트/CLI (LLaMA, GPT-NeoX 등)
요약
본 글은 LLM 추론을 위한 Rust 기반 크레이트 및 CLI 도구들을 소개하며, 기존 `llm` 대신 더 활발하게 관리되는 대안들을 제시합니다. Ratchet, Candle 등 순수 Rust 라이브러리부터 llama.cpp를 활용하는 래퍼까지 다양한 옵션을 비교 분석하여 개발자들에게 최적의 솔루션을 안내하고 있습니다.
핵심 포인트
- Rust 기반 LLM 추론을 위한 여러 고품질 대안들이 존재합니다.
- Candle은 플랫폼 지원 없이 순수 Rust로 ML 추론에 초점을 맞춘 라이브러리입니다.
- llama.cpp를 활용하는 래퍼들은 높은 수준의 사용 편의성을 제공합니다.
- allms나 llmclient 같은 크레이트는 여러 외부 LLM API 통합을 목표로 합니다.
보관 공지
이 저장소는 지속적인 개발에 필요한 시간과 자원이 부족하여 아카이브되었습니다.
만약 이 프로젝트의 개발을 계속하거나 크레이트 이름을 얻는 데 관심이 있다면, @philpax에게 연락해 주십시오.
Rust에서 LLM 및 기타 모델 추론을 위한 몇 가지 고품질 대안들이 있습니다. llm 대신 이 라이브러리들을 사용하는 것을 고려하는 것이 좋습니다. 이들은 최신 상태로 유지되고 있으며 더 활발하게 관리될 가능성이 높습니다.
아래에 일부 목록이 제시되어 있습니다. 참고로, 이것은 포괄적인 목록이 아니며, 여러분에게 가장 적합한 솔루션은 이 목록이 작성된 이후 변경되었을 수 있습니다:
- Ratchet: 웹 지원과 효율적인 추론에 중점을 둔
wgpu-기반 ML 추론 라이브러리 - Candle-기반 라이브러리 (즉, 플랫폼 지원 라이브러리를 제외한 순수 Rust):
- mistral.rs: 인기 있는 LLM 아키텍처의 양자화된 모델을 지원하며, Apple Silicon + CPU + CUDA를 지원하고 사용하기 쉽도록 설계되었습니다.
- kalosm: 언어, 오디오 및 이미지 모델을 위한 간단한 인터페이스
- candle-transformers: Hugging Face Transformers와 유사하게 다양한 트랜스포머 기반 모델 추론을 위한 1차 파티 Candle 라이브러리. 비교적 낮은 수준이므로 ML에 대한 지식이 일부 필요합니다.
- callm: Llama, Mistral, Phi 3 및 Qwen 2를 지원합니다.
- llama.cpp 래퍼 (즉,
순수 Rust는 아니지만, 오픈 소스 컴파일된 LLM 추론의 최전선에 있는 크레이트들):
- drama_llama:
llama.cpp를 활용한 고수준(high-level) Rust 방식 래퍼 - llm_client: 다른 외부 LLM API도 지원함
- llama_cpp: 안전하고 고수준(high-level) Rust 바인딩
- llama-cpp-2: C++ API를 면밀히 따르는 가벼운 래핑 원시 바인딩
- 외부 LLM API 통합기:
원래의 README가 이어집니다.
llm - 모든 사람을 위한 대규모 언어 모델(Large Language Models for Everyone), Rust 기반
llm은 대규모 언어 모델(LLM) 작업을 위한 Rust 라이브러리 생태계입니다. 머신러닝용 빠르고 효율적인 GGML 라이브러리를 기반으로 구축되었습니다.

이미지 제공: @darthdeus, Stable Diffusion 사용
현재 상태(Current State)
이 라이브러리는 더 이상 활발하게 유지보수되지 않습니다. 참고로, 다음은 마지막 업데이트 시점의 프로젝트 현황입니다.
현재 llm (크레이트 및 CLI)의 네 가지 버전이 사용 가능합니다:
- 크레이트(crate)
crates.io에 릴리스된 버전0.1.1. 이 버전은 매우 오래되었으며 가장 최신 모델을 지원하지 않습니다. - 이 저장소의
main브랜치. 이 버전은 GGMLv3 모델 추론을 안정적으로 수행할 수 있지만, GGUF를 지원하지 않으며 구형 버전의 GGML을 사용합니다. - 이 저장소의
gguf브랜치; 이는 GGUF로 추론하는 것을 지원하지만 Llama 외 다른 어떤 모델도 지원하지 않고, Hugging Face 토크나이저 사용을 요구하며, 양자화(quantization)를 지원하지 않습니다. 또한 구형 버전의 GGML을 사용합니다. - 이 저장소의
develop브랜치. 이는 최신 버전의 GGML과 동기화하고 모든 모델 및 GGUF를 지원하기 위해llama.cpp를 처음부터 다시 구현한 것입니다. 프로젝트 아카이빙으로 인해 완성되지 않을 것입니다.
개요 (Overview)
개발자를 위한 주요 진입점 llm 사용 방법은 llm 크레이트이며, 이는 llm-base와 지원되는 모델(supported model) 크레이트](./crates/models)를 래핑합니다.
릴리스된 버전에 대한 문서화는 Docs.rs에서 확인할 수 있습니다.
최종 사용자(end-users)의 경우, 지원되는 모델과 상호 작용하기 위한 편리한 인터페이스를 제공하는 CLI 애플리케이션, llm-cli가 있습니다. 텍스트 생성은 프롬프트를 기반으로 일회성(one-off)으로 수행하거나, REPL 또는 채팅 모드를 통해 상호 작용할 수 있습니다. CLI는 또한 디코딩된 모델을 직렬화(print)하거나, 양자화 GGML 파일을 양자화하거나, 모델의 퍼플렉시티를 계산하는 데 사용될 수 있습니다. 이는 최신 GitHub 릴리스에서 다운로드하거나 crates.io에서 설치하여 사용할 수 있습니다.
llm은 ggml 텐서 라이브러리를 기반으로 하며, 대규모 언어 모델(LLM) 분야에 Rust의 견고함과 사용 용이성을 가져오는 것을 목표로 합니다. 현재 추론은 CPU에서만 가능하지만, 향후 대체 백엔드를 통해 GPU 추론을 지원할 수 있기를 기대합니다.
현재 지원되는 모델은 다음과 같습니다:
- BLOOM
- GPT-2
- GPT-J
- GPT-NeoX (다음 모델 포함: StableLM, RedPajama, 그리고 Dolly 2.0)
- LLaMA (다음 모델 포함: Alpaca, Vicuna, Koala, GPT4All, 그리고 Wizard)
- MPT
지원되는 모델을 다운로드하는 방법에 대한 자세한 내용은 getting models를 참조하십시오.
Rust 프로젝트에서 llm 사용하기
이 프로젝트는 Rust v1.65.0 이상과 최신 C 툴체인을 필요로 합니다.
llm 크레이트는 llm-base와 모델 크레이트(예: bloom, gpt2, llama)를 내보냅니다.
Cargo.toml에 의존성으로 나열하여 프로젝트에 llm을 추가하십시오. 이 저장소의 main 브랜치에서 볼 수 있는 버전의 llm을 사용하려면 GitHub에서 추가하십시오 (다만, 이것이 프리릴리즈 소프트웨어라는 점은 유념해 주십시오):
[dependencies]
llm = { git =
릴리스된 [링크](https://github.com/rustformers/llm/releases) 버전을 사용하려면, 원하는 버전을 지정하여 [crates.io](https://crates.io/crates/llm)에서 추가하세요:
```toml
[dependencies]
llm = "0.1"
기본적으로 llm은 Hugging Face의 모델 허브에서 토크나이저를 원격으로 가져오는 지원을 포함하여 빌드됩니다.
이를 비활성화하려면, 크레이트의 기본 기능을 비활성화하고 models 기능을 켜서 토크나이저가 없는 llm을 얻으세요:
[dependencies]
llm = { version = "0.1", default-features = false, features = ["models"] }
참고: 디버그 성능 향상을 위해, 전이(transitive) ggml-sys 의존성을 디버그 모드에서 빌드되는 것을 제외하세요:
[profile.dev.package.ggml-sys]
opt-level = 3
llm을 활용한 가속기 사용 (Leverage Accelerators with llm)
llm 라이브러리는 최적의 성능을 위해 cuda 및 metal과 같은 하드웨어 가속기를 활용하도록 설계되었습니다.
llm이 이러한 가속기를 활용할 수 있도록 활성화하려면, 운영 체제에 따라 필요한 몇 가지 사전 구성 단계가 있으며, 포괄적인 지침은 당사 문서의 링크를 참조해 주십시오.
다른 언어에서 llm 사용하기 (Using llm from Other Languages)
이 라이브러리에 대한 바인딩은 다음 언어에서 사용할 수 있습니다:
- Python: LLukas22/llm-rs-python
- Node: Atome-FE/llama-node
llm CLI 사용하기 (Using the llm CLI)
llm-cli를 시작하는 가장 쉬운 방법은 llm의 링크 릴리스 버전에서 미리 빌드된 실행 파일을 다운로드하는 것이지만, 현재 릴리스가 최신 상태가 아니므로 대신 소스에서 설치하는 것을 권장합니다.
소스에서 설치하기 (Installing from Source)
rustup이 PATH에 추가했을 가능성이 높은 Cargo bin 디렉토리에 가장 최신 기능이 포함된 llm의 main 브랜치를 설치하려면 다음을 실행하세요:
cargo install --git https://github.com/rustformers/llm llm-cli
CLI 애플리케이션은 이후 llm을 통해 실행할 수 있습니다. 필요한 경우 기능을 활성화하려면 features 및 acceleration support도 참조하십시오.
참고: GPU 지원(CUDA, OpenCL, Metal)은 관련 기능으로 빌드하지 않으면 작동하지 않습니다.
cargo로 설치하기
현재 배포된 버전이 최신 모델을 지원하지 않아 오래되었음에 유의하십시오. 현재는 소스에서 설치하는 것을 권장합니다.
rustup이 여러분의 PATH에 추가했을 가능성이 높은 Cargo bin 디렉터리에 가장 최근에 출시된 버전의 llm을 설치하려면 다음 명령어를 실행하십시오:
cargo install llm-cli
CLI 애플리케이션은 이후 llm을 통해 실행할 수 있습니다. 필요한 경우 기능을 활성화하려면 features도 참조하십시오.
기능 (Features)
기본적으로, llm은 Hugging Face의 모델 허브에서 토크나이저를 원격으로 가져오는 지원과 함께 빌드됩니다. 이는 시스템의 네이티브 SSL 스택에 대한 의존성을 추가하며, 모든 시스템에서 사용할 수 있는 것은 아닐 수 있습니다.
이를 비활성화하려면 다음 명령어로 기본 기능을 비활성화하십시오:
cargo build --release --no-default-features
하드웨어 가속을 활성화하려면 빌드를 위한 가속 지원 섹션을 참조하십시오. 이 내용은 CLI에도 적용됩니다.
모델 가져오기 (Getting Models)
GGML 모델은 쉽게 얻을 수 있습니다. 주로 Hugging Face(여기서 Hugging Face에서 확인 가능)에 위치하지만, 다른 곳에서도 얻을 수 있습니다.
모델은 단일 파일로 배포되며 다운로드하는 데 추가 파일이 필요하지 않습니다. 하지만, 다양한 정밀도의 수준으로 양자화되어 있으므로 애플리케이션에 적합한 양자화 수준을 선택해야 합니다.
또한, 토크나이징 품질을 개선하기 위해 Hugging Face 토크나이저를 지원합니다. 이는 별도의 파일(tokenizer.json)이며 -v 또는 -r 플래그를 사용하여 CLI와 함께 사용하거나 적절한 TokenizerSource 열거형 변수를 사용하여 llm 크레이트와 함께 사용할 수 있습니다.
테스트된 모델 목록은 known-good models를 참조하세요.
이 프로젝트는 일부 오래된 GGML 포맷을 지원하지 않지만, 상위 GGML 프로젝트와의 기능 동등성을 유지하는 것을 목표로 합니다. 모델 로딩에 관한 문제나 지원되는 GGML 모델 유형의 지원 요청은 Issue를 열어주세요.
Hugging Face
Hugging Face 🤗는 오픈 소스 머신러닝 분야의 선두 주자이며 수백 개의 GGML 모델을 호스팅하고 있습니다.
Hugging Face 🤗에서 GGML 모델 검색하기.
r/LocalLLaMA
이 Reddit 커뮤니티는 GGML 모델과 관련된 위키를 관리하며, 여기에는 (대부분 Hugging Face 🤗에서 가져온) 획득 링크가 잘 정리되어 있습니다.
사용법
llm 실행 파일을 빌드했거나 $PATH 디렉토리에 위치시켰다면, 실행해 보세요. 오픈 소스 RedPajama 언어 모델을 사용하는 예시는 다음과 같습니다:
llm infer -a gptneox -m RedPajama-INCITE-Base-3B-v1-q4_0.bin -p "Rust is a cool programming language because" -r togethercomputer/RedPajama-INCITE-Base-3B-v1
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기