部署llamacpp

安装依赖

sudo apt update
sudo apt install -y build-essential cmake git libcurl4-openssl-dev nvidia-cuda-toolkit

下载源码

# 克隆代码
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

编译构建

# 配置并构建(指定开启 CUDA)
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j $(nproc)

配置环境

# 将目录移动到/opt
sudo mv llama.cpp /opt/

#库文件存在但不在系统库路径里
sudo echo "/opt/llama.cpp/build/bin" > /etc/ld.so.conf.d/llama.conf
# 更新
sudo ldconfig
# 检查
sudo ldconfig -p | grep mtmd

#~/.bashrc 写入如下内容:
export LD_LIBRARY_PATH=/opt/llama.cpp/build/bin:$LD_LIBRARY_PATH

source ~/.bashrc

配置python环境(不知到是否需要)

conda create -n llama python=3.10 -y
conda activate llama
pip install sentencepiece numpy

运行测试

/opt/llama.cpp/build/bin/llama-server \
    -m /opt/llama.cpp/models/*.gguf \
    --port 8080 \
    --host 0.0.0.0 \
    -ngl 33 \
    --ctx-size 8192
#!/bin/bash

APP_PATH=/opt/llama.cpp/build/bin/

# 检查当前目录是否存在
if [ ! -f "$APP_PATH/llama-server" ]; then
    echo "错误: 找不到 llama-server,请检查路径"
    exit 1
fi

echo "开始运行-->"

# 运行 llama-server
llama-server \
    -m "models/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf" \ 	# 大语言模型
    --mmproj "models/mmproj-BF16.gguf" \			# 视觉模型
    -ngl 99 \										# 让gpu尽可能参与计算					
    --n-cpu-moe 999 \			// 把混合架构模型中的专家模型放到cpu和内存中
    --flash-attn on \			// 性能优化:降低现存占用&提高模型运行速度 ,提升上下文长度
    --jinja \
    -c 32768 \					// 上下文窗口(token,默认4096,0=模型默认)
    -t 12 \						// cpu线程数量,太高会抢内存宽带,增加cpu调度开销
    -b 512 \					// batch 参数:逻辑批处理大小,影响推理吞吐量(提示词处理速度)
    -ub 128 \
    --cache-type-k q4_0 \		// kv缓存设定
    --cache-type-v q4_0 \
    --mlock \					// 锁定模型到内存的大小 ,防止将模型存到交换区(硬盘上,会卡顿?速度变慢?)
    --host 127.0.0.1 \
    --port 8080

参考:https://blog.csdn.net/zhenlun/article/details/160252735

#!/bin/bash

APP_PATH=/opt/llama.cpp/build/bin
MOD_PATH=/opt/models/LLM

# 检查当前目录是否存在
if [ ! -f "$APP_PATH/llama-server" ]; then
    echo "错误: 找不到 llama-server,请检查路径"
    exit 1
fi

echo "开始运行-->"

# 配置数组
declare -A MODELS=(
    [1]="Q4_K_M:Qwen3.6-35B-A3B-UD-Q4_K_M.gguf:32768:8192"
    [2]="Q4_K_M Uncensored:Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf:32768:8192"
)

MMPROJ="mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf"
# MMPROJ="mmproj-BF16.gguf"

show_menu() {
    clear
    echo "=========================================="
    echo "     Qwen3.6-35B-A3B 多模态模型"
    echo "              零度优化版"
    echo "=========================================="
    echo ""
    echo "1. Q4_K_M(正常版)"
    echo "2. Q4_K_M Uncensored(无限版)"
    echo ""
    echo "=========================================="
}

while true; do
    show_menu
    read -p "请输入数字: " choice
    
    if [[ -n "${MODELS[$choice]}" ]]; then
        IFS=':' read -r name model_file ctx_size num_predict <<< "${MODELS[$choice]}"
        echo "启动 $name 版本..."
        
        $APP_PATH/llama-server \
            -m "${MOD_PATH}/$model_file" \
            --mmproj "${MOD_PATH}/$MMPROJ" \
            -ngl 999 \
            -c "$ctx_size" \
            -n "$num_predict" \      
            --n-cpu-moe 999 \
            --flash-attn on \
            --jinja \
            -t 12 \
            -b 512 \
            -ub 128 \
            --cache-type-k q4_0 \
            --cache-type-v q4_0 \
            --mlock \
            --host 127.0.0.1 \
            --port 8080 

        break
    else
        echo "无效输入,请选择 1-4"
        sleep 1
    fi
done

read -p "按 Enter 键退出..."

  • 多次运行后出现错误:
0.04.302.049 E ggml_backend_cuda_buffer_type_alloc_buffer: allocating 497.00 MiB on device 0: cudaMalloc failed: out of memory
0.04.302.056 E ggml_gallocr_reserve_n_impl: failed to allocate CUDA0 buffer of size 521142272
0.04.302.056 E graph_reserve: failed to allocate compute buffers
0.04.306.122 E llama_init_from_model: failed to initialize the context: failed to allocate compute pp buffers
0.04.306.127 E common_init_result: failed to create context with model '/opt/models/LLM/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf'

​ 解决:

# 启动脚本中 --host 和 --port 必须放最后
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--mlock \
--host 127.0.0.1 \
--port 8080

模型处理

中文模型处理与转换

原版LLaMA对中文支持有限,我们需要使用经过中文增量预训练的衍生模型。以Chinese-LLaMA-Alpaca为例,其转换过程需特别注意分词器的兼容性。

模型下载与准备:

  1. 获取GGML格式的量化模型(如chinese-alpaca-7b-ggml)
  2. 或转换原始PyTorch模型(需16GB+内存)

转换PyTorch模型到GGUF格式(以Q4量化为例):

python convert.py --outtype f16 ~/models/zh-llama-7b/
quantize ~/models/zh-llama-7b/ggml-model-f16.gguf ~/models/zh-llama-7b/ggml-model-q4_0.gguf q4_0

参数对比

方案一

  • 31-40 token

  • 配置 2080ti 22g

-c 131072 \
-n 8192 \
--n-cpu-moe 999 \
--flash-attn on \
--jinja \
-t 8 \
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--mlock \

方案二

  • 30-37token

-c 32768 \ 			// 可见对输出速度 影响不大
-n 8192 \
--n-cpu-moe 999 \
--flash-attn on \
--jinja \
-t 8 \
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--mlock \
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