AI Optimization on Intel OpenVINO: Conversion, Quantization, Deployment

A model on a device runs slower than it did on the test bench — and users notice. We migrate AI solutions to OpenVINO turnkey: we select the operating mode, remove unnecessary latency, and bring throughput to a stable level. The result is predictable response time and a clear support scheme.
Frequently Asked Questions

Why an OpenVINO model loses speed after porting

The model is trained, validation metrics hold, but after porting the model to a device, inference drops severalfold.

The reason is almost never the network itself: the bottleneck at inference is the gap between the graph that the benchmark showed and what it turns into after conversion to the OpenVINO intermediate representation and compilation for a specific accelerator.

The first thing that eats time is operators that the device does not take on. The plugin splits the graph into fragments, unsupported layers are computed by the CPU, and tensor transfers begin between the parts in both directions.

One such insertion at the beginning of the network nullifies the gain from accelerated layers: time is spent on copying, and accelerator utilization drops to tens of percent.

Second — dynamic input sizes and preprocessing. If the tensor shape changes from frame to frame, the graph is rebuilt for each new shape, the cache of compiled models does not work, and the first calls after a restart are noticeably slower.

Resize with normalization lives alongside: they remain on the CPU, and the accelerator idles while waiting for a ready tensor.

Third — memory. Extra copies of input buffers, lack of shared memory access between the application and the accelerator, one request at a time, and an unadjusted number of threads cause increased consumption and slowdowns under parallel requests.

Quantization "by eye" is a separate hit: float recalculations between layers return part of the graph to the CPU.

That is why the order here is the reverse of the usual one: first, per-layer profiling and measuring the share of each section, then performance modes, preprocessing, cache, and calibration. We analyze exactly where time is lost and how it is addressed.

Measurable effects of optimization: throughput and latency

The effect of optimization is visible only on a reproducible benchmark: the same request stream, a fixed input dataset, measurement before and after changes.

That is why we compare not "it became faster" but specific metrics — throughput of one device, response latency at the median and at the tail of the distribution, peak and steady-state memory consumption of the model.

Accelerating model inference gives a direct increase in throughput: the same device serves several times more requests per unit of time because converting the model to the OpenVINO intermediate representation removes unnecessary data shuffling, and quantization reduces the bit width of weights without noticeable quality loss. The freed-up resource goes to parallel threads instead of hitting a single core.

Latency reduction is noticeable not so much in the average value as in the tail: rare outliers disappear, because of which the response did not fit into the allotted window.

This changes the class of failures — under peak load, the system keeps pace instead of sliding into timeouts, request retries, and manual restarts.

Model memory consumption drops along with the bit width of weights, so more instances fit on the accelerator, and the service stops hitting the limit and dropping out due to lack of memory.

We check stability under load with a long run: consumption reaches a plateau and does not grow for hours, and the request queue does not diverge.

We record the result in a report with before-and-after measurements: latency graphs, throughput at a given number of threads, memory consumption over a long run. They show how much headroom remains for traffic growth without replacing hardware.

Options for working with OpenVINO: conversion and deployment modes

In OpenVINO, these paths do not replace each other: model conversion, weight quantization, deployment modes on different accelerators, and working in the original environment without conversion. Below is what we actually compare on projects, with the limitations of each option.

Option When it fits Limitations
Conversion to intermediate representation Running on CPU or integrated graphics; model is trained outside the target environment Non-standard layers are described manually, some operations are transferred inaccurately
Post-training weight quantization Smaller artifact size and lower latency are needed; loss of tenths of a percent is acceptable Degradation on rare classes; a control set is needed for acceptance
Quantization with fine-tuning Accuracy is critical and does not hold after simple compression Longer: access to the training set and a fine-tuning run are needed
Layout across multiple accelerators Load profile is heterogeneous: some layers are more efficient on another device Tuned for a specific platform; porting to other hardware requires validation
Without conversion, in the original environment Timelines do not allow migration; the model is debugged where it was trained The gain from optimization for the target hardware is lost

