Шеринг GPU без учетных данных
У друга есть GPU. Вам нужна модель. Он генерирует invite. Вы сканируете QR-код. Без передачи API-ключей. Без настройки сервера.
Проблема
Вам нужен LLM, но у вас нет GPU. У коллеги есть мощная машина с llama.cpp. Как использовать его модель?
- Поделиться API-ключами → опасно, сложно отозвать, нет аудита
- Поднять Ollama / vLLM server → Docker, firewall rules, настройка endpoint, задержки
- Использовать proxy → еще один сервис в поддержке, еще одна точка отказа
Все существующие варианты либо раскрывают учетные данные, либо требуют инфраструктурной работы. Должен быть способ лучше.
Подход QueryMT
Mesh-сеть QueryMT позволяет узлам делиться LLM-провайдерами без передачи API-ключей. Host запускает свои провайдеры как обычно. Guest подключается по подписанному invite-токену. По сети проходят chat-сообщения, а учетные данные — нет.
qmtcode --mesh \ --mesh-invite="Team GPU" \ --invite-uses=5Генерирует QR-код и invite URL.
API-ключ остается здесь.
qmtcode --mesh-join=TOKENОтсканируйте QR или вставьте URL.
Агент автоматически находит провайдеры через DHT.
API-ключ не нужен.
Модель безопасности
В этом и состоит ключевая идея. Вот что происходит на уровне протокола:
ProviderHostActorЛокально запускает LLM. Хранит API-ключ.
API Key: заблокирован здесь
Invite: ed25519-подписанный grant
Usage: отслеживается для каждого invite
MeshChatProviderПроксирует chat-запросы на host.
API Key: нет
Token: проверяется offline (без сети)
Discovery: DHT auto-find
Агент guest-узла отправляет host-узлу ChatMessage. Host запускает его через локальный провайдер со своим API-ключом. Затем возвращает ответ. Guest никогда не видит, не трогает и не должен иметь API-ключ. Токен проверяется offline при помощи ed25519-подписей — без вызова центрального сервера.
Жизненный цикл invite
qmtcode --mesh --mesh-invite="Team GPU" --invite-uses=5 --invite-ttl=7dЭто создает ed25519-подписанный grant на 5 использований со сроком действия 7 дней.
• QR-код (можно отсканировать телефоном)
• A URL:
qmt://mesh/join/BASE64TOKEN• Можно передать guest-у любой из этих вариантов
qmtcode --mesh-join=qmt://mesh/join/BASE64TOKENТокен проверяется offline по публичному ключу host-а. Без сетевого вызова к центральному серверу.
llama_cpp через Kademlia DHT. Маршрутизация работает прозрачно — в конфиге guest-а не нужно указывать адрес host-а. Все работает само.Как работает обнаружение
Для mesh-слоя QueryMT использует libp2p с двумя режимами обнаружения:
- mDNS (LAN): автоматически находит peers в одной сети. Нулевой конфиг. Работает в офисе, дома и даже в кофейне.
- Kademlia DHT (internet): находит peers в разных сетях. Invite-токены содержат peer ID host-а. DHT резолвит его в адрес.
Guest не нужно знать IP-адрес или порт host-а. Нужен только invite-токен. Mesh сам берет на себя маршрутизацию.
Конфиг guest-а
Guest не нужен специальный конфиг. Достаточно auto_fallback = true в настройках mesh. Когда агенту guest-а нужен провайдер, которого нет локально, он обращается к mesh.
# Guest: просто подключитесь и пользуйтесь qmtcode --mesh-join=qmt://mesh/join/BASE64TOKEN # И все. Агент автоматически находит удаленные провайдеры. # Guest-у не нужен отдельный конфиг-файл.
Ключевые возможности
- ProviderHostActor / MeshChatProvider — host запускает LLM, guest прозрачно проксирует
- Подписанные invite grants — ed25519-подписи, offline-проверка
- Передача через QR-код — invite можно поделиться при личной встрече
- DHT auto-discovery — без ручной настройки endpoint
- Usage limits + TTL — у каждого invite есть max use count и срок действия
- Отзыв отдельного invite — можно удалить один invite, не затрагивая остальные
- Изоляция учетных данных — API-ключи никогда не покидают host-машину
Попробуйте сами
# Терминал 1: Host (машина с GPU) cargo run --example qmtcode --features dashboard -- \ --mesh --mesh-invite="Demo" --invite-uses=5 --dashboard # Терминал 2: Guest (любая машина в той же сети) cargo run --example qmtcode --features dashboard -- \ --mesh-join=qmt://mesh/join/<TOKEN_FROM_HOST> --dashboard # В dashboard guest-а появится llama_cpp-провайдер host-а # Задайте любой вопрос — запрос уйдет на модель host-а