推理设置
使用 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.half、torch.int8、torch.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
- 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 包装模型。