ИИ на своём железе
Медицинские данные нельзя отправлять в облако, а денег на новые серверы нет. Языковые модели заработали на видеокартах, которые другие уже списали.
- C# / .NET 10
- ASP.NET Core
- llama.cpp
- CUDA 12
- Python
- OpenRouter
Речевой аналитике и медицинской документации нужны языковые модели. Облако подходит не всегда: медицинские данные должны оставаться внутри клиники. Покупать новые серверы клиника не готова. Зато есть старый компьютер с тремя видеокартами GTX 1080 Ti по 11 ГБ.
Своя сборка llama.cpp
GTX 1080 Ti — архитектура Pascal, и новая CUDA 13 её больше не поддерживает. Я собрал llama.cpp под CUDA 12 специально для этих карт. Модель Gemma 4 на 26 миллиардов параметров (21 ГБ) разложена по слоям на три видеокарты.
Шлюз LLA Control
Одна точка входа для программ в локальной сети, совместимая с API OpenAI. Шлюз запускает модель, следит за её состоянием, ставит запросы в очередь и раздаёт их по имени модели: локальной модели, другой машине в сети или облачной модели через OpenRouter.
Классы вместо имён
Программы просят не конкретную модель, а класс: high, medium или low. Шлюз отдаёт запрос живой и наименее загруженной модели этого класса. Модели можно менять, не трогая ни одной программы.
Кластер
Ещё одна машина с моделью подключается к шлюзу как рабочий узел, без отдельного протокола. Шлюз проверяет, жив ли узел, и защищён от петель пересылки.
Честная статистика
Привычная «скорость в токенах в секунду» смешивает два разных процесса и занижает скорость ответа. Шлюз считает их отдельно — чтение запроса и генерацию ответа, — и по ним сразу видно, где узкое место. Модели можно сравнить и вживую: тестовый чат задаёт один вопрос двум моделям рядом.
Балансировщик для пакетной работы
Тысячи звонков раздаёт параллельно нескольким серверам отдельный балансировщик на Python.
Непростое
Мало памяти
На машине 16 ГБ оперативной памяти, а модели весят больше 20 ГБ. Всё должно жить в видеопамяти, и параметры запуска подобраны именно под это.
Сбой не должен быть заметен
Если модель зависла или упала, шлюз перезапускает её сам — но не бесконечно: от зацикленных перезапусков есть защита.
- C# / .NET 10, ASP.NET Coreшлюз и его панель управления.
- llama.cpp на CUDA 12локальные модели Gemma 4 и Qwen.
- Pythonбалансировщик пакетных задач.
- OpenRouterоблачные модели, когда данные это позволяют.
Тест стабильности: модель Qwen проработала 30 суток круглосуточно, без единого сбоя и без выгрузки из памяти. Я остановил тест вручную, когда закончилась работа над медицинской документацией.
Речевая аналитика и другие ИИ-задачи клиники работают на имеющемся оборудовании — без покупки новых серверов.