ExecuTorch - Когда ваш PyTorch-модель бежит на смартфоне, а не в облаке
Знакома ситуация, когда ваша блестящая модель машинного обучения отлично работает на мощном GPU в облаке, но стоит попытаться запустить её на телефоне или, что ещё сложнее, на каком-нибудь микроконтроллере, как начинаются танцы с бубном? Конвертация форматов, ручное переписывание логики на C++, проблемы с производительностью, совместимостью... В общем, головная боль.

Именно эту боль призван решить ExecuTorch — амбициозный проект от команды PyTorch, который даёт возможность развертывать AI-модели прямо на устройстве: от флагманских смартфонов до скромных микроконтроллеров. Причём делать это с привычными PyTorch API, без лишних телодвижений. А если учесть, что ExecuTorch уже лежит в основе AI-функций Instagram, WhatsApp, Quest 3 и умных очков Ray-Ban Meta, становится понятно: это не просто эксперимент, а серьёзный инструмент, проверенный в реальных боевых условиях.
Зачем нам ExecuTorch? Главные преимущества
ExecuTorch — это не просто очередной конвертер. Это целая экосистема, созданная с прицелом на конфиденциальность, производительность и переносимость. Давайте посмотрим, что выделяет его среди других решений:
1. Нативный экспорт из PyTorch: Прощайте, посредники!
Сколько раз мы сталкивались с необходимостью переводить модель из PyTorch в ONNX, затем в TFLite или какой-нибудь другой промежуточный формат? Каждый такой шаг — это потенциальные потери точности, сложности с отладкой и просто лишние действия. ExecuTorch предлагает прямой экспорт из PyTorch, сохраняя семантику вашей модели и избавляя от рутинных конвертаций. Это значит, что вы можете сосредоточиться на разработке модели, а не на борьбе с форматами.
2. Проверен в бою: Масштаб Meta
Как я уже упоминал, ExecuTorch — это не тестовый проект. Он ежедневно обрабатывает миллиарды запросов на устройствах пользователей Meta. Это даёт уверенность в его стабильности, производительности и способности работать в самых разных сценариях. Если он справляется с нагрузкой Instagram и WhatsApp, то, скорее всего, справится и с вашей задачей.
3. Миниатюрный рантайм: 50 КБ для всего
Один из ключевых факторов для встраиваемых систем и мобильных устройств — это размер. ExecuTorch может похвастаться базовым рантаймом всего в 50 КБ. Это позволяет ему работать даже на самых ограниченных по ресурсам устройствах, открывая двери для AI в совершенно новых областях.
4. Широкая поддержка аппаратных бэкендов: Без привязки к вендору
ExecuTorch поддерживает более 12 аппаратных бэкендов, включая решения от Apple (MPS, CoreML), Qualcomm, ARM, MediaTek, Vulkan, OpenVINO и даже экспериментальную поддержку CUDA. Это означает, что вы не привязаны к конкретному производителю железа и можете использовать одни и те же подходы для разных платформ.
5. Один экспорт, множество целей: Гибкость в каждом шаге
Представьте: вы экспортируете модель один раз, а затем можете запускать её на разных устройствах и с разными аппаратными ускорителями, меняя лишь одну строку кода! ExecuTorch позволяет так делать, значительно упрощая процесс развертывания и тестирования на различных платформах.
Как это работает под капотом? Магия AOT-компиляции
ExecuTorch использует подход "компиляции заранее" (Ahead-Of-Time, AOT), чтобы максимально эффективно подготовить вашу PyTorch-модель для работы на периферийных устройствах. Процесс состоит из трёх основных шагов:
- Экспорт (Export): Вы используете
torch.export()для захвата графа вашей PyTorch-модели. Это как сделать "снимок" её вычислительной структуры. - Компиляция (Compile): На этом этапе модель проходит через ряд оптимизаций: квантование, делегирование частей графа специализированным аппаратным бэкендам (NPU/GPU) с возможностью возврата к CPU. В результате получается файл с расширением
.pte(PyTorch ExecuTorch). - Выполнение (Execute): Полученный
.pteфайл загружается на устройство с помощью легковесного C++ рантайма ExecuTorch и готов к работе.
Интересно, что модели используют стандартизированный набор операторов Core ATen, а специальные "партиционеры" (partitioners) умеют эффективно распределять нагрузку между различными аппаратными ускорителями.
Время кода: Развертываем модель за три шага
Давайте посмотрим, как это выглядит на практике. Установка ExecuTorch максимально проста:
pip install executorch
А вот так выглядит экспорт и подготовка модели:
import torch
from executorch.exir import to_edge_transform_and_lower
from executorch.backends.xnnpack.partition.xnnpack_partitioner import XnnpackPartitioner
# 1. Экспортируем вашу PyTorch модель
model = MyModel().eval()
example_inputs = (torch.randn(1, 3, 224, 224),)
exported_program = torch.export.export(model, example_inputs)
# 2. Оптимизируем для целевого железа (меняем бэкенд одной строкой!)
program = to_edge_transform_and_lower(
exported_program,
partitioner=[XnnpackPartitioner()] # CPU | CoreMLPartitioner() для iOS | QnnPartitioner() для Qualcomm
).to_executorch()
# 3. Сохраняем для развертывания
with open("model.pte", "wb") as f:
f.write(program.buffer)
# Опционально: тестируем локально с помощью Python API
from executorch.runtime import Runtime
runtime = Runtime.get()
method = runtime.load_program("model.pte").load_method("forward")
outputs = method.execute([torch.randn(1, 3, 224, 224)])
Согласитесь, это выглядит очень чисто и понятно! А затем этот .pte файл можно использовать в C++, Swift (для iOS) или Kotlin (для Android) приложениях:
// Пример на C++
#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>
Module module("model.pte");
auto tensor = make_tensor_ptr({2, 2}, {1.0f, 2.0f, 3.0f, 4.0f});
auto outputs = module.forward(tensor);
LLM на вашем устройстве? Легко!
ExecuTorch не ограничивается классическими моделями компьютерного зрения или обработки речи. Он активно развивается для поддержки больших языковых моделей (LLM) прямо на устройстве. Представьте, Llama 3.2, Qwen 3 или Phi-4-mini, работающие локально, без задержек и необходимости отправлять данные в облако!
# Экспорт Llama 3.2 с помощью скрипта
python -m executorch.extension.llm.export.export_llm --model llama3_2 --output llama.pte
# Или через Optimum-ExecuTorch для моделей HuggingFace
optimum-cli export executorch \
--model meta-llama/Llama-3.2-1B \
--task text-generation \
--recipe xnnpack \
--output_dir llama_model
Затем запускаем на устройстве:
// Пример на Swift для iOS
import ExecuTorchLLM
let runner = TextRunner(modelPath: "llama.pte", tokenizerPath: "tiktoken.bin")
try runner.generate("Hello, how are you?", Config {
$0.sequenceLength = 128
}) { token in
print(token, terminator: "")
}
Это открывает потрясающие возможности для создания приватных, оффлайн-приложений с продвинутыми языковыми функциями. И, кстати, есть поддержка мультимодальных моделей, таких как Llava (зрение-язык) и Voxtral (аудио-язык)!
Кому особенно пригодится ExecuTorch?
- Мобильным разработчикам: Если вы хотите добавить AI-функции в свои Android или iOS приложения, но не хотите зависеть от облачных сервисов или жертвовать конфиденциальностью пользователей, ExecuTorch — ваш выбор.
- Разработчикам встраиваемых систем: Для тех, кто работает с микроконтроллерами и другими ограниченными по ресурсам устройствами, минимальный рантайм и оптимизация под конкретное железо станут настоящим спасением.
- Исследователям и инженерам ML: Если вы привыкли к экосистеме PyTorch и хотите безболезненно переносить свои наработки на периферийные устройства, ExecuTorch значительно упростит этот процесс.
- Всем, кто ценит приватность и производительность: Локальное выполнение моделей снижает задержки и исключает передачу конфиденциальных данных в облако.
Выводы: Стоит ли попробовать?
ExecuTorch — это не просто инструмент, это философия. Философия, которая позволяет разработчикам PyTorch оставаться в привычной экосистеме, но при этом расширять горизонты своих моделей до самых разнообразных устройств. С его помощью вы можете не только ускорить процесс от прототипа до продакшена, но и создавать по-настоящему инновационные продукты, работающие в режиме реального времени, без интернета и с максимальной конфиденциальностью.
Если вы давно мечтали "выпустить" свою PyTorch-модель из облака на волю, на реальные устройства, но боялись сложностей, ExecuTorch предлагает элегантное и мощное решение. Загляните в документацию или попробуйте Colab-ноутбук, чтобы оценить его потенциал. Уверен, вы будете приятно удивлены!
