推理设置

使用 DeepSpeed 进行推理的入口点是 deepspeed.init_inference()

示例用法

engine = deepspeed.init_inference(model=net, config=config)

DeepSpeedInferenceConfig 用于控制初始化 InferenceEngine 的所有方面。该配置应作为字典传递给 init_inference,但参数也可以作为关键字参数传递。

class deepspeed.inference.config.DeepSpeedInferenceConfig[source]

设置 DeepSpeed 推理引擎的参数。

replace_with_kernel_inject: bool = False (alias 'kernel_inject')

设置为 true 以注入 Bert、GPT2、GPT-Neo 和 GPT-J 等模型的推理内核。否则,injection_dict 提供两个线性层的名称作为元组:(attention_output projection, transformer output projection)

dtype: dtype = torch.float16

所需模型数据类型,将模型转换为此类型。支持的目标类型:torch.halftorch.int8torch.float

tensor_parallel: DeepSpeedTPConfig = {} (alias 'tp')

用于将模型拆分到多个 GPU 上的张量并行配置。期望一个包含 DeepSpeedTPConfig 值的字典。

enable_cuda_graph: bool = False

使用此标志捕获推理操作的 CUDA 图,以便可以使用图重播方法更快地运行。

use_triton: bool = False

使用此标志使用 triton 内核进行推理操作。

triton_autotune: bool = False

使用此标志启用 triton 自动调整。打开它对于性能更好,但会增加自动调整的第一次运行时间。

zero: DeepSpeedZeroConfig = {}

与推理引擎一起使用的 ZeRO 配置。期望一个包含 DeepSpeedZeroConfig 值的字典。

triangular_masking: bool = True (alias 'tm')

控制 Transformer 层中注意力分数的掩码类型。请注意,掩码是特定于应用程序的。

moe: Union[bool, DeepSpeedMoEConfig] = {}

指定 Transformer 类型是否为 MoE。期望一个包含 DeepSpeedMoEConfig 值的字典。

quant: QuantizationConfig = {}

注意:仅适用于 int8 dtype。使用 MoQ 对模型进行量化的量化设置。该设置可以是一个元素或一个元组。如果传递一个值,则将其视为量化中使用的组数。如果传递一个元组,则表示 Transformer 层的 MLP 部分存在额外的分组(例如,(True, 8) 表示我们使用 8 个组对除 MLP 部分以外的整个网络进行量化,我们对该部分使用 8 个额外的分组)。期望一个包含 QuantizationConfig 值的字典。

checkpoint: Optional[Union[str, Dict]] = None

指向 DeepSpeed 兼容检查点的路径或指向包含加载策略的 JSON 的路径。

base_dir: str = ''

这显示了所有检查点文件所在的根目录。这也可以通过 json 配置传递。

set_empty_params: bool = False

指定是否使用空张量或真实张量创建推理模块

save_mp_checkpoint_path: Optional[str] = None

我们要保存加载的模型(带有检查点的)的路径。此功能用于调整并行度,以帮助减轻模型加载开销。如果未传递路径,则不会保存任何新的检查点。

checkpoint_config: InferenceCheckpointConfig = {} (alias 'ckpt_config')

待办事项:添加文档。预期一个字典,其中包含 InferenceCheckpointConfig 的值。

return_tuple: bool = True

指定 transformer 层是否需要返回元组或张量。

training_mp_size: int = 1

如果加载检查点,这是它训练的 mp 大小,它可能与您在推理期间想要使用的 mp 大小不同。

replace_method: str = 'auto'
injection_policy: Optional[Dict] = None (alias 'injection_dict')

字典,将客户端 nn.Module 映射到其相应的注入策略。例如,{BertLayer : deepspeed.inference.HFBertLayerPolicy}

injection_policy_tuple: Optional[tuple] = None

待办事项:添加文档

config: Optional[Dict] = None (alias 'args')
max_out_tokens: int = 1024 (alias 'max_tokens')

此参数显示推理引擎可以处理的最大令牌数,包括输入和输出令牌。请考虑将其增加到您的用例所需的令牌长度。

