llama-cpp-python不使用NVIDIA GPU CUDA

m3eecexj  于 12个月前  发布在  Python
关注(0)|答案(4)|浏览(312)

我一直在我的Ubuntu 20.04与我的NVIDIA GTX 1060 6 GB玩oobabooga text-generation-webui几个星期没有问题.我一直在使用llama 2-chat模型在我的RAM和NVIDIA VRAM之间共享内存.我安装没有太大的问题后,其存储库上的介绍.
所以我现在想要的是使用模型加载器llama-cpp及其包llama-cpp-python绑定来自己玩它。所以使用oobabooga text-generation-webui使用的相同的miniconda 3环境,我启动了一个jupyter notebook,我可以进行推断,一切都运行良好 * 但仅适用于CPU*。
下面是一个工作示例,

from llama_cpp import Llama

llm = Llama(model_path="/mnt/LxData/llama.cpp/models/meta-llama2/llama-2-7b-chat/ggml-model-q4_0.bin", 
            n_gpu_layers=32, n_threads=6, n_ctx=3584, n_batch=521, verbose=True), 

prompt = """[INST] <<SYS>>
Name the planets in the solar system? 
<</SYS>>
[/INST] 
"""
output = llm(prompt, max_tokens=350, echo=True)
print(output['choices'][0]['text'].split('[/INST]')[-1])

字符串
当然!下面是我们太阳系的八大行星,按照离太阳最近到最远的顺序排列:
1.汞
1.金星
1.地球
1.火星
1.木星
1.土星
1.天王星
1.海王星
注意,冥王星以前被认为是一颗行星,但由于它的小尺寸和独特的轨道,现在被归类为矮行星。
我也想使用GPU进行推理。出了什么问题?为什么我不能像n_gpu_layers=32参数指定的那样卸载到GPU上,也不能像oobabooga text-generation-webui在同一个miniconda环境中已经做的那样卸载到GPU上,而没有任何问题?

pokxtpni

pokxtpni1#

经过搜索和痛苦相当3个星期,我发现了这个issue的存储库.
所以llama-cpp-python需要知道libllama.so共享库在哪里。所以在运行我的python解释器,jupyter notebook等之前导出它就行了。
为了使用oobabooga text-generation-webui使用的miniconda 3安装,我将其导出如下:

export LLAMA_CPP_LIB=/yourminicondapath/miniconda3/lib/python3.10/site-packages/llama_cpp_cuda/libllama.so

字符串
瞧!
在导入from llama_cpp import Llama时,
ggml_init_cuisine:找到1 CUDA设备:设备0:NVIDIA GeForce GTX 1060,计算能力6.1

llm = Llama(model_path="/mnt/LxData/llama.cpp/models/meta-llama2/llama-2-7b-chat/ggml-model-q4_0.bin", 
            n_gpu_layers=28, n_threads=6, n_ctx=3584, n_batch=521, verbose=True),


...
llama_model_load_internal:using CUDA for GPU acceleration llama_model_load_internal:所需内存= 2381.32 MB(+ 1026.00 MB per state)llama_model_load_internal:allocating batch_size x(512 kB + n_ctx 128 B)=暂存缓冲区llama_model_load_internal的480 MB VRAM:将28个重复层卸载到GPU llama_model_load_internal:卸载28/35层到GPU llama_model_load_internal:使用的总VRAM:3521 MB.

rlcwz9us

rlcwz9us2#

我通过确保安装了cuda toolkit来修复这个问题:

nvcc --version

字符串
如果没有,我安装了cuda toolkit。
安装cuda toolkit后,您应该可以访问CUDA_HOME:

echo $CUDA_HOME


然后重新安装llama-cpp:

CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python --upgrade --force-reinstall --no-cache-dir

umuewwlo

umuewwlo3#

对于那些希望了解更多有关为llama-cpp-python启用GPU支持的具体步骤的详细信息的人,您需要执行以下操作:
1.下载适用于您的操作系统的cuda工具包(https://developer.nvidia.com/cuda-downloads
1.重新编译llama-cpp-python,将适当的环境变量设置为指向您的nvcc安装(包含在cuda工具包中),并指定要编译的cuda架构。例如,如果我在上面的步骤中下载了cuda-toolkit-12-3,并希望为所有主要的cuda架构编译llama-cpp-python,我将运行:

CUDACXX=/usr/local/cuda-12/bin/nvcc CMAKE_ARGS="-DLLAMA_CUBLAS=on
-DCMAKE_CUDA_ARCHITECTURES=all-major" FORCE_CMAKE=1 pip install llama-cpp-python --no-cache-dir --force-reinstall --upgrade

CMAKE_CUDA_ARCHITECTURES的其他有效值是all(用于所有)或native,用于为主机系统的GPU架构构建。(请注意,在构建容器映像时,GPU通常不可用,因此请避免在Dockerfile中使用-DCMAKE_CUDA_ARCHITECTURES=native,除非您知道自己在做什么)
下面是一个Dockerfile,它展示了上述步骤的一个示例。它使用Debian基础映像(python:3.10-bookworm),下载并安装适用于操作系统的cuda工具包,并编译支持cuda的llama-cpp-python(沿着jupyterlab):

FROM python:3.10-bookworm

## Add your own requirements.txt if desired and uncomment the two lines below
# COPY ./requirements.txt .

# RUN pip install -r requirements.txt

## Install CUDA Toolkit (Includes drivers and SDK needed for building llama-cpp-python with CUDA support)
RUN apt-get update && apt-get install -y software-properties-common && \
    wget https://developer.download.nvidia.com/compute/cuda/12.3.1/local_installers/cuda-repo-debian12-12-3-local_12.3.1-545.23.08-1_amd64.deb && \
    dpkg -i cuda-repo-debian12-12-3-local_12.3.1-545.23.08-1_amd64.deb && \
    cp /var/cuda-repo-debian12-12-3-local/cuda-*-keyring.gpg /usr/share/keyrings/ && \
    add-apt-repository contrib && \
    apt-get update && \
    apt-get -y install cuda-toolkit-12-3 

#Install llama-cpp-python with CUDA Support (and jupyterlab)
RUN CUDACXX=/usr/local/cuda-12/bin/nvcc CMAKE_ARGS="-DLLAMA_CUBLAS=on -DCMAKE_CUDA_ARCHITECTURES=all-major" FORCE_CMAKE=1 \
    pip install jupyterlab llama-cpp-python --no-cache-dir --force-reinstall --upgrade

WORKDIR /workspace

CMD ["jupyter", "lab", "--ip", "0.0.0.0", "--port", "8888", "--NotebookApp.token=''", "--NotebookApp.password=''", "--no-browser", "--allow-root"]

sbdsn5lh

sbdsn5lh4#

Ryan的回答帮助我在Windows 11和PowerShell上解决了这个问题:

$env:CMAKE_ARGS="-DLLAMA_CUBLAS=on"
$env:CUDACXX="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2\bin\nvcc.exe"
pip install llama-cpp-python[server] --upgrade --force-reinstall --no-cache-dir

字符串
不用说,将nvcc.exe的路径替换为您机器上的任何内容。
如果你不想要的话,可以删除[server]

相关问题