一条命令用 Docker 部署 llama.cpp 推理服务:从选镜像到自查

一条命令用 Docker 部署 llama.cpp 推理服务:从选镜像到自查 一条命令用 Docker 部署 llama.cpp 推理服务从选镜像到自查【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cppDocker 能跑几分钟就能拿到一个可调用的 HTTP 推理 API。llama.cpp 是用 C/C 写的 LLM 推理引擎不依赖 Python 环境容器化之后换一下镜像 tag 和几个参数就能适配你的硬件。这篇文章先用 3 个问题帮你定位到 4 种组合之一再给出可直接粘贴的命令和跑不通时的自查项。照着做你能带走一个马上能发请求的服务。先想清楚你的组合三个问题答完就知道走哪条组合有没有独显没有独显或者不想折腾纯 CPU 就够。server镜像里只含llama-server一个可执行文件体积最小轻量问答完全够用。有独显的话镜像 tag 决定 GPU 环境NVIDIA 用server-cudaAMD 用server-rocm。tag 的区别只是同一套代码为不同 GPU 编译过CUDA 是 NVIDIA 的 GPU 计算软件栈ROCm 是 AMD 的对应物。⚠️ llama.cpp 只认 GGUF 格式项目统一的模型文件格式就是一个普通文件的模型你下载到的文件不是.gguf结尾就起不来。是否需要外网或其他设备访问只在本机用绑 localhost 就行最安全。要给局域网或服务器用启动参数里要--host 0.0.0.0监听所有网卡同时防火墙放行映射出去的端口。服务要跑多久试几个小时一条docker run搞定用完删容器。要长期在线把配置写进 Compose 文件Docker 的编排文件顺带把重启策略、健康检查、日志轮转一起配掉机器重启后服务自动回来。适用场景镜像 tag差异化参数无独显试玩或轻量问答ghcr.io/ggml-org/llama.cpp:server-c 4096限上下文-t定线程数NVIDIA 独显要速度ghcr.io/ggml-org/llama.cpp:server-cuda--gpus all--n-gpu-layers 99AMD 独显ghcr.io/ggml-org/llama.cpp:server-rocm--n-gpu-layers 99仅 amd64 平台长期在线以上任一 Compose 编排restart: unless-stopped 健康检查 日志上限全部 tagvulkan、intel 等见仓库的 Docker 官方文档。复制执行一条命令起 CPU 推理服务把模型文件放在宿主机某个目录整目录挂进容器docker run -d --name llama-server \ -p 宿主机端口:8080 \ -v 模型目录:/models \ ghcr.io/ggml-org/llama.cpp:server \ -m /models/模型文件.gguf \ --host 0.0.0.0 --port 8080 -c 4096首次运行会先拉镜像视网速稍等。发出命令后给模型几十秒加载时间然后curl http://localhost:宿主机端口/health返回{status:ok}才算真的起来。也可以直接在浏览器打开http://localhost:宿主机端口/llama-server 自带 Web 聊天页不写代码就能对话。最该动的手只有两个参数-c 长度上下文长度直接决定内存占用。内存紧张就降4096 压到 2048 都行。-t 数量生成时用的 CPU 线程数一般设成物理核心数。怎么确认 CUDA 真生效了NVIDIA 环境先确认宿主机装了nvidia-container-toolkit让容器看得见显卡的宿主机组件这是 GPU 不生效的头号原因。然后 tag 换server-cuda多带两个参数docker run -d --name llama-server \ --gpus all \ -p 宿主机端口:8080 \ -v 模型目录:/models \ ghcr.io/ggml-org/llama.cpp:server-cuda \ -m /models/模型文件.gguf \ --host 0.0.0.0 --port 8080 \ --n-gpu-layers 99验证分两步。先还是那条curl http://localhost:宿主机端口/health。再看日志里有没有 CUDA 设备初始化的行docker logs llama-server 21 | grep -i cuda有就是生效了单 token 速度会明显快过 CPU。--n-gpu-layers 99的意思是尽量把模型的层塞进显存启动 OOM 就把它逐步调低直到装得下7B 的 4 位量化用更低精度压缩权重的方法模型在 8GB 显存里基本放得全。AMD 环境把 tag 换成server-rocm其余命令照抄注意这个 tag 只有 amd64 版本。把长期服务写进 Compose建一个docker-compose.yml重启、健康检查、日志上限一次配齐services: llama-server: image: ghcr.io/ggml-org/llama.cpp:server restart: unless-stopped ports: [宿主机端口:8080] volumes: [./models:/models] logging: driver: json-file options: {max-size: 10m, max-file: 3} command: -m /models/模型文件.gguf --host 0.0.0.0 --port 8080 healthcheck: test: [CMD, curl, -f, http://localhost:8080/health] interval: 30s retries: 3docker compose up -d启动docker compose logs -f实时追日志。健康检查写出来后监控系统能直接判断容器死活restart: unless-stopped让机器重启后服务自动回来。跑不通时自查按遇到概率从高到低排容器秒退日志说找不到模型→ 容器内路径写错挂载后模型在/models/...下不是原来的目录名。docker logs llama-server看具体报错行。日志只有 CPU backendGPU 没参与→ 宿主机没装 nvidia-container-toolkit。装好后用docker run --gpus all ghcr.io/ggml-org/llama.cpp:server nvidia-smi验证容器能否看到卡。启动后被 OOM 杀掉→ 内存或显存不够。先降-c再降--n-gpu-layers最后换更低精度量化的模型。API 返回 401→ 服务端带--api-key启动过而请求没带同一个 key。别的机器连不上端口→ 只绑了 127.0.0.1或防火墙拦了。确认--host 0.0.0.0防火墙放行对应端口。前几分钟响应极慢→ 模型还在加载。等日志出现加载完成再发请求。接进你的代码容器里干的活本质是模型逐 token 做矩阵乘法下面这些参数只决定每次乘法之后怎么从概率分布里挑下一个 token。调法两种。原生补全接口prompt 自己拼好模型直接续写curl http://localhost:宿主机端口/completion \ -H Content-Type: application/json \ -d {prompt: 用一句话介绍 llama.cpp, n_predict: 64, stream: false}OpenAI 兼容接口现有 OpenAI SDK 的代码改个 base URL 就能切过来curl http://localhost:宿主机端口/v1/chat/completions \ -H Content-Type: application/json \ -d {messages: [{role: user, content: 你好}], max_tokens: 64}完整端点清单在 llama-server 文档。采样参数速查参数含义建议值temperature采样随机性越高越发散创作 0.7问答 0.1top_p核采样阈值只从累计概率 p 内的 token 里选0.9n_predict/max_tokens最多生成多少个 token按需限死别让它吃满上下文stream是否逐 token 流式返回网页端选 truerepeat_penalty惩罚重复内容1.1服务跑稳之后把你客户端的 base URL 指到这个地址就等于接上了一台推理集群。流量涨上来时用 nginx 给多个容器实例做负载均衡即可上面的 Compose 文件也能直接平移成 K8s 部署。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考