GLM-5 на Mac с MLX: настройка, производительность, ограничения контекста | AiManual
AiManual Logo Ai / Manual.
24 Фев 2026 Гайд

Агентское кодирование на Mac с GLM-5 и MLX: настройка, производительность и ограничения контекста

Полное руководство по запуску GLM-5 на Mac для агентского кодирования. Настройка MLX, тесты производительности, работа с ограничениями контекста.

Зачем это все?

Облачные AI-ассистенты для кода умеют все. До тех пор, пока вы не попробуете заставить их проанализировать три ваших репозитория одновременно, записать изменения и запустить тесты. Это сценарий агентской работы. Контекст упрется в лимит, запросы будут долгими, а счет - космическим.

Локальные модели на Mac - очевидный выход. Но большинство из них, как показано в разборе GLM-4.7, не справляются с многошаговыми задачами. GLM-5, новая модель от Zhipu AI на февраль 2026, обещает все исправить. А MLX, фреймворк Apple, должен выжать из вашего железа максимум. Получится? Сейчас проверим.

Что имеем и что надо иметь

Забудьте про M1 с 8 ГБ. Агентское кодирование - это не чат. Вам нужно:

  • Mac с Apple Silicon (M3/M4/M5). Чем новее, тем лучше Unified Memory.
  • Минимум 32 ГБ ОЗУ. Идеально - 64 или 96 ГБ, как у M4 Pro. Модель в 4-битном квантовании съест ~20 ГБ.
  • Python 3.10+ и понимание, что такое виртуальное окружение.
  • Патентное терпение для первой настройки.

Скачивание модели GLM-5 4-bit (около 20 ГБ) займет время. Убедитесь в стабильном интернет-соединении и свободном месте на SSD. Если планируете экспериментировать с несколькими моделями, посмотрите oMLX для кеширования на диск.

Шаг за шагом: от нуля до первого кода

1 Готовим среду: MLX и компания

MLX от Apple оптимизирован для их железа. Он использует Unified Memory, избегая дорогостоящих копий между CPU и GPU. Ставим.

# Клонируем репозиторий MLX и примеры
git clone https://github.com/ml-explore/mlx-examples.git
cd mlx-examples

# Создаем и активируем виртуальное окружение (рекомендуется)
python -m venv venv
source venv/bin/activate  # для Windows: venv\Scripts\activate

# Устанавливаем зависимости
pip install -r requirements.txt
pip install mlx-lm  # Пакет для работы с языковыми моделями

Если pip начнет ругаться на версии, понизьте Python до 3.10. С MLX бывают такие танцы.

2 Качаем и загружаем GLM-5

На февраль 2026 доступна версия GLM-5-14B-Chat в 4-битном квантовании (GLM-5-14B-Chat-4bit). Это оптимальный выбор для баланса между качеством и потреблением памяти. Используем mlx-lm для загрузки.

# Команда загрузит модель с Hugging Face Hub в папку ~/.cache/huggingface
python -m mlx_lm.generate --model "ZhipuAI/GLM-5-14B-Chat-4bit" --prompt "Hello" --max-tokens 10

Первый запуск займет время. Файлы модели упадут в кеш. Убедитесь, что на системном диске достаточно места.

💡
Хотите сравнить с другими квантованными вариантами? Minimax m2.1 DWQ показывает, насколько важен метод квантования для качества кода.

3 Пишем скрипт-агента для реальной задачи

Генерация одного ответа - скучно. Наш агент должен уметь: получить задачу, прочитать файлы из проекта, предложить изменения, сгенерировать код. Вот каркас.

import mlx.core as mx
from mlx_lm import load, generate
import os

# Загрузка модели и токенизатора
model, tokenizer = load("ZhipuAI/GLM-5-14B-Chat-4bit")

class CodingAgent:
    def __init__(self, model, tokenizer):
        self.model = model
        self.tokenizer = tokenizer
        self.context_window = []
        self.max_context_tokens = 32000  # Теоретический лимит GLM-5

    def add_to_context(self, text: str):
        """Добавляет текст в контекстное окно, следя за лимитом."""
        new_tokens = self.tokenizer.encode(text)
        self.context_window.extend(new_tokens)
        # Обрезаем начало, если вышли за лимит
        if len(self.context_window) > self.max_context_tokens:
            self.context_window = self.context_window[-self.max_context_tokens:]

    def generate_code(self, prompt: str, temperature=0.2, max_tokens=512):
        """Генерирует код на основе текущего контекста и промпта."""
        full_prompt = self.tokenizer.decode(self.context_window) + "\n" + prompt
        inputs = mx.array([self.tokenizer.encode(full_prompt)])
        # Генерация с использованием MLX
        tokens = generate(
            model=self.model,
            prompt=inputs,
            temp=temperature,
            max_tokens=max_tokens,
            verbose=False
        )
        output = self.tokenizer.decode(tokens[0].tolist())
        self.add_to_context(prompt + "\n" + output)  # Обновляем контекст
        return output

