Colab部署llama.cpp总结
Gemini对话:Colab 编译 llama.cpp GPU 加速
准备工作:
启用GPU,查看GPU是否正常
!nvidia-smi
方法一:使用python绑定
方法二:原生 C++ 编译 (CLI 命令行工具)
1.克隆并编译
# 1. 克隆项目
!git clone https://github.com/ggerganov/llama.cpp
%cd llama.cpp
# 安装转换脚本所需的 Python 依赖
!pip install -r requirements.txt
# 2. 创建构建目录
!mkdir build
%cd build
# 3. 生成构建文件 (CMake Configure)
# -DGGML_CUDA=ON : 开启 CUDA 支持 (如果你要在 Colab T4 上跑推理,必须加这个
# 如果你只做量化(quantize),其实不需要 CUDA,但为了通用建议加上
!cmake .. -DGGML_CUDA=ON
# 3. 开始编译 (CMake Build)
# --config Release : 优化版本
# -j 1 : 多核编译,1:代表是单核,防止超内存
!cmake --build . --config Release -j 1
# x. 编译工具 (这里不需要CUDA支持,因为转换和量化主要靠CPU,但加上也可以)
# 这是Makefile编译方式,已经废弃
# !make -j
2. 下载模型
# 安装下载工具
!pip install huggingface_hub
from huggingface_hub import login
login()
# 这里需要提前生成access token OwbQksYDlaSDecKxMonoFwziYZnDMJq
# 示例:下载 Llama-3-8B-Instruct (请替换为您自己的模型 ID)
# local-dir 指定下载路径,方便后续引用
!huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --local-dir models/my-source-model --local-dir-use-symlinks False
3. 转换为 GGUF (FP16/F32)
将模型转换为未量化(或FP16)的GGUF格式。
这个是中间产物体积很大。
# 当前处于build目录下,models目录处于上级目录中
# 用法: python convert_hf_to_gguf.py [模型路径] --outfile [输出文件名] --outtype f16
# outtype f16 是比较稳妥的选择
!python ../convert_hf_to_gguf.py models/my-source-model \
--outfile ../models/my-model-f16.gguf \
--outtype f16
4. 量化模型 (Quantize)
这是最关键的一步。使用编译好的C++工具llama-quantize将巨大的FP16文件压缩成常用的4-bit或5-bit版本(如Q4_K_M)
# 用法: ./llama-quantize [源GGUF] [目标GGUF] [量化方法]
# 将刚才生成的 f16 文件量化为 Q4_K_M (推荐用于平衡速度和精度)
!./bin/llama-quantize ../models/my-model-f16.gguf ../models/my-model-q4_k_m.gguf Q4_K_M
常用的量化方法代码:
Q4_K_M: 推荐。体积小,精度损失极低。Q5_K_M: 精度更高,体积稍大。Q8_0: 接近原始精度,但体积减半。
5. (可选) 保存或测试
转换完成的模型文件:my-model-q4_k_m.gguf,在 llama.cpp/models/ 目录下。
测试运行
!./bin/llama-cli -m ../models/my-model-q4_k_m.gguf -p "Hello!" -n 128 -ngl 99
使用server模式运行
# 启动 Server (全部使用绝对路径,不留任何相对路径的隐患)
!/content/llama-server \
-m /content/llama.cpp/models/my-model-q4_k_m.gguf \
--port 8081 \
--host 0.0.0.0 \
-c 512 \
--path /content/llama.cpp/tools/server/public_simplechat/ \
> server.log 2>&1 &
print("Server restarting with ABSOLUTE PATHS...")
获取外网访问链接(这个方式不好用),推荐使用Cloudflare做穿透
from google.colab.output import eval_js
print(eval_js("google.colab.kernel.proxyPort(8081)"))
保存到 Google Drive: 如果不保存,Colab 会话结束后文件会消失。
Python
from google.colab import drive
drive.mount('/content/drive')
# 复制生成的 GGUF 到云端硬盘
!cp models/my-model-q4_k_m.gguf /content/drive/MyDrive/
关键参数说明
无论使用哪种方法,最重要的是GPU层数卸载(GPU Offloading)
- Python:
n_gpu_layers=-1(推荐) 或设置一个具体的数字。
- 命令行:
-ngl 99或-ngl 1000(任何大于模型层数的数字)。
如果不设置这个参数,模型将默认在CPU上运行,速度会非常慢(Colab的CPU只有双核,性能非常弱)
注意,不要kill 8080端口,否则机器会被释放掉
# 执行如下命令会导致运行时重启,所有的数据都会丢失
# 查找并杀掉占用 8080 TCP 端口的进程
!fuser -k 8080/tcp
llama.cpp提供模型的“模式转化”和“模型量化”两个功能
您现在具体想转换哪个模型? 如果那个模型有特殊的结构(比如 MoE 或者多模态),转换命令可能需要微调,我可以帮您写具体的命令。
下面再写一写连续对话
如何充分利用Colab资源:
代码编译不需要GPU,建议先连接CPU机器执行编译,节省计算单元;当编译完成之后,copy编译结果到drvie,然后连接GPU机器执行推理。