{"id":485550,"date":"2026-06-29T21:04:44","date_gmt":"2026-06-29T21:04:44","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485550"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485550","title":{"rendered":"5 \u0434\u0432\u0438\u0436\u043a\u043e\u0432, 1 resnet: \u0431\u0438\u0442\u0432\u0430 inference-\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u0432 2026"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p><strong>TL;DR:<\/strong> \u041f\u0440\u043e\u0433\u043d\u0430\u043b ResNet-50 \u0447\u0435\u0440\u0435\u0437 PyTorch, ONNX Runtime, OpenVINO, TensorRT \u0438 TVM \u0432 FP32\/FP16\/INT8\/INT4 \u043d\u0430 CPU Ryzen 9 6900HS \u0438 GPU RTX 3070 Ti Laptop \u0432 46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. <strong>\u041b\u0443\u0447\u0448\u0438\u0439 CPU:<\/strong> ONNX Runtime static INT8 \u2014 15.4 ms \/ 64.8 img\/s (\u00d74.0 \u043e\u0442 torch baseline \u043f\u0440\u0438 bs=1). <strong>\u041b\u0443\u0447\u0448\u0438\u0439 GPU:<\/strong> TensorRT INT8 \u2014 1.16 ms \/ 863 img\/s (\u00d75.8). torch.compile + FP16 \u0434\u0430\u0451\u0442 \u00d72.6 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u043c\u0435\u043d\u044b \u0434\u0432\u0438\u0436\u043a\u0430. \u041a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435: <a href=\"https:\/\/github.com\/DmitriyValetov\/resnet50-inference-benchmark\" rel=\"noopener noreferrer nofollow\">github.com\/DmitriyValetov\/resnet50-inference-benchmark<\/a>.<\/p>\n<\/blockquote>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u2014 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u0433\u043e\u043d\u044f\u0442\u044c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445. \u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0440\u044f\u0434\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u043e inference-\u0434\u0432\u0438\u0436\u043a\u0438 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u2014 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n<p>Inference-\u0434\u0432\u0438\u0436\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0430 \u0438 \u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0433\u043e\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0435, \u043b\u0438\u0431\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438 \u0437\u043e\u043d\u0443 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0435\u0440\u0432\u0435\u0440\/\u041e\u0431\u043b\u0430\u043a\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">Edge<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TensorRT<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e NVIDIA GPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ONNX Runtime<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OpenVINO<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 intel \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u043e \u043d\u0430 rysen \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u00b5TVM \u0434\u043b\u044f MCU edge-ai-vision<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ExecuTorch<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u043c\u0435\u043d\u0430 PyTorch Mobile<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TFLite\/LiteRT<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434 Android\/iOS\/RPi<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">NCNN<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">Tencent edge engine<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">MNN<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">Alibaba edge engine<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Paddle Lite<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">Baidu edge engine<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u0435\u0442\u0438), \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u043e\u0432, \u043f\u0443\u0441\u0442\u044c \u0438 \u0441 \u043c\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u044d\u0442\u043e: \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 (FP32\u2192FP16\/INT8\/INT4), kernel fusion, \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f\u043c \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043d\u0435\u0442\u0441\u044f ResNet-50 \u0432 46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445 \u043d\u0430 5 \u0434\u0432\u0438\u0436\u043a\u0430\u0445, \u0441 \u0446\u0438\u0444\u0440\u0430\u043c\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438.<\/p>\n<h3>\u0418\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">AMD Ryzen 9 6900HS (8C\/16T, Zen 3+)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>GPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">NVIDIA RTX 3070 Ti Laptop (8 GB GDDR6)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>RAM<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">32 GB DDR5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Docker, Ubuntu 22.04, CUDA 12.8<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u043e\u0434\u0435\u043b\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet-50, \u0432\u0435\u0441\u0430 ImageNet1K_V1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0414\u0430\u0442\u0430\u0441\u0435\u0442 \u0434\u043b\u044f \u044d\u0432\u0430\u043b\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">10k \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e ImageNet val) &#8212; Top-1 \/ Top-5 Accuracy<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Latency\/Throughput \u043f\u0440\u0438 bs=1 \u0438 bs=64<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Warmup<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">10 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Measurement<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">50\u2013100 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043c\u0435\u0434\u0438\u0430\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0435\u0442\u043a\u0430 batch size<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">1, 8, 16, 32, 64<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Baseline<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">torch FP32 eager mode<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b<\/h3>\n<p>\u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u043d\u0430\u043d\u043e <strong>46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/strong> \u043f\u043e \u043f\u044f\u0442\u0438 \u0434\u0432\u0438\u0436\u043a\u0430\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0432\u0438\u0436\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>PyTorch<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">19<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32\/FP16 CPU+CUDA, autocast, 6 \u00d7 torch.compile, 3 quant (dynamic\/static FX\/PT2E), PT2E+compile \u00d72, W4 GPU (eager + 2 compile)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>ONNX Runtime<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32\/FP16\/INT8 dynamic\/INT8 static \u00d7 (CPU + CUDA)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>OpenVINO<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32\/FP16\/INT8 \u2014 CPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>TensorRT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32\/FP16\/INT8 \u2014 CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>TVM<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">13<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32\/FP16\/INT8 \u00d7 (CPU + CUDA), default\/MetaSchedule\/AutoTVM<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0412\u0441\u0435\u0433\u043e<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>46<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>Torch: \u0431\u0435\u0439\u0437\u043b\u0430\u0439\u043d \u0438 \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439<\/h3>\n<p>Torch \u2014 \u0442\u043e, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442: \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0435 \u0433\u043e\u043d\u044f\u044e\u0442, \u043d\u043e, \u043a \u043c\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b PyTorch \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u0430\u043f\u044b torch<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Precision<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">eager<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">baseline<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>model.half()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0445\u043e\u0434 float16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>torch.amp.autocast<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0441\u0430 FP32, \u0433\u0434\u0435 FP16 \u2014 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 PyTorch<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">torch.compile (reduce-overhead\/max-autotune)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">Inductor<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">torch.compile (reduce-overhead\/max-autotune)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">Inductor<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">torchao weight-only<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">dynamic, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">FX static PTQ (prepare \u2192 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u2192 convert)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0441\u0430 + \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">PT2E (torch.export + x86-\u043a\u0432\u0430\u043d\u0442\u0430\u0439\u0437\u0435\u0440)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">+ compile \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT4 W4<\/p>\n<\/td>\n<td>\n<p align=\"left\">torchao, Linear \u2192 INT4, \u043c\u043e\u0434\u0435\u043b\u044c BF16<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">weight-only, eager + compile<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 (cpu baseline)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">61.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">16.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">119.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 + compile(reduce)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">77.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">13.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">56.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">17.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16 (half)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">2250.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">1230.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8 dynamic<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">150.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">120.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.09<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8 static FX<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>26.7<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>37.5<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>25.9<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>38.6<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>75.89<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8 PT2E<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">158.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">260.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.04<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">PT2E + compile(max)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">14.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">59.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">16.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.04<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 (gpu baseline)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.68<\/p>\n<\/td>\n<td>\n<p align=\"left\">149.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.55<\/p>\n<\/td>\n<td>\n<p align=\"left\">646.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16 autocast<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">105.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.94<\/p>\n<\/td>\n<td>\n<p align=\"left\">1094.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP16 + compile(reduce)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CUDA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>2.57<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>389.2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.69<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1454.1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.15<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16 + compile(max)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.69<\/p>\n<\/td>\n<td>\n<p align=\"left\">345.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.71<\/p>\n<\/td>\n<td>\n<p align=\"left\">1412.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT4 W4 eager<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.09<\/p>\n<\/td>\n<td>\n<p align=\"left\">123.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.98<\/p>\n<\/td>\n<td>\n<p align=\"left\">1019.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.08<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT4 W4 + compile(reduce)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.30<\/p>\n<\/td>\n<td>\n<p align=\"left\">303.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.78<\/p>\n<\/td>\n<td>\n<p align=\"left\">1290.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.03<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<blockquote>\n<p><strong>Lat\/img<\/strong> = \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (per-batch latency \u00f7 batch size). <strong>Thr<\/strong> = \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c (img\/s). <strong>Top-1 (%)<\/strong> = \u0434\u043e\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043a\u043b\u0430\u0441\u0441.<\/p>\n<\/blockquote>\n<p><strong>\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 Torch<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8 static FX<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>26.7 ms (\u00d72.3)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>37.5 img\/s (\u00d72.3)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>25.9 ms (\u00d74.6)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>38.6 img\/s (\u00d74.6)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>75.89<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP16 + compile(reduce)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>GPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>2.57 ms (\u00d72.6)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>389 img\/s (\u00d72.6)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.69 ms (\u00d72.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1454 img\/s (\u00d72.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.15<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>\u00d7-\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e torch FP32 eager \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f2a\/879\/119\/f2a87911920fcc15b252f70b554b4bb3.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CPU.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f2a\/879\/119\/f2a87911920fcc15b252f70b554b4bb3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f2a\/879\/119\/f2a87911920fcc15b252f70b554b4bb3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CPU.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6af\/1ad\/4bb\/6af1ad4bb7e3526556468f51be1e125d.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CUDA.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6af\/1ad\/4bb\/6af1ad4bb7e3526556468f51be1e125d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6af\/1ad\/4bb\/6af1ad4bb7e3526556468f51be1e125d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CUDA.<\/figcaption><\/div>\n<\/figure>\n<h3>ONNX Runtime<\/h3>\n<p>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 torch \u0432 onnx (opset 17), \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0447\u0435\u0440\u0435\u0437 ONNX Runtime. FP32 \u0438 FP16 \u0433\u0440\u0430\u0444\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 torch, \u0430 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u043d\u044b\u0435 INT8 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0443\u0436\u0435 \u0438\u0437 FP32-ONNX \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 <code>onnxruntime.quantization<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u0430\u043f\u044b onnxruntime<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Precision<\/p>\n<\/th>\n<th>\n<p align=\"left\">Quant<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">dynamic (weight-only)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">static (QDQ)<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">27.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">35.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">25.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">64.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">15.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">34.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">29.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Dynamic INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">37.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">25.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">75.54<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Static INT8 (QDQ)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>15.4<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>64.8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>12.0<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>83.5<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>73.78<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.27<\/p>\n<\/td>\n<td>\n<p align=\"left\">189.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.69<\/p>\n<\/td>\n<td>\n<p align=\"left\">591.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP16<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CUDA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5.65<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>177.1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1.07<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>934.1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.14<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Static INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.25<\/p>\n<\/td>\n<td>\n<p align=\"left\">108.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.27<\/p>\n<\/td>\n<td>\n<p align=\"left\">440.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">75.73<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Dynamic INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">46.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">21.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">75.54<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<p><strong>\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 ONNX Runtime (\u0432\u0441\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438 \u2014 \u043a FP32 eager):<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Static INT8 (QDQ)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>15.4 ms (\u00d74.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>64.8 img\/s (\u00d74.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>12.0 ms (\u00d710.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>83.5 img\/s (\u00d710.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>73.78<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP16<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>GPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5.65 ms (\u00d71.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>177 img\/s (\u00d71.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1.07 ms (\u00d71.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>934 img\/s (\u00d71.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.14<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9f8\/88d\/ec5\/9f888dec516b3d3b5e8f602839fde6ed.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CPU.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9f8\/88d\/ec5\/9f888dec516b3d3b5e8f602839fde6ed.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9f8\/88d\/ec5\/9f888dec516b3d3b5e8f602839fde6ed.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CPU.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/33f\/025\/252\/33f025252e9014b1007d0a33a0df2ae0.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CUDA.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/33f\/025\/252\/33f025252e9014b1007d0a33a0df2ae0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/33f\/025\/252\/33f025252e9014b1007d0a33a0df2ae0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CUDA.<\/figcaption><\/div>\n<\/figure>\n<h3>OpenVINO<\/h3>\n<p>\u0414\u0430, \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c intel, \u043d\u043e \u044f \u0442\u0430\u043a\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u0435\u0433\u043e \u043d\u0430 rysen \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u041c\u043e\u0434\u0435\u043b\u044c \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 torch \u0432 onnx (opset 17) \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 OpenVINO IR (.xml\/.bin) \u0447\u0435\u0440\u0435\u0437 <code>openvino.convert_model<\/code>. FP16 \u2014 \u0441\u0436\u0430\u0442\u0438\u0435\u043c \u0432\u0435\u0441\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 IR (<code>compress_to_fp16=True<\/code> \u0432 <code>openvino.convert_model<\/code>), INT8 \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 PTQ \u0441 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u043e\u0439 (FakeQuantize \u0432 \u0433\u0440\u0430\u0444\u0435, INT8 \u0432\u0435\u0441\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438, \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445, \u0447\u0442\u043e \u0434\u043b\u044f torch\/ORT).<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u0430\u043f\u044b openvino<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Precision<\/p>\n<\/th>\n<th>\n<p align=\"left\">Quant<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">static PTQ<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">39.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">25.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">25.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">36.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">27.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>18.1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>55.3<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>18.4<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>54.4<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>73.46<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<p><strong>\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 OpenVINO<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>18.1 ms (\u00d73.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>55.3 img\/s (\u00d73.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>18.4 ms (\u00d76.5)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>54.4 img\/s (\u00d76.5)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>73.46<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0412\u044b\u0432\u043e\u0434\u044b:<\/strong> \u041f\u0440\u0438 bs=1 INT8 \u0432\u0442\u0440\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 baseline (18.1 ms, \u00d73.4). \u041f\u0440\u0438 bs=64 \u2014 \u00d76.5 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 baseline, \u043d\u043e per-image latency \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c batch (\u0441 18.1 \u0434\u043e 18.4 ms). \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, ORT static INT8 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 per-image latency \u0441 15.4 \u0434\u043e 12.0 ms. \u041f\u0443\u0441\u0442\u044c OV \u0438 \u0441\u043b\u0430\u0431\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0442\u0447\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e ORT,\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0439.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09d\/6c9\/30c\/09d6c930caec1db6363c510dba037b0c.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 OpenVINO \u043d\u0430 CPU.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/09d\/6c9\/30c\/09d6c930caec1db6363c510dba037b0c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/09d\/6c9\/30c\/09d6c930caec1db6363c510dba037b0c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 OpenVINO \u043d\u0430 CPU.<\/figcaption><\/div>\n<\/figure>\n<h3>TVM<\/h3>\n<p>\u042f \u0431\u044b\u043b \u043d\u0430\u0441\u043b\u044b\u0448\u0430\u043d, \u0447\u0442\u043e tvm \u0442\u043e\u043d\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0436\u0435\u043b\u0435\u0437\u043e, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: torch \u0432 onnx, \u0437\u0430\u0442\u0435\u043c \u0433\u0440\u0443\u0437\u0438\u043c \u0432 Relay \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434 llvm (CPU) \u0438\u043b\u0438 cuda (GPU). \u0413\u0440\u0430\u0444 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e batch \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e bs \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0442\u044e\u043d\u0438\u043d\u0433.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u0430\u043f\u044b TVM<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Precision<\/p>\n<\/th>\n<th>\n<p align=\"left\">Schedule<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">default, MetaSchedule, AutoTVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">default, AutoTVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU, CUDA<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">93.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 MetaSchedule<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">177.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32 AutoTVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">196.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">25146.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;0.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">403.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;0.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<td>\n<p align=\"left\">638.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP32 default<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CUDA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>6.86<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>145.8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.05<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>285.2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>66.7<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">15.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">63.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.04<\/p>\n<\/td>\n<td>\n<p align=\"left\">376.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<td>\n<p align=\"left\">206.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<p><em>Accuracy \u043d\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0437 100 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 (~76% \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c ImageNet). FP16 CPU \u0438 INT8 \u2014 eval \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0438\u0437-\u0437\u0430 \u0443\u0436\u0430\u0441\u043d\u043e\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/em><\/p>\n<p><strong>\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 TVM (\u00d7 \u043e\u0442 torch FP32 eager):<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP32 default<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>93.2 ms (\u00d70.7)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>10.7 img\/s (\u00d70.7)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>3.5 ms (\u00d71.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>9.7 img\/s (\u00d71.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>66.7<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>FP32 default<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CUDA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>6.86 ms (\u00d71.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>145.8 img\/s (\u00d71.0)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.05 ms (\u00d70.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>285.2 img\/s (\u00d70.4)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>66.7<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0412\u044b\u0432\u043e\u0434\u044b:<\/strong> \u041b\u0443\u0447\u0448\u0438\u0435 \u0441\u0435\u0442\u0430\u043f\u044b \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 eagere mode torch.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d6\/fae\/5ff\/2d6fae5ff1b190eab8b4ca83f55c8f93.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CPU.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2d6\/fae\/5ff\/2d6fae5ff1b190eab8b4ca83f55c8f93.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d6\/fae\/5ff\/2d6fae5ff1b190eab8b4ca83f55c8f93.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CPU.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/adc\/bc1\/982\/adcbc19828aaefc81fb38a9bb91413b3.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CUDA.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/adc\/bc1\/982\/adcbc19828aaefc81fb38a9bb91413b3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/adc\/bc1\/982\/adcbc19828aaefc81fb38a9bb91413b3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CUDA.<\/figcaption><\/div>\n<\/figure>\n<h3>TensorRT<\/h3>\n<p>\u0412\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 onnx, onnx \u043f\u0430\u0440\u0441\u0438\u043c \u0432 TensorRT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e GPU \u2014 \u0441 kernel fusion, \u0430\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 (tactic sources extended, opt level 5) \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c optimization profile (min=1, max=64). \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 engine (.engine), \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043d\u0438 PyTorch, \u043d\u0438 ONNX Runtime. INT8 \u2014 \u0441 entropy-\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u043e\u0439 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445 \u0438 FP16-fallback \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432, \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u044e\u0449\u0438\u0445 \u0432 INT8.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u0435\u0442\u0430\u043f\u044b TensorRT<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Precision<\/p>\n<\/th>\n<th>\n<p align=\"left\">Features<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">BuilderFlag.FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">entropy calibrator + FP16 fallback<\/p>\n<\/td>\n<td>\n<p align=\"left\">CUDA<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP32<\/p>\n<\/td>\n<td>\n<p align=\"left\">4.90<\/p>\n<\/td>\n<td>\n<p align=\"left\">204.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.60<\/p>\n<\/td>\n<td>\n<p align=\"left\">625.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.48<\/p>\n<\/td>\n<td>\n<p align=\"left\">675.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.56<\/p>\n<\/td>\n<td>\n<p align=\"left\">1788.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8 + FP16 fallback<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1.16<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>863.3<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.19<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5331.0<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.10<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/details>\n<p><strong>\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 TensorRT (\u00d7 \u043e\u0442 torch FP32 eager GPU):<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Device<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=1 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Lat\/img<\/p>\n<\/th>\n<th>\n<p align=\"left\">bs=64 Thr<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>INT8 + FP16 fallback<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CUDA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1.16 ms (\u00d75.8)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>863 img\/s (\u00d75.8)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.19 ms (\u00d78.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5331 img\/s (\u00d78.2)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.10<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0412\u044b\u0432\u043e\u0434\u044b:<\/strong> INT8 \u2014 \u00d75.8 \u043f\u043e latency \u0438 throughput \u043f\u0440\u0438 bs=1, \u00d78.2 \u043f\u0440\u0438 bs=64. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0440\u0435\u043a\u043e\u0440\u0434 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/418\/5f2\/0b0\/4185f20b0dc17b49590cf1c7006f6c00.png\" alt=\"Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TensorRT \u043d\u0430 CUDA.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/418\/5f2\/0b0\/4185f20b0dc17b49590cf1c7006f6c00.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/418\/5f2\/0b0\/4185f20b0dc17b49590cf1c7006f6c00.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TensorRT \u043d\u0430 CUDA.<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u0442\u043e\u0433 \u043f\u043e CPU<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0432\u0438\u0436\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>ORT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>INT8 static QDQ<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>15.4<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>64.8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>12.0<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>83.5<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>73.78<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">OV<\/p>\n<\/td>\n<td>\n<p align=\"left\">INT8<\/p>\n<\/td>\n<td>\n<p align=\"left\">18.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">55.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">18.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">54.4<\/p>\n<\/td>\n<td>\n<p align=\"left\">73.46<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Torch<\/p>\n<\/td>\n<td>\n<p align=\"left\">INT8 static FX<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">37.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">25.9<\/p>\n<\/td>\n<td>\n<p align=\"left\">38.6<\/p>\n<\/td>\n<td>\n<p align=\"left\">75.89<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">93.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.5<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.7<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0418\u0442\u043e\u0433 \u043f\u043e GPU<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0432\u0438\u0436\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=1 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=1 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Lat\/img bs=64 (ms)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Thr bs=64 (img\/s)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Top-1 (%)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>TRT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>INT8<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>1.16<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>863.3<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>0.19<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>5331.0<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>76.10<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Torch<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP16 + compile(reduce)<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.57<\/p>\n<\/td>\n<td>\n<p align=\"left\">389.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.69<\/p>\n<\/td>\n<td>\n<p align=\"left\">1454.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ORT<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP16<\/p>\n<\/td>\n<td>\n<p align=\"left\">5.65<\/p>\n<\/td>\n<td>\n<p align=\"left\">177.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.07<\/p>\n<\/td>\n<td>\n<p align=\"left\">934.1<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.14<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">TVM<\/p>\n<\/td>\n<td>\n<p align=\"left\">FP32 default<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.86<\/p>\n<\/td>\n<td>\n<p align=\"left\">145.8<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.05<\/p>\n<\/td>\n<td>\n<p align=\"left\">285.2<\/p>\n<\/td>\n<td>\n<p align=\"left\">66.7<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451!<\/p>\n<p>\u041a\u043e\u0434, JSON-\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 Docker-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2014 <a href=\"https:\/\/github.com\/DmitriyValetov\/resnet50-inference-benchmark\" rel=\"noopener noreferrer nofollow\">github.com\/DmitriyValetov\/resnet50-inference-benchmark<\/a>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1053650\/\">https:\/\/habr.com\/ru\/articles\/1053650\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR: \u041f\u0440\u043e\u0433\u043d\u0430\u043b ResNet-50 \u0447\u0435\u0440\u0435\u0437 PyTorch, ONNX Runtime, OpenVINO, TensorRT \u0438 TVM \u0432 FP32\/FP16\/INT8\/INT4 \u043d\u0430 CPU Ryzen 9 6900HS \u0438 GPU RTX 3070 Ti Laptop \u0432 46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u041b\u0443\u0447\u0448\u0438\u0439 CPU: ONNX Runtime static INT8 \u2014 15.4 ms \/ 64.8 img\/s (\u00d74.0 \u043e\u0442 torch baseline \u043f\u0440\u0438 bs=1). \u041b\u0443\u0447\u0448\u0438\u0439 GPU: TensorRT INT8 \u2014 1.16 ms \/ 863 img\/s (\u00d75.8). torch.compile + FP16 \u0434\u0430\u0451\u0442 \u00d72.6 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u043c\u0435\u043d\u044b \u0434\u0432\u0438\u0436\u043a\u0430. \u041a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435: github.com\/DmitriyValetov\/resnet50-inference-benchmark.\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0440\u0443\u0431\u0440\u0438\u043a\u0430 \u2014 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u0433\u043e\u043d\u044f\u0442\u044c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445. \u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u0440\u044f\u0434\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u043e inference-\u0434\u0432\u0438\u0436\u043a\u0438 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u2014 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c.Inference-\u0434\u0432\u0438\u0436\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0430 \u0438 \u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0433\u043e\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0435, \u043b\u0438\u0431\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u043e \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438 \u0437\u043e\u043d\u0443 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438:\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0421\u0435\u0440\u0432\u0435\u0440\/\u041e\u0431\u043b\u0430\u043a\u043eEdge\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435TensorRT\u2705\u2705\u0422\u043e\u043b\u044c\u043a\u043e NVIDIA GPUONNX Runtime\u2705\u2705\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442OpenVINO\u2705\u2705\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 intel \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u043e \u043d\u0430 rysen \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438TVM\u2705\u2705\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u00b5TVM \u0434\u043b\u044f MCU edge-ai-visionExecuTorch\u274c\u2705\u0417\u0430\u043c\u0435\u043d\u0430 PyTorch MobileTFLite\/LiteRT\u274c\u2705\u0414\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434 Android\/iOS\/RPiNCNN\u274c\u2705Tencent edge engineMNN\u274c\u2705Alibaba edge enginePaddle Lite\u274c\u2705Baidu edge engine\u0422\u0430\u043a \u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0442\u0435\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441\u0435\u0442\u0438), \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u043e\u0432, \u043f\u0443\u0441\u0442\u044c \u0438 \u0441 \u043c\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438, \u044d\u0442\u043e: \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 (FP32\u2192FP16\/INT8\/INT4), kernel fusion, \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f\u043c \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043d\u0435\u0442\u0441\u044f ResNet-50 \u0432 46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445 \u043d\u0430 5 \u0434\u0432\u0438\u0436\u043a\u0430\u0445, \u0441 \u0446\u0438\u0444\u0440\u0430\u043c\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c\u0438.\u0418\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fCPUAMD Ryzen 9 6900HS (8C\/16T, Zen 3+)GPUNVIDIA RTX 3070 Ti Laptop (8 GB GDDR6)RAM32 GB DDR5\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435Docker, Ubuntu 22.04, CUDA 12.8\u041c\u043e\u0434\u0435\u043b\u044cResNet-50, \u0432\u0435\u0441\u0430 ImageNet1K_V1\u0414\u0430\u0442\u0430\u0441\u0435\u0442 \u0434\u043b\u044f \u044d\u0432\u0430\u043b\u043010k \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e ImageNet val) &#8212; Top-1 \/ Top-5 Accuracy\u041a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044cLatency\/Throughput \u043f\u0440\u0438 bs=1 \u0438 bs=64Warmup10 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439Measurement50\u2013100 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043c\u0435\u0434\u0438\u0430\u043d\u0430\u0421\u0435\u0442\u043a\u0430 batch size1, 8, 16, 32, 64Baselinetorch FP32 eager mode\u041c\u0435\u0442\u043e\u0434\u044b\u0412\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u043d\u0430\u043d\u043e 46 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043f\u043e \u043f\u044f\u0442\u0438 \u0434\u0432\u0438\u0436\u043a\u0430\u043c:\u0414\u0432\u0438\u0436\u043e\u043a\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439\u0427\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438PyTorch19FP32\/FP16 CPU+CUDA, autocast, 6 \u00d7 torch.compile, 3 quant (dynamic\/static FX\/PT2E), PT2E+compile \u00d72, W4 GPU (eager + 2 compile)ONNX Runtime8FP32\/FP16\/INT8 dynamic\/INT8 static \u00d7 (CPU + CUDA)OpenVINO3FP32\/FP16\/INT8 \u2014 CPUTensorRT3FP32\/FP16\/INT8 \u2014 CUDATVM13FP32\/FP16\/INT8 \u00d7 (CPU + CUDA), default\/MetaSchedule\/AutoTVM\u0412\u0441\u0435\u0433\u043e46Torch: \u0431\u0435\u0439\u0437\u043b\u0430\u0439\u043d \u0438 \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439Torch \u2014 \u0442\u043e, \u0441 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442: \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0435 \u0433\u043e\u043d\u044f\u044e\u0442, \u043d\u043e, \u043a \u043c\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b PyTorch \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430.\u0421\u0435\u0442\u0430\u043f\u044b torchPrecision\u041c\u0435\u0442\u043e\u0434\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435FP32eagerCPU, CUDAbaselineFP16model.half()CPU\u0432\u0445\u043e\u0434 float16FP16torch.amp.autocastCUDA\u0432\u0435\u0441\u0430 FP32, \u0433\u0434\u0435 FP16 \u2014 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 PyTorchFP32torch.compile (reduce-overhead\/max-autotune)CPUInductorFP16torch.compile (reduce-overhead\/max-autotune)CPU, CUDAInductorINT8torchao weight-onlyCPUdynamic, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0441\u0430INT8FX static PTQ (prepare \u2192 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u2192 convert)CPU\u0432\u0435\u0441\u0430 + \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438INT8PT2E (torch.export + x86-\u043a\u0432\u0430\u043d\u0442\u0430\u0439\u0437\u0435\u0440)CPU+ compile \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043eINT4 W4torchao, Linear \u2192 INT4, \u043c\u043e\u0434\u0435\u043b\u044c BF16CUDAweight-only, eager + compile\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDeviceLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)FP32 (cpu baseline)CPU61.616.2119.68.476.15FP32 + compile(reduce)CPU77.213.056.217.876.15FP16 (half)CPU2250.10.41230.00.876.15INT8 dynamicCPU150.76.6120.58.376.09INT8 static FXCPU26.737.525.938.675.89INT8 PT2ECPU158.16.3260.43.876.04PT2E + compile(max)CPU66.014.559.616.876.04FP32 (gpu baseline)CUDA6.68149.81.55646.476.15FP16 autocastCUDA9.4105.90.941094.076.15FP16 + compile(reduce)CUDA2.57389.20.691454.176.15FP16 + compile(max)CUDA3.69345.20.711412.876.15INT4 W4 eagerCUDA8.09123.60.981019.376.08INT4 W4 + compile(reduce)CUDA3.30303.20.781290.976.03Lat\/img = \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (per-batch latency \u00f7 batch size). Thr = \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c (img\/s). Top-1 (%) = \u0434\u043e\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0430 \u043a\u043b\u0430\u0441\u0441.\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 Torch\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDevicebs=1 Lat\/imgbs=1 Thrbs=64 Lat\/imgbs=64 ThrTop-1INT8 static FXCPU26.7 ms (\u00d72.3)37.5 img\/s (\u00d72.3)25.9 ms (\u00d74.6)38.6 img\/s (\u00d74.6)75.89FP16 + compile(reduce)GPU2.57 ms (\u00d72.6)389 img\/s (\u00d72.6)0.69 ms (\u00d72.2)1454 img\/s (\u00d72.2)76.15\u00d7-\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e torch FP32 eager \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CPU.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PyTorch \u043d\u0430 CUDA.ONNX Runtime\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 torch \u0432 onnx (opset 17), \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0447\u0435\u0440\u0435\u0437 ONNX Runtime. FP32 \u0438 FP16 \u0433\u0440\u0430\u0444\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 torch, \u0430 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u043d\u044b\u0435 INT8 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0443\u0436\u0435 \u0438\u0437 FP32-ONNX \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 onnxruntime.quantization.\u0421\u0435\u0442\u0430\u043f\u044b onnxruntimePrecisionQuant\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430FP32\u2014CPU, CUDAFP16\u2014CPU, CUDAINT8dynamic (weight-only)CPU, CUDAINT8static (QDQ)CPU, CUDA\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDeviceLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)FP32CPU27.935.925.938.676.15FP16CPU64.815.434.329.176.14Dynamic INT8CPU26.537.838.525.975.54Static INT8 (QDQ)CPU15.464.812.083.573.78FP32CUDA5.27189.81.69591.976.15FP16CUDA5.65177.11.07934.176.14Static INT8CUDA9.25108.22.27440.975.73Dynamic INT8CUDA46.721.438.026.375.54\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 ONNX Runtime (\u0432\u0441\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438 \u2014 \u043a FP32 eager):\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDevicebs=1 Lat\/imgbs=1 Thrbs=64 Lat\/imgbs=64 ThrTop-1Static INT8 (QDQ)CPU15.4 ms (\u00d74.0)64.8 img\/s (\u00d74.0)12.0 ms (\u00d710.0)83.5 img\/s (\u00d710.0)73.78FP16GPU5.65 ms (\u00d71.2)177 img\/s (\u00d71.2)1.07 ms (\u00d71.4)934 img\/s (\u00d71.4)76.14Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CPU.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ONNX Runtime \u043d\u0430 CUDA.OpenVINO\u0414\u0430, \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c intel, \u043d\u043e \u044f \u0442\u0430\u043a\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u0435\u0433\u043e \u043d\u0430 rysen \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u041c\u043e\u0434\u0435\u043b\u044c \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 torch \u0432 onnx (opset 17) \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 OpenVINO IR (.xml\/.bin) \u0447\u0435\u0440\u0435\u0437 openvino.convert_model. FP16 \u2014 \u0441\u0436\u0430\u0442\u0438\u0435\u043c \u0432\u0435\u0441\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 IR (compress_to_fp16=True \u0432 openvino.convert_model), INT8 \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 PTQ \u0441 \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u043e\u0439 (FakeQuantize \u0432 \u0433\u0440\u0430\u0444\u0435, INT8 \u0432\u0435\u0441\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438, \u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445, \u0447\u0442\u043e \u0434\u043b\u044f torch\/ORT).\u0421\u0435\u0442\u0430\u043f\u044b openvinoPrecisionQuant\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430FP32\u2014CPUFP16\u2014CPUINT8static PTQCPU\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)FP3239.925.138.925.776.15FP1638.426.136.927.176.15INT818.155.318.454.473.46\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 OpenVINO\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDevicebs=1 Lat\/imgbs=1 Thrbs=64 Lat\/imgbs=64 ThrTop-1INT8CPU18.1 ms (\u00d73.4)55.3 img\/s (\u00d73.4)18.4 ms (\u00d76.5)54.4 img\/s (\u00d76.5)73.46\u0412\u044b\u0432\u043e\u0434\u044b: \u041f\u0440\u0438 bs=1 INT8 \u0432\u0442\u0440\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 baseline (18.1 ms, \u00d73.4). \u041f\u0440\u0438 bs=64 \u2014 \u00d76.5 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 baseline, \u043d\u043e per-image latency \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u043e\u0441\u0442\u043e\u043c batch (\u0441 18.1 \u0434\u043e 18.4 ms). \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, ORT static INT8 \u0441\u043d\u0438\u0436\u0430\u0435\u0442 per-image latency \u0441 15.4 \u0434\u043e 12.0 ms. \u041f\u0443\u0441\u0442\u044c OV \u0438 \u0441\u043b\u0430\u0431\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0442\u0447\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e ORT,\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u0439.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 OpenVINO \u043d\u0430 CPU.TVM\u042f \u0431\u044b\u043b \u043d\u0430\u0441\u043b\u044b\u0448\u0430\u043d, \u0447\u0442\u043e tvm \u0442\u043e\u043d\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0436\u0435\u043b\u0435\u0437\u043e, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0436\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e: torch \u0432 onnx, \u0437\u0430\u0442\u0435\u043c \u0433\u0440\u0443\u0437\u0438\u043c \u0432 Relay \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0434 llvm (CPU) \u0438\u043b\u0438 cuda (GPU). \u0413\u0440\u0430\u0444 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e batch \u2014 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e bs \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0442\u044e\u043d\u0438\u043d\u0433.\u0421\u0435\u0442\u0430\u043f\u044b TVMPrecisionSchedule\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430FP32default, MetaSchedule, AutoTVMCPU, CUDAFP16default, AutoTVMCPU, CUDAINT8defaultCPU, CUDA\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDeviceLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)FP32 defaultCPU93.210.73.59.766.7FP32 MetaScheduleCPU177.45.63.54.466.7FP32 AutoTVMCPU196.15.13.24.966.7FP16 defaultCPU25146.2&lt;0.1403.9&lt;0.1\u2014INT8 defaultCPU638.81.69.71.6\u2014FP32 defaultCUDA6.86145.80.05285.266.7FP16 defaultCUDA15.863.40.04376.466.7INT8 defaultCUDA206.14.84.73.3\u2014Accuracy \u043d\u0430 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0438\u0437 100 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 (~76% \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c ImageNet). FP16 CPU \u0438 INT8 \u2014 eval \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0438\u0437-\u0437\u0430 \u0443\u0436\u0430\u0441\u043d\u043e\u0439 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 TVM (\u00d7 \u043e\u0442 torch FP32 eager):\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDevicebs=1 Lat\/imgbs=1 Thrbs=64 Lat\/imgbs=64 ThrTop-1FP32 defaultCPU93.2 ms (\u00d70.7)10.7 img\/s (\u00d70.7)3.5 ms (\u00d71.2)9.7 img\/s (\u00d71.2)66.7FP32 defaultCUDA6.86 ms (\u00d71.0)145.8 img\/s (\u00d71.0)0.05 ms (\u00d70.4)285.2 img\/s (\u00d70.4)66.7\u0412\u044b\u0432\u043e\u0434\u044b: \u041b\u0443\u0447\u0448\u0438\u0435 \u0441\u0435\u0442\u0430\u043f\u044b \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 eagere mode torch.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CPU.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TVM \u043d\u0430 CUDA.TensorRT\u0412\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 onnx, onnx \u043f\u0430\u0440\u0441\u0438\u043c \u0432 TensorRT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e GPU \u2014 \u0441 kernel fusion, \u0430\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 (tactic sources extended, opt level 5) \u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c optimization profile (min=1, max=64). \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 engine (.engine), \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043d\u0438 PyTorch, \u043d\u0438 ONNX Runtime. INT8 \u2014 \u0441 entropy-\u043a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u043e\u0439 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445 \u0438 FP16-fallback \u0434\u043b\u044f \u0441\u043b\u043e\u0451\u0432, \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u044e\u0449\u0438\u0445 \u0432 INT8.\u0421\u0435\u0442\u0430\u043f\u044b TensorRTPrecisionFeatures\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430FP32\u2014CUDAFP16BuilderFlag.FP16CUDAINT8entropy calibrator + FP16 fallbackCUDA\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)FP324.90204.21.60625.376.16FP161.48675.60.561788.576.14INT8 + FP16 fallback1.16863.30.195331.076.10\u041f\u043e\u0431\u0435\u0434\u0438\u0442\u0435\u043b\u044c \u0432\u043d\u0443\u0442\u0440\u0438 TensorRT (\u00d7 \u043e\u0442 torch FP32 eager GPU):\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fDevicebs=1 Lat\/imgbs=1 Thrbs=64 Lat\/imgbs=64 ThrTop-1INT8 + FP16 fallbackCUDA1.16 ms (\u00d75.8)863 img\/s (\u00d75.8)0.19 ms (\u00d78.2)5331 img\/s (\u00d78.2)76.10\u0412\u044b\u0432\u043e\u0434\u044b: INT8 \u2014 \u00d75.8 \u043f\u043e latency \u0438 throughput \u043f\u0440\u0438 bs=1, \u00d78.2 \u043f\u0440\u0438 bs=64. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0440\u0435\u043a\u043e\u0440\u0434 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432.Latency \u0438 Throughput vs batch size \u2014 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 TensorRT \u043d\u0430 CUDA.\u0418\u0442\u043e\u0433 \u043f\u043e CPU\u0414\u0432\u0438\u0436\u043e\u043a\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fLat\/img bs=1 (ms)Thr bs=1 (img\/s)Lat\/img bs=64 (ms)Thr bs=64 (img\/s)Top-1 (%)ORTINT8 static QDQ15.464.812.083.573.78OVINT818.155.318.454.473.46TorchINT8 static FX26.737.525.938.675.89TVMFP32 default93.210.73.59.766.7\u0418\u0442\u043e\u0433 \u043f\u043e GPU\u0414\u0432\u0438\u0436\u043e\u043a\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044fLat\/img bs=1 (ms)Thr bs=1&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485550","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485550"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485550\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485550"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}