DeepSeek 本地 CPU/GPU 部署教程:直接输出结果的完整指南 – wiki基地

DeepSeek 本地 CPU/GPU 部署教程:直接输出结果的完整指南

DeepSeek 是一款强大的开源语言模型,在代码生成、文本理解和创造等方面表现出色。能够在本地部署 DeepSeek 模型,意味着你可以拥有一个无需联网、完全私有的 AI 助手,进行各种任务。本指南将详细介绍如何在 CPU 和 GPU 环境下部署 DeepSeek 模型,并直接输出结果,让你快速上手,充分利用 DeepSeek 的强大功能。

目录

  1. 准备工作:软硬件环境搭建
    • 1.1 硬件要求:CPU、GPU 和内存
    • 1.2 软件要求:Python、CUDA (GPU 部署) 和相关库
    • 1.3 安装 Miniconda 或 Anaconda (推荐)
  2. 选择 DeepSeek 模型和部署框架
    • 2.1 DeepSeek 模型选择:模型尺寸和性能考量
    • 2.2 部署框架选择:Transformers、vLLM、ONNX Runtime
  3. CPU 部署:Transformers 框架
    • 3.1 安装 Transformers 和 PyTorch
    • 3.2 下载 DeepSeek 模型
    • 3.3 编写推理脚本
    • 3.4 优化 CPU 推理性能
  4. GPU 部署:vLLM 框架
    • 4.1 安装 vLLM 和 CUDA
    • 4.2 下载 DeepSeek 模型
    • 4.3 编写推理脚本
    • 4.4 vLLM 高级配置和优化
  5. GPU 部署:Transformers 框架 (优化)
    • 5.1 安装 Transformers 和 CUDA 版本的 PyTorch
    • 5.2 下载 DeepSeek 模型
    • 5.3 使用 torch.compile 优化推理
    • 5.4 量化技术加速 GPU 推理
  6. GPU 部署:ONNX Runtime
    • 6.1 导出 DeepSeek 模型为 ONNX 格式
    • 6.2 安装 ONNX Runtime
    • 6.3 编写推理脚本
    • 6.4 ONNX Runtime 加速选项
  7. 直接输出结果:编写用户交互界面
    • 7.1 使用 Gradio 创建 Web 界面
    • 7.2 使用 Streamlit 创建 Web 界面
    • 7.3 使用 CLI 界面直接输入输出
  8. 常见问题和解决方案
    • 8.1 CUDA 版本不兼容问题
    • 8.2 内存不足问题
    • 8.3 模型下载失败问题
    • 8.4 推理速度慢问题
  9. 高级应用:微调 DeepSeek 模型
    • 9.1 准备数据集
    • 9.2 修改训练脚本
    • 9.3 开始微调
  10. 总结

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 环境。 这可以避免不同项目之间的依赖冲突。

    1. 下载 Miniconda 或 Anaconda 安装包:从官方网站下载适合你操作系统的安装包。
    2. 运行安装包:按照提示完成安装。
    3. 创建新的 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, AutoTokenizer

    model_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 pipeline

    model_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() 来控制线程数量。

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, SamplingParams

    model_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, AutoTokenizer

    model_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, AutoTokenizer

    model_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 AutoTokenizer

    model_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 pipeline

    model_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.pyrun_qa.py,使其适应你的数据集和任务。
  • 9.3 开始微调: 运行修改后的训练脚本,开始微调模型。

10. 总结

本指南详细介绍了如何在 CPU 和 GPU 环境下部署 DeepSeek 模型,并直接输出结果。 通过选择合适的部署框架、优化推理性能和编写用户交互界面,你可以充分利用 DeepSeek 的强大功能,将其应用于各种实际场景。 记住,模型选择、硬件配置和优化策略都需要根据你的具体需求进行调整。 希望本指南能够帮助你成功部署 DeepSeek 模型,并开启你的 AI 之旅!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部