本文以搭载了一张V100显卡的ecs.g1ve.2xlarge实例,介绍如何在云服务器上利用Llama.cpp执行Llama2-7B模型的量化,并对比基于CPU的推理和基于GPU的推理速度。
Llama.cpp是使用C++语言编写的大模型量化工具,同时也提供了部署和运行量化后模型的demo。它基于GGML(一种机器学习张量库),实现了对Llama模型的量化、推理部署功能。旨在实现开源大模型运行于相对低配置或廉价的硬件之上,它能支持将Llama模型推理部署至CPU、MacBook,甚至Android系统之上。
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实例中,具体请参考本地数据上传。
创建GPU计算型实例。
请参考通过向导购买实例创建一台符合以下条件的实例:
安装GPU驱动和CUDA工具包。
登录实例。
执行以下命令,下载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
执行以下命令,安装GPU驱动和CUDA。
sh cuda_12.2.1_535.86.10_linux.run
安装完成后,执行以下命令进行验证。
nvidia-smi
回显如下,说明驱动安装成功。
安装git工具。
执行如下命令,安装git。
apt-get update apt-get install git
执行如下命令,验证git是否安装成功。
git --version
回显如下,表明已安装。
安装Python3.8和相关依赖。
执行如下命令,安装Python 3.8和pip工具。
apt-get install python3.8 apt-get install pip
执行如下命令,使用pip安装相关依赖。
pip3 install numpy pip3 install sentencepiece
安装Llama.cpp工具。
执行以下命令,下载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 # 解压
下载完成之后,执行如下命令,对llama.cpp项目进行编译,得到后续用于量化和运行模型的可执行文件 ./quantize
和./main
。
cd llama.cpp make
下载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
Llama-2-7b-hf
整体移动到llama.cpp下的models
目录。mv Llama-2-7b-hf llama.cpp/models/
在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
目录下。
执行如下命令,量化转换后的模型。
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
目录下。
执行如下命令,使用步骤二编译得到的可执行文件./main
运行量化后的模型,体验对话机器人效果。
./main -m models/ggml-model-q4_0.gguf --color -f ./prompts/alpaca.txt -ins -n 2048
说明
指令参数解释:
按ctrl+c
可以退出交互模式,退出时可以查看基于CPU推理的性能指标。
llama.cpp量化后的模型,支持通过./main
运行在GPU之上,且llama.cpp支持将模型的一些层卸载到GPU中,这样可以加速推理。
执行如下命令,重新编译llama.cpp。
在编译时加入对GPU的支持选项,本文选择使用CUDA做加速。
make LLAMA_CUBLAS=1 PATH="/usr/local/cuda/bin/:$PATH"
说明
指令参数解释:
完成编译后,同样以交互模式运行main程序(增加-ngl选项)。
./main -m models/ggml-model-q4_0.gguf --color -f ./prompts/alpaca.txt -ins -n 2048 -ngl 40
说明
指令参数解释:
-ngl:需要卸载到GPU上的层数,如果模型过大,指定的层数过多,可能导致GPU显存不足报错。
按ctrl+c
可以退出交互模式,退出时可以查看基于GPU推理的性能指标。