Техническая ветка для разработчиков Собрать руками

Ограничения Apple GPU для AI-видео

Apple GPU — отличный GPU для UI и мультимедиа, но для локального AI-видео (видео-транскодинг, генерация, обработка) он сталкивается с фундаментальными ограничениями памяти, архитектуры и экосистемы. Разбираем, где он работает, а где — нет.

Что мы называем «AI-видео»

Под AI-видео понимаем задачи, где модель обрабатывает видеопоток как последовательность кадров — не просто статичные изображения. Это:

  • Генерация видео (например, Stable Video Diffusion, LTX-Video)
  • Обработка видео (супер-резолюшн, дубляж, пересъёмка)
  • Анализ видео (детекция действий, трекинг, аномалии)
  • Визуальные агенты с видео-вводом (например, «покажи, как это сделать»)

Важно: даже если модель «видео-совместима», она часто требует обработки 16–64 кадров одновременно — и это критично для Apple GPU.

Архитектурные ограничения Apple GPU

flowchart TD
    A[CPU] -->|PCIe/Unified| B[Unified Memory]
    B --> C[GPU]
    B --> D[Neural Engine]
    C -->|Shared| E[RAM (8–24 ГБ)]
    D -->|Dedicated| F[Low-latency inference]
    
    style C fill:#ff6b6b,stroke:#c92a2a
    style D fill:#36b37e,stroke:#1b998b
    style E fill:#ffca28,stroke:#c97500
    
    note1[GPU: высокий throughput,
но ограниченная память
и отсутствие TVM/ONNX RT] note2[Neural Engine: оптимизирован
для LLM token-генерации,
но не для 3D-тензоров видео] classDef note fill:#f8f9fa,stroke:#dee2e6,stroke-width:1px note1 -.-> C note2 -.-> D class note1,note2 note

Ключевые проблемы:

  • Unified Memory — память делится между CPU/GPU/NE, но не расширяется.
  • Отсутствие CUDA-совместимости — большинство AI-инференс-фреймворков (PyTorch, ONNX Runtime, TensorRT) не оптимизированы под Metal для видео-моделей.
  • Отсутствие TVM/ONNX RT backend для Metal — даже если модель скомпилирована, inference может падать из-за нехватки памяти или отсутствия операций (например, 3D-свёрток).

Где Apple GPU падает — реальные кейсы

1. Stable Video Diffusion (SVD)

  • Модель: ~2.7B параметров, 256×256, 14 кадров
  • Требуемая память: ~6–8 ГБ (включая кэш и промежуточные тензоры)
  • Реальность на M2 Max (64 ГБ): inference стартует, но падает на шаге denoising из-за фрагментации памяти и отсутствия memory-paging в Metal.

2. Video LLaVA / LLaVA-NeXT

  • Модель: LLM + ViT + temporal projector
  • Проблема: ViT обрабатывает кадры по отдельности, но temporal projector требует 3D-тензоров (B, T, H, W, C). Metal не поддерживает эффективные 3D-conv/attention, и PyTorch/XLA не оптимизированы.
  • Результат: inference работает только с 2–4 кадрами, дальше — OOM.

3. Real-time video upscaling (Real-ESRGAN, SWINIR)

  • Металл-версии моделей (через Core ML) работают медленно (1–3 FPS на 1080p), потому что:
  • Нет оптимизированных ядер для 4D-транспозиционных свёрток
  • Core ML не поддерживает динамический batch size и streaming

Что всё-таки работает на Apple GPU

Локальный AI-видео возможен, но только в узких сценариях:

# Пример: обработка одного кадра из видео (не потока)
import torch
from transformers import AutoModelForImageClassification

# Загружаем модель в Core ML через `coremltools`
model = AutoModelForImageClassification.from_pretrained("google/vit-base-patch16-224")
# → конвертируем в .mlmodel
# → запускаем inference на одном кадре (1080p) за ~120 мс на M2 Pro

# Но если попытаться обработать 10 кадров в batch — падает с OOM

Рабочие сценарии:

  • Классификация отдельных кадров (не видео)
  • Обработка статичных изображений из видео (например, скриншоты)
  • Инференс маленьких моделей (MobileNet, EfficientNet-Lite) через Core ML
  • Использование Neural Engine для LLM-вопросов по описанию видео (а не по видео)

Как обойти ограничения — паттерны

Если всё-таки нужен локальный AI-видео-инференс на Mac:

# Паттерн 1: Stream-to-frames + CPU fallback
def process_video_stream(video_path):
    frames = extract_frames(video_path, fps=1)
    results = []
    for frame in frames:
        # Если модель не влезает в GPU — падаем на CPU
        try:
            result = gpu_inference(frame)  # Metal
        except OOM:
            result = cpu_inference(frame)  # PyTorch CPU fallback
        results.append(result)
    return aggregate(results)

Паттерн 2: Двухэтапный pipeline

  1. На Mac: быстрая детекция событий (движение, лицо, аудио-триггеры)
  2. На сервере/облаке: полная AI-обработка (генерация, трекинг, агент)

Пример: «Сними видео при движении → отправь на сервер → получи резюме».

Чеклист: подходит ли Apple GPU под вашу задачу?

Критерий Да Нет
Модель требует >2 ГБ VRAM (включая кэш)
Использует 3D-свёртки / temporal attention
Требует batch size >1 для видео
Использует PyTorch/XLA/TensorRT backend
Работает через Core ML + Metal Performance Shaders

Если в колонке «Да» больше 2 пунктов — используйте удалённый инференс или Windows/Linux с NVIDIA GPU.

Следующий шаг

Если вы всё-таки хотите локальный AI-видео-инференс — переходите к ветке «Что реально можно делать локально». Там разбираем, какие модели и пайплайны работают на M1/M2/M3, и как настроить серверный fallback.

А если вы строите AI-агента с видео-вводом — смотрите «Как собрать агента с tool-calling» и «Как тестировать AI-агента».