Эта статья написана максимально доступно, чтобы любой новичок мог легко освоить локальное развертывание моделей и создать собственный рабочий процесс.
В этом году отечественные открытые большие языковые модели были очень активны. DeepSeek, Qwen, Kimi, GLM, MiniMax... новые модели появляются одна за другой, постоянно открывая свои веса и начиная на равных соперничать с закрытыми моделями из США.
Но чем больше моделей, тем больше меня волнует конкретный вопрос: могут ли эти модели не просто оставаться на веб-страницах и в API, а быть действительно установлены на наши собственные машины, подключаясь к локальным файлам, инструментам и рабочим процессам?
Хотя удельная стоимость токенов API в целом снижается, затраты остаются высокими при частых вызовах и работе с длинными текстами. В сочетании с такими проблемами, как конфиденциальность, работа в сети и контроль над данными, локальное развертывание становится выбором все большего числа разработчиков и предприятий.
Поэтому на этот раз я хочу выбрать модель с достаточно большим размером, показательную для развертывания на одной машине, и пройти полный процесс локального развертывания.
Главным героем в итоге была выбрана Ling-3.0-flash, открытая компанией Ant Bailing — модель смеси экспертов (MoE) с общим количеством параметров 124B. У меня как раз есть NVIDIA DGX Spark, на котором её можно запустить.
Без лишних слов, давайте начнем основное действо.

01 Введение в терминологию
Прежде чем начать, давайте познакомимся с некоторыми терминами, связанными с моделями, чтобы все были в курсе ✌🏻
Точность модели
Одна и та же модель часто предлагается с разной точностью или в квантизированных версиях, что напрямую влияет на размер модели и порог её запуска.

На этот раз мы используем официальную версию Ling INT4, которая весит около 71,75 ГБ.
Плотная или MoE

Обратите внимание, что 5,1B — это только количество параметров, активируемых за один вывод; полные веса на 124B всё равно должны быть загружены в память.
Инференс-движок
Инференс-движок отвечает за загрузку весов, управление контекстом и параллелизмом, а также предоставление интерфейсов. Это инструмент для запуска модели, а не сама модель.

На этот раз мы выбрали vLLM, потому что текущая официальная адаптация поддерживает веса INT4 для Ling-3.0-flash и спекулятивное декодирование MTP.
02 Установка и развертывание модели
Сначала представлю среду установки: я использую NVIDIA DGX Spark, оснащенный чипом GB10 и 121,6 ГБ унифицированной памяти, работающий под управлением Ubuntu 24.04 на архитектуре ARM64. Развертывается Ling-3.0-flash-INT4, а для последующих тестов пропускной способности будет использоваться локальный Qwen 3.8-27B в качестве эталона.
Официально предоставляются базовая версия и версии с разной точностью, такие как FP8, FP4 и INT4. Вы можете выбрать в зависимости от вашего оборудования.
Также есть 8B Ling-3.0-tiny и его версии FP8, INT4. Пользователи с обычным Mac или одной 4090 могут в первую очередь попробовать версии Tiny с низкой точностью.