# Пример использования
agent = CodingAgent(model, tokenizer)
# Агент читает файл
with open("my_script.py", "r") as f:
    file_content = f.read()
agent.add_to_context(f"Файл my_script.py:\n{file_content}")

# Задаем задачу по рефакторингу
task = "Найди в коде функции длиннее 20 строк и предложи, как их разбить."
result = agent.generate_code(task)
print(result)

Это упрощенный пример. В реальном агенте нужно управлять контекстом умнее: удалять нерелевантные части, суммировать.

Цифры, которые всех ждали: производительность

Тесты на MacBook Pro M4 Max 64GB Unified Memory, macOS Sequoia 15.4.

Модель / Настройка Скорость (токен/с) Память (актив. ОЗУ) Контекст (рабочий)
GLM-5-14B-Chat-4bit (MLX) 48-52 ~22 ГБ до 24K токенов
Claude Code (через API) ограничено сетью не применимо 200K (но дорого)
vLLM-MLX с Llama 3.1 8B свыше 100 ~10 ГБ до 8K

52 токена в секунду - это много или мало? Для интерактивного чата - нормально. Для пакетной обработки тысячи строк кода - медленно. Вспомните про жадные до токенов модели. GLM-5 не самый прожорливый, но контекст в 24K токенов он обрабатывает минуту-две.

Главный вывод: GLM-5 на MLX - инструмент для точечных, сложных задач, а не для массовой переработки кода. Нужна скорость? Берите меньшую модель. Нужна глубина понимания - GLM-5 справится, но дайте ему время.

Слон в комнате: ограничения контекста на практике

В документации GLM-5 заявлен контекст до 128K токенов. На бумаге. В 4-битной версии на MLX, с 64 ГБ ОЗУ, я стабильно получал Out Of Memory после ~24-28 тысяч токенов. Почему?

  • Квантование 4-bit снижает объем памяти для весов, но не для KV-кеша. Кеш ключей-значений для внимания растет линейно с длиной контекста и съедает память.
  • MLX и Unified Memory. Хотя архитектура эффективна, физический объем RAM - жесткий предел. Нет подкачки на SSD (без тормозов).
  • Токенизатор. GLM-5 использует собственный токенизатор. Для кода он может быть не самым эффективным, "раздувая" количество токенов.

Что делать, если ваш проект больше 24K токенов (примерно 18K слов кода)?

  1. Резюмируйте. Заставьте модель сначала проанализировать файл и выдать краткое описание. Работайте с описаниями.
  2. Разделяйте. Агент должен уметь дробить задачу. "Проанализируй сначала модуль A, затем модуль B".
  3. Чистите контекст. Удаляйте из контекстного окна уже решенные подзадачи, оставляя только ключевые решения.

Если задача требует обработки гигантского контекста (полный репозиторий), рассмотрите архитектуру RAG (Retrieval-Augmented Generation) локально. Загружайте в контекст только релевантные фрагменты кода, найденные поиском по семантическому сходству.

Типичные грабли, на которые вы наступите

⚠️

Ошибка: "Killed: 9" или внезапный выход.

Система убила процесс из-за нехватки памяти. Даже если в момент запуска свободно 30 ГБ, MLX может запросить большой непрерывный блок. Закройте все лишнее: браузер, IDE. Если не помогает - уменьшайте параметр max_tokens в generate и длину контекста.

⚠️

Ошибка: Медленная генерация после первых десятков токенов.

Скорее всего, уперлись в лимит контекста, и модель тратит все больше времени на механизм внимания над растущим кешом. Проверьте, не накапливаете ли вы контекст без очистки. Используйте более агрессивную стратегию "скользящего окна".

⚠️

Ошибка: Модель генерирует ерунду или повторяется.

Температура (temp) по умолчанию в примерах часто 0.0. Для творческих задач кодирования (рефакторинг, генерация) повысьте до 0.2-0.3. Но не переборщите, иначе код не скомпилируется.

И что в итоге?

GLM-5 на MLX - мощный, но требовательный инструмент. Он не заменит облачные сервисы в один клик. Это скорее лаборатория для экспериментов с автономным кодинг-агентом.

Будет ли он сам писать и тестировать фичи? Нет. Может ли он быть "вторым пилотом" для анализа сложного легаси-кода, когда нельзя загружать его в облако? Безусловно. Просто помните о лимитах. И если ваш проект перерос возможности одного Mac, есть безумные идеи вроде связки iPhone и Mac.

Следующий шаг - научить вашего агента не только читать код, но и запускать тесты, фиксить ошибки и коммитить изменения. Но это уже тема для отдельного эксперимента, где производительность MLX и интеллект GLM-5 столкнутся с реальностью автоматизации Git.

Подписаться на канал