Розробка ML-моделі для мікроконтролера — не задача «стиснути готову мережу», а архітектурне проектування з нуля під жорсткі ліміти. Типовий замовник: «Ми взяли ResNet-50, квантизували — все одно 5 MB та 500 ms на кадр». Після перепроектування під MCU та сама точність вкладається в 300 KB та 50 ms. Показую, як ми це робимо. Наш досвід — понад 50 проектів з TinyML для промисловості, носиммої електроніки та IoT. Вибравши правильну архітектуру нейронної мережі та методи оптимізації моделі, ви знижуєте витрати на обладнання на 20–40%, а окупність інвестицій складає 6–12 місяців. Важливо розуміти: навіть простий датчик вібрації з бортовою нейромережею може замінити коробковий аналізатор за $2000 — різниця в ціні комплектуючих складає 5–10×. Вартість розробки TinyML-моделі починається від $10,000, а економія на обладнанні в порівнянні з традиційними рішеннями сягає 40%.
Бюджет по пам'яті
Model Footprint Budget: RAM (inference time) = activations buffer, Flash = model weights. Типові бюджети для популярних платформ:
| Платформа |
Flash, KB |
RAM, KB |
Приклади моделей |
| STM32H7 |
2048 |
1024 |
MCUNet, DS-CNN 50KB |
| ESP32-S3 |
384 |
512 |
MobileNetV3-Small (INT8) |
| nRF5340 |
1024 |
512 |
EfficientNet-Lite0 (INT4) |
| Cortex-M0+ |
128 |
32 |
1D CNN для акселерометра |
Архітектура моделі
- MobileNetV3-Small — 2.5 MB FP32, квантизація до 600 KB — універсальний вибір для Vision.
- MCUNet (спеціально для MCU) — 1 MB Flash при 70% точності ImageNet (>90% на простих датасетах).
- EfficientNet-Lite0 — для задач, де важлива швидкість на CPU без DSP.
- DS-CNN — depthwise separable CNN, класика для audio з 50–200 KB.
- 1D CNN — для часових рядів (вібрація, ЕКГ) — 50–200 KB.
Neural Architecture Search (NAS) для MCU: Once-for-All, ProxylessNAS — автоматичний пошук топології під задані ліміти Flash/RAM. Дає виграш 15–30% по точності при тому ж розмірі. MCUNet на 30% точніше ResNet при тому ж об'ємі моделі — це практичний результат. QAT дає точність на 2-4% вищу, ніж Post-Training Quantization (PTQ), що робить його кращим вибором для production.
Як вибрати архітектуру для MCU?
Критерій — latency та footprint під конкретний сценарій. Для real-time audio (10 ms вікно) — DS-CNN + INT8 дає <5 ms на STM32L4. Для періодичної класифікації жестів — снапшот + MLP вкладається в 20 KB Flash. Ми на старті будуємо прототип з Edge Impulse, підбираємо оператори (DepthwiseConv2D vs SeparableConv) та вирішуємо, чи потрібна квантизація INT4 для економії батареї.
Навчання та оптимізація моделі
QAT: Навчання з симуляцією INT8/INT4 квантизації — на 2–4% точніше Post-Training Quantization. В production використовуємо QAT для всіх моделей з TensorFlow або PyTorch (бібліотека torch.quantization). QAT дозволяє зберегти точність у межах 1% від FP32.
Knowledge Distillation: Вчимо маленьку student-модель на soft labels від великої teacher-мережі (наприклад, DistilBERT для NLP). Student досягає 90–95% якості teacher при 5–10% розмірі.
Pruning: Structured pruning (цілі фільтри) — deployment-friendly. Видаляємо канали по magnitude та fine-tune — стискаємо модель ще на 30–50% без падіння точності.
Порівняння методів оптимізації:
| Метод |
Стиснення |
Втрата точності |
Складність впровадження |
| PTQ (INT8) |
4× |
1–3% |
Низька |
| QAT (INT8) |
4× |
0.5–1% |
Середня |
| QAT (INT4) |
8× |
2–5% |
Висока |
| Квантизація + pruning |
10–20× |
3–8% |
Висока |
Чому квантизація критична?
Без неї модель FP32 не поміщається в Flash. TinyML — це про жорсткі ліміти, й INT8 збільшує швидкість на 70% на ARM Cortex-M55. Для батарейних пристроїв INT4 скорочує енергоспоживання в 2 рази — різниця між тижнем та місяцем роботи. Зв'яжіться з нами — ми допоможемо підібрати оптимальний метод квантизації під вашу задачу. Ми гарантуємо точність моделі в межах 1% від FP32 та надаємо сертифікат відповідності вимогам замовника.
Процес роботи
- Аналітика — аудит задачі, вибір сенсорів, заміри бюджету.
- Прототип в Edge Impulse — збір даних, підбір архітектури, оцінка точності.
- Оптимізація — QAT, pruning, квантизація до цільового розміру.
- Розгортання на MCU — генерація коду під TFLite Micro, STM32Cube.AI або кастомний рантайм.
- Інтеграція — вбудовування в прошивку, тестування на залізі.
Отримайте консультацію інженера на етапі аналітики — ми безкоштовно оцінимо реалізовність вашого сценарію.
Що входить в роботу
- Модель: навчена, квантизована, з
model_card (метрики, обмеження).
- Код інференсу: на C/C++ з підтримкою потрібного MCU.
- Документація: опис архітектури, пайплайну даних, точності на тестах.
- Підтримка: 2 тижні після деплою, допомога в інтеграції.
Терміни та вартість
Типовий проект займає від 8 до 16 тижнів залежно від складності задачі. Вартість розраховується індивідуально — пишіть, оцінимо проект безкоштовно. Наш досвід каже, що правильно спроектована TinyML-модель окупається зниженням витрат на обладнання на 20–40% за рахунок меншого Flash та енергоспоживання. Досвід нашої команди — гарантія якості та дотримання строків.
Типові помилки при впровадженні TinyML
- Використання готової архітектури без урахування бюджету пам'яті. Результат — модель не поміщається на цільовий MCU.
- Пропуск етапу QAT: PTQ дає втрату точності, якої можна було уникнути.
- Ігнорування обмежень RAM: активації можуть перевищити доступну пам'ять. Перевіряйте розмір буфера до деплою.
- Відсутність тестів на реальному залізі: емулятор не покаже реальну затримку та енергоспоживання.
Edge AI та оптимізація: деплой моделей без хмари
Уявіть: ваша модель розпізнавання облич видає 4 секунди latency на Jetson Orin, батарея сідає за годину, модель вилітає по OOM. Ми — команда інженерів з Edge AI — оптимізували понад 150 моделей для граничних пристроїв. Без профілювання та правильного вибору квантизації або дистиляції проект приречений. Розрив між дослідницьким кодом та edge-деплоєм — окрема інженерна дисципліна, і ми допомагаємо її освоїти за 2–16 тижнів під ключ. Справа не в експорті, а в системній роботі із залізом: GPU utilization, latency p99, memory bandwidth.
Чому просто «експортувати модель» не працює?
PyTorch-модель з float32 та batch_size=32 не готова до edge. Типові проблеми:
- ResNet-50 в fp32 займає 98 MB, inference на Cortex-A78 — 380 мс. Після INT8-квантизації
torch.ao.quantization — 24 MB, 95 мс. Експорт в ONNX + TensorRT на Jetson — 28 мс.
- YOLOv8m на Raspberry Pi 5 в fp32 — 2.8 fps. TFLite INT8 — 9.4 fps. З XNNPACK делегатом — 14 fps.
- Transformer-енкодер на мобільному CPU: MobileBERT в fp16 через CoreML на iPhone 15 — 18 мс/інференс.
distilbert-base-uncased в ONNX — 42 мс.
Проблема не у виборі «квантизувати чи ні» — правильний шлях визначається пристроєм, завданням та допустимою деградацією метрики. Пропонуємо оцінку вашого проекту: за 24 години скажемо, наскільки реально прискорити модель.
Який метод квантизації вибрати для вашого завдання?
PTQ (Post-Training Quantization) — швидкий шлях. Берете навчену модель, проганяєте calibration dataset (200–1000 прикладів), отримуєте INT8 або INT4 ваги. Інструменти: torch.ao.quantization, ONNX Runtime quantization tool, bitsandbytes. Деградація точності: 0.5–2% на класифікації. Червона зона — детекція дрібних об'єктів та сегментація, де PTQ дає -4–8% mAP.
QAT (Quantization-Aware Training) — навчання з симульованими квантизаційними шумами. Дорожче (перенавчання), але деградація 0.1–0.5%. Виправдано, коли PTQ неприйнятний. В PyTorch — torch.ao.quantization.prepare_qat().
GPTQ / AWQ — для LLM. AWQ краще зберігає якість при 4-bit квантизації. llm-compressor від Neural Magic або autoawq — основні бібліотеки.
Зв'яжіться з нами для безкоштовного профілювання вашої моделі — ми оцінимо latency та запропонуємо план оптимізації.
| Метод |
Час реалізації |
Деградація точності |
Інструменти |
| PTQ |
1–2 дні |
0.5–2% (до 8% на детекції) |
torch.ao, ONNX RT, bitsandbytes |
| QAT |
1–3 тижні |
0.1–0.5% |
torch.ao.prepare_qat, TF Quantization |
| GPTQ/AWQ |
3–7 днів |
1–3% (LLM) |
autoawq, llm-compressor |
Прунінг та дистиляція: коли квантизації недостатньо
Структурний прунінг видаляє канали або шари. Наприклад, видалення 40% каналів ResNet-50 з наступним fine-tuning дає -35% розміру, -28% latency при втраті top-1 accuracy лише на 1.2%. Інструменти: torch.nn.utils.prune, для transformer — прунінг attention heads (movement pruning, LTP). Глибша техніка — N:M sparsity, коли з кожних M ваг залишаються N ненульових (NVIDIA Ampere підтримує 2:4).
Knowledge distillation — навчаємо маленьку student імітувати велику teacher через KLDivLoss на soft labels. Feature distillation на проміжних шарах (hint-based) дає краще збереження якості. Hugging Face DistilBERT: 66M vs 110M параметрів, -40% latency, -3% на GLUE. Температура дистиляції — ключовий гіперпараметр (типово 4–8).
Комбінований підхід: дистиляція → прунінг → QAT. Дає максимальний ефект на обмеженому залізі. У кількох клієнтів ми фіксували економію на облачних обчисленнях до 70%.
Цільові платформи та інструменти
| Платформа |
Переважний формат |
Інструмент |
Специфіка |
| NVIDIA Jetson |
TensorRT engine |
trtexec, torch2trt |
INT8 calibration, DLA offload |
| Apple Silicon / iOS |
CoreML (.mlmodel) |
coremltools |
ANE (Neural Engine) автоматично |
| Android |
TFLite (.tflite) |
tf.lite.TFLiteConverter |
GPU delegate, NNAPI |
| x86 CPU |
ONNX + ORT |
onnxruntime |
AVX-512, VNNI |
| Arm Cortex |
TFLite / ONNX |
ort-arm, tflite |
XNNPACK, NEON |
| Qualcomm NPU |
QNN (.dlc) |
Qualcomm AI Hub |
Hexagon DSP |
TensorRT — головний інструмент для NVIDIA edge. TRT будує граф з fusion операторів, вибирає оптимальні ядра. На Jetson AGX Orin YOLOv8m в TRT INT8 дає 78 fps проти 22 fps в fp16 PyTorch — прискорення в 3.5 рази.
Практичний кейс з нашої практики: детекція дефектів на виробничій лінії
Наш клієнт — виробниче підприємство. Завдання: виявлення подряпин на металі в реальному часі, 30 fps, камера до Jetson Xavier NX (16GB). Вихідна модель YOLOv8l mAP50 0.91, inference на сервері 28 мс, на Jetson в fp16 — 110 мс (9 fps). Не підходить.
Кроки оптимізації:
- Перехід на YOLOv8m — mAP50 0.887 (-2.3%), 68 мс
- Експорт в TensorRT FP16 через
yolo export format=engine half=True — 31 мс (32 fps)
- INT8 calibration на 500 кадрах — 22 мс (45 fps), mAP50 0.879
Підсумок: деградація 3.5% при 5× прискоренні. Клієнт отримав engine та документацію. Гарантуємо, що метрика не впаде нижче обумовленого порогу — прописано в договорі.
Приклад профілювання latency по шарах YOLOv8m на Jetson Xavier NX (fp16):
- Convolution (layer 1–5): 12 ms
- Bottleneck (layer 6–10): 8 ms
- Head (detection): 11 ms
Вузьке місце — останні шари head'а. Після квантування head'а окремо latency head знизилась до 4 ms.
Що входить в роботу
- Звіт по профілюванню моделі на цільовому пристрої (latency по шарах, вузькі місця)
- Вибір та обґрунтування методів оптимізації (quantization / pruning / distillation)
- Оптимізована модель (TensorRT engine / TFLite / CoreML / ONNX)
- Конфіги для відтворення (скрипти, Docker-образ, інструкція)
- Тестування на реальному пристрої (не менше 10 000 інференсів)
- Навчання вашої команди (2 години онлайн)
- Підтримка 1 місяць після передачі
Як замовити оптимізацію моделі?
- Залиште заявку на сайті або зв'яжіться з нами будь-яким зручним способом.
- Ми проводимо безкоштовне профілювання вашої моделі на цільовому пристрої протягом 24 годин.
- Готуємо план оптимізації з оцінкою trade-off (швидкість vs якість).
- Ви затверджуєте план — ми приступаємо до роботи.
- Після завершення передаємо оптимізовану модель, конфіги та документацію.
- Проводимо навчання вашої команди та надаємо місячну підтримку.
Терміни: оптимізація готової моделі — 2–4 тижні. Розробка з нуля під edge — 6–16 тижнів. Вартість розраховується індивідуально залежно від складності моделі та цільової платформи.
Отримайте консультацію — ми безкоштовно оцінимо вашу модель та запропонуємо план за 24 години. Замовте безкоштовне профілювання прямо зараз.