Шаг 1: Загрузка модели. На этот раз я использовал официальную версию INT4. Ссылки для загрузки 👇🏻
- Hugging Face: Ling-3.0-flash-int4
- ModelScope: Ling-3.0-flash-int4
Если доступ к Hugging Face затруднен, вы можете загрузить вручную с ModelScope. После загрузки будет 24 шарда safetensors, общим объемом около 71,75 ГБ. Также необходимо оставить место для инференс-движка и KV Cache во время работы.
Шаг 2: Подготовка окружения. Архитектура BailingMoeV3 у Ling-3.0-flash довольно новая. Я пытался использовать GGUF с llama.cpp, но получил ошибку unknown model architecture: 'bailingmoe3'. Поэтому на этот раз я использовал официально адаптированную ветку vLLM напрямую:
1pip install uv2uv venv ~/my_ling_env3source ~/my_ling_env/bin/activate45git clone -b ling_3_0 https://github.com/inclusionAI/vllm-ling-v3.git6cd vllm-ling-v37VLLM_USE_PRECOMPILED=1 uv pip install --editable . --torch-backend=auto
Шаг 3: Запуск инференс-сервиса. Замените путь к модели на путь к вашим локально загруженным весам INT4:
1vllm serve /path/to/Ling-3.0-flash-int4 \2 --served-model-name ling-int4 \3 --host 127.0.0.1 \4 --port 30000 \5 --trust-remote-code \6 --max-model-len 16384 \7 --gpu-memory-utilization 0.8 \8 --max-num-seqs 8 \9 --reasoning-parser ling3 \10 --speculative-config '{"method":"bailing_hybrid_v3_mtp","num_speculative_tokens":1}'
⚠️
Пожалуйста, замените пути в команде на фактические пути на вашей машине.
Здесь лимит контекста установлен на 16K, параллелизм на 8, и включено спекулятивное декодирование MTP.
Примечание: MTP (Multi-Token Prediction) позволяет модели пытаться предсказывать несколько токенов одновременно. Правильно предсказанные части могут быть приняты напрямую, что сокращает количество вычислительных раундов для генерации токенов по одному и увеличивает скорость вывода.
Шаг 4: Проверка сервиса. После запуска отправьте простой запрос:
1curl -s http://127.0.0.1:30000/v1/chat/completions \2 -H "Content-Type: application/json" \3 -d '{"model":"ling-int4",4 "messages":[{"role":"user","content":"Привет, представься, пожалуйста, одним предложением."}],5 "stream":true}'
Терминал начинает возвращать контент в потоковом режиме, что означает, что эта 124B модель работает локально.

03 Тестирование производительности и возможностей модели
- Пропускная способность токенов Когда модель только запустилась, я провел один раунд тестов, используя встроенный бенчмарк vLLM. Все 20 запросов были выполнены, пропускная способность вывода составила 84,34 ток/с, общая пропускная способность токенов — 133,10 ток/с, а уровень принятия MTP — 67,35%.

Исходный вывод лога 👇🏻
1============ Serving Benchmark Result ============2Successful requests: 203Failed requests: 04Request rate configured (RPS): 2.005Benchmark duration (s): 60.716Total input tokens: 29607Total generated tokens: 51208Request throughput (req/s): 0.339Output token throughput (tok/s): 84.3410Peak output token throughput (tok/s): 61.0011Peak concurrent requests: 20.0012Total token throughput (tok/s): 133.1013---------------Time to First Token----------------14Mean TTFT (ms): 19692.9815Median TTFT (ms): 18877.9916P99 TTFT (ms): 40039.0217-----Time per Output Token (excl. 1st token)------18Mean TPOT (ms): 44.6119Median TPOT (ms): 44.0920P99 TPOT (ms): 49.6821---------------Inter-token Latency----------------22Mean ITL (ms): 74.0923Median ITL (ms): 72.3924P99 ITL (ms): 280.7125---------------Speculative Decoding---------------26Acceptance rate (%): 67.3527Acceptance length: 1.6728Drafts: 305129Draft tokens: 305130Accepted tokens: 205531Per-position acceptance (%):32 Position 0: 67.3533==================================================
Впоследствии я провел тесты на параллелизм для Ling и локального Qwen 3.8-27B. При параллелизме 8 совокупная пропускная способность Ling составила 141,38 ток/с, в то время как у Qwen 3.8 — 32,61 ток/с, разница составила около 4,34 раза в этом раунде.
🔥🔥🔥Сравнение стресс-тестов Ling-3.0-Flash и Qwen3.8-27B

Ling-3.0-flash

Qwen 3.8 -27B


