← 返回信息流
GitHub 热榜GitHub Trending · 日·20 小时前

AirLLM:单张4GB显存GPU即可运行AirLLM 70B大模型推理

原标题:lyogavin/airllm
Jupyter Notebook18,786 stars+208 今日

速览

AirLLM通过动态卸载技术,允许在显存极小(如4GB)的GPU上加载并推理70B参数量的大模型。它无需多卡集群或高配硬件,即可实现大模型的本地化部署与使用,极大降低了大模型推理的硬件门槛。

AI 深度解读

这是什么

AirLLM 是一个由 lyogavin 开发的开源 Python 库,旨在优化大语言模型(LLM)的推理内存占用。它允许用户在显存极小的消费级 GPU(如 4GB 或 8GB VRAM)上运行超大规模模型(如 70B 甚至 405B 参数量的 Llama 3.1),而无需依赖量化、蒸馏或剪枝等通常会导致精度损失的技术手段。

该项目主要基于 Jupyter Notebook 环境开发,目前 GitHub 星标数已突破 18,000+。其核心机制是通过“分层加载”(Layer-wise Loading)技术,在推理过程中动态地将模型层加载到 GPU 显存中,计算完成后立即释放,从而突破单张显卡显存容量的限制。

解决的问题

AirLLM 主要解决了以下两个核心痛点:

  1. 显存瓶颈限制模型规模:传统推理方式要求将整个模型权重同时加载到显存中。对于 70B 或 405B 级别的大模型,通常需要多张高端 A100/H100 GPU 或大量显存。AirLLM 使得在单张 4GB-8GB 显存的消费级显卡(如 GTX 1080 Ti, RTX 3060, 甚至 MacBook M 系列芯片)上运行这些巨型模型成为可能。
  2. 磁盘 I/O 与计算吞吐量的矛盾:由于模型是分层加载的,频繁的磁盘读取会成为性能瓶颈。AirLLM 通过引入预取(Prefetching)机制,在计算当前层时异步预取下一层数据,从而掩盖磁盘 I/O 延迟,显著提升推理速度。

核心功能

  • AutoModel 自动适配:无需手动指定模型类,AutoModel.from_pretrained() 能自动检测模型类型(如 Llama, Qwen, ChatGLM, Mistral 等)并初始化,简化了使用流程。
  • 模型压缩与量化支持
    • 支持 4-bit8-bit 基于分块(Block-wise)的量化压缩。
    • 与常规量化不同,AirLLM 仅对权重进行量化,因为其主要瓶颈在于磁盘加载而非计算精度,因此能在几乎不损失精度的情况下,将推理速度提升高达 3倍
  • 预取机制(Prefetching):默认开启,用于重叠模型加载与计算时间。目前主要支持 AirLLMLlama2 架构,可带来约 10% 的速度提升。
  • 跨平台支持
    • Linux/Windows:支持 CUDA GPU 推理。
    • macOS:支持 Apple Silicon (M1/M2/M3) 芯片,利用 MLX 或 Torch 进行推理。
    • CPU 推理:v2.10.1 版本起支持纯 CPU 推理及非 Sharded 模型。
  • 磁盘空间优化:提供 delete_original 选项,在转换模型为分层格式后删除原始 Hugging Face 模型文件,节省约一半的磁盘空间。

亮点 / 与同类相比

  • 无需量化即可运行超大模型:与 vLLM、Text Generation Inference 等需要量化或特定硬件加速的框架不同,AirLLM 的核心优势在于通过分层加载技术,让普通显卡也能“跑起来”未量化的 70B+ 模型。
  • 极低的硬件门槛
    • 官方示例显示,可在 4GB VRAM 的单卡上运行 Llama 3 70B。
    • 可在 8GB VRAM 上运行 Llama 3.1 405B。
    • 支持在 MacBook 上运行 70B 模型。
  • 广泛的模型兼容性:原生支持 Llama 2/3, Mistral, Mixtral, Qwen, ChatGLM, Baichuan, InternLM 等主流开源模型,并支持 safetensors 格式。
  • 分块量化(Block-wise Quantization)策略:不同于全局量化,AirLLM 采用分块量化策略,仅量化权重部分。由于推理瓶颈主要在磁盘读取而非计算,这种策略在保证精度的同时,大幅减少了模型加载体积,进而提升了 I/O 效率。

适合谁用 / 上手

适合人群:

  • 个人研究者/开发者:拥有消费级 GPU(4GB-8GB VRAM)或 MacBook,但希望体验或微调 70B+ 级别大模型的用户。
  • 边缘计算/嵌入式场景:需要在资源受限设备上部署大语言模型的应用场景。
  • 原型验证者:希望快速验证大模型能力,而不想投入高昂的云端 GPU 成本的用户。

上手指南:

  1. 安装依赖

    pip install airllm
    # 如需量化压缩,还需安装 bitsandbytes
    pip install -U bitsandbytes
    
  2. 基本推理代码

    from airllm import AutoModel
    
    # 自动加载模型,支持 HuggingFace Repo ID 或本地路径
    # 注意:首次运行会将模型分层并缓存到 .cache 目录,需确保磁盘空间充足
    model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct")
    
    input_text = ['What is the capital of United States?']
    input_tokens = model.tokenizer(input_text, return_tensors="pt", truncation=True, max_length=128)
    
    # 生成结果
    generation_output = model.generate(
        input_tokens['input_ids'].cuda(),
        max_new_tokens=20,
        use_cache=True,
        return_dict_in_generate=True
    )
    
    print(model.tokenizer.decode(generation_output.sequences[0]))
    
  3. 启用量化压缩(可选): 在初始化时指定 compression 参数:

    model = AutoModel.from_pretrained("garage-bAInd/Platypus2-70B-instruct", compression='4bit')
    
  4. 注意事项

    • 磁盘空间:模型分层加载过程非常消耗磁盘空间,请确保 Hugging Face .cache 目录有足够空间。如果遇到 MetadataIncompleteBuffer 错误,通常是因为磁盘空间不足。
    • Gated Models:对于 Llama 等需要权限的模型,需在 from_pretrained 中传入 hf_token
    • Tokenizer Padding:部分模型的 tokenizer 可能没有 padding token,此时需设置 padding=False 或手动指定 padding token。
查看原文 →github.com