스크립트
00:00:00Google только что выпустила новую библиотеку времени выполнения, которая позволяет запускать модели машинного обучения и ИИ
00:00:05прямо в браузере с околонативной скоростью. Она называется LiteRT.js, и она очень впечатляет. Итак,
00:00:12в этом видео мы рассмотрим LiteRT.js, увидим, как она работает, и протестируем её, создав
00:00:18приложение для захвата 3D-движений в реальном времени, работающее полностью в браузере. Будет
00:00:24очень интересно, так что давайте погрузимся. Что же такое LiteRT.js? По сути, это JavaScript-биндинг для
00:00:36LiteRT, их среды выполнения для вывода на устройстве, которая годами запускает модели на Android, iOS и
00:00:42встроенном оборудовании. Но LiteRT.js переносит ту же среду выполнения в браузер через WebAssembly с использованием
00:00:50основного npm-пакета LiteRT.js. И вот чем LiteRT.js отличается. У Google уже есть
00:00:58библиотека машинного обучения для браузера под названием TensorFlow.js, она существует уже много лет. Но
00:01:04TensorFlow.js работает на ядрах, основанных на JavaScript, и это большое узкое место. Видите ли, JavaScript-ядра
00:01:11не могут полностью использовать возможности CPU или GPU так, как это делает нативная среда выполнения. Поэтому TensorFlow.js всегда отставал
00:01:19от производительности нативных приложений. Но LiteRT.js использует WebAssembly и поставляется с собственным оптимизированным ядром.
00:01:27Таким образом, та же самая нативная среда выполнения, которая обеспечивает вывод на Android и iOS, компилируется в WASM и затем открывается для
00:01:34LiteRT.js. Так что вы больше не получаете веб-абстракцию, вы получаете по-настоящему
00:01:40оптимизированный движок среды выполнения. Это также проявляется в их архитектуре бэкенда. LiteRT.js имеет
00:01:47три различных уровня, что позволяет ей хорошо работать на CPU, GPU и даже NPU. На стороне CPU
00:01:55она использует XNNPack, оптимизированную библиотеку ядер CPU от Google, которая является многопоточной с поддержкой relaxed SIMD.
00:02:04Это ваш универсальный запасной вариант, который будет работать где угодно, GPU не требуется. Но для GPU
00:02:11она использует ML drift через WebGPU, и именно здесь кроется настоящая производительность. Она использует нативные ядра GPU,
00:02:18поэтому такие вещи, как шейдеры, больше не рендерятся с помощью какой-либо JavaScript-оркестрации. А для
00:02:24NPU она имеет WebNN, который все еще является экспериментальным в Chrome и Edge, и он нацелен на специализированное аппаратное обеспечение для
00:02:31нейросетевых вычислений для энергоэффективного вывода. И согласно собственным бенчмаркам Google, которые они
00:02:37провели на MacBook Pro 2024 года с чипом M4, вывод происходит в три раза быстрее, чем в
00:02:45других веб-средах выполнения на CPU и GPU в моделях зрения и аудио. А при выполнении таких рабочих нагрузок, как
00:02:53отслеживание объектов, транскрипция аудио или обработка изображений на GPU или NPU, а не на CPU,
00:03:00мы получаем прирост производительности от 5 до 60 раз быстрее,
00:03:07в зависимости от задачи. Стоит отметить, что это лучший сценарий. И Google также
00:03:13признает это. Так что ваши результаты могут отличаться, учитывая ваш конкретный GPU,
00:03:18термический троттлинг и качество драйверов. И есть еще одна вещь, которая действительно важна для этой среды выполнения.
00:03:24Если у вас уже есть модели, которые вы использовали в PyTorch или TensorFlow, если у вас есть существующий
00:03:30файл TF Lite, LightRT.js может фактически запустить его напрямую. А если вы используете PyTorch, есть также LightRT
00:03:38Torch, путь конвертации, который переводит вашу модель прямо в .TF Lite. Кроме того, есть AI Edge
00:03:44Quantizer для уменьшения размеров моделей без полной переработки. Поэтому старые рабочие процессы, которые вы использовали в
00:03:50TensorFlow.js, могут быть легко перенесены на новый LightRT.js, что очень круто. Но что вы
00:03:58на самом деле можете с этим сделать? У Google есть довольно крутые демо-версии, которые дают представление о
00:04:03диапазоне возможностей. Например, вы можете выполнять детекцию объектов YOLO в реальном времени, оценивать монокулярную глубину с помощью
00:04:09библиотеки depth anything, которая превращает поток с веб-камеры в живое 3D-облако точек. И она также может выполнять
00:04:16апскейлинг изображений с помощью библиотеки real ESR GAN. И все эти демо работают полностью на стороне клиента с
00:04:23отсутствием бэкендов, без API, прямо в вашем браузере. И они уже анонсировали, что будет дальше,
00:04:29LightRT.LM.js. И это будет для запуска полноценных языковых моделей локально в браузере.
00:04:36Так что это не только для компьютерного зрения. Скоро она также предложит локальный вывод LLM.
00:04:42Хорошо, все это звучит отлично, но я хотел протестировать это сам, чтобы увидеть, насколько она на самом деле мощная.
00:04:48Поэтому для этого демо я решил создать приложение для захвата движений, которое использует вашу веб-камеру для
00:04:55оценки позы в реальном времени. И оно также работает полностью в вашем браузере, на стороне клиента и офлайн без
00:05:03каких-либо условий. Я запрограммировал это приложение в облаке, используя новую модель Fable 5. И вот конечный результат.
00:05:10И кстати, если вы хотите скачать этот репозиторий и поиграть с ним самостоятельно, я также добавил ссылку на
00:05:15проект в описании ниже. Итак, здесь LightRT.JS работает в браузере с использованием модели blaze pose
00:05:23с 33 ориентирами тела, управляя 3D-персонажем в реальном времени с помощью 3.js. Нет серверного бэкенда, и
00:05:31все, что вы видите, происходит на этой машине прямо сейчас, полностью офлайн. Мы видим здесь, что на
00:05:38CPU мы получаем в среднем около 38 кадров в секунду с выводом 23.3 миллисекунды. И мы также видим, что
00:05:47оценка позы немного отстает. Но теперь, если мы переключимся на версию для WebGPU, мы увидим, что мы сейчас
00:05:54получаем стабильные 120 кадров в секунду с выводом 8.4 миллисекунды. И оценка позы также немного
00:06:02быстрее. Это примерно трехкратный скачок в частоте кадров и 2.8-кратное сокращение времени вывода, что
00:06:10соответствует собственным цифрам Google, хотя это скромный показатель по сравнению с тем, что они публиковали. Но мы должны
00:06:16учесть, что blaze pose — это действительно маленькая модель. Так что для GPU требуется меньше необработанных вычислений
00:06:23для обработки. Но даже при этом, перенос тензорной математики с CPU на WebGPU сокращает задержку
00:06:30настолько, что лаг становится значительно меньше. И я также добавил функцию, позволяющую записывать анимацию захвата
00:06:36вашей позы и экспортировать ее как JSON или как файл захвата движения bio vision, а затем открыть это в
00:06:44чем-то вроде Blender и перенацелить эту анимацию на своего собственного персонажа. И как вы можете видеть здесь,
00:06:49это не идеально. Движения не очень детализированы или уточнены. Так что это все еще находится в стадии
00:06:56разработки. Но очень круто, что я смог заставить работать эту начальную версию всего за 10 минут
00:07:01используя новый LightRT.js. Вот и все, ребята. Это LightRT.js в двух словах. Честно говоря,
00:07:08удивительно видеть, насколько далеко WebAssembly продвинул возможности запуска сложных
00:07:14приложений в браузере. И эта новая библиотека LightRT.js действительно доказывает, что иногда JavaScript может
00:07:21быть настоящим узким местом для достижения околонативных скоростей производительности. Так что я очень впечатлен этой
00:07:27библиотекой, и мне не терпится попробовать LightRT.js, когда она окончательно выйдет позже в этом году. А что вы думаете
00:07:35о LightRT.js? Пробовали ли вы её? Будете ли вы её использовать? Дайте нам знать в комментариях ниже. И ребята,
00:07:40если вам нравятся такие технические разборы, пожалуйста, дайте мне знать, нажав на кнопку лайка
00:07:45под видео. И также не забудьте подписаться на наш канал. С вами был Андрес из
00:07:50BetterStack, и увидимся в следующих видео.