# Getitune Optimizing A Model

> Optimize an exported getitune model (the Geti training library) with post-training quantization. Use when a user wants to run `OVEngine.optimize()` / `engine.optimize()` to produce an INT8 model via NNCF, understands calibration-set requirements, or needs to re-validate and run inference with a quantized model versus the original FP32/FP16 model. Covers OpenVINO NNCF post-training quantization and the accuracy/size trade-off.

- Skill: `open-edge-platform/getitune-optimizing-a-model` (Agent Skill)
- Install (CLI): `npx skillmds@latest add open-edge-platform/getitune-optimizing-a-model`
- Raw SKILL.md: https://api.skillmd.com/api/skills/open-edge-platform/getitune-optimizing-a-model/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: open-edge-platform (https://skillmd.com/u/open-edge-platform)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/open-edge-platform/getitune-optimizing-a-model

---


# Optimizing (quantizing) a model with getitune

`getitune` applies **post-training quantization (PTQ)** via
[NNCF](https://github.com/openvinotoolkit/nncf) to shrink an exported OpenVINO
model and speed up inference. Quantization runs on an **OpenVINO** model (an
exported `.xml`), producing an INT8 version.

Run everything from `library/`.

## Workflow

```python
from getitune.engine import create_engine

# Load an exported OpenVINO model, then quantize it
ov_engine = create_engine(
    model="/path/to/exported_model.xml",
    data="/path/to/dataset",
)
ov_engine.optimize()                 # INT8 post-training quantization via NNCF
int8_metrics = ov_engine.test()      # validate the quantized model
predictions = ov_engine.predict()    # run inference with the quantized model
```

1. **Start from an exported OpenVINO model** (`.xml`). If you only have a
   checkpoint, export it first with the `getitune-exporting-a-model` skill.
   - Done when: `create_engine(model="....xml", data=...)` builds an `OVEngine`.
2. **Provide a calibration dataset.** Calibration images are taken automatically
   from the training subset; 200-500 images is the recommended calibration size.
   - Done when: `optimize()` runs without a "not enough calibration data" issue.
3. **Run `optimize()`.** This replaces the engine's model in place with the INT8
   version.
   - Done when: the call completes and subsequent `test()`/`predict()` use INT8.
4. **Re-validate accuracy** with `test()` and compare against the FP32/FP16
   baseline; a small accuracy drop is expected in exchange for size/latency.
   - Done when: the INT8 metric is within your acceptable tolerance of baseline.

## Comparing against the original model

After `optimize()` the engine holds the INT8 model. To re-check the original
FP32/FP16 model, either pass the original `.xml` path directly to `.test()` /
`.predict()`, or create the engine again from the original `.xml`.

## Notes

- Quantization is OpenVINO/NNCF-based and applies to exported IR models — it is
  not a training-time step.
- **Only OpenVINO IR (`.xml`) is supported.** An ONNX model must be converted to
  OpenVINO IR first before it can be optimized.
- In the Geti application this is exposed as the `quantize` job
  (`application/backend/app/execution/quantization/`); library `optimize()` is
  the same capability without the job/queue wrapper.

## Verify

```bash
# from library/
just lint
just test-unit -- -k optimize      # when you touched optimization code
```

## Related skills

- `getitune-exporting-a-model` — produce the OpenVINO `.xml` to quantize.
- `getitune-running-inference` — run inference with the quantized model.

