ONNX Runtime Web (ORT Web) представляет собой высокопроизводительную среду выполнения моделей машинного обучения в браузере и в Node.js, поддерживающую широкий спектр типов данных. Понимание типов данных является ключевым аспектом для корректной подготовки входных данных и интерпретации выходов модели.
float32 Тип float32 является наиболее
часто используемым для численных вычислений в ONNX Runtime Web. Он
представляет собой 32-битное число с плавающей запятой, обеспечивающее
баланс между точностью и объемом памяти. Используется для входных
тензоров изображений, аудио-сигналов, результатов нейронных сетей и
других непрерывных значений.
int64 Тип int64 представляет собой
64-битное целое число. Он используется для категориальных данных,
индексов, идентификаторов объектов и других дискретных величин.
int64 для
токенов текста, а графовые алгоритмы — для индексов вершин и ребер.Number или BigInt в массив
BigInt64Array, чтобы избежать потери точности для больших
чисел.string Тип string хранит текстовые
данные. В ONNX Runtime Web строки кодируются как массивы UTF-8. Это
важно для моделей, работающих с текстом, таких как модели обработки
естественного языка (NLP).
float16 16-битное число с плавающей запятой, используемое для уменьшения потребления памяти и ускорения вычислений. Подходит для моделей, где допустима меньшая точность.
int32 и int8
int32 — 32-битное целое число, используется для меньших
диапазонов значений, например, для категориальных признаков с
ограниченным числом классов.int8 — 8-битное целое число, часто применяется для
квантованных моделей, где экономия памяти критична. В ORT Web
поддерживается при использовании WebAssembly или WebGPU.bool Тип bool представляет логические
значения true или false. Используется для
масок, бинарных признаков и индикаторов состояния.
tensor с динамическим размером В дополнение к
фиксированным типам данных, ONNX поддерживает тензоры с динамическим
размером по одной или нескольким осям. В ORT Web это реализуется через
создание массивов с соответствующими TypedArray и указание
размеров в параметрах shape.
Создание входного тензора Для передачи данных
модели необходимо создать объект ort.Tensor с
указанием:
type), например 'float32' или
'int64',dims), определяющей размерность тензора,data) в виде подходящего массива
(Float32Array, Int32Array,
BigInt64Array, Uint8Array и т.д.).Примеры создания тензоров
// float32
const inputTensor = new ort.Tensor('float32', new Float32Array([1.0, 2.0, 3.0]), [3]);
// int64
const indices = new BigInt64Array([1n, 2n, 3n]);
const indexTensor = new ort.Tensor('int64', indices, [3]);
// string
const stringTensor = new ort.Tensor('string', ['apple', 'banana'], [2]);Особенности совместимости
float16 в браузере используется конвертация через
Float32Array с последующим снижением точности.int64 требуют поддержки BigInt в
среде выполнения.Тип данных напрямую влияет на производительность модели.
Использование float32 обеспечивает максимально
оптимизированные вычисления на GPU и WebAssembly. Квантованные типы
(int8, int32) уменьшают нагрузку на память и
ускоряют выполнение, но требуют соответствующей калибровки модели.
Работа со строками и int64 может быть медленнее, особенно
при больших объемах данных, из-за необходимости дополнительной
сериализации и десериализации.
float32 — для всех основных операций с изображениями,
аудио и непрерывными признаками.int64 — для токенов текста, индексов и
идентификаторов.string — для текстовых входов и меток.float16 и int8 — для оптимизации скорости
и памяти при квантованных моделях.bool — для бинарных признаков и масок.Корректный выбор типа данных критически важен для стабильного выполнения модели и предотвращения ошибок при работе с ORT Web.