heroku 有没有办法在CPU中优化pytorch推理?

epggiuax  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(161)

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

lnlaulya

lnlaulya1#

诚然,我不是Heroku的Maven,但也许你可以使用OpenVINO。OpenVINO针对英特尔硬件进行了优化,但它应该适用于任何CPU。它通过例如图修剪或将一些操作融合在一起来优化推理性能。下面是从PyTorch转换的Resnet-18的性能基准。
你可以在这里找到关于如何转换PyTorch模型的完整教程。下面是一些片段。

安装OpenVINO

最简单的方法是使用PIP。或者,您可以使用this tool来找到最适合您的情况的方法。

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)

使用Model Optimizer转换ONNX模型

Model Optimizer是一个来自OpenVINO开发包的命令行工具,所以请确保您已经安装了它。它将ONNX模型转换为OV格式(又名IR),这是OpenVINO的默认格式。它还将精度更改为FP 16(以进一步提高性能)。在命令行中运行:

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)。如果您不知道什么是最佳选择,只需使用GPU。

# 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工作。

zyfwsgd6

zyfwsgd62#

如果您使用的是英特尔CPU,请查看英特尔PyTorch扩展。此英特尔扩展提供量化功能,可为大型深度学习模型提供良好的精度结果。
查看文章-https://www.intel.com/content/www/us/en/developer/articles/code-sample/accelerate-pytorch-models-using-quantization.html。本文还向您展示了如何通过应用Intel Extension for PyTorch量化来加速基于PyTorch的模型的代码示例。

mnemlml8

mnemlml83#

你可以尝试修剪和量化你的模型(压缩部署模型大小的技术,允许推理速度和节能而不会显著损失准确性)。在pytorch网站上有模型修剪和量化的例子,你可以检查。
https://pytorch.org/tutorials/intermediate/pruning_tutorial.htmlhttps://pytorch.org/tutorials/advanced/dynamic_quantization_tutorial.html的数据库

相关问题