We select candidates by measurements: we take a load profile on a representative sample, run two or three options head-to-head, and record latency, artifact size, and the quality metric in documentation — so that the decision can be rechecked when hardware changes.

How we implement optimization: stages of engineering work

We structure the order of work so that each step gives a measurable result and a rollback point. We start with an audit of the model and its launch scheme in the product — without this, optimization turns into guesswork, and quality has to be rechecked already in production.

Order of stages

  1. Audit of the model and launch scheme. We analyze the graph, find operators that do not fit the target hardware, and look at how the model is currently called. The output is a list of bottlenecks and a work plan.
  2. Conversion and verification. We convert the model to the OpenVINO format and compare outputs with the original version on a control sample. We analyze discrepancies above tolerance immediately, not after launch.
  3. Execution tuning. We select computation precision, number of threads, and inference mode for specific hardware — server CPU, integrated or discrete graphics. We remove unnecessary data copies between stages.
  4. Quantization with quality control. We convert weights to integer precision and monitor degradation on classes where the model was already making mistakes. Acceleration makes no sense if the false positive rate grows.
  5. Testing on real data. We run a sample from production traffic: compare quality, response time, and resource consumption before and after. We look separately at peak load, not average values.
  6. Solution handover. We provide configurations, build scripts, and instructions for re-conversion, and train the team. After that, updating model versions happens without us.

At each step, a trace remains: it is visible what accelerated and by how much, and where to roll back if the new model version behaves differently.

What remains with you: configurations, schemes, and regulations

The tangible result is not "we configured it and left" but a kit that your engineers can use to raise and modify the system without us. Below is exactly what is handed over based on the results of the work.

  • Environment configuration files: runtime dependencies, variables, execution thread parameters, and profiles for different classes of nodes — indicating what changes when moving to another server.
  • Launch and integration schemes: data flow from source to inference, entry points, queues, timeouts, and places where bottlenecks most often occur.
  • Scripts for converting and quantizing the model to OpenVINO format with a fixed calibration set — a repeat run produces the same artifact.
  • Model update regulations: acceptance of a new version, run on a slice of real traffic, rollback conditions to the previous build, and criteria under which rollback is triggered automatically.
  • Rebuild instructions: from source weights to the finished artifact, with verification that outputs match on a control set.
  • Regression set: a saved data slice and threshold metric values used to compare versions.
  • Access policies: roles, separation of rights for exporting weights and changing configuration, where artifacts are stored, and who reads them.
  • Log of assumptions and known limitations — so that the next step does not start with re-investigating the same thing.

Each item is checked at acceptance: we launch the system according to the handed-over instructions in a clean environment, and if something is not reproducible, we update the documentation rather than explaining in words.

Case study: how we removed latency on devices after optimization

What it was like before optimization

A team came to us with a working pilot on a fleet of devices without dedicated accelerators: the recognition model produced a correct result, but response time grew linearly with the number of concurrent threads.

On one device, the response was within the norm; on eight, the request queue accumulated faster than the system could process it, and under peak load some frames were simply lost.

The recognition error rate stayed around 6%, and during a spike reached 12% — operators double-checked the output manually, and the point of automation dissolved.

What we changed

First, we moved model inference to Intel OpenVINO: the graph was converted to an intermediate representation and compiled for a specific hardware configuration, instead of parsing the original format every time.

Then we went through weight quantization — quality was checked on a held-out sample, not "by eye", by selecting the threshold so that the accuracy drop remained within acceptable limits.

We also rewrote preprocessing: removed extra frame copies, moved normalization into a common step, and switched from per-item to batch processing. This provided a performance margin before we touched the model itself.

What the result was

Response latency decreased fourfold, and the flow of processed frames grew threefold on the same fleet of devices — no additional accelerators had to be purchased. The recognition error rate fell from 6% to 2%, and at peak — from 12% to 4%.

