llama.cpp是近期非常流行的一款專注于Llama/Llama-2部署的C/C++工具。本文利用llama.cpp來部署Llama 2 7B大語(yǔ)言模型,所采用的環(huán)境為Ubuntu 22.04及NVIDIA CUDA。文中假設(shè)Linux的用戶目錄(一般為/home/username)為當(dāng)前目錄。
安裝NVIDIA CUDA工具
NVIDIA官方已經(jīng)提供在Ubuntu 22.04中安裝CUDA的官方文檔。本文稍有不同的是我們安裝的是CUDA 11.8而不是最新的CUDA版本。這是因?yàn)槟壳癙yTorch 2.0的穩(wěn)定版還是基于CUDA 11.8的,而在實(shí)際各種部署中筆者發(fā)現(xiàn)按照PyTorch 2.0穩(wěn)定版來錨定CUDA版本能夠避免很多麻煩。當(dāng)然了,對(duì)于llama.cpp本身來說這并不重要,因此讀者可以隨意選擇適合的CUDA版本。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt update
$ sudo apt install cuda-11-8
安裝完NVIDIA CUDA(其實(shí)是NVIDIA GPU驅(qū)動(dòng))之后應(yīng)該重啟系統(tǒng)一次,這樣可以使得Linux內(nèi)核能夠正常編譯并加載基于dkms的內(nèi)核驅(qū)動(dòng)模塊。這里建議重啟完之后運(yùn)行一次nvidia-smi來確信系統(tǒng)中的顯卡能夠被NVIDIA驅(qū)動(dòng)所識(shí)別。
$ sudo shutdown -r now
復(fù)制和編譯llama.cpp代碼源
在Ubuntu 22.04中,安裝NVIDIA CUDA工具剛好會(huì)把llama.cpp所需的工具也全部安裝好。因此,我們只要復(fù)制代碼源并編譯即可
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
$ make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc
安裝NVIDIA CUDA工具并不會(huì)把nvcc(CUDA編譯器)添加到系統(tǒng)的執(zhí)行PATH中,因此這里我們需要LLAMA_CUDA_NVCC變量來給出nvcc的位置。llama.cpp編譯完成后會(huì)生成一系列可執(zhí)行文件(如main和perplexity程序)。為了簡(jiǎn)化內(nèi)容,本文使用的是llama.cpp的make編譯流程,有興趣的讀者可以參考llama.cpp的文檔來使用cmake進(jìn)行編譯。
下載并運(yùn)行Llama-2 7B模型
正常情況下,下載Llama系列模型應(yīng)該參考Meta公司的模型申請(qǐng)頁(yè)面。為節(jié)省時(shí)間,本文使用HuggingFace社區(qū)用戶TheBloke發(fā)布的已進(jìn)行格式轉(zhuǎn)換并量化的模型。這些預(yù)量化的模型可以從HuggingFace的社區(qū)模型發(fā)布頁(yè)中找到。在這個(gè)社區(qū)模型名稱中,GGUF指的是2023年八月llama.cpp新開發(fā)的一種模型文件格式。
下載模型需要首先安裝并初始化git-lfs(GIt Large File Storage)。
$ sudo apt install git-lfs
$ git lfs install
上面的命令運(yùn)行完畢后,終端窗口里面應(yīng)該顯示“Git LFS initialized.”,現(xiàn)在我們就可以復(fù)制模型源了。因?yàn)檫@些模型文件非常大,此處我們暫時(shí)只復(fù)制文件的鏈接,不下載文件本身。
$ GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/TheBloke/Llama-2-7B-GGUF
我們只需要這個(gè)模型源中的其中一個(gè)文件,即llama-2-7b.Q4_0.gguf,表示的是一種4比特量化預(yù)處理的Llama 2 7B模型。有興趣的讀者還可以按照本文的方法嘗試一些其他的模型文件。
$ cd Llama-2-7B-GGUF
$ git lfs pull --include llama-2-7b.Q4_0.gguf
在預(yù)量化的模型文件下載完成后,就可以運(yùn)行l(wèi)lama.cpp中編譯完成的各種程序了。此處我們運(yùn)行一下在終端中的交互式的文本生成過程。
$ cd ~/llama.cpp
$ ./main -m ~/Llama-2-7B-GGUF/llama-2-7b.Q4_0.gguf --color \
--ctx_size 2048 -n -1 -ins -b 256 --top_k 10000 \
--temp 0.2 --repeat_penalty 1.1 -t 8 -ngl 10000
在上面的命令行中,最后的參數(shù)“-gnl 10000”指的是將最多10000個(gè)模型層放到GPU上運(yùn)行,其余的在CPU上,因此llama.cpp本身就具有異構(gòu)運(yùn)行模型的能力。不過此處Llama 2 7B模型的總層數(shù)都不足10000,因此模型全部都會(huì)在GPU上面運(yùn)行。大家可以按照屏幕上此時(shí)的說明來試試這個(gè)模型的交互能力。
部署Llama-2 7B模型
剛才提到,llama.cpp編譯生成了許多有用的程序。其中,main是用于在終端窗口中顯示文本生成的工具,perplexity用來對(duì)給定數(shù)據(jù)集計(jì)算困惑度以對(duì)模型進(jìn)行測(cè)評(píng),而server程序則可以部署一個(gè)簡(jiǎn)易的HTTP API。
$ ./server -m ~/Llama-2-7B-GGUF/llama-2-7b.Q4_0.gguf \
-c 2048 -ngl 10000 --host localhost --port 8080
這樣,我們就可以通過訪問http://localhost:8080/completion來得到模型生成的結(jié)果了。這里可以用curl嘗試一下文章來源:http://www.zghlxwxcb.cn/news/detail-735895.html
$ curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "Building a website can be done in 10 simple steps:","n_predict": 128}'
llama.cpp代碼源中有server程序的更多文檔。本文的步驟也適用于除llama 2 7B外其他與llama.cpp兼容的模型。文章來源地址http://www.zghlxwxcb.cn/news/detail-735895.html
到了這里,關(guān)于大語(yǔ)言模型部署:基于llama.cpp在Ubuntu 22.04及CUDA環(huán)境中部署Llama-2 7B的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!