You need to enable JavaScript to run this app.
导航

GPU-使用Llama.cpp量化Llama2模型

最近更新时间2024.02.22 11:22:45

首次发布时间2023.12.12 17:47:16

本文以搭载了一张V100显卡的ecs.g1ve.2xlarge实例,介绍如何在云服务器上利用Llama.cpp执行Llama2-7B模型的量化,并对比基于CPU的推理和基于GPU的推理速度。

背景信息

Llama.cpp简介

Llama.cpp是使用C++语言编写的大模型量化工具,同时也提供了部署和运行量化后模型的demo。它基于GGML(一种机器学习张量库),实现了对Llama模型的量化、推理部署功能。旨在实现开源大模型运行于相对低配置或廉价的硬件之上,它能支持将Llama模型推理部署至CPU、MacBook,甚至Android系统之上。

Llama2模型简介

Llama模型是Meta公司开源的大语言模型,对标OpenAI的GPT 3,模型参数量从7B到65B,功能上可生成创意文本,求解数学定理,预测蛋白质结构,回答阅读理解的问题等。

Llama2模型是在Llama模型之上的升级。Llama2训练语料相比Llama多40%,context长度由2048提升至4096,可以理解和生成更长的文本内容。

环境要求

  • NVIDIA驱动:

    • GPU驱动:用来驱动NVIDIA GPU卡的程序。本文以535.86.10为例。

    • CUDA:使GPU能够解决复杂计算问题的计算平台。本文以CUDA 12.2为例。

    • CUDNN:深度神经网络库,用于实现高性能GPU加速。本文以8.5.0.96为例。

  • 运行环境:

    • Transformers:一种神经网络架构,用于语言建模、文本生成和机器翻译等任务。深度学习框架。本文以4.30.2为例。

    • Pytorch:开源的Python机器学习库,实现强大的GPU加速的同时还支持动态神经网络。本文以2.0.1为例。

    • Python:执行Llama.cpp的某些脚本所需的版本。本文以Python 3.8为例。

使用说明

下载本文所需软件需要访问国外网站,建议您增加网络代理(例如FlexGW)以提高访问速度。您也可以将所需软件下载到本地,再上传到GPU实例中,具体请参考本地数据上传

操作步骤

步骤一:准备环境

  1. 创建GPU计算型实例。

    请参考通过向导购买实例创建一台符合以下条件的实例:

    • 基础配置:
      • 计算规格:ecs.g1ve.2xlarge
      • 镜像:Ubuntu 20.04,不勾选“后台自动安装GPU驱动”。
      • 存储:云盘容量在200 GiB以上。
        alt
    • 网络配置:勾选“分配弹性公网IP”。
  2. 安装GPU驱动和CUDA工具包。

    1. 登录实例

    2. 执行以下命令,下载CUDA Toolkit。

      CUDA Toolkit大小约4G,其中已经包含了GPU驱动和CUDA,安装过程相对耗时,请耐心等待。

      wget https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda_12.2.1_535.86.10_linux.run	
      
    3. 执行以下命令,安装GPU驱动和CUDA。

      sh cuda_12.2.1_535.86.10_linux.run
      
      1. 输入"accept"确认信息。
        alt
      2. 按键盘上下键选中【Install】,回车确认,开始安装。
        alt
    4. 安装完成后,执行以下命令进行验证。

      nvidia-smi
      

      回显如下,说明驱动安装成功。
      alt

  3. 安装git工具。

    1. 执行如下命令,安装git。

      apt-get update
      apt-get install git
      
    2. 执行如下命令,验证git是否安装成功。

      git --version
      

      回显如下,表明已安装。
      alt

  4. 安装Python3.8和相关依赖。

    1. 执行如下命令,安装Python 3.8和pip工具。

      apt-get install python3.8
      apt-get install pip
      
    2. 执行如下命令,使用pip安装相关依赖。

      pip3 install numpy
      pip3 install sentencepiece
      

      alt

