有没有任何方法可以优化在CPU上运行的PyTorch推理?

4

我打算在网站上服务pytorch模型(resnet18)。
然而,在cpu(amd3600)中的推理需要70%的cpu资源。
我不认为服务器(heroku)能够处理这个计算。
有没有办法优化cpu中的推理?
非常感谢。

2个回答

1
承认,我不是Heroku的专家,但可能你可以使用OpenVINO。OpenVINO经过优化,适用于英特尔硬件,但应该可以与任何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模型转换为OV格式(也称为IR)。模型优化器是来自OpenVINO开发包的命令行工具,请确保您已经安装了它。它将ONNX模型转换为OV格式,并将精度更改为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)。如果您不知道最适合您的选择是什么,只需使用AUTO。
# 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上工作。

OpenVINO自动修剪模型而不会出现性能问题吗?这听起来有些不真实。它是否具有优化级别超参数,例如cuda.amp O1/O2? - 이준혁
当我说图剪枝(在这种情况下)时,我指的是那些不像身份一样不改变准确性的不必要节点。不幸的是,没有优化级别。但是,您可以通过转换为FP16或量化(带有一定的准确性降低)来获得更好的性能。 - dragon7
如果您想了解更多关于这些优化的信息,请访问https://github.com/openvinotoolkit/openvino/wiki/Internal-CPU-Plugin-Optimizations。 - dragon7

0

非常感谢您的回答。但是,我不确定resnet18是否能够处理更多的剪枝和量化。据我所知,与其他模型相比,它非常小。 - 이준혁

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接