量化的8位LLM训练和推理使用bitsandbytes在AMD GPUs上

Quantized 8-bit LLM training and inference using bitsandbytes on AMD GPUs — ROCm Blogs

在这篇博客文章中,我们将介绍bitsandbytes的8位表示方式。正如你将看到的,bitsandbytes的8位表示方式显著地减少了微调和推理大语言模型(LLMs)所需的内存。虽然在这一领域有许多用于减小模型尺寸的量化技术,但bitsandbytes通过量化不仅减小了模型尺寸,还减小了优化器状态的大小。这篇文章将帮助你了解bitsandbytes 8位表示方式的基本原理,解释bitsandbytes 8位优化器和LLM.int8技术,并向你展示如何使用ROCm在AMD GPUs上实现这些技术。

要求

bitsandbytes 是一个Python封装库,提供快速高效的8位量化机器学习模型。它现在由ROCm 6.2支持,并且可以无缝部署在AMD GPU上。本文中使用的所有演示均通过以下详细设置进行。有关全面的安装详情,请参阅 ROCm文档

  • 硬件与操作系统:

  • 软件:

    • ROCm 6.2.0

    • Pytorch 2.3.0

    • 或者,你可以使用相同设置启动Docker容器。

         docker run -it --group-add=video --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --device /dev/kfd --device /dev/dri rocm/pytorch:rocm6.2_ubuntu22.04_py3.10_pytorch_release_2.3.0
      
  • 安装所需的库。

    pip install "transformers>=4.45.1" datasets accelerate "numpy==1.24.4" evaluate
    pip uninstall apex #Hugging Face implements layer fusion without apex 
    

    注意: Apex 需要卸载,因为 Hugging Face 的一个 bug

  • 如下所示安装bitsandbytes 

    • 如果你使用 AMD Instinct MI210/MI250/MI250X/MI300A/MI300X 或更高版本,直接从wheel包安装:

      pip install --no-deps --force-reinstall 'https://github.com/bitsandbytes-foundation/bitsandbytes/releases/download/continuous-release_multi-backend-refactor/bitsandbytes-0.44.1.dev0-py3-none-manylinux_2_24_x86_64.whl'
      
    • 如果你使用旧版 AMD Instinct 设备或希望直接从源代码编译,请按以下指示操作:

      git clone --recurse https://github.com/ROCm/bitsandbytes
      cd bitsandbytes
      git checkout rocm_enabled
      pip install -r requirements-dev.txt
      cmake -DCOMPUTE_BACKEND=hip -S . #使用 -DBNB_ROCM_ARCH="gfx90a;gfx942" 以针
### 大模型量化与vLLM的区别比较 #### 大模型量化概述 大模型量化是指通过减少神经网络权重表示的精度来减小模型大小并提高计算效率的过程。这一过程通常涉及将浮点数转换为较低宽的整数,从而显著降低内存需求加速推理速度。然而,在此过程中可能会引入一些精度损失,因此需要仔细调整量化参数以保持性能[^2]。 #### vLLM框架特性 vLLM是一个专注于高效部署大型语言模型(LLMs)的库,特别针对GPU环境进行了优化。该框架利用多种技术手段实现高性能推理: - **Flash Attention**: 提高注意力机制运算的速度。 - **PagedAttention**: 减少KV缓存碎片化问题,增强显存使用率。 - **张量并行**:支持跨多个GPU分配工作负载,尤其适合处理较长序列长度的任务[^1]。 #### 主要区别 | 特性 | 大模型量化 | vLLM | | --- | --- | --- | | **目标** | 缩减模型尺寸;加快推断速度 | 实现高效的LLM部署 | | **方法论** | 使用低精度数据类型替代原有高精度数值 | 应用专门算法技术改进硬件资源管理 | | **应用场景** | 边缘设备上的轻量化AI应用开发 | 数据中心内大规模分布式训练服务 | #### 性能考量 当考虑采用哪种方案时,取决于具体的应用场景个人偏好。如果追求极致的小型化以及便携性,则可以优先考虑量化策略;而对于那些更关注于最大化吞吐量而不惜牺牲部分灵活性的情况来说,像vLLM这样的高级工具可能是更好的选择[^3]。 ```python import torch def quantize_model(model, dtype=torch.qint8): """Quantizes a PyTorch model to the specified data type.""" qmodel = torch.quantization.convert(model) return qmodel.to(dtype) # Example of using tensor parallelism with vLLM from transformers import AutoModelForCausalLM from accelerate import init_empty_weights, load_checkpoint_and_dispatch with init_empty_weights(): model = AutoModelForCausalLM.from_pretrained("bigscience/bloom", device_map="auto") model = load_checkpoint_and_dispatch( model, checkpoint_file_path, device_map={"": list(range(4))}, # Assuming we have access to four GPUs no_split_module_classes=["BloomBlock"] ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

109702008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值