步骤二:下载Llama2-7B模型

  1. 安装Llama.cpp工具。

    1. 执行以下命令,下载llama.cpp包。

      git clone https://github.com/ggerganov/llama.cpp
      

      或者直接从github中下载master分支的包:

      wget https://github.com/ggerganov/llama.cpp/archive/refs/heads/master.zip  # 下载master分支的repo包
      unzip master.zip  	# 解压
      
    2. 下载完成之后,执行如下命令,对llama.cpp项目进行编译,得到后续用于量化和运行模型的可执行文件 ./quantize./main

      cd llama.cpp
      make
      

      alt

  2. 下载Llama2-7B模型。

    说明

    • Llama官方模型是不提供chat能力的,并且其配套的分词文件和配置文件格式也非通用,需将其转化成HF格式才能被Llama.cpp正常使用。您可以直接在一些模型网站上下载HF格式的Llama2-7B模型。
    • 由于Llama模型的使用受Meta官方的约束,您需要申请License才能获取到模型。
    1. 执行如下命令,通过git-lfs下载Llama2-7B模型。
      apt-get install git-lfs
      git clone https://huggingface.co/meta-llama/Llama-2-7b-hf
      
      执行如下命令查看下载的模型目录结构,如下图所示。
      cd Llama-2-7b-hf
      lf -F
      
      alt
    2. 执行如下命令,将模型目录Llama-2-7b-hf整体移动到llama.cpp下的models目录。
      mv Llama-2-7b-hf llama.cpp/models/
      

步骤三:使用Llama.cpp量化Llama2-7B模型

  1. 在llama.cpp的主目录下,找到convert.py文件,使用python3.8执行该文件将原llama2-7B模型转换成gguf格式。

    cd llama.cpp
    python3.8 convert.py models/Llama-2-7b-hf/
    

    转换成功后回显如下,会生成一个ggml-model-f16.gguf的模型文件,存放在llama.cpp/models/Llama-2-7b-hf目录下。

    alt

  2. 执行如下命令,量化转换后的模型。
    llama.cpp 目录下提供了做量化的可执行文件quantize,此处选择较为常见的量化算法q4_0,即将模型的权重量化到4bit整型。

    ./quantize models/Llama-2-7b-hf/ggml-model-f16.gguf models/ggml-model-q4_0.gguf q4_0		
    

    生成量化后的模型文件ggml-model-q4_0.gguf,存放在llama.cpp/models目录下。

步骤四:运行量化后的Llama2-7B模型

在CPU上运行模型

  1. 执行如下命令,使用步骤二编译得到的可执行文件./main运行量化后的模型,体验对话机器人效果。

    ./main -m models/ggml-model-q4_0.gguf --color -f ./prompts/alpaca.txt -ins -n 2048
    

    说明

    指令参数解释:

    • --color:将输入和输出分别使用不同颜色,用以区分。
    • -f:指定prompt模板,达到类ChatGPT的效果。
    • -ins:交互模式。
    • -n:推理的最大输出长度。

    alt

  2. ctrl+c可以退出交互模式,退出时可以查看基于CPU推理的性能指标。
    alt

在GPU上运行模型

llama.cpp量化后的模型,支持通过./main运行在GPU之上,且llama.cpp支持将模型的一些层卸载到GPU中,这样可以加速推理。

  1. 执行如下命令,重新编译llama.cpp。
    在编译时加入对GPU的支持选项,本文选择使用CUDA做加速。

    make LLAMA_CUBLAS=1 PATH="/usr/local/cuda/bin/:$PATH"
    

    说明

    指令参数解释:

    • LLAMA_CUBLAS=1:表示将使用CUDA核心提供BLAS加速能力。
    • PATH:编译时可能会有nvcc找不到的报错,需要指定安装的CUDA路径。
  2. 完成编译后,同样以交互模式运行main程序(增加-ngl选项)。

    ./main -m models/ggml-model-q4_0.gguf --color -f ./prompts/alpaca.txt -ins -n 2048 -ngl 40
    

    说明

    指令参数解释:
    -ngl:需要卸载到GPU上的层数,如果模型过大,指定的层数过多,可能导致GPU显存不足报错。

    alt

  3. ctrl+c可以退出交互模式,退出时可以查看基于GPU推理的性能指标。
    alt