有什么方法可以优化CPU中的pytorch推理吗?

问题描述 投票:0回答:3

我将在网站上提供 pytorch 模型(resnet18)。
然而,在 cpu(amd3600) 中进行推理需要 70% 的 cpu 资源。
我不认为服务器(heroku)可以处理这个计算。
有什么办法可以优化cpu的推理吗?
非常感谢

heroku pytorch
3个回答
1
投票

诚然,我不是 Heroku 专家,但也许您可以使用 OpenVINO。 OpenVINO 针对 Intel 硬件进行了优化,但它应该适用于任何 CPU。它通过例如优化推理性能图形修剪或将一些操作融合在一起。 这里是从 PyTorch 转换而来的 Resnet-18 的性能基准。

您可以在此处找到有关如何转换 PyTorch 模型的完整教程。下面是一些片段。

安装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 中,如英特尔高清显卡)。如果您不知道什么是最适合您的选择,请使用“自动”。

# 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]

免责声明:我从事 OpenVINO 工作。


1
投票

如果您使用 Intel CPU,请查看 Intel Extension for PyTorch。此英特尔扩展提供量化功能,可为大型深度学习模型提供良好的准确度结果。

查看文章 - https://www.intel.com/content/www/us/en/developer/articles/code-sample/accelerate-pytorch-models-using-quantization.html。本文还向您展示了一个代码示例,介绍如何通过应用英特尔 PyTorch 量化扩展来加速基于 PyTorch 的模型。

此外,还有一个名为 Intel Neural Compressor 的工具。它是一种模型压缩工具,有助于在不牺牲准确性的情况下加快推理速度。查看这篇文章 - https://www.intel.com/content/www/us/en/developer/articles/technical/pytorch-quantization-using-intel-neural-compressor.html 在使用 Intel Neural Compressor 进行 PyTorch 建模并优化性能。


0
投票

您可以尝试修剪和量化您的模型(压缩模型大小以进行部署的技术,可以加快推理速度并节省能源,而不会造成显着的准确性损失)。 pytorch网站上有模型剪枝和量化的例子,你可以查看。

https://pytorch.org/tutorials/intermediate/pruning_tutorial.html https://pytorch.org/tutorials/advanced/dynamic_quantization_tutorial.html

© www.soinside.com 2019 - 2024. All rights reserved.