TopGit
Đánh giá repo GitHub

AirLLM: Chạy LLM 70B trên GPU 4GB

lyogavin/airllm
ATopGit review image for lyogavin/airllm
Review by Topgit.dev for lyogavin/airllm, with GitHub repository stats and README context.
Nhận định nhanh

AirLLM cho phép bạn chạy model Llama 70B trên một GPU 4GB duy nhất bằng cách tải từng layer transformer lên card thay vì tải toàn bộ model cùng lúc. Hãy dùng AirLLM nếu bạn có ổ đĩa dung lượng lớn và đủ kiên nhẫn với tốc độ decode chậm theo từng layer; bỏ qua nếu bạn cần throughput tương tác nhanh, vì việc stream weight từ đĩa ở mỗi token chính là đánh đổi, không phải một giải pháp miễn phí.

Sao
★ 29.2k
Fork
⑂ 3.1k
Ngôn ngữ
Jupyter Notebook
Giấy phép
Apache-2.0
Chủ đề
Developer Tools
Cập nhật
Aug 2026
Trang chủ
GitHub

AirLLM Là Gì?

AirLLM là một thư viện Python giúp giảm nhu cầu bộ nhớ GPU cho việc chạy inference các large language model, bằng cách phân rã model thành từng layer và tải chúng lên GPU lần lượt thay vì tải toàn bộ cùng lúc. AirLLM được phân phối dưới dạng gói pip airllm và cung cấp hàm AutoModel.from_pretrained() theo mô hình của Hugging Face Transformers, nên việc thay bằng một Hugging Face repo ID gần như là toàn bộ công việc tích hợp cho LLM inference.

AirLLM Tối Ưu VRAM Như Thế Nào

  • Streaming từng layer một: tại mỗi thời điểm chỉ có một layer transformer nằm trên GPU, nên lượng VRAM cần dùng phụ thuộc vào kích thước của một layer, không phải tổng số tham số của cả model.
  • Với model sparse MoE, AirLLM stream từng expert một thay vì cả layer — đây là cách AirLLM chạy được Kimi K3 (2.8T tham số) trong dưới 4GB, đo được ở mức 3.72GB trên một RTX 6000 Ada.
  • Tùy chọn nén block-wise quantization ('4bit' hoặc '8bit') giúp thu nhỏ model trên đĩa hơn nữa và theo README, tăng tốc inference lên tới 3x với mức mà README gọi là 'gần như không đáng kể' về độ chính xác.
  • Prefetching chồng lấp việc tải model với quá trình tính toán, changelog ghi nhận mức cải thiện tốc độ 10%.
  • Bước phân rã layer-wise diễn ra một lần, tách và lưu checkpoint gốc dưới dạng safetensors ra đĩa trước lần inference đầu tiên, nên lần chạy đầu cần dung lượng đĩa trống thực sự.
  • delete_original cho phép xóa checkpoint Hugging Face gốc đã tải về sau khi chuyển đổi, chỉ giữ lại bản đã tách layer để tiết kiệm dung lượng đĩa.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao

Các Model Được Hỗ Trợ Và Yêu Cầu GPU

  • Chạy các model dòng Llama (2, 3, 3.1, 3.3, 4) trên một GPU tiêu dùng duy nhất thay vì một dàn nhiều GPU.
  • Tải các checkpoint Qwen (1, 2, 2.5, 3, gồm cả biến thể MoE và FP8) để inference cục bộ.
  • Chạy DeepSeek V2, V3 và R1, bao gồm DeepSeek-V3 (671B tham số) với khoảng 12GB VRAM theo bảng của README.
  • Thử Mistral, Mixtral, Phi, Gemma, ChatGLM, Baichuan, InternLM hoặc Yi qua cùng một lệnh AutoModel.
  • Chạy Llama 3.1 405B với khoảng 8GB VRAM, hoặc một model Llama 3.x 70B ở full precision với khoảng 4GB, theo bảng VRAM của README.

Bắt Đầu Với AirLLM

