智能会议系统 Jetson Thor 上部署模型服务指南
内网IP:27.41.19.62
| 服务 | 说明 | 端口 | 模型 | 备注 |
|---|---|---|---|---|
| whisperlivekit | 实时语音识别服务 | 8000 | Whispersmall (默认)large-v3-turbo |
|
| llama-server | GGUF 模型推理服务 | 8080 | Qwen3-8B-Q5_K_M.gguf |
模型名:qwen3 上下文长度:32K |
系统设置
系统优化
最大功率模式(一次性设置)
sudo nvpmodel -m 0
启动最高频率(每次重启后设置)
sudo jetson_clocks
清理内存
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
WhisperLiveKit
部署服务
tmux new -s wlk
默认容器内应用(标点识别有时会失灵)
docker run -it \
--ipc=host \
--net=host \
--runtime=nvidia \
-e MODEL=small \
-e PORT=8000 \
-e LANG=zh \
-e DIAR=true \
wangjunjian/whisperlivekit
主机新建应用
cd /home/lnsoft/wjj/whisperlivekit
touch entrypoint.sh
chmod +x entrypoint.sh
编辑文件:entrypoint.sh
#!/usr/bin/env bash
MODEL="${MODEL:-small}"
PORT="${PORT:-8000}"
LANG="${LANG:-zh}"
DIAR="${DIAR:-false}"
EXTRA_ARGS=()
if [[ "$DIAR" == "true" || "$DIAR" == "1" ]]; then
EXTRA_ARGS+=("--diarization")
fi
exec whisperlivekit-server \
--model "$MODEL" \
--host 0.0.0.0 --port "$PORT" \
--ssl-certfile /root/.cert/cert.pem \
--ssl-keyfile /root/.cert/key.pem \
--language "$LANG" \
--init-prompt "大家好,我们要开始开会了。" \
--warmup-file /root/warmup.wav \
"${EXTRA_ARGS[@]}"
运行容器:
docker run -it \
--ipc=host \
--net=host \
--runtime=nvidia \
-v /home/lnsoft/wjj/whisperlivekit/entrypoint.sh:/root/entrypoint.sh
-e MODEL=large-v3-turbo \
-e PORT=8000 \
-e LANG=zh \
-e DIAR=true \
wangjunjian/whisperlivekit
llama-server
cd /models/llama.cpp
Dockerfile
# 基镜像
FROM nvcr.io/nvidia/pytorch:25.10-py3
# 设置工作目录
WORKDIR /app
# 暴露服务端口
EXPOSE 8000
# 拷贝 models 目录及其内容。
# 注意:这要求本地存在一个名为 models 的目录。
COPY ./models /models
# 拷贝 llama-server 可执行文件和所需的动态库 (*.so 文件)。
# 假设它们位于本地的 build/bin/ 目录下。
COPY ./build/bin/ /app/bin/
# 【重要】将 /app/bin 目录添加到 LD_LIBRARY_PATH,
# 确保 llama-server 运行时能找到所需的动态库 (*.so)。
ENV LD_LIBRARY_PATH=/app/bin:$LD_LIBRARY_PATH
# 设置容器启动时执行的命令。
# 使用 CMD 以便在运行时可以轻松覆盖这些参数。
CMD ["/app/bin/llama-server", \
"--model", "/models/Qwen3-8B-Q5_K_M.gguf", \
"--alias", "qwen3", \
"--host", "0.0.0.0", \
"--port", "8000", \
"--ctx-size", "0", \
"--no-kv-offload", \
"--no-op-offload", \
"--no-mmap", \
"--mlock", \
"--jinja", \
"--reasoning-budget", "0"]
--no-mmap和--mlock确保模型权重被完全加载到物理内存并锁定,避免了内存映射可能带来的文件系统或虚拟内存问题。--no-kv-offload和--no-op-offload则确保了 KV Cache 和操作都在 GPU 上执行,消除了在 VRAM 和系统 RAM 之间移动数据可能导致的同步或寻址问题。
防止服务崩溃。
构建镜像
docker build -t wangjunjian/llama-server .
部署服务
tmux new -s llm
docker run -it --runtime=nvidia -p 8080:8000 wangjunjian/llama-server
测试服务
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3",
"messages": [{"role": "user", "content": "你好,Jetson AGX Thor!"}],
"max_tokens": 64
}'
导出镜像
docker save wangjunjian/llama-server -o llama-server.tar
导入镜像
docker load -i llama-server.tar
vLLM
运行容器
docker run -it \
--ipc=host \
--net=host \
--runtime=nvidia \
--name=vllm \
-v /home/lnsoft/wjj/models:/models \
nvcr.io/nvidia/vllm:25.09-py3 \
bash
启动服务
VLLM_DISABLED_KERNELS=MacheteLinearKernel \
vllm serve /models/okwinds/Qwen3-Coder-30B-A3B-Instruct-Int4-W4A16 \
--served-model-name qwen3 \
--host 0.0.0.0 \
--port 8080 \
--max-model-len 16000 \
--gpu-memory-utilization 0.9