DeepSeek 本地 CPU/GPU 部署教程:直接输出结果的完整指南
DeepSeek 是一款强大的开源语言模型,在代码生成、文本理解和创造等方面表现出色。能够在本地部署 DeepSeek 模型,意味着你可以拥有一个无需联网、完全私有的 AI 助手,进行各种任务。本指南将详细介绍如何在 CPU 和 GPU 环境下部署 DeepSeek 模型,并直接输出结果,让你快速上手,充分利用 DeepSeek 的强大功能。
目录
- 准备工作:软硬件环境搭建
- 1.1 硬件要求:CPU、GPU 和内存
- 1.2 软件要求:Python、CUDA (GPU 部署) 和相关库
- 1.3 安装 Miniconda 或 Anaconda (推荐)
- 选择 DeepSeek 模型和部署框架
- 2.1 DeepSeek 模型选择:模型尺寸和性能考量
- 2.2 部署框架选择:Transformers、vLLM、ONNX Runtime
- CPU 部署:Transformers 框架
- 3.1 安装 Transformers 和 PyTorch
- 3.2 下载 DeepSeek 模型
- 3.3 编写推理脚本
- 3.4 优化 CPU 推理性能
- GPU 部署:vLLM 框架
- 4.1 安装 vLLM 和 CUDA
- 4.2 下载 DeepSeek 模型
- 4.3 编写推理脚本
- 4.4 vLLM 高级配置和优化
- GPU 部署:Transformers 框架 (优化)
- 5.1 安装 Transformers 和 CUDA 版本的 PyTorch
- 5.2 下载 DeepSeek 模型
- 5.3 使用
torch.compile
优化推理 - 5.4 量化技术加速 GPU 推理
- GPU 部署:ONNX Runtime
- 6.1 导出 DeepSeek 模型为 ONNX 格式
- 6.2 安装 ONNX Runtime
- 6.3 编写推理脚本
- 6.4 ONNX Runtime 加速选项
- 直接输出结果:编写用户交互界面
- 7.1 使用 Gradio 创建 Web 界面
- 7.2 使用 Streamlit 创建 Web 界面
- 7.3 使用 CLI 界面直接输入输出
- 常见问题和解决方案
- 8.1 CUDA 版本不兼容问题
- 8.2 内存不足问题
- 8.3 模型下载失败问题
- 8.4 推理速度慢问题
- 高级应用:微调 DeepSeek 模型
- 9.1 准备数据集
- 9.2 修改训练脚本
- 9.3 开始微调
- 总结
1. 准备工作:软硬件环境搭建
在开始部署 DeepSeek 之前,需要确保满足必要的硬件和软件要求。
-
1.1 硬件要求:CPU、GPU 和内存
- CPU: 虽然 DeepSeek 可以在 CPU 上运行,但速度相对较慢。建议使用具有至少 8 个核心的 CPU,以获得较好的体验。
- GPU: 使用 GPU 可以显著提升推理速度。推荐使用 NVIDIA GPU,至少具有 8GB 显存。显存越大,可以运行的模型尺寸也越大。例如,NVIDIA RTX 3060, RTX 3070, RTX 3080, A100, H100 等都是不错的选择。
- 内存: 建议至少拥有 16GB 内存,对于大型模型,32GB 或更多内存更佳。
-
1.2 软件要求:Python、CUDA (GPU 部署) 和相关库
- Python: 推荐使用 Python 3.8 或更高版本。
- CUDA (仅 GPU 部署): 需要安装 NVIDIA CUDA Toolkit 和 cuDNN。 确保 CUDA 版本与 PyTorch 版本兼容。 可以从 NVIDIA 官方网站下载并安装。
- 相关库: 需要安装 PyTorch, Transformers, vLLM (可选), ONNX Runtime (可选) 等库。
-
1.3 安装 Miniconda 或 Anaconda (推荐)
建议使用 Miniconda 或 Anaconda 来管理 Python 环境。 这可以避免不同项目之间的依赖冲突。
- 下载 Miniconda 或 Anaconda 安装包:从官方网站下载适合你操作系统的安装包。
- 运行安装包:按照提示完成安装。
-
创建新的 conda 环境:
bash
conda create -n deepseek python=3.9 # 创建一个名为 deepseek 的环境,使用 Python 3.9
conda activate deepseek # 激活 deepseek 环境
2. 选择 DeepSeek 模型和部署框架
-
2.1 DeepSeek 模型选择:模型尺寸和性能考量
DeepSeek 提供了不同尺寸的模型,例如 DeepSeek Coder 和 DeepSeek LLM。更大的模型通常具有更好的性能,但也需要更多的计算资源。选择模型时,需要根据你的硬件条件和应用场景进行权衡。 可以从 Hugging Face Hub 上找到 DeepSeek 的各种模型变体。
-
2.2 部署框架选择:Transformers、vLLM、ONNX Runtime
- Transformers: Hugging Face Transformers 是一个流行的深度学习库,易于使用,支持各种模型。适合 CPU 和 GPU 部署,但性能可能不是最优的。
- vLLM: 专门为 LLM 推理设计的框架,具有更高的吞吐量和更低的延迟。适用于 GPU 部署。
- ONNX Runtime: 一个跨平台的机器学习推理加速器,支持各种硬件平台。可以优化模型的推理性能。
3. CPU 部署:Transformers 框架
-
3.1 安装 Transformers 和 PyTorch
bash
pip install transformers torch -
3.2 下载 DeepSeek 模型
“`python
from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = “deepseek-ai/deepseek-coder-6.7B-base” # 替换为你想要使用的模型
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
“` -
3.3 编写推理脚本
“`python
from transformers import pipelinemodel_name = “deepseek-ai/deepseek-coder-6.7B-base”
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)pipe = pipeline(“text-generation”, model=model, tokenizer=tokenizer, device=”cpu”)
prompt = “Write a Python function to calculate the factorial of a number.”
result = pipe(prompt, max_length=200, num_return_sequences=1)
print(result[0][‘generated_text’])
“` -
3.4 优化 CPU 推理性能
- 使用量化技术: 可以将模型权重从 FP32 转换为 INT8,减少内存占用和计算量。 可以使用
torch.quantization
来进行量化。 - 使用多线程: 可以利用 CPU 的多核特性来加速推理。 可以通过设置
torch.set_num_threads()
来控制线程数量。
- 使用量化技术: 可以将模型权重从 FP32 转换为 INT8,减少内存占用和计算量。 可以使用
4. GPU 部署:vLLM 框架
-
4.1 安装 vLLM 和 CUDA
首先确保你已经安装了兼容的 CUDA 版本。 详细的 CUDA 安装步骤可以参考 NVIDIA 官方文档。
bash
pip install vllm -
4.2 下载 DeepSeek 模型
模型下载方式与 Transformers 框架类似。
-
4.3 编写推理脚本
“`python
from vllm import LLM, SamplingParamsmodel_name = “deepseek-ai/deepseek-coder-6.7B-base”
llm = LLM(model=model_name)prompt = “Write a Python function to calculate the factorial of a number.”
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=200)outputs = llm.generate(prompt, sampling_params)
for output in outputs:
print(output.outputs[0].text)
“` -
4.4 vLLM 高级配置和优化
- 修改
gpu_memory_utilization
: 可以调整 vLLM 使用的 GPU 显存比例。 - 使用连续批处理: vLLM 支持连续批处理,可以提高吞吐量。
- 修改
5. GPU 部署:Transformers 框架 (优化)
-
5.1 安装 Transformers 和 CUDA 版本的 PyTorch
确保安装的是支持 CUDA 的 PyTorch 版本。
bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 根据你的 CUDA 版本修改 cu118
pip install transformers -
5.2 下载 DeepSeek 模型
模型下载方式与 CPU 部署相同。
-
5.3 使用
torch.compile
优化推理torch.compile
是 PyTorch 2.0 引入的编译技术,可以显著提升推理速度。“`python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = “deepseek-ai/deepseek-coder-6.7B-base”
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(“cuda”)
model.eval()
model = torch.compile(model)prompt = “Write a Python function to calculate the factorial of a number.”
input_ids = tokenizer.encode(prompt, return_tensors=”pt”).to(“cuda”)with torch.no_grad():
output = model.generate(input_ids, max_length=200)print(tokenizer.decode(output[0], skip_special_tokens=True))
“` -
5.4 量化技术加速 GPU 推理
与 CPU 部署类似,可以使用量化技术减少 GPU 显存占用和计算量。
torch.quantization
也适用于 GPU 环境。
6. GPU 部署:ONNX Runtime
-
6.1 导出 DeepSeek 模型为 ONNX 格式
“`python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizermodel_name = “deepseek-ai/deepseek-coder-6.7B-base”
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(“cuda”)
model.eval()dummy_input = tokenizer(“This is a test”, return_tensors=”pt”).to(“cuda”)
torch.onnx.export(
model,
(dummy_input[“input_ids”], dummy_input[“attention_mask”]),
“deepseek.onnx”,
input_names=[“input_ids”, “attention_mask”],
output_names=[“output”],
dynamic_axes={
“input_ids”: {0: “batch_size”, 1: “sequence_length”},
“attention_mask”: {0: “batch_size”, 1: “sequence_length”},
“output”: {0: “batch_size”, 1: “sequence_length”},
},
opset_version=13, # 根据你的 ONNX Runtime 版本调整
)
“` -
6.2 安装 ONNX Runtime
bash
pip install onnxruntime-gpu -
6.3 编写推理脚本
“`python
import onnxruntime
from transformers import AutoTokenizermodel_path = “deepseek.onnx”
tokenizer = AutoTokenizer.from_pretrained(“deepseek-ai/deepseek-coder-6.7B-base”, trust_remote_code=True)
session = onnxruntime.InferenceSession(model_path, providers=[‘CUDAExecutionProvider’]) # 或者 ‘CPUExecutionProvider’prompt = “Write a Python function to calculate the factorial of a number.”
input_ids = tokenizer.encode(prompt, return_tensors=”np”)
attention_mask = np.ones_like(input_ids)inputs = {“input_ids”: input_ids, “attention_mask”: attention_mask}
outputs = session.run(None, inputs)print(tokenizer.decode(outputs[0][0], skip_special_tokens=True))
“` -
6.4 ONNX Runtime 加速选项
可以尝试使用 ONNX Runtime 的各种优化选项,例如 graph optimization 和 kernel fusion,来进一步提升推理性能。
7. 直接输出结果:编写用户交互界面
为了方便使用,可以编写用户交互界面,让用户直接输入 prompt 并查看结果。
-
7.1 使用 Gradio 创建 Web 界面
“`python
import gradio as gr
from transformers import pipelinemodel_name = “deepseek-ai/deepseek-coder-6.7B-base”
pipe = pipeline(“text-generation”, model=model_name, device=”cuda”)def generate_text(prompt):
result = pipe(prompt, max_length=200, num_return_sequences=1)
return result[0][‘generated_text’]iface = gr.Interface(
fn=generate_text,
inputs=”text”,
outputs=”text”,
title=”DeepSeek Text Generation”,
description=”Enter a prompt and the DeepSeek model will generate text.”
)iface.launch()
“` -
7.2 使用 Streamlit 创建 Web 界面
Streamlit 的使用方式类似 Gradio,可以方便地创建 Web 界面。
-
7.3 使用 CLI 界面直接输入输出
可以编写一个简单的 Python 脚本,接收命令行参数作为 prompt,并输出结果。
8. 常见问题和解决方案
- 8.1 CUDA 版本不兼容问题: 确保 CUDA 版本与 PyTorch 版本兼容。可以参考 PyTorch 官方网站上的 CUDA 版本兼容性列表。
- 8.2 内存不足问题: 尝试使用更小的模型、量化技术或梯度累积来减少内存占用。
- 8.3 模型下载失败问题: 检查网络连接是否正常,或者尝试使用镜像源下载模型。
- 8.4 推理速度慢问题: 使用 GPU 加速、优化代码、使用更高效的推理框架 (如 vLLM 或 ONNX Runtime) 或量化技术来提升推理速度。
9. 高级应用:微调 DeepSeek 模型
如果需要让 DeepSeek 模型更适应特定的任务,可以进行微调。
- 9.1 准备数据集: 收集与目标任务相关的数据集。
- 9.2 修改训练脚本: 修改 Transformers 提供的训练脚本,例如
run_clm.py
或run_qa.py
,使其适应你的数据集和任务。 - 9.3 开始微调: 运行修改后的训练脚本,开始微调模型。
10. 总结
本指南详细介绍了如何在 CPU 和 GPU 环境下部署 DeepSeek 模型,并直接输出结果。 通过选择合适的部署框架、优化推理性能和编写用户交互界面,你可以充分利用 DeepSeek 的强大功能,将其应用于各种实际场景。 记住,模型选择、硬件配置和优化策略都需要根据你的具体需求进行调整。 希望本指南能够帮助你成功部署 DeepSeek 模型,并开启你的 AI 之旅!