deepspeed 推理基于基于transformer的模型
https://www.deepspeed.ai/tutorials/inference-tutorial/
DeepSpeed-Inference:支持模型并行,减少延迟与成本【大GPU比较贵,使用cpu比较慢】,使用量化技术。
DeepSpeed provides a seamless inference mode for compatible transformer based models trained using DeepSpeed, Megatron, and HuggingFace,
要在多块的GPU上进行推理工作,需要提供模型的并行度和检查点的信息,或者已经加载好的模型。deepspeed 将会做剩下的事情。它将会自动的分区这个模型,使用相匹配的cuda kernel 在我们的模型中,并且管理GPU之间的通讯机制。【目前兼容的模型有这些】
from .containers import HFGPT2LayerPolicy
from .containers import HFBertLayerPolicy
from .containers import BLOOMLayerPolicy
from .containers import HFGPTJLayerPolicy
from .containers import HFGPTNEOLayerPolicy
from .containers import GPTNEOXLayerPolicy
from .containers import HFOPTLayerPolicy
from .containers import MegatronLayerPolicy
from .containers import HFDistilBertLayerPolicy
from .containers import HFCLIPLayerPolicy
from .containers import LLAMALayerPolicy
from .containers import UNetPolicy
from .containers import VAEPolicy
from .containers import LLAMA2LayerPolicy
from .containers import InternLMLayerPolicy
【也并不是对所有模型都兼容使用,模型并行的操作,但是数据并行是能做的】
Initializing for Inference
使用deepspeed 去推理模型,使用init_inference api去加载推理的模型。可以指定mp 的度数。如果模型没有被加载的话,可以使用模型路径去加载。
为了使用高性能的核,许哟啊去设置replace_with_kernel_inject to True对于兼容的模型。
For models not supported by DeepSpeed, the users can submit a PR that defines a new policy in replace_policy class that specifies the different parameters of a Transformer layer,
【可以根据这个作者的编程策略去将自己的模型加入这个框架。需要去实现一个代理类,这个代理类创造了一个映射,将用户自己的定义的模型层的信息映射到deepspeed推理优化层的信息】
if args.pre_load_checkpoint:
model = model_class.from_pretrained(args.model_name_or_path)
else:
model = model_class()
...
import deepspeed
#Initialize the DeepSpeed-Inference engine
ds_engine = deepspeed.init_inference(model,