With a threefold load spike, the queue no longer grows: the system keeps response within the norm, and the operator only gets involved in borderline cases.

What to do if conversion breaks model accuracy?

The discrepancy almost never occurs "across the whole model" — it is localized in a few layers. The first step is to run the same input through the original and converted model, capture intermediate layer outputs, and compare.

This shows where the error accumulates: at the input, after operation fusion, or already in the last layers.

Most often, accuracy drops during activation quantization — the calibration set was collected on the wrong data distribution. Model quality checks start with it: the set must replicate real inputs, including rare classes and extreme values.

If it was collected "by eye", activation ranges are clipped, and the model loses confidence on borderline examples.

Next are sensitive layers: they are left at full precision, and only the rest of the graph is quantized. This allows re-conversion without retraining — the weights are not touched; the set of build settings and the exclusion list change.

We fix the acceptable deviation before starting work: for example, the metric on the validation set is no worse than the original by an agreed share.

Then acceptance does not turn into an argument, and each rebuild is accompanied by a regression run and a per-layer discrepancy report.

Intel OpenVINO has built-in tools for comparing outputs and per-layer statistics — we integrate them into the build pipeline so that accuracy loss is caught at the conversion stage, not in the production environment.

Technical questions asked before project start

Before the start, the customer's engineering team checks not general words but specifics: what exactly changes in their environment, which nodes are affected, and how to roll back if something goes wrong. Below are the questions that come up most often, with substantive answers.

The model is already trained — will it have to be retrained?

No. We work with ready weights: we convert the graph to the OpenVINO intermediate representation, select input sizes, and calibrate. Training and labeling remain on your side; access to the dataset is not needed — a representative sample for quality control is sufficient.

Does quantization break accuracy?

8-bit quantization almost always changes metrics — the question is by how much. We measure quality on the validation set before and after, maintain an agreed degradation threshold, and leave sensitive layers at 16 bits.

If the threshold is not met, we switch to mixed mode rather than "squeezing" acceleration at the expense of the result.

Will it work on the already installed fleet?

The graph is compiled for specific generations of CPUs and integrated graphics; on older nodes, there is a correct fallback to the CPU, and the application does not crash.

Before rollout, we run the same set of inputs on each device type and compare outputs — discrepancies are visible before commissioning.

How to update models on devices and how to measure the result?

We export a versioned artifact and keep the previous build nearby: updating and rolling back to the previous version take minutes and do not require reinstalling the environment.

We measure per-request latency and throughput before and after — the decision is visible in numbers, not words.

Let's discuss your task: what is needed from you and from us

For the estimate of an OpenVINO optimization project to rely on measurements rather than assumptions, a minimal set of data about the model and its operating environment is needed. Below is what we ask from you and what we will return in response.

What is needed to start

  • Model in its original form: weights and architecture description from the training framework — the scope of intermediate conversion depends on this.
  • Target hardware: accelerator class and operating system where inference will run.
  • Quality metric and acceptable degradation after weight compression.
  • Operating mode: response time, number of concurrent threads, memory constraints.
  • Reference set of several hundred real examples for comparing outputs before and after.
  • Environment constraints: access, security policy, whether weights can be exported outside the infrastructure.

What we will return

  • Stage-by-stage plan: conversion to intermediate representation, selection of quantization precision, verification, build, and deployment.
  • Verification protocol with discrepancy for each model output and the calibration set for it.
  • Estimate of timelines and scope of work with acceptance criteria at each stage.
  • List of risks: operations that the target plugin will not support and will have to remain on the CPU.

Describe the task and send the model with the reference set — we will return with an estimate and work plan. If some data is unavailable, we will record it as a risk and take it into account in the calculations.

AI Development Areas

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1393
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1368
  • B2B Advance company logo design
    B2B Advance company logo design
    815
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1139
  • AIDER company logo development
    AIDER company logo development
    1057
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1152