我目前正在生产中使用一个名为T0pp (https://huggingface.co/bigscience/T0pp)的模型,并希望加快推理速度。
我在随需应变的EC2 g4dn.12xlarge实例(4个Nvidia T4 GPU)上运行以下代码:
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("bigscience/T0pp")
model = AutoModelForSeq2SeqLM.from_pretrained("bigscience/T0pp")
model.parallelize()
input_dict = tokenizer(generation_input.inputs, return_tensors="pt", padding=True)
inputs = input_dict.input_ids.to("cuda:0")
attention_mask = input_dict.attention_mask.to("cuda:0")
with torch.no_grad():
outputs = model.generate(inputs, attention_mask=attention_mask)
tokenizer.batch_decode(outputs, skip_special_tokens=True)我想知道你会尝试哪种方法来加速推理,如果你知道有什么好的教程可以做到的话。我所看到的加速推理的主要替代方法是使用下面的Pytorch模型:
是否有人有使用这些工具的经验,并知道哪一个是最好的/最简单的选择?
所有这些对我来说都是很新的,我必须承认,我在ONNX和深海教程中有点迷失了。
PS:
发布于 2022-07-28 14:08:21
也许你可以试试OpenVINO?它允许您将模型转换为中间表示(中间表示,IR),然后在具有FP16支持的CPU上运行。OpenVINO是针对英特尔硬件进行优化的,但它应该与任何处理器一起工作。我不能保证你的模型将在CPU上比Nvidia GPU更快,但值得一试。有些NLP模型足够快(比如这个伯特)。
您可以找到关于如何转换PyTorch模型这里 (FastSeg)和这里 (BERT)的完整教程。下面是一些片段。
安装OpenVINO
最简单的方法是使用PIP。或者,您可以使用这个工具在您的情况下找到最佳方法。
pip install openvino-dev[pytorch,onnx]将模型保存到ONNX
OpenVINO目前还不能直接转换PyTorch模型,但是它可以使用ONNX模型进行转换。此示例代码假定模型用于计算机视觉。
dummy_input = torch.randn(1, 3, IMAGE_HEIGHT, IMAGE_WIDTH)
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=11)使用模型优化器转换ONNX模型
模型优化器是一个来自OpenVINO开发包的命令行工具,所以请确保您已经安装了它。它将ONNX模型转换为OV格式(又名IR),这是OpenVINO的默认格式。它还将精度更改为FP16 (以进一步提高性能)。在大多数情况下,精确度的下降是微不足道的。在命令行中运行:
mo --input_model "model.onnx" --input_shape "[1, 3, 224, 224]" --mean_values="[123.675, 116.28 , 103.53]" --scale_values="[58.395, 57.12 , 57.375]" --data_type FP16 --output_dir "model_ir"在CPU上运行推理。
转换后的模型可以由运行时加载,并为特定的设备进行编译,例如CPU或GPU (集成到CPU中,比如Intel HD Graphics)。如果你不知道什么是你最好的选择,只需使用汽车。
# Load the network
ie = Core()
model_ir = ie.read_model(model="model_ir/model.xml")
compiled_model_ir = ie.compile_model(model=model_ir, device_name="CPU")
# Get output layer
output_layer_ir = compiled_model_ir.output(0)
# Run inference on the input image
result = compiled_model_ir([input_image])[output_layer_ir]值得一提的是,Runtime可以直接处理ONNX模型。在这种情况下,只需跳过转换(模型优化器)步骤并给出read_model函数的onnx路径。
免责声明:我在OpenVINO工作。
https://stackoverflow.com/questions/71210238
复制相似问题