DeepSeek-R1-Distill-Llama-8B 部署:Docker Compose 编排多模型推理服务
本教程演示如何利用 Docker Compose 和 Ollama 部署 DeepSeek-R1-Distill-Llama-8B 模型。该模型在数学竞赛、代码生成等任务上表现优异,通过容器化部署可屏蔽底层环境差异,实现开箱即用的推理服务。
介绍如何使用 Docker Compose 和 Ollama 快速部署 DeepSeek-R1-Distill-Llama-8B 模型。内容涵盖环境准备、docker-compose.yml 配置、模型拉取与验证,以及命令行、Python 脚本和批量处理的调用方式。同时提供提示词优化、多模型切换及数据持久化等进阶技巧,帮助开发者构建可扩展的本地 AI 推理服务。
本教程演示如何利用 Docker Compose 和 Ollama 部署 DeepSeek-R1-Distill-Llama-8B 模型。该模型在数学竞赛、代码生成等任务上表现优异,通过容器化部署可屏蔽底层环境差异,实现开箱即用的推理服务。
DeepSeek-R1 系列基于强化学习(RL)训练,擅长链式思考与多步推演。DeepSeek-R1-Distill-Llama-8B 是从强基座上蒸馏出的轻量版本,兼顾性能与效率。
实测数据如下:
这些指标证明其具备处理技术方案、算法题及论文摘要的能力。
相比 HuggingFace + Transformers 需要管理 Python 环境和显存分配,Ollama + Docker Compose 更适合工程落地:
/api/chat),支持多语言对接;Docker Compose 将启动过程简化为一行命令,自动拉取镜像、挂载目录并设置资源限制。
创建 docker-compose.yml 文件,定义 Ollama 服务及可选的 Nginx 网关:
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
container_name: ollama-deepseek
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama_models:/root/.ollama/models
- ./ollama_logs:/var/log/ollama
environment:
- OLLAMA_HOST=0.0.0.0:11434
- OLLAMA_NO_CUDA=0
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
api-gateway:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- ollama
若无 NVIDIA GPU,请注释掉 deploy.resources 段,并取消 command 行的注释以启用 CPU 模式。
执行以下命令启动服务并拉取模型:
# 启动 Ollama 服务
docker-compose up -d ollama
# 拉取模型
docker exec -it ollama-deepseek ollama pull deepseek-r1:8b
可通过 docker logs -f ollama-deepseek 查看进度,出现 success 字样即表示就位。
使用 curl 发送测试请求:
curl -X POST http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:8b",
"messages": [
{"role": "user", "content": "用一句话解释什么是链式思维?"}
],
"stream": false
}'
若返回包含 assistant 角色的 JSON 响应,则服务运行正常。
docker exec -it ollama-deepseek ollama run deepseek-r1:8b
直接输入问题即可进行人机对话。
集成至 Python 项目示例:
import requests
import json
def ask_deepseek(question: str, model: str = "deepseek-r1:8b") -> str:
url = "http://localhost:11434/api/chat"
payload = {
"model": model,
"messages": [{"role": "user", "content": question}],
"stream": False,
"options": {
"temperature": 0.3,
"num_ctx": 4096
}
}
try:
response = requests.post(url, json=payload, timeout=120)
response.raise_for_status()
data = response.json()
return data["message"]["content"].strip()
except Exception as e:
return f"请求失败:{e}"
if __name__ == "__main__":
result = ask_deepseek("请用中文解释 Transformer 架构中的自注意力机制。")
print("DeepSeek-R1 的回答:\n", result)
关键配置包括设置超时避免中断、降低 temperature 提高稳定性、增大上下文窗口。
利用线程池并发发送多个请求以提升效率:
import concurrent.futures
import time
questions = [
"如何判断一个数是否为质数?给出 Python 实现。",
"解释 HTTP 状态码 401 和 403 的区别。",
"用 Markdown 写一个简洁的 API 文档模板。"
]
start_time = time.time()
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(ask_deepseek, q) for q in questions]
results = [f.result() for f in concurrent.futures.as_completed(futures)]
end_time = time.time()
print(f"3 个问题总耗时:{end_time - start_time:.2f}秒")
通过 system 角色控制输出风格:
{
"model": "deepseek-r1:8b",
"messages": [
{"role": "system", "content": "你是一名资深 Python 工程师,只给代码,不解释原理。"},
{"role": "user", "content": "写一个函数,把字符串按空格分割,只保留长度大于 2 的单词。"}
],
"stream": false
}
在同一环境中添加第二个模型服务,修改端口避免冲突:
services:
ollama-qwen:
image: ollama/ollama:latest
container_name: ollama-qwen
ports:
- "11435:11434"
# ... 其他配置同上
分别拉取不同模型,根据任务类型路由请求。
通过 volumes 将模型挂载到宿主机目录,确保重装系统不丢失数据。定期备份 ollama_models 文件夹即可迁移服务。
本文完成了以下内容:
这套方法论适用于后续尝试 Qwen、Phi 等其他模型,只需修改拉取命令,其余配置通用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online