{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Андрей Крисанов: заметки с тегом инфраструктура ИИ",
    "_rss_description": "Блог Андрея Крисанова о разработке в эпоху ИИ: прикладной ИИ, инфраструктура ИИ, ИИ-нативные продукты и управление инженерными командами.",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/agenticeng.ru\/tags\/infrastruktura-ii\/",
    "feed_url": "https:\/\/agenticeng.ru\/tags\/infrastruktura-ii\/json\/",
    "icon": "https:\/\/agenticeng.ru\/pictures\/userpic\/userpic@2x.jpg?1775503436",
    "authors": [
        {
            "name": "Андрей Крисанов",
            "url": "https:\/\/agenticeng.ru\/",
            "avatar": "https:\/\/agenticeng.ru\/pictures\/userpic\/userpic@2x.jpg?1775503436"
        }
    ],
    "items": [
        {
            "id": "9",
            "url": "https:\/\/agenticeng.ru\/all\/future-of-mcp\/",
            "title": "Будущее MCP",
            "content_html": "<p>Посмотрел доклад David Soria Parra из Anthropic про будущее MCP.<\/p>\n<p>В 2026 году узким местом для AI-агентов становятся уже не модели, а связность между разными компонентами ИИ-системы: как агент подключается к инструментам, данным, приложениям, какие права доступа у него есть, как вокруг всего этого строить UX и бизнес-сценарии.<\/p>\n<p>Основые тезисы из доклада Дэвида с моими дополнениями 👇🏻<\/p>\n<h3>MCP — не серебряная пуля, а важный компонент агентной системы<\/h3>\n<p>Лучшие агенты будут использовать не только MCP, но и:<\/p>\n<ul>\n<li>CLI<\/li>\n<li><a href=\"https:\/\/agentskills.io\/home\">skills<\/a><\/li>\n<li>браузер и другие приложения<\/li>\n<li>API сервисов<\/li>\n<li>платформенные решения<\/li>\n<\/ul>\n<p>Основная мысль в том, чтобы дать агенту правильный интерфейс доступа к нужному действию. Иногда проще предоставить CLI, а в других ситуациях сделать полноценный MCP-сервер с авторизацией, аудитом и контролем доступа. Где-то же понадобится полноценный gateway между агентами и корпоративными системами.<\/p>\n<h3>REST API → MCP 1:1 — плохая идея<\/h3>\n<p>Не стоит брать REST API и превращать его в MCP-сервер просто обернув суще API-методы.<\/p>\n<p>REST API обычно спроектирован для разработчиков и CRUD-операций:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">GET \/users\nPOST \/orders\nPATCH \/documents\/:id<\/code><\/pre><p>А агенту чаще нужен не набор низкоуровневых методов, а осмысленное действие:<\/p>\n<ul>\n<li>создай отчёт за период<\/li>\n<li>найди договор и проверь риски<\/li>\n<li>подготовь черновик ответа клиенту<\/li>\n<li>сравнить версии документа<\/li>\n<\/ul>\n<p>Хороший MCP-интерфейс должен быть нативным для агента, а не оберткой поверх когда-то разработанного API. Это важный сдвиг в мышлении при проектировании агентных систем.<\/p>\n<h3>Информация о тулах должна быть доступна модели по требованию<\/h3>\n<p>Одна из проблем, с которой мы сейчас сталкиваемся на практике — многие интеграции через MCP выгружают агенту огромный список tools, который затем утекает в контекстное окно модели. Как следствие:<\/p>\n<ul>\n<li>модель хуже выбирает нужный инструмент<\/li>\n<li>растёт стоимость запроса<\/li>\n<li>растёт latency ответа<\/li>\n<li>повышается риск неправильного tool call<\/li>\n<li>контекст забивается описаниями инструментов вместо полезной информации<\/li>\n<\/ul>\n<p>Anthropic предлагает реализовывать progressive discovery: агент должен постепенно получать нужные инструменты, а не весь список доступных tools сразу.<\/p>\n<p>Для разработчика это означает, что нам нужно думать не только о том, какие tools предоставлять модели, но и как модель будет их находить.<\/p>\n<h3>Skills и MCP не конкуренты<\/h3>\n<p>Skills хорошо подходят для локальных, процедурных, CLI-based сценариев. Например, «возьми ffmpeg, обработай видео, положи результат сюда». MCP лучше подходит там, где нужны:<\/p>\n<ul>\n<li>авторизация<\/li>\n<li>RBAC<\/li>\n<li>аудит действий и observability<\/li>\n<li>управление доступом к инструментам<\/li>\n<li>стабильный контракт между агентом и внешней системой<\/li>\n<\/ul>\n<p>Общая рекомендация сейчас: используйте самый простой механизм, который решает вашу задачу. MCP-сервер не нужен для каждого shell-скрипта. Но если инструмент живёт в enterprise-среде и работает к чувствительными данными, то Skills — менее надёжное решение.<\/p>\n<h3>Enterprise-агентам нужен gateway<\/h3>\n<p>Для компаний главный вывод такой: нельзя позволять каждой команде поднимать свой зоопарк MCP-серверов и гейтвеев.<\/p>\n<p>Нужен общий слой, который решает следующие задачи:<\/p>\n<ul>\n<li>единая точка подключения инструментов<\/li>\n<li>авторизация и политики доступа<\/li>\n<li>аудит вызова tools<\/li>\n<li>лимиты<\/li>\n<li>логирование, observability<\/li>\n<li>контроль того, какие агенты к чему имеют доступ<\/li>\n<li>контроль жизненного цикла инструментов<\/li>\n<\/ul>\n<p>Иначе через год разработки получится не AI-платформа, а распределённая коллекция небезопасных интеграций, которые никто не понимает и не контролирует.<\/p>\n<p>В докладе это формулируется как движение к общему connectivity\/gateway-слою, т. е. не каждый агент сам знает обо всех системах, а платформа даёт ему управляемый доступ.<\/p>\n<h3>Идентичность агентов<\/h3>\n<p>Сейчас большинство систем всё ещё реализуют такую цепочку действий: пользователь авторизовался → пользователь нажал кнопку → система выполнила действие.<\/p>\n<p>Но с агентами появляется новая проблема — агент действует от имени пользователя, но не всегда синхронно, не всегда сразу, его действия могут выполняться продолжительное время, иногда через несколько систем.<\/p>\n<p>Возникают вопросы:<\/p>\n<ul>\n<li>кто именно вызвал tool<\/li>\n<li>от чьего имени<\/li>\n<li>с какими правами<\/li>\n<li>можно ли агенту продолжить задачу без подтверждения пользователя<\/li>\n<li>как отозвать доступ<\/li>\n<li>как показать аудитору, что произошло<\/li>\n<\/ul>\n<p>Это отдельный пласт инженерной работы. И он пока решён хуже, чем хотелось бы.<\/p>\n<h3>TLDR;<\/h3>\n<p>MCP — это не просто новый стандарт для тулов. Это сигнал, что разработчикам придётся учиться проектировать интерфейсы для агентов, а не только API для людей и frontend-приложений.<\/p>\n<p>Практические советы:<\/p>\n<ul>\n<li><b>Не делайте глупую 1-1 обертку REST-to-MCP<\/b>. Сначала подумайте, какое действие реально должен выполнить агент.<\/li>\n<\/ul>\n<ul>\n<li><b>Проектируйте тулы как атомарные действия, которые можно соединять в более крупную задачу<\/b>. Не createUser, updateUser, deleteUser, а «подготовить пользователя к онбордингу», «проверить доступы к X», «собрать контекст по клиенту».<\/li>\n<\/ul>\n<ul>\n<li><b>Ограничивайте набор тулов для задачи<\/b>. Чем больше инструментов вы добавите в контекст, тем хуже может работать агент (а точнее модель).<\/li>\n<\/ul>\n<ul>\n<li><b>Думайте о discovery инструментов по запросу<\/b>. Агенту не обязательно знать обо всех тулах сразу. Лучше сделать каталог тулов и progressive discovery.<\/li>\n<\/ul>\n<ul>\n<li><b>Сразу закладывайте аудит и работу с правами доступа<\/b>. Особенно если инструмент может читать документы или менять данные.<\/li>\n<\/ul>\n<ul>\n<li><b>Используйте CLI там, где этого достаточно<\/b>. Не стоит реализовывать MCP ради MCP.<\/li>\n<\/ul>\n<ul>\n<li><b>Для enterprise-сценариев нужен gateway<\/b>. Без него MCP быстро превращается в shadow IT для агентов.<\/li>\n<\/ul>\n<div class=\"e2-text-video\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/v3Fr2JR47KA?enablejsapi=1\" allow=\"autoplay\" frameborder=\"0\" allowfullscreen><\/iframe>\n<div class=\"e2-text-caption\">The Future of MCP — David Soria Parra, Anthropic<\/div>\n<\/div>\n",
            "summary": "Посмотрел доклад David Soria Parra из Anthropic про будущее MCP.\r\n\r\nВ 2026 году узким местом для AI-агентов становятся уже не столько модели, а связность между разными компонентами системы: как агент подключается к инструментам, данным, приложениям, какие права доступа у него есть, как вокруг всего этого строить UX и бизнес-сценарии.\r\n\r\nОсновые тезисы из доклада Дэвида с моими дополнениями.",
            "date_published": "2026-05-05T14:09:07+03:00",
            "date_modified": "2026-05-05T15:20:07+03:00",
            "tags": [
                "MCP",
                "агенты",
                "инфраструктура ИИ"
            ],
            "image": "https:\/\/agenticeng.ru\/pictures\/remote\/youtube-v3Fr2JR47KA-cover.jpg",
            "_date_published_rfc2822": "Tue, 05 May 2026 14:09:07 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "9",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/agenticeng.ru\/pictures\/remote\/youtube-v3Fr2JR47KA-cover.jpg"
                ]
            }
        },
        {
            "id": "8",
            "url": "https:\/\/agenticeng.ru\/all\/genai-cost\/",
            "title": "Сколько на самом деле стоит GenAI в продакшене",
            "content_html": "<p>Когда обсуждают стоимость внедрения генеративного ИИ, разговор часто сводится к цене за токен или цене за арендуемый GPU. Это удобно — одно число. Но в реальном продакшене такая оценка почти всегда обманчива.<\/p>\n<p>Стоимость GenAI-системы — это не только сколько стоит вызвать модель. Это инфраструктура, эксплуатация, безопасность, наблюдаемость, разработка, интеграции, поддержка пользователей и постоянные изменения вокруг моделей. Именно поэтому «мы поднимем open-source модель сами, будет дешевле» часто оказывается правдой только на первом слайде презентации.<\/p>\n<h3>Из чего складывается стоимость GenAI в продакшене<\/h3>\n<p>Типовая GenAI-система состоит не из одной модели. Даже если бизнес-задача звучит просто, например, сделать Q&A чат-бота по документам, внутри быстро появляются:<\/p>\n<ul>\n<li>backend-сервис (API)<\/li>\n<li>модель или несколько моделей<\/li>\n<li>RAG: индексация документов, эмбеддинги, векторный поиск<\/li>\n<li>хранилище документов<\/li>\n<li>авторизация и права доступа<\/li>\n<li>модерация и guardrails<\/li>\n<li>трассировка запросов<\/li>\n<li>мониторинг качества<\/li>\n<li>логирование ошибок<\/li>\n<li>рейт-лимиты, очереди и ретраи<\/li>\n<li>CI\/CD<\/li>\n<li>регламент обновления моделей<\/li>\n<li>поддержка пользователей и команд, которые интегрируются с этим сервисом<\/li>\n<\/ul>\n<p>Пока всё работает в демо-режиме, это кажется избыточным. Но как только сервис начинает использоваться внутри компании, особенно в задачах с персональными данными, документами, юридическими текстами, финансами или внутренними знаниями, нужна архитектура и практики.<\/p>\n<h3>Цена за токен — заметный, но не единственный расход<\/h3>\n<p>Если использовать <a href=\"https:\/\/aistudio.yandex.ru\/docs\/ru\/\">Yandex Cloud AI Studio<\/a>, стоимость зависит от режима работы модели и количества токенов: входных, исходящих, кешированных и токенов инструментов. Это уже важная деталь: один и тот же пользовательский сценарий может стоить по-разному в зависимости от длины промпта, длины ответа, истории диалога и использования tools.<\/p>\n<p>Например, в синхронном режиме YandexGPT Pro 5.1 стоит 0,8 ₽ за 1000 входящих токенов и 0,8 ₽ за 1000 исходящих токенов с НДС. YandexGPT Lite стоит 0,2 ₽ за 1000 входящих и 0,2 ₽ за 1000 исходящих токенов. DeepSeek V3.2 в AI Studio стоит 0,5 ₽ за 1000 входящих токенов и 0,8 ₽ за 1000 исходящих токенов.<\/p>\n<p>Допустим, у нас есть внутренний ассистент, который обрабатывает 1 млн запросов в месяц. Средний запрос:<\/p>\n<ul>\n<li>1000 входящих токенов<\/li>\n<li>500 исходящих токенов<\/li>\n<\/ul>\n<p>Тогда примерная стоимость генерации:<\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td><b>Модель<\/b><\/td>\n<td><b>Расчёт на 1 запрос<\/b><\/td>\n<td><b>1 млн запросов в месяц<\/b><\/td>\n<\/tr>\n<tr>\n<td>YandexGPT Lite<\/td>\n<td>0,2 ₽ + 0,1 ₽<\/td>\n<td>300 000 ₽<\/td>\n<\/tr>\n<tr>\n<td>YandexGPT Pro 5.1<\/td>\n<td>0,8 ₽ + 0,4 ₽<\/td>\n<td>1 200 000 ₽<\/td>\n<\/tr>\n<tr>\n<td>DeepSeek V3.2<\/td>\n<td>0,5 ₽ + 0,4 ₽<\/td>\n<td>900 000 ₽<\/td>\n<\/tr>\n<\/table>\n<p>На этом этапе возникает соблазм сказать, что Lite дешевле Pro в 4 раза и нужно брать эту модель. Но если Lite отвечает хуже, чаще требует повторных запросов, хуже следует инструкциям, хуже работает с длинным контекстом или создаёт больше ошибок для пользователей, реальная стоимость может быть выше. Дешёвый токен может привести к дорогому бизнес-процессу.<\/p>\n<h3>Покупка GPU vs оплата за токены<\/h3>\n<p>Другой популярный подход — поднять open-source модель самостоятельно на своей инфраструктуре. Например, через vLLM, TGI или другой serving-стек.<\/p>\n<p>В Yandex DataSphere конфигурация g2.8 с 8 GPU A100 стоит 4 401,83808 ₽ в час. При расчёте 720 часов в месяц это примерно:<\/p>\n<pre class=\"e2-text-code\"><code class=\"txt\">4 401,84 ₽ × 720 ≈ 3 169 323 ₽ \/ месяц<\/code><\/pre><p>Конфигурация g2.1 с 1 GPU A100 стоит <i>550,22976 ₽ в час<\/i>, а g1.1 с 1 GPU V100 — <i>341,52192 ₽ в час<\/i>. Цены DataSphere для региона Россия указаны с НДС.<\/p>\n<p>На первый взгляд, 8×A100 за ~3,17 млн ₽\/месяц может выглядеть конкурентно, если у вас большой объём трафика. Но это только compute. Дальше нужно добавить:<\/p>\n<ul>\n<li>Kubernetes или другой runtime<\/li>\n<li>хранилище для моделей и образов (container registry)<\/li>\n<li>observability стек (наблюдаемость)<\/li>\n<li>сетевую инфраструктуру<\/li>\n<li>инженерную команду<\/li>\n<\/ul>\n<p>а также процессы вокруг:<\/p>\n<ul>\n<li>обновления моделей<\/li>\n<li>тестирования качества<\/li>\n<li>безопасности<\/li>\n<li>работу с деградациями и инцидентами<\/li>\n<\/ul>\n<p>DataSphere отдельно тарифицирует хранение моделей, Docker-образов, дисков, датасетов и других артефактов; например, хранение модели внутри DataSphere сверх бесплатных лимитов стоит 13,08 ₽ за 1 ГБ в месяц.<\/p>\n<p>То есть self-hosting может быть дешевле на большом масштабе. Но он редко бывает дешевле сам по себе. Он становится выгодным, когда у компании уже есть сильная инфраструктурная команда, понятный объём нагрузки и реальная потребность контролировать serving, latency, безопасность и модельный стек.<\/p>\n<h3>Главный скрытый расход — ФОТ<\/h3>\n<p>В России стоимость инженерной команды ниже, чем в США, но она всё равно быстро становится одной из основных категорий расходов. По данным Dream Job, средняя зарплата ML Engineer в России в 2026 году — 185 000 ₽ на руки, типичный диапазон — 140 000—230 000 ₽, а в Москве среднее значение указано как 260 000 ₽. Другой обзор по рынку ML-инженеров указывает ориентиры по грейдам: Middle — около 160 000—200 000 ₽, Senior — 280 000—350 000 ₽, Lead — 360 000—450 000 ₽ в зависимости от региона и формата работы.<\/p>\n<p>Но для продакшен GenAI вам обычно нужен не один ML Engineer. Минимальный состав может выглядеть так:<\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td><b>Роль<\/b><\/td>\n<td><b>Зачем нужна<\/b><\/td>\n<\/tr>\n<tr>\n<td>Backend Engineer<\/td>\n<td>API, бизнес-логика, интеграции<\/td>\n<\/tr>\n<tr>\n<td>ML \/ LLM Engineer<\/td>\n<td>выбор моделей, промпты, evals, качество<\/td>\n<\/tr>\n<tr>\n<td>Platform \/ DevOps Engineer<\/td>\n<td>Kubernetes, GPU, CI\/CD, observability<\/td>\n<\/tr>\n<tr>\n<td>Security \/ InfoSec<\/td>\n<td>доступы, данные, аудит, compliance<\/td>\n<\/tr>\n<tr>\n<td>Product \/ Analyst<\/td>\n<td>сценарии, метрики, приоритизация<\/td>\n<\/tr>\n<\/table>\n<p>Даже маленькая команда из 2—3 сильных инженеров может стоить компании заметно больше, чем API-вызовы модели. Особенно если считать не только зарплату на руки, а полную стоимость сотрудника: налоги, оборудование, менеджмент, найм, отпуска, простои, коммуникации и стоимость ошибок.<\/p>\n<p>Именно здесь часто ломается наивная математика: <i>API стоит 1 млн ₽ в месяц, а self-hosting на GPU — 3 млн ₽. Значит API дешевле<\/i>.<\/p>\n<p>Или наоборот: <i>GPU стоит 3 млн ₽ в месяц, а API при нашем объёме стоит 5 млн ₽. Значит self-hosting дешевле<\/i>.<\/p>\n<p>Обе оценки неполные. Нужно считать людей, эксплуатацию, риски и качество.<\/p>\n<h3>Доступ к LLM через API vs self-hosting<\/h3>\n<p>Упрощённо выбор выглядит так.<\/p>\n<h3>Доступ к LLM через API<\/h3>\n<p>Выгоднее если вы только запускаете продукт, нагрузка непредсказуема, команда маленькая, а главная задача — быстро проверить гипотезу. В этом случае YandexGPT, DeepSeek или другие модели через API позволяют не строить всю инфраструктуру с нуля.<\/p>\n<p>Плюсы:<\/p>\n<ul>\n<li>быстрый старт<\/li>\n<li>не нужно управлять GPU<\/li>\n<li>проще масштабироваться на раннем этапе<\/li>\n<li>меньше эксплуатационной нагрузки<\/li>\n<li>проще считать стоимость на уровне токенов<\/li>\n<\/ul>\n<p>Минусы:<\/p>\n<ul>\n<li>зависимость от провайдера<\/li>\n<li>ограничения по моделям и настройкам<\/li>\n<li>меньше контроля над latency (временем отклика)<\/li>\n<li>сложнее оптимизировать serving под свой сценарии и тип нагрузки<\/li>\n<li>возможные ограничения по данным и комплаенсу<\/li>\n<\/ul>\n<h3>Self-hosting моделей<\/h3>\n<p>Выгоднее если у вас большой и стабильный объём запросов, есть инфраструктурная команда, нужны строгие требования по данным, есть желание контролировать модели, serving-стек, batching, маршрутизацию и стоимость на большом масштабе.<\/p>\n<p>Плюсы:<\/p>\n<ul>\n<li>больше контроля<\/li>\n<li>можно оптимизировать serving<\/li>\n<li>можно выбирать open-source модели<\/li>\n<li>можно строить собственный роутинг и механизмы кэширования<\/li>\n<li>потенциально ниже стоимость за токен на большом объёме<\/li>\n<\/ul>\n<p>Минусы:<\/p>\n<ul>\n<li>высокая сложность<\/li>\n<li>нужен опыт с GPU-инфраструктурой<\/li>\n<li>нужны SRE-практики<\/li>\n<li>нужно самим решать инциденты<\/li>\n<li>нужно самим обновлять модели<\/li>\n<li>нужно самим строить evals и release gates<\/li>\n<\/ul>\n<h3>Скрытые расходы, о которых забывают<\/h3>\n<h3>Наблюдаемость<\/h3>\n<p>Для обычного backend-сервиса достаточно latency, error rate, throughput и логов. Для LLM-системы этого мало.<\/p>\n<p>Нужно понимать:<\/p>\n<ul>\n<li>сколько токенов потребляется<\/li>\n<li>какие промпты дают плохие ответы<\/li>\n<li>где растёт latency<\/li>\n<li>где модель галлюцинирует<\/li>\n<li>какие пользователи повторяют запросы<\/li>\n<li>какие инструменты вызываются<\/li>\n<li>какие документы попадают в контекст<\/li>\n<li>как меняется качество после обновления модели<\/li>\n<\/ul>\n<p>Без этого система становится чёрным ящиком: деньги тратятся, пользователи жалуются, а команда не понимает, где проблема.<\/p>\n<h3>Обновление моделей<\/h3>\n<p>Модель — это не статичная библиотека. Провайдеры обновляют версии, меняют поведение, добавляют новые режимы, снимают старые версии с поддержки.<\/p>\n<p>Каждое обновление требует:<\/p>\n<ul>\n<li>регрессионного тестования<\/li>\n<li>сравнения качества<\/li>\n<li>проверки промптов<\/li>\n<li>проверки latency<\/li>\n<li>проверки стоимости<\/li>\n<li>коммуникации с пользователями<\/li>\n<li>rollback-плана<\/li>\n<\/ul>\n<p>Если этого нет, можно обновить модель и сломать upstream-команды.<\/p>\n<h3>Безопасность<\/h3>\n<p>В корпоративном контексте вопрос не только в том, где дешевле токен.<\/p>\n<p>Нужно отвечать на вопросы:<\/p>\n<ul>\n<li>какие данные уходят в модель<\/li>\n<li>логируются ли запросы<\/li>\n<li>где хранятся трейсы запросов<\/li>\n<li>можно ли отправлять персональные данные<\/li>\n<li>как работает маскирование PII и других данных<\/li>\n<li>кто имеет доступ к истории запросов<\/li>\n<li>можно ли использовать внешние tools<\/li>\n<li>как аудитить действия агента<\/li>\n<\/ul>\n<p>Это не бесплатная часть системы. Её кто-то должен проектировать, внедрять и поддерживать.<\/p>\n<h3>Качество<\/h3>\n<p>Стоимость плохого ответа может быть выше стоимости токенов.<\/p>\n<p>Например, если модель помогает бухгалтерии, юристам, поддержке или инженерам, ошибка может привести к:<\/p>\n<ul>\n<li>потере времени<\/li>\n<li>неправильному решению<\/li>\n<li>ручной перепроверке<\/li>\n<li>недоверию пользователей<\/li>\n<li>отказу от продукта<\/li>\n<li>инциденту безопасности<\/li>\n<\/ul>\n<p>Поэтому более дорогая модель иногда дешевле в реальности, если она снижает количество ошибок и повторных запросов.<\/p>\n<h3>Как посчитать полную стоимость GenAI-системы<\/h3>\n<p>Хорошая формула выглядит не так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"txt\">TCO = цена токенов<\/code><\/pre><p>где TCO — это Total Cost of Ownership, т. е. <b>полная стоимость владения<\/b>.<\/p>\n<p>А примерно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"txt\">TCO =\n  стоимость inference\n+ стоимость инфраструктуры\n+ стоимость хранения\n+ стоимость сети\n+ стоимость разработки\n+ стоимость эксплуатации\n+ стоимость observability\n+ стоимость безопасности\n+ стоимость обновления моделей\n+ стоимость ошибок<\/code><\/pre><p>Для managed API основная переменная часть — токены. Для self-hosting — GPU, инфраструктура и команда.<\/p>\n<p>Практический подход:<\/p>\n<ol start=\"1\">\n<li>Посчитать ожидаемый объём запросов.<\/li>\n<li>Разделить входные и исходящие токены.<\/li>\n<li>Посчитать стоимость для 2—3 моделей.<\/li>\n<li>Добавить RAG: embeddings, хранилища, поиск.<\/li>\n<li>Добавить observability и логи.<\/li>\n<li>Оценить стоимость команды.<\/li>\n<li>Оценить стоимость поддержки и инцидентов.<\/li>\n<li>Сравнить API и self-hosting не на демо, а на горизонте 6—12 месяцев.<\/li>\n<\/ol>\n<h3>Пример: внутренний AI-ассистент<\/h3>\n<p>Допустим, компания хочет сделать внутреннего ассистента для сотрудников.<\/p>\n<p>Параметры:<\/p>\n<ul>\n<li>1 000 активных пользователей<\/li>\n<li>30 запросов на пользователя в месяц<\/li>\n<li>30 000 запросов в месяц<\/li>\n<li>1 500 входящих токенов<\/li>\n<li>700 исходящих токенов<\/li>\n<\/ul>\n<p>Для YandexGPT Pro 5.1:<\/p>\n<pre class=\"e2-text-code\"><code class=\"txt\">Вход: 1500 \/ 1000 × 0,8 ₽ = 1,2 ₽\nВыход: 700 \/ 1000 × 0,8 ₽ = 0,56 ₽\nИтого: 1,76 ₽ за запрос\n\n30 000 × 1,76 ₽ = 52 800 ₽ \/ месяц<\/code><\/pre><p>Для YandexGPT Lite:<\/p>\n<pre class=\"e2-text-code\"><code class=\"txt\">Вход: 1500 \/ 1000 × 0,2 ₽ = 0,3 ₽\nВыход: 700 \/ 1000 × 0,2 ₽ = 0,14 ₽\nИтого: 0,44 ₽ за запрос\n\n30 000 × 0,44 ₽ = 13 200 ₽ \/ месяц<\/code><\/pre><p>На таком масштабе стоимость токенов почти наверняка не будет главным расходом. Главным расходом будет разработка, интеграция, поддержка, безопасность и внедрение в бизнес-процессы.<\/p>\n<p>Но если это уже не 30 000, а 3—10 млн запросов в месяц, математика меняется. Тогда имеет смысл отдельно смотреть на кэширование, роутинг запросов, batch-режимы, более дешёвые модели для простых задач и self-hosting.<\/p>\n<h3>Вывод<\/h3>\n<p>Главная ошибка при оценке GenAI систем — сравнивать только цену токена или часа за аренду GPU.<\/p>\n<p>Для прототипа это нормально. Для продакшена — нет.<\/p>\n<p>Managed API может быть дороже на единицу inference, но дешевле по TCO (полной стоимости владения), если экономит месяцы разработки и эксплуатации. Self-hosted open-source модель может быть дешевле на большом объёме, но только если у вас есть команда, инфраструктура и зрелые процессы.<\/p>\n<p>Правильный вопрос звучит не так:<\/p>\n<blockquote>\n<p>Какая модель дешевле?<\/p>\n<\/blockquote>\n<p>А так:<\/p>\n<blockquote>\n<p>Какая архитектура даёт нужное качество, время отклика, безопасность и управляемость при минимальной полной стоимости владения?<\/p>\n<\/blockquote>\n<p>И почти всегда ответ зависит не от одной цены в прайсе, а от масштаба, команды и зрелости компании.<\/p>\n",
            "summary": "Разбираемся, сколько на самом деле стоит GenAI-система в продакшене: токены, GPU, Yandex Cloud, self-hosted модели, зарплаты инженеров, эксплуатация и полная стоимость владения.",
            "date_published": "2026-04-27T21:55:46+03:00",
            "date_modified": "2026-04-27T22:01:07+03:00",
            "tags": [
                "LLM",
                "ИИ",
                "инфраструктура ИИ",
                "стоимость"
            ],
            "_date_published_rfc2822": "Mon, 27 Apr 2026 21:55:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "8",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "6",
            "url": "https:\/\/agenticeng.ru\/all\/dcgm-exporter-k3s-wsl2\/",
            "title": "Установка DCGM Exporter в локальный Kubernetes-кластер с NVIDIA GPU",
            "content_html": "<p>В <a href=\"\/all\/wsl-nvidia-gpu\/\">предыдущей заметке<\/a> я рассказывал как развернуть локальный кластер Kubernetes с доступом к GPU внутри WSL2 окружения. Для того, чтобы собирать детальные метрики с видеокарты, <i>nvidia-smi<\/i> не достаточно, т. к. GPU-Util показывает только активность в рамках короткого sampling-окна. Для анализа того, что происходит с GPU при обработке задач, нужен DCGM. <a href=\"https:\/\/github.com\/NVIDIA\/dcgm-exporter\">dcgm-exporter<\/a> — это утилита NVIDIA для сбора GPU-метрик через DCGM, которая отдает их через HTTP-метод \/<i>metrics<\/i> для Prometheus и похожих систем мониторинга.<\/p>\n<p>При попытке установить <i>dcgm-exporter<\/i> в k3s кластер Helm chart по умолчанию создает <i>ServiceMonitor<\/i>. Но если в кластере не установлен Prometheus оператор, процесс завершится с ошибкой:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">no matches for kind &quot;ServiceMonitor&quot; in version &quot;monitoring.coreos.com\/v1&quot;\nensure CRDs are installed first<\/code><\/pre><p>Это ожидаемое поведение. В dcgm-exporter chart по умолчанию <i>serviceMonitor.enabled: true<\/i>, а <i>ServiceMonitor<\/i> относится к CRD из экосистемы Prometheus Operator. В том же чарте <i>runtimeClassName<\/i> — пустой.<\/p>\n<p>Проверяем, что Kubernetes все еще видит GPU:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">kubectl get nodes -o json | jq &#039;.items[].status.allocatable&#039;<\/code><\/pre><p>На моей системе результат такой:<\/p>\n<pre class=\"e2-text-code\"><code class=\"json\">{\n  &quot;cpu&quot;: &quot;20&quot;,\n  &quot;ephemeral-storage&quot;: &quot;1027046117185&quot;,\n  &quot;hugepages-1Gi&quot;: &quot;0&quot;,\n  &quot;hugepages-2Mi&quot;: &quot;0&quot;,\n  &quot;memory&quot;: &quot;16233644Ki&quot;,\n  &quot;nvidia.com\/gpu&quot;: &quot;1&quot;,\n  &quot;pods&quot;: &quot;110&quot;\n}<\/code><\/pre><p>Далее добавляем репозиторий:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">helm repo add gpu-helm-charts https:\/\/nvidia.github.io\/dcgm-exporter\/helm-charts\nhelm repo update<\/code><\/pre><p>Отключаем создание <i>ServiceMonitor<\/i> и указываем Nvidia runtime class:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">helm install dcgm-exporter gpu-helm-charts\/dcgm-exporter \\\n  --set serviceMonitor.enabled=false \\\n  --set runtimeClassName=nvidia<\/code><\/pre><p>Проверяем, что pod с экспортером поднялся:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">kubectl get pods -l app.kubernetes.io\/name=dcgm-exporter -o wide\nkubectl logs -l app.kubernetes.io\/name=dcgm-exporter --tail=50<\/code><\/pre><p>Успешный запуск выглядит примерно так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Starting dcgm-exporter\nAttempting to initialize DCGM.\nInitialized DCGM Fields module.\nAttempting to initialize NVML library.\nNVML provider successfully initialized for Kubernetes MIG support\nDCGM successfully initialized!\nSuccessfully queried DCGM profiling metric groups\nHTTP server started - ready to serve metrics\nListening on [::]:9400<\/code><\/pre><p>Это означает, что:<\/p>\n<ul>\n<li>DCGM инициализировался<\/li>\n<li>NVML инициализировался<\/li>\n<li>exporter увидел GPU<\/li>\n<li>HTTP endpoint с метриками уже работает<\/li>\n<\/ul>\n<p>Если chart создал сервис, его можно посмотреть так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">kubectl get svc<\/code><\/pre><p>Дальше пробрасываем порт:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">kubectl port-forward svc\/dcgm-exporter 9400:9400<\/code><\/pre><p>И проверяем:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">curl http:\/\/127.0.0.1:9400\/metrics | head -50\ncurl http:\/\/127.0.0.1:9400\/health<\/code><\/pre><p>Если все ок, \/<i>health<\/i> вернет успешный ответ, а \/<i>metrics<\/i> начнет отдавать метрики вида <i>DCGM_FI_*<\/i>.<\/p>\n",
            "summary": "Установка NVIDIA DCGM Exporter в локальный Kubernetes-кластер под WSL2: как обойти ошибку ServiceMonitor, настроить runtimeClassName и проверить сбор GPU-метрик.",
            "date_published": "2026-04-23T17:31:40+03:00",
            "date_modified": "2026-04-23T17:33:37+03:00",
            "tags": [
                "gpu",
                "kubernetes",
                "nvidia",
                "wsl2",
                "инфраструктура ИИ",
                "мониторинг"
            ],
            "_date_published_rfc2822": "Thu, 23 Apr 2026 17:31:40 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "6",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "5",
            "url": "https:\/\/agenticeng.ru\/all\/wsl-nvidia-gpu\/",
            "title": "Kubernetes с доступом к GPU внутри WSL2 на ноутбуке с RTX",
            "content_html": "<p>На днях мне понадобилась локальная среда c Kubernetes для запуска GPU задач и тестирования сервисов с ИИ. Мой рабочий компьютер — это ноутбук Lenovo Legion следующей конфигурации:<\/p>\n<ul>\n<li>Процессор 13th Gen Intel(R) Core(TM) i7-13650HX (2.60 GHz)<\/li>\n<li>Оперативная память 32 GB<\/li>\n<li>Видеокарта NVIDIA GeForce RTX 5070 Laptop GPU<\/li>\n<li>Диск 1 TB SSD<\/li>\n<\/ul>\n<p>Каждый раз арендовать облако и временно развертывать K8s-окружение, чтобы экономить на стоимости — не очень удобно. Поэтому я решил попробовать сконфигурировать локальную среду. Оказалось, что Kubernetes с доступом к GPU внутри WSL2 — это реально. Но есть несколько неочевидных нюансов, которые ломают рантайм.<\/p>\n<h3>TL;DR<\/h3>\n<p>Итоговый стек:<\/p>\n<ul>\n<li>Windows 11 + NVIDIA driver (с поддержкой WSL)<\/li>\n<li><a href=\"https:\/\/podman.io\/\">Podman<\/a><\/li>\n<li>WSL2 (Ubuntu 24.04)<\/li>\n<li>K3s (containerd)<\/li>\n<li>NVIDIA Container Toolkit<\/li>\n<li>NVIDIA device plugin<\/li>\n<li>фикс: <i>runtimeClassName: nvidia<\/i> для device plugin<\/li>\n<\/ul>\n<h3>Что хотелось получить<\/h3>\n<p>По сути — мини-кластер на ноутбуке, который работает по следующей схеме:<\/p>\n<p>Pod → Kubernetes → containerd → NVIDIA runtime → WSL GPU → Windows driver → RTX GPU<\/p>\n<p>С возможностью делать:<\/p>\n<ul>\n<li>локальный инференс<\/li>\n<li>эксперименты с AI-инфраструктурой и GPU<\/li>\n<\/ul>\n<h3>Шаг 1: Проверка GPU в WSL<\/h3>\n<p>Если после установки WSL2 у вас работает <a href=\"https:\/\/docs.nvidia.com\/deploy\/nvidia-smi\/index.html\">Nvidia System Management<\/a>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"console\">nvidia-smi<\/code><\/pre><p>— двигаемся дальше.<\/p>\n<h3>Шаг 2: Linux-драйверы<\/h3>\n<p>WSL — особенная штука. Драйвер для GPU живет в Windows, Linux просто проксирует доступ через \/<i>usr\/lib\/wsl<\/i><\/p>\n<p>Если nvidia-smi не находится:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">echo &#039;export PATH=$PATH:\/usr\/lib\/wsl\/lib&#039; &gt;&gt; ~\/.bashrc\nsource ~\/.bashrc<\/code><\/pre><p>Чего не стоит делать:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">apt install nvidia-utils-*<\/code><\/pre><p>Такая установка системных пакетов внутри Linux  почти гарантированно все сломает.<\/p>\n<h3>Шаг 3: Проверка GPU в контейнерах<\/h3>\n<p>Перед установкой Kubernetes важно убедиться, что GPU работает в контейнерах.<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">sudo nvidia-ctk cdi generate --output=\/etc\/cdi\/nvidia.yaml\npodman run --rm --device=nvidia.com\/gpu=all ubuntu nvidia-smi<\/code><\/pre><p>Если последняя команда выполняется успешно, то runtime настроен правильно.<\/p>\n<h3>Шаг 4: Установка K3s<\/h3>\n<pre class=\"e2-text-code\"><code class=\"shell\">curl -sfL https:\/\/get.k3s.io | sh -<\/code><\/pre><p>Настраиваем kubeconfig:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">mkdir -p ~\/.kube\nsudo cp \/etc\/rancher\/k3s\/k3s.yaml ~\/.kube\/config\nsudo chown $USER:$USER ~\/.kube\/config\nexport KUBECONFIG=~\/.kube\/config<\/code><\/pre><p>Проверяем доступна ли наша единственная Kubernetes нода:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl get nodes<\/code><\/pre><h3>Шаг 5: Подключение NVIDIA runtime<\/h3>\n<pre class=\"e2-text-code\"><code class=\"shell\">sudo nvidia-ctk runtime configure --runtime=containerd\nsudo systemctl restart k3s<\/code><\/pre><p>После перезапуска K3s убеждаемся, что поддержка GPU есть в конфиге:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">sudo grep nvidia \/var\/lib\/rancher\/k3s\/agent\/etc\/containerd\/config.toml<\/code><\/pre><h3>Шаг 6: Установка device plugin<\/h3>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl apply -f \\\nhttps:\/\/raw.githubusercontent.com\/NVIDIA\/k8s-device-plugin\/v0.17.1\/deployments\/static\/nvidia-device-plugin.yml<\/code><\/pre><h3>NVIDIA runtime и device plugin<\/h3>\n<p>После выполнения шага 6 я столкнулся со следующей ситуацией вокруг device plugin — он запускается и не падает, но не видит GPU. В логах можно увидеть:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">No devices found. Waiting indefinitely.\nIncompatible strategy detected auto<\/code><\/pre><p>Причина такого поведения кроется в том, что device plugin запускается под обычным runtime (runc), а не под NVIDIA runtime. Т. е.:<\/p>\n<ul>\n<li>внутри pod’а нет CUDA \/ NVML<\/li>\n<li>GPU не может быть обнаружен<\/li>\n<li><i>nvidia.com\/gpu<\/i> не регистрируется<\/li>\n<\/ul>\n<p>Нужно заставить сам device plugin использовать NVIDIA runtime:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl patch daemonset nvidia-device-plugin-daemonset \\\n  -n kube-system \\\n  --type=&#039;merge&#039; \\\n  -p &#039;{&quot;spec&quot;:{&quot;template&quot;:{&quot;spec&quot;:{&quot;runtimeClassName&quot;:&quot;nvidia&quot;}}}}&#039;<\/code><\/pre><p>Перезапускаем pod:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl delete pod -n kube-system -l name=nvidia-device-plugin-ds<\/code><\/pre><p>и проверяем доступные GPU:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl get node -o jsonpath=&#039;{.status.capacity.nvidia\\.com\/gpu}&#039;<\/code><\/pre><p>Команда должна вернуть <i>1<\/i>.<\/p>\n<h3>Финальная проверка<\/h3>\n<p>Для тестирования работы GPU внутри WSL2 можно запустить следующий pod:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">cat &lt;&lt;&#039;EOF&#039; | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n  name: cuda-smoke-test\nspec:\n  restartPolicy: Never\n  runtimeClassName: nvidia\n  containers:\n  - name: cuda\n    image: nvcr.io\/nvidia\/k8s\/cuda-sample:nbody\n    args: [&quot;nbody&quot;, &quot;-gpu&quot;, &quot;-benchmark&quot;]\n    resources:\n      limits:\n        nvidia.com\/gpu: 1\nEOF<\/code><\/pre><p>и проверить его состояние и логи:<\/p>\n<pre class=\"e2-text-code\"><code class=\"shell\">kubectl get pod cuda-smoke-test -w\nkubectl logs cuda-smoke-test<\/code><\/pre><h3>Что в итоге получилось<\/h3>\n<ul>\n<li>локальный Kubernetes на ноутбуке с Nvidia RTX 5070 (8GB vRAM)<\/li>\n<li>с возможность GPU scheduling<\/li>\n<li>тестирования задач с CUDA и LLM<\/li>\n<\/ul>\n<p>Такое окружение хорошо подходит для локального инференса LLM, экспериментов и обучения. Но его не стоит использовать для бенчмарков и более серьезных задач.<\/p>\n",
            "summary": "Локальный Kubernetes с GPU внутри WSL2: K3s + NVIDIA runtime + device plugin. Разбор проблемы с NVML\/device discovery и практическое решение через runtimeClass.",
            "date_published": "2026-04-22T11:57:42+03:00",
            "date_modified": "2026-04-22T12:03:41+03:00",
            "tags": [
                "gpu",
                "kubernetes",
                "nvidia",
                "windows",
                "wsl2",
                "инфраструктура ИИ"
            ],
            "_date_published_rfc2822": "Wed, 22 Apr 2026 11:57:42 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}