🎯 本文目标:为llama.cpp和chatglm.cpp部署Web服务与OpenAI兼容API,构建完整的AI服务生态系统,实现真正的产品化部署,让星睿O6成为可访问的AI推理服务器。
经过查阅资料和深入学习,在星睿O6开发板上成功部署了智谱AI系列大模型,包括文本生成大模型、视觉大模型,以及代码生成大模型。
在学习研究的过程中,我做了详细的笔记,经过整理,成为本系列文章,分享给大家。
通过本系列文章,您将了解到:
第一阶段:开发环境准备
- 第一篇:星睿O6与智谱AI大模型概览
- 第二篇:在PC上搭建llama.cpp推理环境
- 第三篇:在PC上搭建chatglm.cpp推理环境
第二阶段:环境迁移与部署
- 第四篇:将llama.cpp环境部署至星睿O6
- 第五篇:将chatglm.cpp环境部署至星睿O6
第三阶段:大模型实战运行
- 第六篇:在星睿O6上运行智谱AI文本大模型(基于llama.cpp)
- 第七篇:在星睿O6上运行智谱AI文本大模型(基于chatglm.cpp)
- 第八篇:在星睿O6上运行智谱AI视觉大模型
- 第九篇:为llama.cpp与chatglm.cpp部署Web服务与OpenAI兼容API
第四阶段:专项能力扩展
- 第十篇:在星睿O6上部署CodeGeeX2实现智能代码生成
本文是第九篇:为llama.cpp与chatglm.cpp部署Web服务与OpenAI兼容API
为llama.cpp与chatglm.cpp都自带了Web服务以及OpenAI兼容API服务,可以方便快速使用,以及被其他工具调用。
🌐 开启WEB服务
❌ GLM-Edge模型【失败】
cd ~/Projects/llama.cpp
source .venv/bin/activate
export LLAMA_CPP_DIR=$(pwd)
# 文本大模型
model_group=ZhipuAI
model_name=glm-edge-1.5b-chat
# model_name=glm-edge-4b-chat
$LLAMA_CPP_DIR/build/bin/llama-server -m ./${model_group}/${model_name}-gguf/ggml-model-Q4_K_M.gguf --jinja -c 0 --host 0.0.0.0 --port 8048
# 视觉大模型
model_name=glm-edge-v-2b
# model_name=glm-edge-v-5b
$LLAMA_CPP_DIR/build/bin/llama-server -m ./${model_group}/${model_name}-gguf/ggml-model-Q4_K_M.gguf --mmproj ./${model_group}/${model_name}-gguf/mmproj-model-f16.gguf --jinja -c 0 --host 0.0.0.0 --port 8048服务参数说明:
--jinja:启用Jinja2模板,支持动态网页生成-c 0:无限制上下文长度--host 0.0.0.0:监听所有网络接口--port 8048:服务端口,可根据需要调整
实际测试发现,虽然能够启动服务,但是实际访问失败:
✅ 使用llama.cpp转换的模型
glm-4-9b-chat-hf【失败】
model_name=glm-4-9b-chat-hf $LLAMA_CPP_DIR/build/bin/llama-server -m models/${model_name}-Q4_K_M.gguf --jinja -c 0 --host 0.0.0.0 --port 8048错误状况与 GLM-Edge模型 类似。
chatglm3-6b
model_name=chatglm3-6b $LLAMA_CPP_DIR/build/bin/llama-server -m models/${model_name}-Q4_K_M.gguf --jinja -c 0 --host 0.0.0.0 --port 8048GLM-4.6V-Flash
model_name=GLM-4.6V-Flash $LLAMA_CPP_DIR/build/bin/llama-server -m models/${model_name}-Q4_K_M.gguf --jinja -c 0 --host 0.0.0.0 --port 8048
从具体的返回可以看到,GLM-4.6V-Flash是带有深度思考功能的大模型。
行理解识别:
⚙️ llama.cpp 服务模式参数
# 配置参数
$LLAMA_CPP_DIR/build/bin/llama-server \
-m models/${model_name}-Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8048 \
-c 16384 \ # 大上下文窗口
-np 8 \ # 高并发
-b 2048 \ # 大批次大小
--ubatch-size 1024 \ # 物理批次大小
--cont-batching \ # 连续批处理
--cache-reuse 512 \ # 缓存重用
--threads $(nproc) \ # 使用所有CPU核心
--n-gpu-layers 99 \ # 最大GPU层数
--split-mode layer \ # 多GPU分层
--tensor-split 3,1 \ # GPU张量分割
--metrics \ # 性能监控
--slots # 槽位监控
# 实际运行命令:
$LLAMA_CPP_DIR/build/bin/llama-server \
-m models/${model_name}-Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8048 \
-c 16384 \
-np 8 \
-b 2048 \
--ubatch-size 1024 \
--cont-batching \
--cache-reuse 512 \
--threads $(nproc) \
--n-gpu-layers 99 \
--split-mode layer \
--tensor-split 3,1 \
--metrics \
--slots参数优化说明:
-c 16384:支持长上下文对话-np 8:支持8个并发请求-b 2048:提高吞吐量--threads $(nproc):使用所有CPU核心--metrics:启用性能监控,便于调优
💻 chatglm开启Web服务
cd ~/Projects/chatglm.cpp
source .venv/bin/activate
export LLAMA_CPP_DIR=$(pwd)
pip install "gradio<6"
export GRADIO_SERVER_PORT=8048
export GRADIO_SERVER_NAME=0.0.0.0
#model_name=chatglm
model_name=chatglm3-6b
#model_name=glm-4-9b-chat
#model_name=glm-4v-9b
python $LLAMA_CPP_DIR/examples/web_demo.py -m ./models/${model_name}-ggml.bin开启后,通过浏览器打开网页界面:
chatglm.cpp的Web服务,是使用Gradio编写的一个基础Demo,可以根据自己的需要进行调整。
🔌 OpenAI兼容Api服务
llama.cpp和chatglm.cpp都可以开启openai兼容api服务,从而让其他WEBUI或者桌面工具调用。
💻 llama.cpp开启openai兼容Api服务
当使用 llama-server 开启Web服务后,就自动对外提供openai兼容服务。
支持的API端点:
/v1/models- 获取模型列表/v1/chat/completions- 聊天补全/v1/completions- 文本补全/v1/embeddings- 文本嵌入
💻 chatglm.cpp开启openai兼容服务
cd ~/Projects/chatglm.cpp
source .venv/bin/activate
export LLAMA_CPP_DIR=$(pwd)
pip install openai pydantic_settings sse_starlette
MODEL=models/chatglm3-6b-ggml.bin uvicorn chatglm_cpp.openai_api:app --host 192.168.1.160 --port 8048chatglm.cpp的api服务,使用fastapi编写,也可以根据自己的需要进行修改。
FastAPI优势:
- 异步处理,提高并发性能
- 自动API文档生成
- 良好的错误处理机制
- 支持WebSocket实时通信
🧪 API测试验证
🖥️ 命令行测试验证
开启openai兼容api服务后,可用通过下面的指令进行测试:
查看模型列表
llm_host=192.168.1.160 llm_port=8048 curl http://$llm_host:$llm_port/v1/models聊天补全
curl http://$llm_host:$llm_port/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-api-key" \ -d '{ "model": "chatglm3-6b", "messages": [ {"role": "system", "content": "你是一个排忧解难的好助手"}, {"role": "user", "content": "你好,请介绍一下你自己"} ], "temperature": 0.7, "max_tokens": 512 }'文本补全
curl http://$llm_host:$llm_port/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "chatglm3-6b", "prompt": "人工智能的未来发展", "max_tokens": 100, "temperature": 0.8 }'
🌐 使用Page Assist调用OpenAI兼容Api服务
Page Assist是一个浏览器插件,可以浏览器中运行一个大模型的图形界面,并通过openai接口,来调用本地大模型。Page Assist能够支持常见的浏览器,如Chrome、Firefox、Edge等。
在浏览器中,访问网址:https://pageassist.xyz/,安装Page Assist插件:
然后进入插件设置界面,进入OpenAI兼容API管理:
根据自己运行的服务,添加对应的服务提供商设置:
- llama.cpp服务
- chatglm.cpp服务
添加完成后,点击新聊天:
选择大模型,即可开始对话:
Page Assist优势:
- 无需安装桌面应用
- 支持多种浏览器
- 界面简洁易用
- 自动适配OpenAI兼容API
✅ Web服务部署完成
通过完整的Web服务和API部署,星睿O6成为了一个功能完整的AI推理服务器,可以为各种应用提供大模型服务。
🔗 下一篇文章预告
在最后一篇文章中,我们将部署CodeGeeX2实现智能代码生成,完成整个智谱AI全栈大模型生态系统的构建,让星睿O6成为真正的AI开发工作站。