Перейти до основного вмісту

Neat Library Примітки до випуску

Примітки до випуску для SiMa.ai Neat Library.

0.6.1 (ще не випущено)​

Несумісні зміни​

  • C++ ABI Neat Library тепер має версію 7 (libsima_neat.so.7). До ResizeSpec, PreprocessOptions, PreprocOptions і NormalizationOptions додано поля. Перебудуйте C++ застосунки, плагіни та прив’язки Python з відповідними заголовками й пакетами виконання; не використовуйте повторно двійкові файли ABI 6 і не створюйте символічні посилання сумісності.

Попередня обробка​

  • Попередня обробка Model і окремий Resize спільно використовують ResizeInterpolation. У новому коді використовуйте preprocess.resize.interpolation = ResizeInterpolation.BilinearAntialiased замість рядка інтерполяції. Наявні рядки scaling_type залишаються сумісними; суперечливі нетипові рядки відхиляються.

  • Наявні параметри попередньої обробки тепер підтримують білінійну зміну розміру зі згладжуванням, явний вихідний коефіцієнт масштабування, позицію перетворення кольору та політику перетворення чисел із рухомою комою. У фіксованому шляху вихідної арифметики поля середнього й стандартного відхилення зберігають початкові середнє та дільник, а не згорнуте афінне перетворення. BF16 типово зберігає попереднє відсікання; округлення до найближчого парного вмикається явно. FP16 використовує округлення до найближчого парного. Для точної квантизації INT8 потрібен початковий крок, узгоджений із множником моделі; множник не дає змоги відновити цей крок. Без нових параметрів зберігається наявний шлях. Див. Preproc.

0.6.0​

Зміни, що порушують сумісність​

  • У тензорному режимі Model::input_specs() тепер зберігає ранг із MPK, включно з одиничною пакетною віссю ([1,H,W,C]). Входи HWC для пакета розміру 1 залишаються допустимими, зокрема після build() без початкового входу. compiled_batch_size() читає оголошений розмір пакета MLA, а не виводить його з вимірів тензора.

  • Виходи моделей тепер показують кінцеву логічну форму та розміщення, задані в MPK, замість проміжної форми пристрою. Наприклад, вихід batch-flatten ResNet-50 має форму [1, 1000] і невідоме логічне розміщення, а не чотиривимірну форму HWC. Формат його тензора Float32 може бути EVXX_FLOAT32 замість FP32. Інтерпретуйте значення за dtype та формою тензора; не виводьте логічні осі з позначки формату бекенду.

  • C++ ABI Neat Library тепер має версію 6, а SONAME динамічної бібліотеки — libsima_neat.so.6. Тензори тепер містять семантичні метадані екстрактора ознак, публічні типи запитів/результатів GenAI містять метадані завдання ASR, мови та проби, GraphLinkOptions містить обмеження приймання в реальному часі, а BenchmarkOptions і BenchmarkReport отримали нові поля. Перезберіть застосунки C++ і плагіни та встановіть відповідні пакети середовища виконання й розробки Core. До SimaArgMaxOptions додано axis і keepdims, а розміщення класу SimaArgMax також змінено.

  • Тепер для створення графа в реальному часі використовуються GraphLinkOptions, Graph::connect() та Graph::build(). API для попереднього перегляду RealtimeGraphLinkOptions, connect_realtime(), build_fused_realtime_sources() / build_fused_realtime_source() та RealtimeEveryFrameByStream було видалено. Збережені графи, що містять realtime_every_frame_by_stream, необхідно відтворити з використанням підтримуваної політики; див. З’єднайте фрагменти в реальному часі..

  • Версія пакета — 0.6.0. Model::Options і BoxDecodeOptions тепер містять yolox_seg_pose.pose_classes; ці доповнення публічного представлення потребують компонентів з ABI 6. Не використовуйте символічні посилання для сумісності ABI. GraphOptions тепер містить kernel_runner_a65_workers. Під час оновлення до 0.6.0 перебудуйте застосунки, плагіни та розширення Python з відповідними пакетами середовища виконання й розробки. Не змішуйте двійкові файли попередніх збірок із пакетами випуску лише тому, що обидва використовують ABI 6.

