Deploy_LLMs_ON_Linux

如何在 Linux 服务器上搭建本地LLMs 🤔

如何在 Linux 服务器上部署大语言模型,以 qwen1_5-32b-chat-q8_k_0 为例。服务器使用显卡 A4000,预算:$5950$ 元。

搭建 qwen1_5-32b-chat-q8_k_0

  1. 下载 🤗Hugging Face 库,这个库主要是用于下载模型使用。当然为了保证速度,我们可以使用 wget 命令替代他。如果你决定使用 wget 命令,你可以选择跳过这一步,具体的使用方式在第五步呈现。

    1
    (base) ➜  ~ pip install huggingface_hub

    或者是直接下载 modelscope 库,使用 modelscope 下载模型(⭐推荐)。

    1
    (base) ➜  ~ pip install modelscope
  2. 创建一个 LocalGit 文件夹,并进入该文件夹

    1
    2
    3
    (base) ➜  ~ mkdir LocalGit
    (base) ➜ ~ cd LocalGit
    (base) ➜ LocalGit
  3. 克隆 llama.cpp 的仓库

    1
    2
    3
    (base) ➜  LocalGit git clone https://github.com/ggerganov/llama.cpp
    (base) ➜ LocalGit cd llama.cpp
    (base) ➜ llama.cpp git:(master)
  4. 在有 GPU 的环境下编译 llama.cpp

    前置条件:安装 nvcc + cmake

    执行代码进行编译:

    1
    (base) ➜  llama.cpp git:(master) make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc

    如果出现错误:(base) ➜ llama.cpp git:(master) make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc Makefile:76: *** LLAMA_CUBLAS is removed. Use GGML_CUDA instead.. Stop.

    修改代码如下:

    1
    (base) ➜  llama.cpp git:(master) make GGML_CUDA=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc

    为了加快编译速度,我们可以尝试以下命令添加参数 jj 后面的数字表示同时编译的线程数(可根据 CPU 核数决定),实测能缩短约 $1/3$ 的时间:

    1
    (base) ➜  llama.cpp git:(master) make -j6 GGML_CUDA=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc
  5. 下载相应的模型

    ① 使用 Hugging Face 下载相应模型,实测服务器网速在 3M~6M 左右,具体方式如下:

    1
    (base) ➜  ~ huggingface-cli download Qwen/Qwen1.5-32B-Chat-GGUF qwen1_5-32b-chat-q8_0.gguf --local-dir . --local-dir-use-symlinks False

    ② 使用 wget 下载 modelscope 的模型文件,实测网速在 10M~22M 左右,这需要你先获取到模型的下载链接,具体方式如下:

    1
    (base) ➜  ~ wget https://www.modelscope.cn/models/qwen/Qwen1.5-32B-Chat-GGUF/resolve/master/qwen1_5-32b-chat-q8_0.gguf

    ③ 直接使用 modelscope 库下载模型,实测网速在 18M~65M 左右,具体方式如下:

    1
    2
    3
    4
    (base) ➜  ~ cd LocalGit 
    (base) ➜ LocalGit mkdir models
    (base) ➜ LocalGit cd models
    (base) ➜ models modelscope download --model=qwen/Qwen2-7B-Instruct-GGUF --local_dir . qwen2-7b-instruct-q8_0.gguf
  6. 使用 llama.cpp 的相关命令进行操作

    1
    (base) ➜  llama.cpp git:(master) ./main -m ../models/qwen1_5-32b-chat-q8_0.gguf -n 512 --color -i -cml -f prompts/chat-with-qwen.txt
    1
    (base) ➜  llama.cpp git:(master) ./llama-server -m ../models/qwen1_5-32b-chat-q8_0.gguf -ngl 80 -fa

    如果是 Qwen2-7B-Instruct-GGUF,可以参考官方文档:Qwen2-7B-Instruct-GGUF · 模型库 — Qwen2-7B-Instruct-GGUF · 模型库 (modelscope.cn)

    1
    (base) ➜  llama.cpp git:(master) ./llama-server -m ../models/qwen2-7b-instruct-q8_0.gguf -ngl 29 -fa
  7. 兼容 OpenAI API,使用 Python 代码测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import openai

    client = openai.OpenAI(
    base_url="http://localhost:8080/v1", # "http://<Your api-server IP>:port"
    api_key = "sk-no-key-required"
    )

    completion = client.chat.completions.create(
    model="qwen",
    messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "tell me something about michael jordan"}
    ]
    )
    print(completion.choices[0].message.content)
  8. 命令启动

    1
    2
    3
    4
    5
    ./llama-cli -m qwen2-7b-instruct-q5_k_m.gguf \
    -n 512 -co -i -if -f prompts/chat-with-qwen.txt \
    --in-prefix "<|im_start|>user\n" \
    --in-suffix "<|im_end|>\n<|im_start|>assistant\n" \
    -ngl 24 -fa

拓展补充

Llama.cpp大模型量化简明手册_llamacpp量化-CSDN博客

【Llama2 windows部署详细教程】第二节:llama.cpp成功在windows上编译的秘诀_llama cpp 编译-CSDN博客

作者

NilEra

发布于

2024-08-13

更新于

2024-10-18

许可协议

评论