人工智能实战:基于Ubuntu操作系统和Llama.cpp应用程序,使用Tesla V100 GPU推理通义千问3.6 27B大模型

准备

  1. 正常运行 Ubuntu 操作系统的计算机一台。具体为:

    1. 已在主板的 PCIe x16 插槽上安装了 NVIDIA Tesla V100 计算卡。

      注意事项:

      安装形式不限,SXM2 转接 PCIe x16 或原生 PCIe x16 形式均可。

    2. 已设置主板 BIOS 中开启以下选项:

      1. 已启用 “Above 4G Decoding” 项。以提高 GPU 性能。

      2. 已将目标 PCIe 插槽的 CPU 总线分配为了 x16 速度的带宽。以提高 GPU 性能。

    3. 已安装 x86架构的、64位的、24.04 版本的Ubuntu Desktop 或 Ubuntu Server 操作系统。

    4. 已配置好 Python 和 Pip 环境。

      参见:

      1. 常用软件和组件下载地址

      2. 操作系统笔记 - Linux - 参考资料 - Linux 操作系统常用系统环境变量配置

开始

禁用原操作系统中开源的 NVIDIA GPU 驱动程序

  1. 使用 vi 命令编辑位于 /etc/modprobe.d 目录下的 blacklist.conf 配置文件,并在文件末尾填入以下内容后,保存并退出,以禁用:

    blacklist nouveau
    options nouveau modeset=0
    

    注意事项:

    若配置文件打开失败,则可能原因多为 etc 目录下的 modprobe.d 目录不存在。手动创建后重试即可。

  2. 键入并执行以下命令,以更新初始内存文件系统(initramfs):

    sudo update-initramfs -u
    
  3. 重启电脑。

  4. 键入并执行以下命令,查看原操作系统中的显卡驱动信息:

    lsmod | grep nouveau
    

    若无任何输出,则表明禁用成功。

了解 NVIDIA 闭源 GPU 驱动程序、NVIDIA CUDA Toolkit 和 NVIDIA cuDNN 之间的版本兼容性和硬件兼容性关系

依照并访问常用网站中的 “NVIDIA cuDNN 兼容性列表”,示例结果如下所示:

在这里插入图片描述

由上可知:

9.10.2 版本的 cuDNN 在软件方面最大支持 12.9.X 版本的 CUDA Toolkit,在硬件方面支持 CUDA 硬件计算单元版本为 7.0 且产品代号为 Volta 的计算卡。

在 GPU-L 安卓应用程序上搜索 “v100” 关键字,示例结果如下所示:

在这里插入图片描述

可以得知,NVIDIA Tesla V100 计算卡的架构代号就是 Volta,且 CUDA 计算单元的硬件版本就是 7.0,与兼容性列表相匹配。

所以得出,适用于 NVIDIA Tesla V100 计算卡的套件信息如下:

组件 版本号 下载地址 备注
NVIDIA 闭源 GPU 驱动程序 - - 已含于 NVIDIA CUDA Toolkit 组件中,无需单独下载安装。
NVIDIA CUDA Toolkit 12.9 Update 2 CUDA Toolkit 12.9 Update 2 Downloads 只要是 12.9 版本均可,无关最后的小版本号。
NVIDIA cuDNN 9.10.2 cuDNN 9.10.2 Downloads -