Зміни під час роботи (в середовищі виконання)​

  • Model::benchmark() читає телеметрію плати з Sentinel, а не опитує шини живлення самостійно. Проходи вимірювання затримки й пропускної здатності тепер кожен тривають, доки не виміряють num_samples вхідних даних і не мине щонайменше BenchmarkOptions::min_duration_ms (типово 10 с), тож показники потужності й температури охоплюють кілька зразків Sentinel. Щоб повернути попереднє вимірювання за кількістю вхідних даних, встановіть min_duration_ms на 0. BenchmarkReport отримав latency_p50_ms, latency_p95_ms, latency_p99_ms, peak_power_watts, throughput_samples, throughput_duration_ms і telemetry з потужністю шин живлення, температурами кристала й плати, загальним і поядерним завантаженням CPU та пам’яттю MLA та EV74 і пам’яттю Linux усієї плати. avg_power_watts і energy_joules зберігають свій зміст; energy_joules — це енергія для num_samples вхідних даних. Коли Sentinel недоступний, затримка та FPS усе одно повідомляються, а telemetry.status називає причину. Інсталятор DevKit встановлює Sentinel за допомогою sima-cli neat install sentinel або оновлює його, якщо запущена версія не є останньою виробничою збіркою. Див. Вимірювання виконання моделі.

  • Телеметрія живлення Run, яку вмикає enable_board_power(), теж читається з Sentinel. Core більше не відкриває монітори живлення I2C, тож його зчитування більше не заважають зчитуванню тих самих ліній живлення в Sentinel, а інсталятор більше не додає sima до групи i2c. Sentinel збирає дані кожні 2 с, тому вікно вимірювання, коротше приблизно за 2 с, може не містити жодного зразка живлення. Лінії живлення називаються за метриками Sentinel, наприклад mla, і повідомляють лише потужність. sample_interval_ms, PowerMonitorProfile, вбудовані таблиці ліній живлення, поля I2C у PowerRailConfig, enable_modalix_som_power(), enable_modalix_dvt_power() і modalix_som_power_monitor_options() / modalix_dvt_power_monitor_options() застаріли й ігноруються.

  • TelemetryMonitor записує потужність плати, температури, завантаження CPU та пам’ять із Sentinel між start() і stop(), у C++ і Python. read() повертає зведення на поточний момент, а Telemetry виводиться як YAML і зберігається як YAML або JSON. Model::benchmark() використовує його для BenchmarkReport::telemetry. PowerMonitor, read_power_snapshot(), RunOptions::enable_board_power(), RunOptions::power_monitor і MeasureOptions::include_power застаріли на користь TelemetryMonitor, але й надалі працюють. Див. Записуйте телеметрію плати.

  • BenchmarkOptions::inputs запускає Model::benchmark() на ваших власних тензорах замість синтетичних, а BenchmarkReport::input записує, які вхідні дані використано. Див. Вимірювання з власними вхідними даними.

  • Затримка плагінів застаріла й буде вилучена. Це стосується MeasureOptions::include_plugin_latency і plugin_latency_source, BenchmarkOptions::include_plugin_latency, start_measurement(bool) та Model::benchmark(int, bool) / Model::benchmark(bool). Натомість використовуйте start_measurement() і benchmark(num_samples).

  • Апаратне декодування використовує прямі сеанси кодека та DMA-BUF вихід. Core більше не використовує оренди допуску демона декодера або SIMA_DECODER_ADMISSION_REQUIRE. Параметри пулу та налаштування декодера залишаються доступними.

  • Підтримка апаратного декодування H.265/HEVC реалізована за допомогою SimaDecode і RtspDecodedInput реалізовано мовами C++ і Python. RtspEncodedInput надає розпарсені блоки доступу H.265 без їх декодування. Вхідні дані H.265 повинні використовувати профіль HEVC Main, 8 біт, 4:2:0. Селектори кодеків приймають як H265, так і HEVC; селектори H.264 також приймають AVC. FormatTag / pyneat.Format приймають однакові псевдоніми на межах кодованого графа і все ще серіалізуються як H264 і H265.

  • VideoSender передає кодоване відео у форматах H.264 або H.265 як RTP через UDP без повторне кодування за допомогою VideoSenderOptions::Passthrough(codec) / pyneat.VideoSenderOptions.passthrough(codec). H.265 за замовчуванням використовує тип корисного навантаження RTP 98; H.264 зберігає значення 96. H264RtpUdpFromEncoded() застарілий і замінений на Passthrough(RtspCodec::H264).

  • Необроблений вхід VideoSender тепер автоматично пропускає перетворення формату для сумісного NV12 у DMA-пам’яті, коли встановлений енкодер оголошує input-layout-aware=true. Наявна межа входу енкодера готує інші необроблені входи у кінцевому сховищі енкодера. API H264RtpUdpFromRaw(...) для C++ і Python не змінено.

  • InputMemoryPolicy::Auto розрізняє бажане виділення пам’яті та обов’язкове сховище входу. Маршрути, що надають перевагу пристрою, утримують сховище Tensor і Sample, яке належить викликачеві, замість перетворення через зображення CPU. Сумісні DMA-BUF входи залишаються без копіювання; наявні CPU входи все ще можуть потребувати матеріалізації на вході пристрою. Явні вимоги EV74/DMS0 до входу залишаються обов’язковими.

  • Вхідні дані RTSP визначають тип корисного навантаження RTP, використовуючи єдиний кодек, який не залежить від конкретного кодека. Поле payload_type у RtspEncodedInputOptions та RtspDecodedInputOptions: -1 обирає кодек за замовчуванням (96 для H.264/H.265, 26 для MJPEG), 0 вимикає фільтрацію корисного навантаження, а додатне значення обирає конкретне корисне навантаження. RtspEncodedInputOptions::h264_payload_type та mjpeg_payload_type застаріли, і під час виконання програми буде виведено попередження один раз, коли вони змінюють визначене корисне навантаження.

  • Звичайний build() тепер автоматично вибирає об’єднане зниження для відповідних потоків, що підтримують багатоканальний вхід. Безпосередньо закодована гілка H.264 або H.265 VideoSender об’єднується перед декодуванням без копіювання декодованого кадру в ЦП. Джерело, декодер і відправник повинні використовувати один і той самий кодек; у разі невідповідності пара залишається в окремих сегментах конвеєра. Встановіть для цього з’єднання значення RealtimeLatestByStream для забезпечення перегляду в реальному часі, щоб повільний приймач відео замінював застарілі блоки доступу замість того, щоб створювати додаткове навантаження на гілку декодера.

  • Додано документацію та навчальні матеріали для C++ і Python щодо CameraInput, які охоплюють графи, що належать вихідному коду MIPI/libcamera, зокрема адаптивну передачу пам’яті SiMaAI перед маршрутизацією моделей CVU/MLA.

  • MetadataSender тепер обмежує розмір UDP-пакетів до 1200 байтів, розбиваючи більші пакети на частини. Повідомлення у форматі JSON. Оновіть Insight до версії, яка передбачає повторне складання фрагментів метаданих перед або одночасно з цією версією Neat Library; старіші версії Insight продовжують підтримувати незмінені корисні дані JSON обсягом до 1200 байтів.

