菜单

文本生成

相关源文件

本文档介绍了DeepSeek-V3的文本生成能力和流程。它解释了如何使用生成接口,包括交互模式和批量模式,并详细介绍了底层的生成算法。有关文本生成前使用的权重转换信息,请参阅权重转换,有关加速生成过程的内核优化,请参阅优化内核

概述

DeepSeek-V3的文本生成系统提供了一个灵活的接口,用于使用模型生成文本。该系统同时支持交互式聊天会话和多提示批量处理。它包括基于温度的采样,用于控制输出的多样性,以及跨多个GPU的分布式推理,以提高性能。

来源: inference/generate.py80-158

生成架构

DeepSeek-V3中的文本生成过程遵循标准的自回归方法,并进行了一些优化以实现高效推理。

来源: inference/generate.py30-78 inference/generate.py14-27

核心生成函数

文本生成系统的核心是generate()函数,该函数处理自回归生成过程。此函数接收分词后的提示,并根据模型的预测生成新的标记。

关键参数

参数类型描述
modelTransformerDeepSeek-V3 Transformer模型
prompt_tokensList[List[int]]分词后的提示列表
max_new_tokensint要生成的最大 token 数
eos_idint用于停止生成的序列结束标记ID
temperature浮点数采样温度(越高=越随机)

生成算法

生成过程遵循以下步骤:

  1. 初始化一个张量来保存提示和生成的标记
  2. 将提示标记复制到张量中
  3. 对于每个位置,直到最大长度
    • 通过模型处理标记
    • 根据logits和温度对下一个标记进行采样
    • 处理提示标记的特殊情况
    • 检查序列结束标记
    • 如果所有序列都已完成,则中断
  4. 提取并返回完成的标记

来源: inference/generate.py30-78

采样函数

sample()函数实现了基于温度的采样,以控制生成输出的随机性。

温度越高,输出就越多样化,但也可能越不聚焦。较低的温度值会产生更确定、更聚焦的输出。当温度设置为0时,该函数只选择概率最高的标记(贪婪解码)。

来源: inference/generate.py14-27

使用模式

DeepSeek-V3支持两种主要的文本生成使用模式:

交互模式

交互模式提供了一个类似聊天的界面,用户可以在其中与模型进行持续的对话。

交互模式会维护对话历史,从而能够根据之前的交流提供上下文感知的响应。

批处理模式

批量模式处理输入文件中的多个提示。

此模式对于在没有用户交互的情况下高效处理多个查询非常有用。

来源: inference/generate.py121-155

分布式生成

DeepSeek-V3支持使用PyTorch的分布式通信包在多个GPU上进行分布式文本生成。该实现

  1. 使用NCCL后端初始化分布式进程组
  2. 跨不同GPU加载模型分片
  3. 在交互模式下协调进程间的输入/输出

这使得在多GPU系统上能够进行高效推理,让模型能够处理更长的提示并更快地生成响应。

来源: inference/generate.py100-107 inference/generate.py124-134 inference/generate.py157-158

命令行界面

文本生成系统提供了一个命令行界面,包含以下参数:

参数类型默认描述
--ckpt-pathstr必需模型检查点目录的路径
--configstr必需模型配置文件路径
--input-filestr""包含批量处理提示的文件
--interactive标志启用交互模式
--max-new-tokensint200要生成的新标记的最大数量
--temperature浮点数0.2采样的温度

至少需要指定--input-file--interactive中的一个才能运行生成器。

来源: inference/generate.py161-185

聊天模板应用

在生成响应时,系统会使用分词器的聊天模板来格式化提示。这会将原始文本转换为模型在聊天交互中期望的特定格式。

聊天模板会添加适当的系统提示、角色标记和模型理解对话上下文所需的格式。

来源: inference/generate.py140-141 inference/generate.py149

使用示例

交互模式示例

要启动与DeepSeek-V3的交互式聊天会话

这将启动一个提示,您可以在其中输入文本,模型将做出回应。对话历史会被保留,从而能够进行上下文交互。

批量模式示例

要处理包含多个提示的文件

系统将为文件中的每个提示生成响应并显示结果。

来源: inference/generate.py176-185