min_out_tokens: int = 1 (alias 'min_tokens')

此参数向运行时传达您期望生成的最小令牌数。如果运行时无法提供此信息,这会导致运行时出错,并在内存压力方面提供上下文,而不是发生段错误或提供损坏的输出。

transposed_mode: bool = False
mp_size: int = 1

所需的模型并行大小,默认值为 1,表示没有模型并行。已弃用,请使用 ``tensor_parallel` 配置来控制模型并行。

mpu: object = None
ep_size: int = 1
ep_group: object = None (alias 'expert_group')
ep_mp_group: object = None (alias 'expert_mp_group')
moe_experts: list = [1]
moe_type: MoETypeEnum = MoETypeEnum.standard
class deepspeed.inference.config.DeepSpeedTPConfig[source]

配置张量并行设置

enabled: bool = True

打开/关闭张量并行。

tp_size: int = 1

使用张量并行将模型拆分为的设备数量。

mpu: object = None

一个模型并行单元对象,实现了 get_{model,data}_parallel_{rank,group,world_size}()

tp_group: object = None
class deepspeed.inference.config.DeepSpeedMoEConfig[source]

设置 MoE 的参数

enabled: bool = True
ep_size: int = 1

专家并行大小,用于将专家划分为专家并行组中的 GPU。

moe_experts: list = [1] (alias 'num_experts')

MoE 层中使用的全局专家数量。

type: MoETypeEnum = MoETypeEnum.standard

指定 MoE 层类型。我们有两种类型的 MoE 层:‘Standard’ 和 ‘Residual’。

ep_mp_group: object = None
ep_group: object = None (alias 'expert_group')
class deepspeed.inference.config.QuantizationConfig[source]
enabled: bool = True
activation: ActivationQuantConfig = ActivationQuantConfig(enabled=True, num_bits=8, q_type='symmetric', q_groups=1)
weight: WeightQuantConfig = WeightQuantConfig(enabled=True, num_bits=8, q_type='symmetric', q_groups=1, quantized_initialization={}, post_init_quant={})
qkv: QKVQuantConfig = QKVQuantConfig(enabled=True)
class deepspeed.inference.config.InferenceCheckpointConfig[source]
checkpoint_dir: Optional[str] = None
save_mp_checkpoint_path: Optional[str] = None
base_dir: Optional[str] = None

示例配置

config = {
    "kernel_inject": True,
    "tensor_parallel": {"tp_size": 4},
    "dtype": "fp16",
    "enable_cuda_graph": False
}
deepspeed.init_inference(model, config=None, **kwargs)[source]

初始化 DeepSpeed InferenceEngine。

描述:所有四种情况在 DS init_inference() API 中都是有效且受支持的。

# 案例 1:用户不提供任何配置且不提供 kwargs。将使用默认配置。

generator.model = deepspeed.init_inference(generator.model)
string = generator("DeepSpeed is")
print(string)

# 案例 2:用户提供配置但未提供 kwargs。将使用用户提供的配置。

generator.model = deepspeed.init_inference(generator.model, config=config)
string = generator("DeepSpeed is")
print(string)

# 案例 3:用户不提供配置,仅使用关键字参数 (kwargs)。

generator.model = deepspeed.init_inference(generator.model,
                                            tensor_parallel={"tp_size": world_size},
                                            dtype=torch.half,
                                            replace_with_kernel_inject=True)
string = generator("DeepSpeed is")
print(string)

# 案例 4:用户提供配置和关键字参数 (kwargs)。配置和 kwargs 都会合并,kwargs 优先级更高。

generator.model = deepspeed.init_inference(generator.model, config={"dtype": torch.half}, replace_with_kernel_inject=True)
string = generator("DeepSpeed is")
print(string)
参数
  • model – 必须提供:原始 nn.module 对象,没有任何包装器

  • config – 可选:代替参数,您可以传入 DS 推断配置字典或 JSON 文件路径

返回值

一个 deepspeed.InferenceEngine 包装模型。