RedHat-Build-LLM

如何在 Linux 服务器上搭建本地LLMs (RedHat 篇)🤔

最近因为一些原因,需要在一台 RedHat 红帽机器上配置一个 qwen2-7B 模型来进行离线大模型的使用。过程非常曲折,特此记录本次过程。

拿到服务器账号之后,我先检查了一些环境配置,个人用户缺失很多环境,好消息是 root 用户可以使用 nvcc 命令。那么我们就可以不用费劲去安装 cuda 了。

那么我首先使用个人用户安装了 Anaconda。安装过程如下:

安装完成后,配置环境变量,创建虚拟环境(这里我使用的 Python 版本是我参考的组卡平台的版本,这个版本经过测试不存在什么问题)。

1
conda create -n qwen2 python=3.10.12

启动虚拟环境时可能会遇到问题:

① 出现错误:CondaError: Run 'conda init' before 'conda activate'

② 换源问题

然后我继续向下推进:

我们切换到 qwen2 环境,正常安装相应的 modelscope 软件包。

1
pip install modelscope

目前为止一切顺利。我们需要使用 git 命令将 llama.cpp 拉到本地,因为这个服务器无法访问 GitHub,这里我们可以使用 Gitee 来进行替代。使用 Gitee 可以将 GitHub 上的仓库拉取下来:

GiteePullGithub GiteePullGithub GiteePullGithub

然后对于 Gitee 中的文件,我们使用 wget 命令下载即可。

更新 GCC

⭐⭐Linux升级gcc到最新版本gcc-11.2.0_更新gcc-CSDN博客

⭐⭐⭐Linux gcc升级全过程,过程超详细-阿里云开发者社区 (aliyun.com)

安装 Ccache

  1. 从官方网站下载 CcacheCcache — Compiler cache,我们也可以从 GitHubReleases 页面上找到较旧的版本。

  2. 使用 tar -zxvf ccache-<VERSION>-linux-x86_64.tar.xz 命令,解压 Ccache 到文件夹

  3. 较早的版本需要执行三条语句进行安装

    1
    2
    3
    ./configure
    make
    sudo make install
  4. 较新的版本提供了一键安装方式

    1
    2
    # 一般为 /usr/local/ccache-your-version_num
    make install prefix=/usr/local/ccache-4.9
  5. 配置环境变量

  6. 检查 Ccache 的版本

    1
    ccache -V

安装 MPFRGMP

安装 MPC

  1. 官网:Download — multiprecision.org

问题:

error while loading shared libraries: libmpfr.so.6: cannot open shared object file: No such file or directory 安装 libmpfr6-4.1.0-alt1.x86_64.rpm 并且将缺少的库放到 /usr/lib64 中。

下载地址:libmpfr6-4.1.0-alt1.x86_64.rpm ALT Linux P10 Download (pkgs.org)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost gcc_bag]# wget https://altlinux.pkgs.org/sisyphus/classic-x86_64/libmpfr6-4.1.0-alt2.x86_64.rpm.html
[root@localhost gcc_bag]# ls
libmpfr6-4.1.0-alt2.x86_64.rpm
[root@localhost gcc_bag]# rpm2cpio libmpfr6-4.1.0-alt2.x86_64.rpm | cpio -div

[root@localhost gcc_bag]# rpm2cpio libmpfr6-4.1.0-alt2.x86_64.rpm | cpio -div
./usr/lib64/libmpfr.so.6
./usr/lib64/libmpfr.so.6.1.0
./usr/share/doc/mpfr-4.1.0
./usr/share/doc/mpfr-4.1.0/AUTHORS
./usr/share/doc/mpfr-4.1.0/BUGS
./usr/share/doc/mpfr-4.1.0/NEWS
5494 blocks

[root@localhost gcc_bag]# ls
libmpfr6-4.1.0-alt2.x86_64.rpm usr

[root@localhost gcc_bag]# mv ./usr/lib64/libmpfr.so.6 /usr/lib64/
[root@localhost gcc_bag]# mv ./usr/lib64/libmpfr.so.6.1.0 /usr/lib64/

更新 binutils,包括 ldas

binutils 镜像:Index of /gnu/binutils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost Share]# wget http://ftp.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2  
//wget如果下载不下来就 直接浏览器访问网址下载后再解压
[root@localhost Share]# tar -xjf binutils-2.25.1.tar.bz2
[root@localhost Share]# cd binutils-2.25.1
[root@localhost binutils-2.25.1]# ./configure --prefix=/usr
[root@localhost binutils-2.25.1]# make
[root@localhost binutils-2.25.1]# make install
//安装完毕验证结果
[root@localhost binutils-2.25.1]# as --version
GNU assembler (GNU Binutils) 2.25.1
[root@localhost binutils-2.25.1]# objdump -v
GNU objdump (GNU Binutils) 2.25.1
[root@localhost binutils-2.25.1]# ld -v
GNU ld (GNU Binutils) 2.25.1

安装 nvcc

https://blog.csdn.net/bigbaojian/article/details/129642388

Linux 下的 CUDA 安装和使用指南 - 知乎 (zhihu.com)

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博客