Cài đặt được tài liệu hóa rõ với một lệnh pip duy nhất: `pip install airllm`. Để dùng tính năng tăng tốc bằng model compression, README yêu cầu thêm một dependency: `pip install -U bitsandbytes`, cùng với việc đảm bảo phiên bản airllm đã cài mới hơn 2.0.0 (`pip install -U airllm`). Hỗ trợ MacOS cần cài mlx và torch riêng, chỉ chạy trên Apple silicon; README cũng lưu ý một số máy MacOS cần cài Python bản native thay vì bản Homebrew. Hỗ trợ Kimi K3 kéo theo thêm các gói khác — `pip install compressed-tensors flash-attn`, bản torch build cho CUDA 12, và transformers ghim ở nhánh 4.56.x, vì remote code của model này không load được trên transformers 5.x.

Thực Hiện LLM Inference

Cách dùng được tài liệu hóa bằng Python có thể chạy trực tiếp: `from airllm import AutoModel`, sau đó `model = AutoModel.from_pretrained("Qwen/Qwen3-32B")` — dùng repo ID Hugging Face bất kỳ hoặc đường dẫn local đều hoạt động như nhau. Tokenize input bằng chính `model.tokenizer(...)`, gọi `model.generate(input_tokens['input_ids'].cuda(), max_new_tokens=20, use_cache=True, return_dict_in_generate=True)`, rồi decode bằng `model.tokenizer.decode(...)`. README lưu ý lần gọi đầu tiên sẽ phân rã và lưu checkpoint ra đĩa theo từng layer trước khi bắt đầu generate, nên cần chuẩn bị dung lượng đĩa xấp xỉ kích thước đầy đủ của model cho lần chạy đầu. Các model Hugging Face bị gated cần truyền tham số `hf_token` khi load.

Điểm Mạnh

  • Chỉ một lệnh `AutoModel.from_pretrained()` bao phủ Llama, Qwen, DeepSeek, Mistral, Mixtral, Phi, Gemma, ChatGLM, Baichuan, InternLM và Yi — không cần chọn class riêng cho từng dòng model.
  • API bám sát Hugging Face Transformers đến mức các lệnh tokenizer và generate() hiện có gần như không cần viết lại.
  • Yêu cầu GPU tỉ lệ theo kích thước một layer của model thay vì tổng số tham số, đó là lý do checkpoint DeepSeek-V3 671B chạy vừa trong khoảng 12GB theo bảng của README.
  • Nén block-wise 4-bit/8-bit là tùy chọn, không bắt buộc — bạn có thể chạy đường dẫn không nén trước rồi chỉ thêm nén khi đĩa hoặc tốc độ trở thành vấn đề.

Lưu Ý Và Yêu Cầu

  • Lần chạy đầu tiên phải lưu lại toàn bộ checkpoint ra đĩa theo từng layer trước khi generate được gì, nên dung lượng đĩa — chứ không phải VRAM — mới là nút thắt thực sự mà README nhắc tới.
  • Streaming từng layer đánh đổi tốc độ lấy bộ nhớ: chính các con số trong README mô tả cơ chế này là bị giới hạn bởi đĩa, và lỗi đầu tiên trong FAQ (MetadataIncompleteBuffer) xảy ra do hết dung lượng đĩa giữa lúc split model.
  • Hỗ trợ MacOS chỉ dành cho Apple silicon và cần cài mlx cùng torch, README còn cảnh báo một số máy cần cài Python bản native thay vì bản Homebrew.
  • Hỗ trợ model mới nhất không miễn phí về mặt cài đặt: Kimi K3 cần compressed-tensors, flash-attn, bản torch CUDA 12, và transformers ghim ở 4.56.x — không cái nào áp dụng cho bản cài đặt cơ bản.

Các Phương Pháp Tối Ưu Bộ Nhớ LLM Khác