Побудова та перевірка графа.​

  • Нові вузли SimaVoxelize, SimaPillarScatter, SimaBEVPoolPlan і SimaBEVPool виконують операції бібліотеки ядер для LiDAR і перетворення камер у BEV з PointPillars і BEVFusion на A65 або EV74 з тензорами INT8 або BF16. Кожен вузол виконується на вибраній вами цілі без переходу на іншу ціль. Див. Вузли ядер LiDAR і BEV.
  • Типовий публічний Input, безпосередньо підключений до єдиного входу зображення моделі, тепер успадковує його оголошений формат зображення. Явні параметри входу зберігають пріоритет; неоднозначні з’єднання потребують явних параметрів. Це змінює інтерпретацію зразка без додаткового копіювання даних.
  • Тепер при побудові графа один об’єкт Node розглядається як одна логічна вершина. Повторне вставлення та спроби імпортувати фрагменти, що перекриваються, завершуються невдало, але повторні виклики connect() використовують наявний вузол для розгалуження.
  • Тепер кожен створений сегмент конвеєра під час build() перевіряє остаточні назви GStreamer; явний виклик validate() не потрібен. У разі дублювання або відсутності імен виникає помилка, і замість створення укороченого конвеєра з’являється повідомлення misconfig.pipeline_shape.
  • Тепер спеціальні фрагменти відображають усі явні імена та одночасно трансформують іменовані посилання на блоки. оголошення. У разі виявлення конфліктів імен, система не перейменовує їх автоматично, а відхиляє.
ВипускСумісний з Palette SDK.Примітки
0.6.13.0.0.1Neat Library 0.6.1
0.6.03.0.0.0Neat Library 0.6.0
0.5.02.1.3.1Neat Library 0.5.0
0.4.02.1.3.0Neat Library 0.4.0
0.3.02.1.2.3Neat Library 0.3.0
0.2.22.1.2.2Neat Library 0.2.2
0.2.12.1.2.1Neat Library 0.2.1
0.2.02.1.2Neat Library 0.2.0
0.1.02.0.0Neat Library 0.1.0