본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 05. 15. 01:31

lyogavin/airllm

요약

AirLLM은 양자화, 증류, 가지치기 등의 복잡한 최적화 과정 없이도 70B급 거대 언어 모델(LLMs)을 단일 4GB GPU 카드에서 구동할 수 있게 하는 프레임워크입니다. 이 도구는 Llama3.1의 경우 8GB VRAM에서도 실행 가능하며, 블록 단위 양자화 기능을 통해 정확도 손실을 최소화하면서 추론 속도를 최대 3배까지 향상시킬 수 있습니다. 또한 MacOS 지원 및 다양한 최신 LLM 모델들을 네이티브로 지원합니다.

핵심 포인트

  • 양자화/증류 없이 70B급 LLMs를 단일 4GB GPU에서 구동 가능하게 함.
  • Llama3.1의 경우 8GB VRAM에서도 실행할 수 있도록 최적화됨.
  • 블록 단위 양자화를 통해 정확도 손실을 최소화하며 추론 속도를 최대 3배까지 향상시킬 수 있음.
  • MacOS 지원 및 AutoModel 클래스를 통한 다양한 LLM 모델(Llama3, Qwen2.5 등)의 네이티브 지원.
  • 모델 로딩과 연산을 중첩시키는 프리페칭 기능을 제공하여 성능을 개선함.

Quickstart |
Configurations |
MacOS |
Example notebooks |
FAQ

AirLLM은 추론 (inference) 메모리 사용량을 최적화하여, 양자화 (quantization), 증류 (distillation), 가지치기 (pruning) 없이도 70B 거대 언어 모델 (large language models)을 단일 4GB GPU 카드에서 추론할 수 있게 합니다. 또한 이제 8GB vram에서 405B Llama3.1을 실행할 수 있습니다.

[2024/08/20] v2.11.0: Qwen2.5 지원

[2024/08/18] v2.10.1 CPU 추론 (inference) 지원. 분할되지 않은 모델 (non sharded models) 지원. 훌륭한 작업을 해주신 @NavodPeiris 님께 감사드립니다!

[2024/07/30] Llama3.1 405B 지원 (예제 노트북). 8bit/4bit 양자화 (quantization) 지원.

[2024/04/20] AirLLM은 이미 Llama3를 네이티브로 지원합니다. 4GB 단일 GPU에서 Llama3 70B를 실행하세요.

[2023/12/25] v2.8.2: 70B 거대 언어 모델 (large language models)을 실행하는 MacOS 지원.

[2023/12/20] v2.7: AirLLMMixtral 지원.

[2023/12/20] v2.6: AutoModel 추가, 모델 유형을 자동으로 감지하여 모델 초기화를 위해 모델 클래스를 제공할 필요가 없음.

[2023/12/18] v2.5: 모델 로딩과 연산 (compute)을 중첩시키기 위한 프리페칭 (prefetching) 추가. 10% 속도 향상.

[2023/12/03] ChatGLM, QWen, Baichuan, Mistral, InternLM 지원 추가!

[2023/12/02] safetensors 지원 추가. 이제 Open LLM Leaderboard의 상위 10개 모델을 모두 지원합니다.

[2023/12/01] airllm 2.0. 압축 (compressions) 지원: 실행 시간 3배 속도 향상!

[2023/11/20] airllm 초기 버전!

  • Quick start
  • Model Compression
  • Configurations
  • Run on MacOS
  • Example notebooks
  • Supported Models
  • Acknowledgement
  • FAQ

먼저, airllm pip 패키지를 설치하세요.

pip install airllm

그 다음, AirLLMLlama2를 초기화하고, 사용 중인 모델의 Hugging Face 리포지토리 ID (repo ID) 또는 로컬 경로를 전달하면, 일반적인 transformer 모델과 유사하게 추론 (inference)을 수행할 수 있습니다.

(AirLLMLlama2를 초기화할 때 layer_shards_saving_path를 통해 분할된 레이어 모델을 저장할 경로를 지정할 수도 있습니다.

from airllm import AutoModel
MAX_LENGTH = 128
# hugging face 모델 리포지토리 ID를 사용할 수 있습니다:
...

참고: 추론 (inference) 과정에서 원본 모델은 먼저 레이어별 (layer-wise)로 분해되어 저장됩니다. huggingface 캐시 디렉토리에 충분한 디스크 공간이 있는지 확인해 주세요.

방금 블록 단위 양자화 (block-wise quantization) 기반의 모델 압축 기능을 추가했습니다. 이를 통해 정확도 손실은 거의 무시할 수 있는 수준이면서, 추론 속도를 최대 3배까지 더 빠르게 높일 수 있습니다! (더 자세한 성능 평가와 우리가 왜 블록 단위 양자화를 사용하는지에 대해서는 이 논문을 참조하세요)

  • 1단계. pip install -U bitsandbytes를 통해 bitsandbytes가 설치되어 있는지 확인하세요.

  • 2단계. airllm 버전이 2.0.0보다 높은지 확인하세요:
    pip install -U airllm

  • 3단계. 모델을 초기화할 때, compression 인자('4bit' 또는 '8bit')를 전달합니다:

model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct",
compression='4bit' # 8비트 블록 단위 양자화를 원하면 '8bit'를 지정하세요
)

