Техническая ветка для разработчиков Собрать руками
Ограничения 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
- На Mac: быстрая детекция событий (движение, лицо, аудио-триггеры)
- На сервере/облаке: полная 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-агента».