安装 NVIDIA CUDA Toolkit(含 NVIDIA 闭源 GPU 驱动程序)

  1. 依照常用软件和组件下载地址中 NVIDIA CUDA Toolkit 的下载地址,下载适用于本机操作系统版本的二进制安装包,并将其保存在本机任意位置。

    示例命令如下所示:

    wget https://developer.download.nvidia.com/compute/cuda/12.9.2/local_installers/cuda_12.9.2_575.57.08_linux.run
    
  2. 使用 cd 命令切换到保存位置下,视实际情况,键入并执行以下命令,以为其赋予可执行权限:

    sudo chmod +x [NVIDIA CUDA Toolkit二进制安装包位置]
    

    示例命令如下所示:

    sudo chmod +x cuda_12.9.2_575.57.08_linux.run
    
  3. 视实际情况,键入并执行以下命令,以启动安装:

    sudo sh [NVIDIA CUDA Toolkit二进制安装包位置]
    

    示例命令如下所示:

    sudo sh cuda_12.9.2_575.57.08_linux.run
    

    注意事项:

    执行后需要耐心等待,不要认为终端无输出就是卡住了。

  4. 按照向导的提示正常安装即可。

    注意事项:

    在选择安装组件时,必须将“Driver”项、“CUDA Toolkit”项勾选。后两项随意勾选。最后一项不要勾选。

    示例如下所示:

    在这里插入图片描述
    然后选中“Install”项安装即可。同样需要耐心等待,不要强制中断。

    1. 键入并执行以下命令,以验证:

      nvidia-smi
      

      示例结果输出如下所示:

      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 575.57.08              Driver Version: 575.57.08      CUDA Version: 12.9     |
      |-----------------------------------------+------------------------+----------------------+
      | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
      |                                         |                        |               MIG M. |
      |=========================================+========================+======================|
      |   0  Tesla V100-SXM2-16GB           Off |   00000000:03:00.0 Off |                    0 |
      | N/A   38C    P0             36W /  300W |       0MiB /  16384MiB |      0%      Default |
      |                                         |                        |                  N/A |
      +-----------------------------------------+------------------------+----------------------+
      
      +-----------------------------------------------------------------------------------------+
      | Processes:                                                                              |
      |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
      |        ID   ID                                                               Usage      |
      |=========================================================================================|
      |  No running processes found                                                             |
      +-----------------------------------------------------------------------------------------+
      

      由上可知:

      1. GPU 驱动程序的版本号为 575.57.08,满足在[了解 NVIDIA 闭源 GPU 驱动程序、NVIDIA CUDA Toolkit 和 NVIDIA cuDNN 之间的版本兼容性和硬件兼容性关系](#了解 NVIDIA 闭源 GPU 驱动程序、NVIDIA CUDA Toolkit 和 NVIDIA cuDNN 之间的版本兼容性和硬件兼容性关系)所示的兼容性列表中 Linux 平台 GPU 驱动程序版本号大于等于 570.26 的要求。

      2. CUDA Version(即:NVIDIA CUDA Toolkit)的版本号为 12.9,符合在[了解 NVIDIA 闭源 GPU 驱动程序、NVIDIA CUDA Toolkit 和 NVIDIA cuDNN 之间的版本兼容性和硬件兼容性关系](#了解 NVIDIA 闭源 GPU 驱动程序、NVIDIA CUDA Toolkit 和 NVIDIA cuDNN 之间的版本兼容性和硬件兼容性关系)所示的兼容性列表中 CUDA Toolkit Version 版本号为 12.9 的要求。

      3. GPU 产品型号正确识别为了 Tesla V100-SXM2-16GB,说明驱动已正常工作。

安装 cuDNN

  1. 依照常用软件和组件下载地址中 NVIDIA cuDNN 的下载地址,下载适用于本机操作系统版本的应用程序安装包,并将其保存在本机任意位置。

    示例命令如下所示:

    sudo wget https://developer.download.nvidia.com/compute/cudnn/9.10.2/local_installers/cudnn-local-repo-ubuntu2404-9.10.2_1.0-1_amd64.deb
    
  2. 使用 cd 命令切换到保存位置下,视实际情况,键入并执行以下命令,以为其赋予可执行权限:

    sudo chmod +x [NVIDIA cuDNN应用程序安装包位置]
    

    示例命令如下所示:

    sudo chmod +x cudnn-local-repo-ubuntu2404-9.10.2_1.0-1_amd64.deb
    
  3. 视实际情况,键入并执行以下命令,以安装:

    sudo dpkg -i [NVIDIA cuDNN应用程序安装包位置]
    

    示例命令如下所示:

    sudo dpkg -i cudnn-local-repo-ubuntu2404-9.10.2_1.0-1_amd64.deb
    
  4. 键入并执行以下命令,以拷贝证书:

    sudo cp /var/cudnn-local-repo-ubuntu2404-9.10.2/cudnn-*-keyring.gpg /usr/share/keyrings/
    
  5. 键入并执行以下命令,以更新系统软件源:

    sudo apt-get update
    
  6. 键入并执行以下命令,以安装:

    sudo apt-get install cudnn -y
    
  7. 键入并执行以下命令,以验证:

    dpkg -l | grep cudnn
    

    示例结果输出如下所示:

    ii  cudnn                                 9.10.2-1                                amd64        NVIDIA CUDA Deep Neural Network library (cuDNN)
    ii  cudnn-local-repo-ubuntu2404-9.10.2    1.0-1                                   amd64        cudnn-local repository configuration files
    ii  cudnn9                                9.10.2-1                                amd64        NVIDIA CUDA Deep Neural Network library (cuDNN)
    ii  cudnn9-cuda-12                        9.10.2.21-1                             amd64        NVIDIA cuDNN for CUDA 12
    ii  cudnn9-cuda-12-9                      9.10.2.21-1                             amd64        NVIDIA cuDNN for CUDA 12.9
    ii  libcudnn9-cuda-12                     9.10.2.21-1                             amd64        cuDNN runtime libraries for CUDA 12.9
    ii  libcudnn9-dev-cuda-12                 9.10.2.21-1                             amd64        cuDNN development libraries for CUDA 12.9
    ii  libcudnn9-headers-cuda-12             9.10.2.21-1                             amd64        cuDNN header files for CUDA 12.9
    ii  libcudnn9-samples                     9.10.2.21-1                             all          cuDNN samples
    ii  libcudnn9-static-cuda-12              9.10.2.21-1                             amd64        cuDNN static libraries for CUDA 12.9
    

    由上可知:

    适用于 CUDA Toolkit 12 的 NVIDIA cuDNN 9 已成功安装。

下载 Llama.cpp 源码

键入并执行以下命令,以将最新版本的 llama.cpp 源代码下载并保存到本机任意位置。

示例命令如下所示:

sudo git clone https://down.mxw.xx.kg/https://github.com/ggml-org/llama.cpp.git

编译 Llama.cpp 源码

💡 先决条件:
已配置好 OpenSSL。
参见:[操作系统笔记 - Linux - 应用软件 - 安装和配置 OpenSSL](操作系统笔记_Linux.md#安装和配置 OpenSSL)。

  1. 使用 cd 命令切换到已克隆的 llama.cpp 源代码位置下,键入并执行以下命令,以在其内创建用于编译的目录:

    sudo mkdir build && cd build
    
  2. 视实际情况,键入并执行以下命令,以预编译:

    sudo cmake .. -G "Unix Makefiles" \
        -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLAMA_BUILD_SERVER=ON \
        -DLLAMA_BUILD_EXAMPLES=ON \
        -DGGML_CUDA=ON \
        -DCMAKE_CUDA_COMPILER=[nvcc二进制可执行文件的位置] \
        -DCMAKE_CUDA_ARCHITECTURES="[GPU的cuda硬件单元版本号乘以10]" \
        -DCMAKE_INSTALL_RPATH="[cuda组件的安装位置]/lib64;\$ORIGIN" \
        -DGGML_NATIVE=ON
    

    注意事项:

    1. nvcc 二进制可执行文件的位置,可使用 whereis 命令查询得到。

    2. GPU的cuda硬件单元版本号,可访问Legacy CUDA GPU Compute Capability | NVIDIA Developer网站查询得到。

    3. cuda组件的安装位置,一般默认位于 /usr/local 下。

    示例命令如下所示:

    sudo cmake .. -G "Unix Makefiles" \
        -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLAMA_BUILD_SERVER=ON \
        -DLLAMA_BUILD_EXAMPLES=ON \
        -DGGML_CUDA=ON \
        -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.9/bin/nvcc \
        -DCMAKE_CUDA_ARCHITECTURES="70" \
        -DCMAKE_INSTALL_RPATH="/usr/local/cuda-12.9/lib64;\$ORIGIN" \
        -DGGML_NATIVE=ON
    
  3. 键入并执行以下命令,以编译:

    sudo cmake --build . --config Release -j$(nproc)
    
  4. 编译后,将在当前位置下的 bin 中生成关于 llama.cpp 的二进制可执行文件。

    示例文件如下所示:

    total 85M
    lrwxrwxrwx 1 root       root          17 Jul  1 12:16 libggml-base.so -> libggml-base.so.0
    lrwxrwxrwx 1 root       root          22 Jul  1 12:16 libggml-base.so.0 -> libggml-base.so.0.15.3
    -rwxr-xr-x 1 root       root        893K Jul  1 12:16 libggml-base.so.0.15.3
    lrwxrwxrwx 1 root       root          16 Jul  1 12:17 libggml-cpu.so -> libggml-cpu.so.0
    lrwxrwxrwx 1 root       root          21 Jul  1 12:17 libggml-cpu.so.0 -> libggml-cpu.so.0.15.3
    -rwxr-xr-x 1 root       root        1.1M Jul  1 12:17 libggml-cpu.so.0.15.3
    lrwxrwxrwx 1 root       root          17 Jul  1 12:22 libggml-cuda.so -> libggml-cuda.so.0
    lrwxrwxrwx 1 root       root          22 Jul  1 12:22 libggml-cuda.so.0 -> libggml-cuda.so.0.15.3
    -rwxr-xr-x 1 root       root         51M Jul  1 12:22 libggml-cuda.so.0.15.3
    lrwxrwxrwx 1 root       root          12 Jul  1 12:22 libggml.so -> libggml.so.0
    lrwxrwxrwx 1 root       root          17 Jul  1 12:22 libggml.so.0 -> libggml.so.0.15.3
    -rwxr-xr-x 1 root       root         55K Jul  1 12:22 libggml.so.0.15.3
    -rwxr-xr-x 1 root       root         45K Jul  1 12:24 libllama-batched-bench-impl.so
    -rwxr-xr-x 1 root       root        457K Jul  1 12:24 libllama-bench-impl.so
    -rwxr-xr-x 1 root       root        2.0M Jul  1 12:24 libllama-cli-impl.so
    lrwxrwxrwx 1 root       root          20 Jul  1 12:23 libllama-common.so -> libllama-common.so.0
    lrwxrwxrwx 1 root       root          24 Jul  1 12:23 libllama-common.so.0 -> libllama-common.so.0.0.0
    -rwxr-xr-x 1 root       root        5.7M Jul  1 12:23 libllama-common.so.0.0.0
    -rwxr-xr-x 1 root       root        109K Jul  1 12:24 libllama-completion-impl.so
    -rwxr-xr-x 1 root       root         36K Jul  1 12:24 libllama-fit-params-impl.so
    -rwxr-xr-x 1 root       root        161K Jul  1 12:24 libllama-perplexity-impl.so
    -rwxr-xr-x 1 root       root         88K Jul  1 12:24 libllama-quantize-impl.so
    -rw-rw-r-- 1 stevejrong stevejrong  6.6M Jul  1 12:37 libllama-server-impl.so
    lrwxrwxrwx 1 root       root          13 Jul  1 12:22 libllama.so -> libllama.so.0
    lrwxrwxrwx 1 root       root          17 Jul  1 12:22 libllama.so.0 -> libllama.so.0.0.0
    -rwxr-xr-x 1 root       root        3.9M Jul  1 12:22 libllama.so.0.0.0
    lrwxrwxrwx 1 root       root          12 Jul  1 12:23 libmtmd.so -> libmtmd.so.0
    lrwxrwxrwx 1 root       root          16 Jul  1 12:23 libmtmd.so.0 -> libmtmd.so.0.0.0
    -rwxr-xr-x 1 root       root        1.4M Jul  1 12:23 libmtmd.so.0.0.0
    -rwxr-xr-x 1 root       root         57K Jul  1 12:24 llama
    -rwxr-xr-x 1 root       root         50K Jul  1 12:24 llama-batched
    -rwxr-xr-x 1 root       root         16K Jul  1 12:24 llama-batched-bench
    -rwxr-xr-x 1 root       root         18K Jul  1 12:24 llama-bench
    -rwxr-xr-x 1 root       root         18K Jul  1 12:24 llama-cli
    -rwxr-xr-x 1 root       root         16K Jul  1 12:24 llama-completion
    -rwxr-xr-x 1 root       root         65K Jul  1 12:24 llama-convert-llama2c-to-ggml
    -rwxr-xr-x 1 root       root         88K Jul  1 12:24 llama-cvector-generator
    -rwxr-xr-x 1 root       root        240K Jul  1 12:24 llama-debug
    -rwxr-xr-x 1 root       root        211K Jul  1 12:24 llama-debug-template-parser
    -rwxr-xr-x 1 root       root         76K Jul  1 12:24 llama-diffusion-cli
    -rwxr-xr-x 1 root       root         63K Jul  1 12:24 llama-embedding
    -rwxr-xr-x 1 root       root         40K Jul  1 12:24 llama-eval-callback
    -rwxr-xr-x 1 root       root         88K Jul  1 12:24 llama-export-lora
    -rwxr-xr-x 1 root       root         40K Jul  1 12:24 llama-finetune
    -rwxr-xr-x 1 root       root         16K Jul  1 12:24 llama-fit-params
    -rwxr-xr-x 1 root       root         17K Jul  1 12:16 llama-gemma3-cli
    -rwxr-xr-x 1 root       root         59K Jul  1 12:24 llama-gen-docs
    -rwxr-xr-x 1 root       root         29K Jul  1 12:22 llama-gguf
    -rwxr-xr-x 1 root       root         97K Jul  1 12:22 llama-gguf-hash
    -rwxr-xr-x 1 root       root         48K Jul  1 12:24 llama-gguf-split
    -rwxr-xr-x 1 root       root         40K Jul  1 12:24 llama-idle
    -rwxr-xr-x 1 root       root        332K Jul  1 12:24 llama-imatrix
    -rwxr-xr-x 1 root       root         17K Jul  1 12:16 llama-llava-cli
    -rwxr-xr-x 1 root       root         54K Jul  1 12:24 llama-lookahead
    -rwxr-xr-x 1 root       root         55K Jul  1 12:24 llama-lookup
    -rwxr-xr-x 1 root       root         37K Jul  1 12:24 llama-lookup-create
    -rwxr-xr-x 1 root       root         22K Jul  1 12:24 llama-lookup-merge
    -rwxr-xr-x 1 root       root         42K Jul  1 12:24 llama-lookup-stats
    -rwxr-xr-x 1 root       root         17K Jul  1 12:16 llama-minicpmv-cli
    -rwxr-xr-x 1 root       root         86K Jul  1 12:24 llama-mtmd-cli
    -rwxr-xr-x 1 root       root         54K Jul  1 12:24 llama-mtmd-debug
    -rwxr-xr-x 1 root       root         67K Jul  1 12:24 llama-parallel
    -rwxr-xr-x 1 root       root         49K Jul  1 12:24 llama-passkey
    -rwxr-xr-x 1 root       root         16K Jul  1 12:24 llama-perplexity
    -rwxr-xr-x 1 root       root         22K Jul  1 12:24 llama-q8dot
    -rwxr-xr-x 1 root       root         18K Jul  1 12:24 llama-quantize
    -rwxr-xr-x 1 root       root         17K Jul  1 12:16 llama-qwen2vl-cli
    -rwxr-xr-x 1 root       root         50K Jul  1 12:24 llama-results
    -rwxr-xr-x 1 root       root         69K Jul  1 12:24 llama-retrieval
    -rwxr-xr-x 1 root       root         18K Jul  1 12:24 llama-server
    -rwxr-xr-x 1 root       root         27K Jul  1 12:23 llama-simple
    -rwxr-xr-x 1 root       root         32K Jul  1 12:23 llama-simple-chat
    -rwxr-xr-x 1 root       root         74K Jul  1 12:24 llama-speculative
    -rwxr-xr-x 1 root       root         81K Jul  1 12:24 llama-speculative-simple
    -rwxr-xr-x 1 root       root        193K Jul  1 12:24 llama-template-analysis
    -rwxr-xr-x 1 root       root         32K Jul  1 12:24 llama-tokenize
    -rwxr-xr-x 1 root       root        414K Jul  1 12:24 llama-tts
    -rwxr-xr-x 1 root       root         22K Jul  1 12:24 llama-vdot
    -rwxr-xr-x 1 root       root         50K Jul  1 12:23 test-alloc
    -rwxr-xr-x 1 root       root         56K Jul  1 12:23 test-arg-parser
    -rwxr-xr-x 1 root       root         18K Jul  1 12:23 test-autorelease
    -rwxr-xr-x 1 root       root        1.1M Jul  1 12:24 test-backend-ops
    -rwxr-xr-x 1 root       root        115K Jul  1 12:23 test-backend-sampler
    -rwxr-xr-x 1 root       root         26K Jul  1 12:23 test-barrier
    -rwxr-xr-x 1 root       root         16K Jul  1 12:22 test-c
    -rwxr-xr-x 1 root       root        1.2M Jul  1 12:25 test-chat
    -rwxr-xr-x 1 root       root        749K Jul  1 12:24 test-chat-auto-parser
    -rwxr-xr-x 1 root       root        706K Jul  1 12:24 test-chat-peg-parser
    -rwxr-xr-x 1 root       root        312K Jul  1 12:24 test-chat-template
    -rwxr-xr-x 1 root       root         18K Jul  1 12:23 test-col2im-1d
    -rwxr-xr-x 1 root       root        243K Jul  1 12:24 test-export-graph-ops
    -rwxr-xr-x 1 root       root         23K Jul  1 12:23 test-gbnf-validator
    -rwxr-xr-x 1 root       root         85K Jul  1 12:23 test-gguf
    -rwxr-xr-x 1 root       root        214K Jul  1 12:24 test-gguf-model-data
    -rwxr-xr-x 1 root       root        234K Jul  1 12:23 test-grammar-integration
    -rwxr-xr-x 1 root       root         45K Jul  1 12:23 test-grammar-parser
    -rwxr-xr-x 1 root       root        731K Jul  1 12:24 test-jinja
    -rwxr-xr-x 1 root       root        403K Jul  1 12:24 test-json-schema-to-grammar
    -rwxr-xr-x 1 root       root         67K Jul  1 12:23 test-llama-archs
    -rwxr-xr-x 1 root       root         46K Jul  1 12:23 test-llama-grammar
    -rwxr-xr-x 1 root       root         18K Jul  1 12:23 test-log
    -rwxr-xr-x 1 root       root         17K Jul  1 12:23 test-model-load-cancel
    -rwxr-xr-x 1 root       root         17K Jul  1 12:23 test-mtmd-c-api
    -rwxr-xr-x 1 root       root         68K Jul  1 12:23 test-opt
    -rwxr-xr-x 1 root       root       1003K Jul  1 12:24 test-peg-parser
    -rwxr-xr-x 1 root       root         22K Jul  1 12:23 test-quantize-fns
    -rwxr-xr-x 1 root       root         42K Jul  1 12:23 test-quantize-perf
    -rwxr-xr-x 1 root       root        228K Jul  1 12:23 test-quantize-stats
    -rwxr-xr-x 1 root       root        251K Jul  1 12:24 test-quant-type-selection
    -rwxr-xr-x 1 root       root         35K Jul  1 12:23 test-reasoning-budget
    -rwxr-xr-x 1 root       root         45K Jul  1 12:23 test-recurrent-state-rollback
    -rwxr-xr-x 1 root       root         22K Jul  1 12:23 test-rope
    -rwxr-xr-x 1 root       root         50K Jul  1 12:23 test-sampling
    -rwxr-xr-x 1 root       root         59K Jul  1 12:23 test-save-load-state
    -rwxr-xr-x 1 root       root         41K Jul  1 12:23 test-state-restore-fragmented
    -rwxr-xr-x 1 root       root         51K Jul  1 12:23 test-thread-safety
    -rwxr-xr-x 1 root       root         53K Jul  1 12:23 test-tokenizer-0
    -rwxr-xr-x 1 root       root         28K Jul  1 12:23 test-tokenizer-1-bpe
    -rwxr-xr-x 1 root       root         23K Jul  1 12:23 test-tokenizer-1-spm
    

替换编译后 llama-server 功能实现库文件

不知为何,以 llama-cli 启动运行大模型一切正常,但以 llama-server 启动运行大模型,在访问 Web 页面时会报 404 的错误。

几番尝试以后,最终发现将官方编译好的 Llama.cpp 目录下的 libllama-server-impl.so 库文件,替换到本地编译好的 Llama.cpp 的 /build/bin 目录下能解决问题,于是需要做这一步。若后续以 llama-server 启动并从 Web 访问无问题,则可跳过此步骤,无需替换。

替换步骤为:

  1. 访问llama.cpp 的产品发布页面,下载适用于 Linux 操作系统的、以 CPU 推理的二进制应用程序压缩包,并将其保存和解压到本机任意位置。

    如下所示:

    在这里插入图片描述

    示例下载地址如下所示:

    sudo wget https://down.mxw.xx.kg/https://github.com/ggml-org/llama.cpp/releases/download/b9859/llama-b9859-bin-ubuntu-x64.tar.gz
    
  2. 将官方编译好的 Llama.cpp 目录下的 libllama-server-impl.so 库文件,替换到本地编译好的 Llama.cpp 的 /build/bin 目录下。

    如下所示:

    在这里插入图片描述

    注意事项:

    图片示例中是早已替换好的,所以能发现文件大小几乎一致。实际上,替换前 libllama-server-impl.so 库的文件大小只有约现在的一半。也是从这里发现问题的。如果包含 Web 资源,实现库肯定不能这么小,然后与官方编译的文件大小一比,问题乍现。

下载大模型

访问魔改蒸馏版通义千问3.6大模型的产品发布页面,登录并下载 q4km 量化版本的、gguf 格式的大模型文件,并使用 scp 命令将其传输到目标主机上。

如下所示:

在这里插入图片描述

运行大模型

  1. 使用 cd 命令切换到本地编译好的 Llama.cpp 的 /build/bin 下。

  2. 视实际情况,键入并执行以下命令,以启动大模型并以 Web 服务的形式提供操作接口:

    ./llama-server \
        -m [gguf格式的大模型文件位置] \
        --host [Web服务需要绑定的IP地址。这里写0.0.0.0] --port [Web服务需要暴露的端口号。不与宿主机上的任意端口号重复即可] \
        --cache-type-k q4_0 --cache-type-v q4_0 --flash-attn on --reasoning off --threads 20 --mlock \
        --ctx-size 32768 --temp 0.6 --top-p 0.95 --parallel 2 --jinja
    

    示例命令如下所示:

    ./llama-server \
        -m /home/stevejrong/ai/models/Qwen3.6-27B-DSV4Pro-Distill-MTP-Q4_K_M-imatrix.gguf \
        --host 0.0.0.0 --port 8888 \
        --cache-type-k q4_0 --cache-type-v q4_0 --flash-attn on --reasoning off --threads 20 --mlock \
        --ctx-size 32768 --temp 0.6 --top-p 0.95 --parallel 2 --jinja
    

效果展示

大模型推理速度为 9Token/秒。

示例结果如下所示:

在这里插入图片描述

推理期间 GPU 的负载信息如下所示:

+-----------------------------------------------------------------------------------------+                                                  stevejrongnas: Thu Jul  2 11:31:36 2026

Thu Jul  2 11:31:36 2026

| NVIDIA-SMI 575.57.08              Driver Version: 575.57.08      CUDA Version: 12.9     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  Tesla V100-SXM2-16GB           Off |   00000000:03:00.0 Off |                    0 |
| N/A   59C    P0            266W /  300W |   15035MiB /  16384MiB |    100%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A          337919      C   ./llama-server                        15032MiB |
+-----------------------------------------------------------------------------------------+
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