Skip to content

🚀 llama.cpp 安装部署测试

需重点关注

建议优先使用免安装方式启动模型,如果启动异常,请手动编译安装 llama.cpp。

由于平台存在多种规格配置,可能存在兼容性。如果模型推理异常,请手动编译安装 llama.cpp

⚠️ 以下 GPU 不支持免安装方式:

  • V100
  • P40

🔥 免安装直接用 (推荐)

已经完成 llama.cpp 的源码编译,可直接通过以下命令启动模型即可。

提示

平台会定期编译更新 llama.cpp,请在实例内公开盘 /root/public-storage/package/llama.cpp/ 中查看是最新版本。

如果有新版,请更新 LLAMACPP_VERSION 版本

启动推理

以启动 Qwen3.8-27B Q4 版本的推理为例。

bash
# 指定 llama.cpp 二进制及动态库
export LLAMACPP_VERSION=0.1.2-dev
export LLAMACPP_PATH=/root/public-storage/package/llama.cpp/${LLAMACPP_VERSION}/build
export LD_LIBRARY_PATH=$LLAMACPP_PATH/bin:$LD_LIBRARY_PATH

# 启动模型
$LLAMACPP_PATH/bin/llama-server \
  --model /root/public-storage/model/unsloth/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8000 \
  --ctx-size 32768 \
  --parallel 1 \
  --n-gpu-layers 999 \
  --flash-attn on \
  --cache-type-k q8_0 \
  --cache-type-v q8_0 \
  --jinja \
  --metrics

请使用 nohup 的方式启动 llama.cpp 服务。

测试推理

✅ 模型加载完成后,即可通过以下命令测试模型

bash
curl http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "Qwen3.8-27B",
    "stream": true,
    "messages": [
      {
        "role": "user",
        "content": "llama.cpp 最佳实践"
      }
    ]
  }'

llamacpp-qwen27-tps

🚗 手动编译 llama.cpp 进程

当前自动生成的目录是 /root/workspace/llama.cpp, 如果要变更目录,则修改下面的脚本中 LLAMA_DIR 变量。或者在编译完成后,直接 mv 移动文件夹到任意目录即可。

⚠️ 编译非常耗时,通常需要十几分钟才可完成编译。

编译 llama.cpp 进程

bash
cat >/root/install_llama.sh <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail

LLAMA_DIR="/root/workspace/llama.cpp"
REPO="https://ghfast.top/https://github.com/ggml-org/llama.cpp.git"

echo "=================================================="
echo " 安装 llama.cpp"
echo " 目录: ${LLAMA_DIR}"
echo "=================================================="

# --------------------------------------------------
# 1. 安装依赖
# --------------------------------------------------
apt-get update

apt-get install -y \
    git \
    cmake \
    build-essential \
    pkg-config \
    curl \
    libcurl4-openssl-dev

# --------------------------------------------------
# 2. 检查 GPU / CUDA
# --------------------------------------------------
echo
echo ">>> NVIDIA GPU"
nvidia-smi

echo
echo ">>> CUDA Toolkit"

if ! command -v nvcc >/dev/null 2>&1; then
    echo "ERROR: 没有找到 nvcc"
    echo "请先安装 CUDA Toolkit"
    exit 1
fi

nvcc --version

# --------------------------------------------------
# 3. 获取 llama.cpp
# --------------------------------------------------
mkdir -p ${LLAMA_DIR}

if [[ ! -d "${LLAMA_DIR}/.git" ]]; then
    echo
    echo ">>> clone llama.cpp"

    rm -rf "${LLAMA_DIR}"

    git clone \
        --depth=1 \
        "${REPO}" \
        "${LLAMA_DIR}"
else
    echo
    echo ">>> 更新 llama.cpp"

    git -C "${LLAMA_DIR}" remote set-url origin "${REPO}"

    git -C "${LLAMA_DIR}" fetch \
        --depth=1 origin master

    git -C "${LLAMA_DIR}" reset \
        --hard origin/master
fi

echo
echo ">>> 当前版本"
git -C "${LLAMA_DIR}" log -1 --oneline

# --------------------------------------------------
# 4. 编译 CUDA 版本
# --------------------------------------------------
echo
echo ">>> 编译 llama-server"

cd "${LLAMA_DIR}"

rm -rf build

cmake -B build \
    -DGGML_CUDA=ON \
    -DGGML_NATIVE=OFF \
    -DLLAMA_BUILD_TESTS=OFF \
    -DCMAKE_BUILD_TYPE=Release

cmake --build build \
    --config Release \
    --target llama-server \
    -j"$(nproc)"

# --------------------------------------------------
# 5. 检查
# --------------------------------------------------
SERVER="${LLAMA_DIR}/build/bin/llama-server"

if [[ ! -x "${SERVER}" ]]; then
    echo "ERROR: llama-server 编译失败"
    exit 1
fi

echo
echo "=================================================="
echo " llama.cpp 编译成功"
echo "=================================================="
echo
echo "Binary:"
echo "${SERVER}"
echo

"${SERVER}" --version || true

echo
echo "动态库检查:"
ldd "${SERVER}" | grep "not found" && {
    echo "WARNING: 存在缺失动态库"
    exit 1
} || true

EOF

chmod +x /root/install_llama.sh
/root/install_llama.sh

启动模型服务

丹摩在实例内预置了大量的主流模型,编译完成后,直接启动模型服务即可。

bash
export LLAMACPP_PATH=/root/workspace/llama.cpp/build

export LD_LIBRARY_PATH=$LLAMACPP_PATH/bin:$LD_LIBRARY_PATH

$LLAMACPP_PATH/bin/llama-server \
  --model /root/public-storage/model/unsloth/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q4_K_M.gguf \
  --host 0.0.0.0 \
  --port 8000 \
  --ctx-size 32768 \
  --parallel 1 \
  --n-gpu-layers 999 \
  --flash-attn on \
  --cache-type-k q8_0 \
  --cache-type-v q8_0 \
  --jinja \
  --metrics

测试模型

bash
curl http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "Qwen3.8-27B",
    "messages": [
      {
        "role": "user",
        "content": "你好,介绍一下你自己"
      }
    ],
    "temperature": 0.6,
    "max_tokens": 512
  }'