Некоторые могут удивиться: почему при единичном параллелизме скорость Ling составляет всего 34,77 ток/с, а при параллелизме 8 становится 141,38 ток/с? Технически подкованные друзья могут также спросить, не медленна ли эта скорость при единичном параллелизме по сравнению с официальными данными.
Здесь необходимо объяснить конкретный метод тестирования и разницу в скорости, вызванную различными методами оценки:
- Метод тестирования и реальный сквозной канал: Этот тест использует локальный интерфейс, совместимый с OpenAI, с нагрузочным тестированием через HTTP-запросы в потоковом режиме, а не офлайн-тест вывода, оторванный от сервисного фреймворка. Каждый запрос к Ling использует длинный текстовый промпт примерно на 150 токенов, генерируя до 512 токенов. Время засекается с момента HTTP-запроса клиента до завершения потокового ответа, таким образом включая локальные HTTP-вызовы, планирование сервиса, обработку токенизатора, Prefill, покадровое декодирование и потоковый возврат.
- Скорость вывода одного потока против совокупной пропускной способности машины: Скорость одного потока (реальный пользовательский опыт): При $c=1$ сквозная скорость вывода составляет около 35,34 ток/с (реальные тесты одного диалога показывают 38+ ток/с), что эквивалентно более 35 китайских иероглифов в секунду, что визуально очень быстро; Совокупная пропускная способность (общий вывод при параллелизме): С увеличением параллелизма vLLM использует Continuous Batching для объединения нескольких запросов в вычисления GPU, полностью используя пропускную способность унифицированной памяти Blackwell. При параллелизме 8 совокупная пропускная способность машины взлетает до 141,38 ток/с.
Что касается того, почему это отличается от некоторых официальных бенчмарков, ключевым моментом являются критерии тестирования. Точность модели, инференс-движок, длина контекста, количество входных/выходных токенов, масштаб параллелизма, а также то, используется ли офлайн-вывод или HTTP-сервисы, — всё это влияет на конечный результат. Только когда эти условия в основном совпадают, цифры подходят для прямого сравнения.
Проще говоря: Скорость варьируется в зависимости от методов оценки — если тестировать при экстремально высоком параллелизме (например, 32/64) или в чисто вычислительной среде без сетевых протоколов, общие цифры пропускной способности будут выглядеть выше; в наших повседневных разговорах один на один или в продуктивных вызовах для кодирования скорость одного потока Ling в 35+ ток/с и задержка первого токена менее 220 мс уже ощущаются как чрезвычайно плавные и без задержек.
При единичном параллелизме средняя скорость одного потока Ling составляет около 35,34 ток/с; при параллелизме 8 совокупная пропускная способность достигает 141,38 ток/с. Совокупная пропускная способность Qwen3.8 при параллелизме 8 составляет 32,61 ток/с. В этом раунде преимущество Ling в основном проявляется в скорости вывода и пропускной способности при параллелизме, ответы в реальном использовании заметно быстрее.
2. Реальные возможности
Бенчмарки отражают только часть производительности; фактическая полезность зависит от того, как модель справляется с конкретными задачами. Я выбрал три направления для простого тестирования.
(1) Логическое рассуждение
Я подготовил вариацию задачи про кур и кроликов, классическую задачу про автомойку и задачу про автомоечную машину, в основном чтобы проверить, может ли она точно понимать условия, а не применять знакомый с виду ответ. Среди них задача про кур и кроликов включала 4 механических птицы с тремя ногами, чтобы сломать стандартные шаблоны.

(2) Границы безопасности: Затем я проверил её реакцию на высокорисковые операции: выполняет ли она их напрямую или выявляет риски, подтверждает с пользователем и предлагает более безопасные альтернативы.

(3) Длинный текст
Наконец, раунд тестирования длинного текста. Я спрятал ключевую информацию в длинном контексте, чтобы проверить, сможет ли она её точно найти и ответить, одновременно наблюдая за скоростью вывода и стабильностью при работе с длинным текстом.

04 От API к TUI, затем к вызову инструментов
Мы завершили развертывание модели и тестирование возможностей, но для обычных пользователей curl больше подходит для проверки интерфейсов, чем для повседневного использования. Чтобы долго разговаривать с локальной моделью, нужен более удобный интерфейс взаимодействия.
Поэтому я сначала сделал простой TUI, интерфейс чата, работающий в терминале. Это не сложное программное обеспечение; я попросил AI написать Python-скрипт, который инкапсулирует локальные вызовы интерфейса, потоковый вывод и историю разговоров, а затем запустил его одной командой:
1python3 ling-3.0-chat.py
Таким образом, мне не нужно каждый раз писать curl. Открываю терминал и общаюсь напрямую; ответы приходят в потоковом режиме, и я вижу TPS, TTFT и количество токенов. Я провел предыдущие тесты возможностей в этом интерфейсе.
Однако на данный момент TUI — это просто инструмент для текстового чата без возможности вызывать инструменты. Большая языковая модель подобна «мозгу», отвечающему за мышление, но у неё нет «рук и ног», чтобы читать файлы, выполнять команды или знать текущее состояние системы.
Чтобы позволить ей вызывать системные возможности, нам нужно добавить вызов инструментов. Проще говоря, такие операции, как выполнение команд, чтение и запись файлов, инкапсулируются как инструменты. Модель сначала определяет, какая информация ей нужна, затем инициирует tool use; Python-скрипт выполняет его и передает результат обратно модели для дальнейшей обработки.
Например, изначально, когда я попросил её проверить информацию о GPU системы, она не знала реального использования и могла только сказать мне, как это проверить. После добавления вызова инструментов она смогла сама выполнять системные команды и организовывать результаты запроса непосредственно в TUI.
Основываясь на том же принципе, вы можете продолжать подключать веб-поиск, внутренние корпоративные интерфейсы, базы данных и т.д. Конкретные инструменты могут быть расширены в соответствии с бизнес-потребностями.

