Считайте DSPy компилятором для программ промптов, а не заменой управляемой оценки. Ниже разделено: что вы оптимизируете, что замораживаете, какие пороговые гейты блокируют релиз и как репетиция на удалённом Apple Silicon показывает реальную аренду и хвостовую задержку, которую ноутбук скрывает.

На странице: болевые точки · матрица решений · контур оценки · ресурсные потолки · чек-лист стоимости узла · FAQ

Согласуйте имена полей в отчётах с гайдом по наблюдаемости OpenTelemetry GenAI, параметры токенизатора и батча — с матрицей MLX-LM и Transformers на M4, а гигиену датасетов при смеси retrieval и генерации — с локальным RAG: чанки, эмбеддинги и квоты.

Типичные сбои на Mac-стеках с LLM

1. Переобучение оптимизатора. Узкие dev-срезы и ручные правки заставляют компиляцию DSPy выглядеть блестяще, пока удерживаемый офлайн-набор не рухнет на следующей неделе.

2. «Железный» спектакль. Разовые прогоны на ноутбуке смешивают конкуренцию с GUI, термодроссель и произвольный батч — пропускная способность не сопоставима между днями.

3. Слепые зоны экономики. Прайс API игнорирует почасовую аренду, простой GPU и переделки из-за нарушений политик — финансы не защищают запуск.

Выход — единый контур: замороженный набор, кодовые сигнатуры, отчёт JSON на каждый прогон и отдельная репетиция на выделенном хосте, где нет сна и фоновых стримов.

Матрица решений: артефакт, роль и гейт

Артефакт Роль Типичный гейт
Сигнатура + телепромптер Структурированная программа промпта с типизированными входами и выходами. Доля валидного JSON по схеме на офлайн-наборе не ниже 99% до мержа.
Компиляция / bootstrap Поиск промпта с участием учителя в ограниченном числе раундов. Раунды оптимизатора ограничены; вызов учителя только с идентификатором бюджета в трассах.
Удерживаемый JSONL Версионированный бенчмарк с хэшем манифеста. Основной балл в пределах ±1,5% от последней зелёной базовой линии без отдельного одобрения продукта.
Набор ограничений Проверки PII, токсичности или злоупотребления инструментами. Жёсткие нарушения — 0; мягкий порог — ниже 0,5%.
Отчёт удалённого soak Повторяющаяся оценка на выделенном узле Mac. p95 сквозной задержки под гейтом; сверка аренды и токенов.

На еженедельных обзорах идите сверху вниз: сигнатуры заморожены, хэш манифеста совпадает с CI, затем читайте гейты ограничений и задержки, прежде чем спорить о «креативности» модели. При провале гейта заводите один тикет с метрикой, срезом и оценкой долларового эффекта — продукт и финансы решают вместе.

Исполняемый контур оценки

1. Заморозить манифесты: опубликовать SHA256, число строк и поля лицензии рядом с каждым сплитом.

2. Закодировать сигнатуры: держите промпты и селекторы few-shot в репозитории, а не в мессенджерах.

3. Запустить компиляцию или bootstrap с зафиксированными сидами и максимальным бюджетом оптимизатора, согласованным с финансами.

4. Прогнать офлайн-обвязку локально на Metal с тем же квантованием и окном контекста, что планируете к поставке.

5. Сформировать единый JSON-отчёт: агрегаты, разрезы по срезам, худшие примеры для отладки.

6. Повторить тот же job на арендованном удалённом Mac не менее четырёх часов подряд, зафиксировав устойчивый p95 и стоимость простоя.

Архивируйте каждый прогон с той же семантической версией, что и тег в git — аудиторам не понадобятся ноутбуки, чтобы сопоставить промпты, датасеты и профили железа.

Ресурсные потолки для базовых линий на Apple Silicon

Ниже — стартовые ограничители для хостов класса M4 с unified memory; ужесточайте после профилирования ширины модели.

  • Резидентный след модели: оставляйте не менее 18% unified memory под ОС, обвязку оценки и кэш токенизатора.
  • Параллелизм воркеров: ограничьте число одновременных воркеров так, чтобы суммарные prefill-токены не превышали 75% установившегося потолка.
  • Термика: при средней загрузке GPU выше 92% десять минут подряд без нормального обдува — пауза для оптимизатора.
  • Диск: резервируйте около 60 ГБ на быстром SSD под веса, кэш адаптеров и архив отчётов на ветку эксперимента.
# Пример переменных окружения (иллюстрация; секреты вне git) EVAL_SEED=20260420 OFFLINE_EVAL_MANIFEST_SHA256=${OFFLINE_EVAL_MANIFEST_SHA256} DSPY_MAX_TEACHER_ROUNDS=${DSPY_MAX_TEACHER_ROUNDS} DSPY_MAX_BOOTSTRAP_DEMOS=${DSPY_MAX_BOOTSTRAP_DEMOS} QUALITY_REGRESSION_MAX_DELTA=${QUALITY_REGRESSION_MAX_DELTA} CONSTRAINT_HARD_FAIL_RATE_MAX=${CONSTRAINT_HARD_FAIL_RATE_MAX} P95_LATENCY_MS_MAX=${P95_LATENCY_MS_MAX} REMOTE_SOAK_MIN_HOURS=${REMOTE_SOAK_MIN_HOURS} REMOTE_NODE_HOURLY_USD=${REMOTE_NODE_HOURLY_USD}

Чек-лист приёмки стоимости удалённого узла

  • Почасовая аренда, планируемая длительность soak и минуты простоя указаны рядом с расходом токенов API.
  • Удалённый хост повторяет поколение чипа, объём памяти и мажорную версию macOS из плана репетиций.
  • Исходящий трафик для выгрузки артефактов оценен и ограничен с алертами.
  • Политики повторов и предохранителя совпадают с офлайн-обвязкой; нет скрытых лишних вызовов учителя.
  • Итоговый пакет включает JSON оценки, хэш манифеста и подписанное согласие на любое ослабление порога.

FAQ

Нужно ли гонять оптимизацию DSPy в CI на каждый pull request? Держите тяжёлую компиляцию вне критического пути: на PR — быстрые регрессии по замороженным промптам, оптимизатор — по расписанию или вручную.

Зачем обязателен удалённый soak, если локально всё красиво? Ноутбук засыпает, делит CPU с IDE и меняет кривую вентилятора. Выделенный узел ближе к тому, как вы держите длинные джобы и стабилизируете хвост задержки.

Что делать, если качество выросло, а задержка пробила гейт? Блокируйте релиз или согласуйте новый порог с продуктом и финансами; не расширяйте бюджет задержки молча в том же поезде.

Как связать офлайн-ID прогона с продакшеном? Пробросьте те же корреляционные ключи и поля токенов, что описаны в гайде по наблюдаемости, чтобы сравнивать дрейф после выката.

Публичные страницы (без входа): откройте покупку и тарифы без аккаунта, загляните в центр помощи и в каталог технического блога.