양자화 (Quantization)는 실제로 속도를 높이기 위해 일반적으로 가중치 (weights)와 활성화 값 (activations)을 모두 양자화해야 합니다. 이는 정확도를 유지하고 모든 종류의 입력에서 발생하는 이상치 (outliers)의 영향을 피하는 것을 더 어렵게 만듭니다.

하지만 우리의 경우 병목 현상 (bottleneck)이 주로 디스크 로딩에서 발생하므로, 모델 로딩 크기만 줄이면 됩니다. 따라서 가중치 부분만 양자화할 수 있으며, 이는 정확도를 보장하기가 더 쉽습니다.

모델을 초기화할 때, 다음과 같은 설정을 지원합니다:

compression: 지원되는 옵션: 4bit, 8bit (4-bit 또는 8-bit 블록 단위 양자화 (block-wise quantization)를 위해 사용), 또는 압축을 하지 않으려면 기본값인 None 사용
profiling_mode: 지원되는 옵션: 소요 시간을 출력하려면 True, 기본값은 False
layer_shards_saving_path: 선택 사항으로, 분할된 모델을 저장할 다른 경로
hf_token: meta-llama/Llama-2-7b-hf와 같이 접근 권한이 필요한 (gated) 모델을 다운로드하는 경우 여기에 Hugging Face 토큰을 제공할 수 있습니다.
prefetching: 모델 로딩과 연산을 중첩 (overlap)시키기 위한 프리페칭 (prefetching). 기본적으로 활성화되어 있습니다. 현재는 AirLLMLlama2만 이를 지원합니다.
delete_original: 디스크 공간이 충분하지 않은 경우, delete_original을 true로 설정하여 다운로드된 원본 Hugging Face 모델을 삭제하고 변환된 모델만 유지함으로써 디스크 공간을 절반으로 절약할 수 있습니다.

단순히 airllm을 설치하고 Linux에서와 동일하게 코드를 실행하면 됩니다. 자세한 내용은 Quick Start를 참조하세요.

  • mlx와 torch가 설치되었는지 확인하세요.
  • 아마도 Python native를 설치해야 할 것입니다. 자세한 내용은 여기를 참조하세요.
  • Apple Silicon만 지원됩니다.

예시 [python notebook] (https://github.com/lyogavin/airllm/blob/main/air_llm/examples/run_on_macos.ipynb)

Colab 예시는 여기에서 확인하세요:

세부 사항 (Details)

  • ChatGLM:
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("THUDM/chatglm3-6b-base")
...
  • QWen:
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("Qwen/Qwen-7B")
...
  • Baichuan, InternLM, Mistral 등:
from airllm import AutoModel
MAX_LENGTH = 128
model = AutoModel.from_pretrained("baichuan-inc/Baichuan2-7B-Base")
...

많은 코드가 Kaggle 경진대회에서의 SimJeg의 훌륭한 작업에 기반하고 있습니다. SimJeg에게 큰 감사를 표합니다:

GitHub 계정 @SimJeg, Kaggle의 코드, 관련 토론.

safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer

이 오류가 발생한다면, 가장 가능성 있는 원인은 디스크 공간이 부족하기 때문입니다. 모델을 분할(splitting)하는 과정은 디스크 소모가 매우 큽니다. [이것을 확인하세요]. 디스크 공간을 확장하거나, huggingface .cache를 삭제한 후 다시 실행해야 할 수도 있습니다.

아마도 Llama2 클래스로 QWen 또는 ChatGLM 모델을 로드하려고 시도 중일 가능성이 높습니다. 다음을 시도해 보세요:

QWen 모델의 경우:

from airllm import AutoModel #<----- AirLLMLlama2 대신 사용
AutoModel.from_pretrained(...)

ChatGLM 모델의 경우:

from airllm import AutoModel #<----- AirLLMLlama2 대신 사용
AutoModel.from_pretrained(...)

일부 모델은 게이티드 모델 (gated models)로, huggingface API 토큰이 필요합니다. hf_token을 제공할 수 있습니다:

model = AutoModel.from_pretrained("meta-llama/Llama-2-7b-hf", #hf_token='HF_API_TOKEN')

일부 모델의 토크나이저 (tokenizer)에는 패딩 토큰 (padding token)이 없으므로, 패딩 토큰을 설정하거나 단순히 패딩 설정 (padding config)을 끌 수 있습니다:

input_tokens = model.tokenizer(input_text,
return_tensors="pt",
return_attention_mask=False,
...

연구에서 AirLLM이 유용하다고 판단되어 인용하고 싶다면, 다음 BibTex 항목을 사용해 주세요:

@software{airllm2023,
author = {Gavin Li},
title = {AirLLM: scaling large language models on low-end commodity computers},
...

기여, 아이디어 및 토론을 환영합니다!

유용하게 사용하셨다면, ⭐를 눌러주시거나 커피 한 잔을 사주세요! 🙏

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub Trending Jupyter Notebook (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0