Ollama — đóng gói các model GGUF đã quantize kiểu llama.cpp sau một server và CLI local đơn giản; dùng hàng ngày dễ hơn cách streaming layer của AirLLM, đổi lại cần một file model đã quantize sẵn.LocalAI — một inference server self-hosted tương thích API kiểu OpenAI cho model local, gần với một backend cắm-là-chạy hơn là một thư viện Python để import.Quantization 8-bit/4-bit (ví dụ qua bitsandbytes hoặc GPTQ) thu nhỏ dung lượng bộ nhớ của model bằng cách nén weight ngay từ đầu, khác với cách AirLLM giữ weight full-precision trên đĩa rồi stream từng layer.Các cách offload sang CPU (như ZeRO-Offload của DeepSpeed) chia model giữa GPU và RAM hệ thống thay vì giữa GPU và đĩa.

Câu Hỏi Thường Gặp

Vì sao tôi gặp lỗi MetadataIncompleteBuffer khi dùng AirLLM?

Lỗi `safetensors_rust.SafetensorError: ... MetadataIncompleteBuffer` của AirLLM hầu như luôn có nghĩa là đĩa hết dung lượng trong lúc split layer, vì quá trình này rất tốn đĩa. Cách khắc phục theo README là giải phóng dung lượng đĩa, xóa cache Hugging Face rồi chạy lại.

Cách sửa lỗi ValueError: max() arg is an empty sequence trong AirLLM?

Lỗi này ở AirLLM thường do bạn load checkpoint QWen hoặc ChatGLM bằng class AirLLMLlama2. Chuyển sang `from airllm import AutoModel` rồi gọi `AutoModel.from_pretrained(...)`, đây là cách khắc phục mà README liệt kê cho cả hai dòng model.

Cách dùng AirLLM với các model Hugging Face bị gated?

Truyền access token Hugging Face của bạn qua tham số `hf_token` khi gọi `AutoModel.from_pretrained(...)`, ví dụ `AutoModel.from_pretrained("meta-llama/Llama-2-7b-hf", hf_token='HF_API_TOKEN')`. Nếu không, AirLLM sẽ báo lỗi 401 với các repo bị gated như trên.

Nên làm gì nếu tokenizer của AirLLM không có padding token?

AirLLM có thể báo một `ValueError` về việc thiếu padding token với vài model. Cách khắc phục theo README là truyền `padding=False` trong lệnh gọi `model.tokenizer(...)` thay vì tự đặt padding token.

Vấn Đề AirLLM Giải Quyết

Chạy một model 70B tỷ tham số thông thường đòi hỏi sở hữu hoặc thuê nhiều GPU VRAM lớn, vì toàn bộ weight phải nằm trong bộ nhớ GPU cùng lúc. Góc nhìn riêng của AirLLM là phần lớn áp lực bộ nhớ đó đến từ việc giữ mọi layer thường trú cùng lúc, chứ không phải từ khối lượng tính toán, nên cách AirLLM tối ưu bộ nhớ GPU là thay đổi những gì đang thường trú tại một thời điểm chứ không phải thu nhỏ weight — đó chính là điều biến một card 4GB thành thứ có thể hoàn thành một forward pass 70B.

Ai Nên Dùng — Và Ai Nên Bỏ Qua

Hãy thử AirLLM nếu bạn đang thử nghiệm một model 70B+ trên một GPU tiêu dùng duy nhất, có ổ đĩa local nhanh và đủ kiên nhẫn với tốc độ sinh token chậm do bị giới hạn bởi đĩa — phù hợp với sinh viên, người tự học và researcher muốn kiểm tra xem một model có vừa hay không trước khi thuê GPU cloud. Bỏ qua nếu bạn đang phục vụ traffic production nơi throughput và latency quan trọng, hoặc nếu bạn đã chạy model GGUF đã quantize qua Ollama hay llama.cpp và không cần weight full-precision.

Repo liên quan

Nguồn & ghi công

Dựa trên repository GitHub lyogavin/airllm (README và metadata của repo).

Dữ liệu GitHub · đồng bộ lần cuối 5 thg 8, 2026Đánh giá bởi Henry
Về TopGit