05 Подключение к визуальному интерфейсу
Для личного использования TUI с вызовом инструментов на самом деле вполне достаточно. Чтобы пойти дальше и поместить модель в более полную среду Agent, вы можете подключиться к агентному фреймворку, такому как Harness.
На этот раз я выбрал DeepSeek Harness от Liang Sheng, который не просто добавляет страницу чата, но также предоставляет управление контекстом, рабочие пространства, вызов инструментов, контроль разрешений и планирование задач, со встроенным веб-интерфейсом. Он использует архитектуру «всё есть плагин», что позволяет расширять функциональность в будущем.
Обратите внимание, что DeepSeek Harness всё еще находится на стадии предварительной версии для разработчиков и быстро обновляется, что может привести к несовместимым изменениям. Существует множество других агентных фреймворков с открытым исходным кодом; вы можете выбрать в соответствии со своими потребностями.
Процесс подключения несложен: основная идея — добавить пользовательский сервис модели и указать адрес на локальный интерфейс, предоставляемый vLLM. Помимо настройки в веб-интерфейсе, вы также можете изменить файл конфигурации, как показано:
1llm-pi-ai:2 providers:3 ling:4 displayName: "Ling-3.0-flash (124B)"5 api: openai-completions6 baseURL: http://127.0.0.1:30000/v17 apiKeyEnv: OPENAI_API_KEY8 models:9 - id: ling-int410 name: Ling-3.0-flash (124B MoE)
После запуска веб-интерфейса откройте адрес по умолчанию в вашем браузере:
1http://localhost:3080
Таким образом, повседневное общение, история и переключение моделей могут выполняться в DeepSeek Harness. Harness сам предоставляет файловые операции, выполнение команд и планирование задач, которые могут быть дополнительно расширены через плагины. Что касается конкретного использования и сторонних плагинов, заинтересованные друзья могут поискать их.
Обратите внимание, что инструменты, которые я написал в Python TUI, не будут автоматически перенесены. Чтобы использовать их в Harness, их нужно повторно интегрировать в соответствии с его механизмом плагинов. Ниже показан фактический эффект интеграции, который я сделал для Ling; вы можете посмотреть запись.

06 Создание AI-рабочего процесса
На данный момент полная цепочка для одной модели Ling-3.0-flash от развертывания до интерфейса и вызова инструментов полностью установлена.
Однако в реальных проектах мы обычно не используем только одну модель. Разные модели хороши в разных вещах; их комбинирование часто лучше, чем попытка заставить одну модель делать всё.
Сильная сторона Ling-3.0-flash — это скорость обработки текста и генерации, но она не поддерживает нативный мультимодальный ввод. Если задача требует понимания изображений или видео, вы можете подключить мультимодальную модель, такую как Qwen3.8-27B; если нужно генерировать видео, вы можете подключить недавно открытую MiniMax H3. Каждая модель занимается тем, что у неё получается лучше всего, передавая результаты следующей.
Например, чтобы построить рабочий процесс генерации видео, Ling может сначала понять требования, написать сценарий и разбить раскадровку, затем мультимодальная модель проверяет справочные материалы и визуальную согласованность, и, наконец, видеомодель генерирует видео. После генерации можно провести еще один раунд визуальной проверки, чтобы изменить промпты и перегенерировать на основе результатов:
1Требования и материалы2→ Ling генерирует сценарий и раскадровку3→ Мультимодальная модель проверяет материалы и визуальные требования4→ MiniMax H3 генерирует видео5→ Мультимодальная модель проверяет визуал и непрерывность6→ Ling корректирует промпты на основе обратной связи7→ Человек выполняет финальную проверку
Видео ниже показывает фактический эффект промптов, сгенерированных Ling-3.0-flash, а затем переданных MiniMax H3 для генерации.

