GLM-4-9B-Chat-1M 模型在 openEuler 系统上的完整部署文档
🧑 博主简介:CSDN博客专家,「历代文学网」(PC端可以访问:https://lidaiwenxue.com/#/?__c=1000)总架构师,首席架构师,也是联合创始人!
16年工作经验,精通Java编程,高并发设计,分布式系统架构设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
🤝商务合作:请搜索或扫码关注微信公众号 “心海云图”


GLM-4-9B-Chat-1M 模型在 openEuler 系统上的完整部署文档
文档说明
本文档记录了在 华为 openEuler 操作系统上,使用 llama.cpp 框架纯 CPU 推理部署 GLM-4-9B-Chat-1M 模型的完整流程。
部署环境:
- 操作系统:华为 openEuler(最新版本)
- CPU:48 核心
- 内存:112 GB(虚拟机分配)
- 磁盘:320 GB(/data 目录)
- GPU:无(纯 CPU 推理)
目录
1. 环境准备
1.1 更新系统并安装基础依赖
# 更新系统包
sudo yum update -y
# 安装编译工具链和依赖
sudo yum groupinstall -y "Development Tools"
sudo yum install -y cmake git python3 python3-pip gcc gcc-c++
1.2 创建工作目录
所有文件统一存放在 /data 目录下:
mkdir -p /data/models
mkdir -p /data/llama.cpp
cd /data
1.3 安装 Python 依赖
pip3 install huggingface-hub
注意:如果出现
WARNING: Running pip as the 'root' user警告,可以忽略,不影响使用。huggingface-cli已被弃用,后续使用hf命令替代。
2. 下载 GGUF 模型文件
2.1 配置国内镜像源(解决网络问题)
由于 Hugging Face 服务器在海外,下载可能超时,需配置国内镜像源:
# 临时使用(推荐)
export HF_ENDPOINT=https://hf-mirror.com
# 永久生效(可选)
echo 'export HF_ENDPOINT=https://hf-mirror.com' >> ~/.bashrc
source ~/.bashrc
2.2 下载模型
进入模型目录并下载 Q5_K_M 量化版本(约 6.8GB):
cd /data/models
hf download bartowski/glm-4-9b-chat-1m-GGUF \
--include "glm-4-9b-chat-1m-Q5_K_M.gguf" \
--local-dir ./
2.3 验证下载
ls -lh /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf
预期输出:
-rw-r--r--. 1 root root 6.8G 7月11日 16:04 /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf
说明:
Q5_K_M是量化级别,在精度和性能间取得良好平衡。如果内存充裕,可改用Q6_K或Q8_0版本。
3. 编译 llama.cpp
3.1 克隆代码仓库
cd /data
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
如果 git clone 速度慢或失败,可使用代理:
git clone https://gitclone.com/github.com/ggerganov/llama.cpp.git
3.2 使用 CMake 编译
llama.cpp 已弃用传统 make,改用 CMake:
# 配置 CMake 构建系统
cmake -B build -DCMAKE_BUILD_TYPE=Release
# 编译(利用48核并行加速)
cmake --build build --config Release -j 48
3.3 验证编译结果
ls -la /data/llama.cpp/build/bin/ | grep llama-server
预期输出应包含 llama-server 可执行文件。
重要:可执行文件名为
llama-server,而非server。
4. 启动 API 服务
4.1 前台启动(测试用)
cd /data/llama.cpp
./build/bin/llama-server -m /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf \
-t 32 \
-c 0 \
--host 0.0.0.0
参数说明:
| 参数 | 说明 |
|---|---|
-m |
模型文件路径 |
-t 32 |
推理线程数(建议设为物理核心数的 60%~75%) |
-c 0 |
不限制上下文长度(支持 1M) |
--host 0.0.0.0 |
允许外部 IP 访问 |
启动成功后,看到 HTTP server listening on http://0.0.0.0:8080 即表示服务就绪。
4.2 后台启动(生产环境)
前台启动无法退出终端,需使用 nohup 后台运行:
nohup /data/llama.cpp/build/bin/llama-server \
-m /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf \
-t 32 \
-c 0 \
--host 0.0.0.0 \
> /data/llama.log 2>&1 &
说明:
nohup:忽略挂断信号,终端关闭不影响进程> /data/llama.log 2>&1:将标准输出和错误输出重定向到日志文件&:放到后台执行
5. 验证服务
5.1 检查健康状态
curl http://localhost:8080/health
预期返回:ok
5.2 测试聊天接口
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "glm-4-9b-chat-1m",
"messages": [{"role": "user", "content": "你好,请用一句话介绍自己"}]
}'
预期返回 JSON 格式的模型回复。
5.3 查看实时日志
tail -f /data/llama.log
按 Ctrl + C 退出日志查看(不影响服务运行)。
6. 后台运行配置
6.1 使用 systemd 服务(推荐,支持开机自启)
创建服务文件:
sudo vi /etc/systemd/system/glm-server.service
写入以下内容:
[Unit]
Description=GLM-4-9B-Chat-1M API Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/data/llama.cpp
ExecStart=/data/llama.cpp/build/bin/llama-server -m /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf -t 32 -c 0 --host 0.0.0.0
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl start glm-server
sudo systemctl enable glm-server
管理命令:
sudo systemctl status glm-server # 查看状态
sudo systemctl stop glm-server # 停止服务
sudo systemctl restart glm-server # 重启服务
sudo journalctl -u glm-server -f # 查看实时日志
6.2 使用 nohup(备选)
# 启动
nohup /data/llama.cpp/build/bin/llama-server -m /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf -t 32 -c 0 --host 0.0.0.0 > /data/llama.log 2>&1 &
# 停止(查找进程并杀掉)
ps aux | grep llama-server | grep -v grep
kill <PID>
7. Java 程序调用示例
7.1 添加 Maven 依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
7.2 Java 调用代码
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
public class LlamaClient {
// 服务地址(根据实际情况修改 IP 和端口)
private static final String BASE_URL = "http://你的服务器IP:8080";
private static final String API_URL = BASE_URL + "/v1/chat/completions";
private final OkHttpClient client = new OkHttpClient();
private final ObjectMapper mapper = new ObjectMapper();
public String chat(String userMessage) throws IOException {
// 1. 构建请求体(OpenAI 兼容格式)
ObjectNode messageNode = mapper.createObjectNode();
messageNode.put("role", "user");
messageNode.put("content", userMessage);
ObjectNode requestBody = mapper.createObjectNode();
requestBody.put("model", "glm-4-9b-chat-1m");
requestBody.set("messages", mapper.createArrayNode().add(messageNode));
requestBody.put("stream", false);
// 2. 创建 HTTP 请求(无需 API Key)
Request request = new Request.Builder()
.url(API_URL)
.post(RequestBody.create(
mapper.writeValueAsString(requestBody),
MediaType.parse("application/json; charset=utf-8")
))
.build();
// 3. 执行请求
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("请求失败: " + response.code());
}
return response.body().string();
}
}
public static void main(String[] args) throws IOException {
LlamaClient client = new LlamaClient();
String reply = client.chat("请用中文简单介绍一下李白。");
System.out.println(reply);
}
}
7.3 重要说明
- 无需 API Key:
llama.cpp默认不启用身份验证,直接调用即可 - 如需启用 API Key,启动服务时加
--api-key your-secret-key参数 - 服务地址中的 IP 需替换为实际服务器 IP
8. 常见问题排查
8.1 下载模型卡住/超时
现象:hf download 命令长时间无响应,报 Connection timed out
解决方案:
export HF_ENDPOINT=https://hf-mirror.com
hf download bartowski/glm-4-9b-chat-1m-GGUF --include "glm-4-9b-chat-1m-Q5_K_M.gguf" --local-dir ./
8.2 make: 没有指明目标并且找不到 makefile
原因:llama.cpp 已改用 CMake 构建
解决方案:
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release -j 48
8.3 找不到 server 可执行文件
原因:可执行文件名为 llama-server
解决方案:
/data/llama.cpp/build/bin/llama-server # 正确路径
8.4 端口被占用
现象:启动时报 Address already in use
解决方案:
# 查看占用 8080 端口的进程
netstat -tlnp | grep 8080
# 杀掉占用进程,或换用其他端口
./build/bin/llama-server ... --port 8081
8.5 服务启动慢
原因:6.8GB 模型文件加载需要时间
正常等待时间:10~30 秒(取决于磁盘 I/O 速度)
8.6 性能调优
| 参数 | 建议值 | 说明 |
|---|---|---|
-t 线程数 |
28~36 | 设为物理核心数的 60%~75% |
| 内存预留 | 100% | 在 ESXi 中预留全部 112GB 内存 |
| 量化级别 | Q5_K_M | 平衡性好;内存充裕可换 Q8_0 |
9. 快速命令参考
| 操作 | 命令 |
|---|---|
| 启动服务(前台) | /data/llama.cpp/build/bin/llama-server -m /data/models/glm-4-9b-chat-1m-Q5_K_M.gguf -t 32 -c 0 --host 0.0.0.0 |
| 启动服务(后台) | nohup ... > /data/llama.log 2>&1 & |
| 查看日志 | tail -f /data/llama.log |
| 健康检查 | curl http://localhost:8080/health |
| 测试接口 | curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"glm-4-9b-chat-1m","messages":[{"role":"user","content":"你好"}]}' |
| systemd 启动 | sudo systemctl start glm-server |
| systemd 状态 | sudo systemctl status glm-server |
10. 参考资料
- 官方模型仓库:zai-org/glm-4-9b-chat-1m
- llama.cpp 项目:ggerganov/llama.cpp
- GGUF 模型下载:bartowski/glm-4-9b-chat-1m-GGUF
- 国内镜像源:hf-mirror.com
文档版本:1.0
创建日期:2026年7月11日
适用系统:华为 openEuler(最新版本)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)