即使在 BLAS = 1、LlamaCpp、Langchain、Mistral 7b GGUF 模型之后,LLM 模型也不会加载到 GPU 中

问题描述 投票:0回答:1

忏悔: 首先,我根本不是这个领域的专家;我只是在工作中练习并尝试学习。另外,我很困惑这种模型是否不能在这种类型的 GPU 上运行。

我正在尝试在我的笔记本电脑上本地运行模型(目前,我只有这台机器)。 我已经从 Hungging Face The Bloke 下载了模型。

内涵: 我使用的是Langchain,我会上传一些数据并与模型进行对话(大致就是这样的想法,不幸的是,由于隐私问题我无法表达更多)。

到目前为止工作: 我首先使用了 llama-cpp-python (CPU) 库并尝试运行该模型,并且它有效。但正如预料的那样,推理速度太慢了,回答一题花了近2分钟。

然后我尝试使用以下命令使用 cuBLAS 进行构建:

!CMAKE_ARGS="-DLLAMA_CUBLAS=on" FORCE_CMAKE=1 pip install --upgrade llama-cpp-python

它成功了,运行程序后,我注意到 BLAS = 1(之前,在 CPU 版本中,BLAS = 0)。

问题: 运行整个程序后,我注意到,当我上传想要执行对话的数据时,模型没有加载到我的 GPU 上,我在查看 Nvidia X Server 后得到了它,它显示我的GPU 内存根本没有被消耗,尽管在终端中显示 BLAS = 1,而且我的想法是它并不表明模型已加载到 GPU 上。现在,我不知道此时该怎么办。我在互联网上搜索但没有得到任何适当的修复。

一些其他问题: 我尝试设置 n_batch = 256 而不是默认值 512,以减少 GPU 上的压力,但我收到错误 ValueError:请求的令牌超出了上下文窗口..。所以,我想知道如何权衡 GPU 层、上下文窗口和批量大小之间的关系?在LlamaCpp GPU的文档中,是这样写的: enter image description here

我实际更改模型的项目的代码片段:

language_model = LlamaCpp(
    model_path="/my/model/path/directory/sub_directory/mistral_7b_v_1/mistral-7b-v0.1.Q2_K.gguf",
    n_gpu_layers=1,
    n_batch=64,
    n_ctx=256,
    f16_kv=True,
    callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
    verbose=True
)
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)
return ConversationalRetrievalChain.from_llm(
    llm=language_model,
    retriever=vectorstore.as_retriever(search_type="mmr", search_kwargs = {"k": 5}),
    memory=memory
)

硬件详细信息:

  1. GPU:NVIDIA GeForce RTX 3050 笔记本电脑 GPU / AMD Renoir
  2. GPU VRAM:4 GB(3.8 GB 可用)
  3. CPU:AMD® Ryzen 9 5900hx,带 radeon 显卡 × 16
  4. 机器内存:16 GB
  5. 型号最大内存要求:5.58(这是不运行的主要原因吗?)

最后: 感谢您阅读这篇长文。如果可以的话,我期待着一些答案。 :)

python-3.x langchain large-language-model llama-cpp-python mistral-7b
1个回答
0
投票

改变

n_gpu_layers
参数慢慢增加,直到你的GPU内存耗尽。

n_gpu_layers
设置为 -1 会将所有层卸载到 GPU。

在加载模型时检查您的 llama-cpp 日志:

如果它们看起来像这样:

main: build = 722 (049aa16)
main: seed  = 1
ggml_init_cublas: found 1 CUDA devices:
  Device 0: NVIDIA GeForce RTX 3090
llama.cpp: loading model from models/7B/ggml-model-q4_0.bin
llama_model_load_internal: format     = ggjt v3 (latest)
llama_model_load_internal: n_vocab    = 32000
llama_model_load_internal: n_ctx      = 512
llama_model_load_internal: n_embd     = 4096
llama_model_load_internal: n_mult     = 256
llama_model_load_internal: n_head     = 32
llama_model_load_internal: n_layer    = 32
llama_model_load_internal: n_rot      = 128
llama_model_load_internal: ftype      = 2 (mostly Q4_0)
llama_model_load_internal: n_ff       = 11008
llama_model_load_internal: n_parts    = 1
llama_model_load_internal: model size = 7B
llama_model_load_internal: ggml ctx size =    0.07 MB
llama_model_load_internal: using CUDA for GPU acceleration
llama_model_load_internal: mem required  = 5407.71 MB (+ 1026.00 MB per state)
llama_model_load_internal: offloading 0 repeating layers to GPU
llama_model_load_internal: **offloaded 0/35 layers to GPU**
llama_model_load_internal: total VRAM used: 512 MB
...................................................................................................
llama_init_from_file: kv self size  =  256.00 MB
WARNING: failed to allocate 512.00 MB of pinned memory: out of memory
WARNING: failed to allocate 512.00 MB of pinned memory: out of memory

system_info: n_threads = 12 / 24 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | VSX = 0 |
sampling: repeat_last_n = 64, repeat_penalty = 1.100000, presence_penalty = 0.000000, frequency_penalty = 0.000000, top_k = 40, tfs_z = 1.000000, top_p = 0.950000, typical_p = 1.000000, temp = 0.800000, mirostat = 0, mirostat_lr = 0.100000, mirostat_ent = 5.000000
generate: n_ctx = 512, n_batch = 512, n_predict = 256, n_keep = 0

如果它说将 0 个重复层卸载到 GPU 或任何更低的数字,请尝试增加它。

© www.soinside.com 2019 - 2024. All rights reserved.