Как только этот процесс зафиксирован, вам нужно только менять требования и материалы для многократного использования. Однако одновременный запуск нескольких больших языковых моделей локально предъявляет очень высокие требования к VRAM и памяти. Ling INT4 занимает около 72 ГБ, Qwen3.8-27B BF16 — около 51,77 ГБ, плюс KV Cache и видеомодели; их трудно удержать все одновременно на этом Spark.
Перед фактическим развертыванием обязательно рассчитайте, сколько VRAM или унифицированной памяти требуется каждой модели. Когда ресурсов недостаточно, вы можете переключать модели пошагово, выбирать квантизированные версии или распределять модели по нескольким устройствам. Несколько моделей больше не работают независимо, а сотрудничают вокруг одной задачи — это и есть по-настоящему используемый многомодельный AI-рабочий процесс.
07 Заключительные мысли
От развертывания модели, TUI и вызова инструментов до многомодельных рабочих процессов — вся цепочка завершена. Цель этой статьи — поделиться повторяемым методом, а не фиксированной конфигурацией.
Модели с открытым исходным кодом будут продолжать обновляться. В будущем, независимо от того, меняете ли вы модели, версии квантизации или инференс-движки, путь от загрузки весов и запуска сервисов до подключения инструментов и рабочих процессов вряд ли сильно изменится.
Если позволяют условия, я всё же рекомендую всем лично развернуть локальные модели:
- Контроль над данными: Файлы, разговоры и бизнес-данные остаются на вашей машине или в интрасети, права на каталоги и команды ограничены вами.
- Подходит для частого использования: Нет необходимости рассчитывать стоимость токенов при каждом использовании, снижается зависимость от сети и сторонних сервисов.
- Легкая настройка: Модели, точность квантизации, инференс-движки и инструменты могут быть настроены, можно подключать внутренние интерфейсы и базы данных.
Поскольку модели с открытым исходным кодом становятся всё мощнее, локальное развертывание станет выбором для большего числа людей. Вы можете создавать инструменты и рабочие процессы, исходя из своих задач, оборудования и бюджета. Я надеюсь, что в будущем у каждого будет свой собственный локальный Agent, и не придется каждый раз смотреть на расход токенов, по-настоящему достигнув своей собственной «Свободы токенов»!
Связанные ресурсы
- Hugging Face: Веса Ling-3.0-flash INT4
- ModelScope: Веса Ling-3.0-flash INT4
- Официальный репозиторий адаптации vLLM
📚 Сводка предыдущих статей
- Практическое руководство по Hermes Agent: От тревоги X к автоматическому накоплению
- Руководство программиста по предотвращению выпадения волос
- Подключение Hermes к iMessage
- Подключение Hermes к X Premium
- Полное руководство по Hermes Agent
- Вводное руководство по Hermes Agent: Вспомогательные модели
- Вводное руководство по Hermes Agent
- Продвинутое руководство по Hermes Agent
- Неполное руководство по Hermes Agent
- Полное руководство по подписке Claude Pro в Нигерии
- Учебник по регистрации Apple ID в Нигерии
- Подписка ChatGPT Plus за полцены в Турции
- Регистрация Apple ID в США
- Подписка Claude/ChatGPT/Gemini через Alipay
- Полный учебник по локальному развертыванию LLM на Mac
- Проверка качества IP
- Почему Doubao не рекомендует ваш бренд
- Как объяснить бабушке, что то, что сказал Doubao, неправда
Если это было полезно, пожалуйста, подпишитесь + добавьте в закладки + сделайте репост 👏🏻
Подпишитесь на @Lonely__MH для постоянных обновлений с понятными учебниками для начинающих и инсайтами по AI-инструментам.





