YETI3 Mobile GPU 0.1.0
SDK-модуль yeti3.mobile-gpu, возможность compute.mobile_gpu. Подключает браузер устройства как добровольного вычислительного исполнителя. Первая версия выполняет vector_add: сложение двух векторов до 4096 чисел на WebGPU. Это рабочий ограниченный вычислительный профиль, не универсальный GPU-кластер, не CUDA и не запуск произвольных моделей ИИ. Производительность для столь малых задач обычно ограничена сетью; ускорение относительно локального CPU не обещается.
Установка
Нужен Python 3.12 или новее. Команды выполняются по одной:
python3 -m venv .venv-mobile-gpu
source .venv-mobile-gpu/bin/activate
python -m pip install --index-url https://engine.yeti3.ru/sdk/simple/ yeti3-mobile-gpu==0.1.0
yeti3-mobile-gpu --data ./data/mobile-gpu
Откройте http://127.0.0.1:8891/mobile-gpu/ на этом же компьютере. Для телефона нужен HTTPS-домен сервера: localhost телефона — сам телефон. Запуск на сервере: yeti3-mobile-gpu --origin https://example.org --data /var/lib/mobile-gpu. Передайте /mobile-gpu/ через HTTPS reverse proxy на 127.0.0.1:8891, сохраните этот префикс пути. Ограничьте запрос до 200 КБ и примените ограничение частоты на внешнем прокси. Сам брокер слушает только loopback, максимум 16 потоков.
Проверка полного пути
Владелец проекта использует зарегистрированный ключ узла с действующей лицензией и включённой возможностью AI. Ключ хранится на сервере, не в браузере телефона. Установите переменную окружения YETI3_NODE_TOKEN через менеджер секретов сервера. Запустите поставляемый пример owner.py, указав адрес брокера в MOBILE_GPU_ORIGIN (по умолчанию http://127.0.0.1:8891). Пример печатает одноразовый код и адрес. На устройстве откройте адрес, вставьте код, нажмите «Разрешить и подключить». Результат примера — [5.0, 2.75, 3.0]; после проверки пример завершается.
API владельца: POST pair с {}; POST jobs с {"request_id":"unique-operation-id","a":[1,2],"b":[3,4]}; GET jobs/<id>. Все адреса относительно /mobile-gpu/, заголовок Authorization: Bearer <ключ узла>. Повтор с тем же request_id и данными возвращает тот же заказ; изменённые данные отклоняются. Владелец видит только свой проект.
Подключение в Engine
from yeti3_core import Engine
from yeti3_mobile_gpu import MobileGPUModule
engine = Engine()
engine.register(MobileGPUModule("data/mobile-gpu"))
engine.boot()
try:
service = engine.capabilities.get("compute.mobile_gpu")
print(service.pair("my-project"))
finally:
engine.shutdown()
Прямой Python API предназначен для доверенного кода хоста. Внешние запросы проходят проверку лицензии в HTTP-брокере. Wheel объявляет точку входа yeti3.packages и SDK-манифест; обнаружение пакета не запускает сетевой сервер. Для сетевой работы запускается отдельная команда yeti3-mobile-gpu.
Ограничения и безопасность
- Код подключения одноразовый, 5 минут. Отдельный ключ устройства — 1 час, хранится только в памяти страницы. Максимум 10 активных устройств на проект.
- При скрытии страницы работа останавливается. При потере соединения аренда задания истекает через 60 секунд; другой исполнитель может получить задание.
- Максимум 1000 заданий проекта за 24 часа; данные старше суток удаляются при следующем обращении к хранилищу. Сохраните нужные результаты в приложении.
- Входные числа конечные, от −10000 до 10000. Сервер проверяет результат с допуском float32, но не подтверждает физическую модель GPU.
- Исполняется только встроенный WGSL-шейдер. Сервер не отправляет произвольный программный код. Автоматического майнинга, выплат за вычисления и списаний нет.
- WebGPU доступен не на всех телефонах. Android: совместимые устройства и браузеры (Chrome 121+ начал поддержку Android 12+ с Qualcomm/ARM). Safari: WebGPU появился в версии 26. Решение о доступности всегда принимает
requestAdapter(). - Первая версия проверена в настольном Chromium с реальным вызовом WebGPU API; испытание на физическом телефоне ещё требуется.
CALMF ядра фиксирует проверку результата; CLI сохраняет очередь, журнал CALMF и цепочку ядра в каталоге данных. Не размещайте каталог данных в публичной статике.
Статус публикации
Пакет предназначен для ручной установки через SDK-индекс. Платная установка по кнопке требует отдельного сетевого профиля проверки на сервере лицензирования и согласованной цены. Текущий автономный профиль каталога не допускает этот сетевой сервер и JavaScript; его проверки нельзя подменять локальными тестами.
Скачать owner.py