我在Tensorflow模型服务器上观察到CPU的性能问题。与原始的Tensorflow模型推理相比,它的推理时间增加了一倍。两者都是用MKL构建的,只用于CPU。
复制代码:基准测试
Tensorflow MKL构建: bazel build --config=mkl -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-O3 //tensorflow/tools/pip_package:build_pip_package
Tensorflow服务器MKL构建: bazel build --config=mkl --config=opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-O3 tensorflow_serving/model_servers:tensorflow_model_server
目标模型是简单的CNN分割模型。
原始Tensorflow模型在0.17s内处理一幅图像。Tensorflow模型服务器在0.32s内处理相同的图像。
我怎样才能提高这种表现呢?这对我的申请非常重要。
发布于 2019-09-26 06:53:09
我想解释会对你有帮助。据说,在配置不好的情况下,tensorflow加上英特尔优化可能会导致性能下降,然后清除构建https://github.com/tensorflow/serving/issues/1272#issuecomment-477878180
您可以尝试配置批处理参数(配置文件和--enable_batching参数) 送达/分批
并设置(内部/内部)_op_parallelism_threads。
此外,MKL还有自己的标志来提高性能性能
发布于 2022-07-28 13:43:36
如果您需要更好的性能,我建议您尝试OpenVINO。它通过图的剪枝和融合一些操作来优化推理时间。OpenVINO是为英特尔的硬件优化,但它应该与任何CPU一起工作。但是,我假设您在编译带有MKL支持的TensorFlow时具有Intel。
这里是各种模型和CPU的一些性能基准。
将Tensorflow模型转换为OpenVINO非常简单,除非您有漂亮的自定义层。关于如何做到这一点的完整教程可以找到这里。下面是一些片段。
安装OpenVINO
最简单的方法是使用PIP。或者,您可以使用这个工具在您的情况下找到最佳方法。
pip install openvino-dev[tensorflow2]使用模型优化器转换SavedModel模型
模型优化器是来自OpenVINO开发包的命令行工具。它将Tensorflow模型转换为IR,这是OpenVINO的默认格式。您还可以尝试FP16的精度,这将使您在不降低精度的情况下获得更好的性能(只需更改data_type)。在命令行中运行:
mo --saved_model_dir "model" --input_shape "[1, 3, 224, 224]" --data_type FP32 --output_dir "model_ir"运行推理
转换后的模型可以由运行时加载,并为特定的设备进行编译,例如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]甚至还有类似于Tensorflow服务的OpenVINO模型服务器。
免责声明:我在OpenVINO工作。
https://stackoverflow.com/questions/47512355
复制相似问题