Привет! Сегодня у нас на столе нечто особенное. Забудьте про очередные нейронки, которые по текстовому промпту рисуют котиков или пишут за вас код-лапшу.
Проект Matrix-Game 2.0 — это интерактивная "модель мира". Говоря по-человечески, это нейросеть, которая не просто генерирует видео, а строит виртуальный мир и позволяет с ним взаимодействовать в реальном времени. Вы жмете на клавиатуру, двигаете мышью — и мир откликается, дорисовывая себя на лету со скоростью 25 FPS. Исходный код лежит на GitHub, так что мы можем не только посмотреть, но и потрогать.
Давайте разберемся, как запустить это у себя на машине, что у там под капотом, и почему это важно.
Ключевое отличие Matrix-Game 2.0 от моделей вроде Sora или Pika — интерактивность и работа в реальном времени. Стандартные модели генерации видео работают по принципу "промпт -> долгое ожидание -> готовый ролик". Это односторонний процесс.
Matrix-Game же использует авторегрессионную диффузию. Это значит, что модель предсказывает следующий кадр, основываясь на предыдущих кадрах и текущих действиях пользователя (нажатиях клавиш, движениях мыши). Это фундаментальный сдвиг парадигмы: от генератора контента к симулятору мира.
Вот основные компоненты, которые делают это возможным:
Проще говоря, это шаг к созданию полноценных симуляций, где ИИ не просто следует скриптам, а динамически моделирует окружение.
This browser does not support the video element.
Сразу оговорюсь: запустить такое чудо на офисном ноутбуке не выйдет. Требования серьезные, но вполне ожидаемые для современных ML-задач.
Перед установкой зависимостей создадим и активируем отдельное окружение conda
, чтобы не засорять систему. Python версии 3.10 — это важно.
conda create -n matrix-game-2.0 python=3.10 -y
conda activate matrix-game-2.0
Теперь можно переходить к установке.
Процесс довольно прямолинейный, если следовать инструкции.
Сначала клонируем репозиторий проекта и переходим в созданную папку.
git clone https://github.com/SkyworkAI/Matrix-Game.git
cd Matrix-Game-2
Теперь устанавливаем все необходимые Python-пакеты из файла requirements.txt
.
pip install -r requirements.txt
После этого нужно установить сам проект в режиме разработки. Это позволит импортировать его модули в скриптах.
python setup.py develop
[!WARNING] Проект зависит от
flash-attention
. Убедитесь, что у вас установлены все необходимые инструменты для сборки (компилятор C++, CUDA Toolkit), так какpip
может начать компилировать его из исходников. Если возникнут проблемы, следуйте официальным инструкциям по установкеflash-attention
.
Предобученные модели хранятся на Hugging Face. Самый простой способ их скачать — использовать huggingface-cli
. Если у вас его нет, установите: pip install -U "huggingface_hub[cli]"
.
Затем выполните команду для скачивания моделей в папку Matrix-Game-2.0
внутри вашего проекта:
huggingface-cli download Skywork/Matrix-Game-2.0 --local-dir Matrix-Game-2.0
Эта команда загрузит все доступные веса: универсальные, для GTA и для TempleRun.
Для начала давайте запустим генерацию с предопределенными случайными действиями, чтобы убедиться, что все работает. Для этого используется скрипт inference.py
.
Команда выглядит так:
python inference.py \
--config_path configs/inference_yaml/inference_universal.yaml \
--checkpoint_path Matrix-Game-2.0/universal/model.safetensors \
--img_path demo_images/universal/0000.png \
--output_folder outputs \
--num_output_frames 150 \
--seed 42 \
--pretrained_model_path Matrix-Game-2.0
Давайте разберем аргументы:
--config_path
: Путь к конфигу. Для начала используем универсальный (inference_universal.yaml
). Есть также для GTA (inference_gta_drive.yaml
) и TempleRun.--checkpoint_path
: Путь к весам модели, которые мы скачали на предыдущем шаге.--img_path
: Стартовое изображение, с которого начнется генерация.--output_folder
: Папка, куда сохранятся итоговые видео.--num_output_frames
: Количество генерируемых латентных кадров.--pretrained_model_path
: Путь к папке с дополнительными компонентами, в частности VAE (Wan2.1_VAE.pth
).После выполнения этой команды в папке outputs
должны появиться два видеофайла: demo.mp4
и demo_icon.mp4
(с наложенным интерфейсом).
Самое интересное — это интерактивный режим. Для него используется скрипт inference_streaming.py
. Он не принимает заранее заданных действий, а будет запрашивать их у вас в консоли в реальном времени.
python inference_streaming.py \
--config_path configs/inference_yaml/inference_universal.yaml \
--checkpoint_path Matrix-Game-2.0/universal/model.safetensors \
--output_folder outputs \
--seed 42 \
--pretrained_model_path Matrix-Game-2.0
Скрипт сначала попросит указать путь к стартовому изображению, а затем будет в цикле запрашивать действия с клавиатуры и генерировать следующие фрагменты видео, пока вы его не остановите.
[!TIP] В репозитории есть небольшая проблема с рендерингом при движении камеры вверх (могут появляться черные экраны). Разработчики обещают исправить. Если столкнулись с этим, просто измените направление движения.
inference.py
Чтобы понять, как это работает, давайте заглянем в inference.py
. Я не буду разбирать каждую строчку, но выделю ключевые моменты.
__init__
)Класс InteractiveGameInference
инициализирует все необходимое:
OmegaConf.load(self.args.config_path)
загружает YAML-конфиг, который определяет параметры пайплайна (шаги шумоподавления, режим и т.д.).generator
): Создается WanDiffusionWrapper
— это обертка над CausalWanModel
, главной диффузионной моделью.VAEDecoderWrapper
и get_wanx_vae_wrapper
). Его задача — переводить изображения из пиксельного пространства в латентное (скрытое) и обратно. Диффузионная модель работает именно с латентами, потому что это гораздо эффективнее, чем с полноразмерными изображениями.pipeline
): CausalInferencePipeline
объединяет generator
и vae_decoder
в единый механизм для генерации.load_file(self.args.checkpoint_path)
загружает скачанные веса модели.generate_videos
)Этот метод — сердце процесса. Вот что происходит по шагам:
Подготовка первого кадра:
load_image(self.args.img_path)
: Загружается стартовое изображение.self.vae.encode(...)
. Это будет наш первый латентный кадр, от которого "оттолкнется" генерация.Создание "холста" для будущих латентов:
cond_concat
, который содержит первый закодированный кадр и маску, указывающую модели, что только этот кадр является известным, а все остальные нужно сгенерировать.Подготовка условий (actions):
universal
, gta_drive
и т.д.) из utils.conditions
загружается последовательность случайных действий: Bench_actions_universal(num_frames)
.conditional_dict
— словарь с условиями для генерации.Запуск пайплайна:
self.pipeline.inference(...)
. Внутри этой функции происходит магия:conditional_dict
).Декодирование и сохранение:
vae_decoder
.process_video(...)
сохраняет итоговые кадры в видеофайл, опционально накладывая на него иконку мыши и нажатые клавиши для наглядности.Ваша поддержка — это энергия для новых статей и проектов. Спасибо, что читаете!
Matrix-Game 2.0 — это больше, чем просто крутая технодемка. Это демонстрация жизнеспособности концепции "моделей мира" (World Models). Идея в том, что для создания по-настоящему интеллектуальных агентов (например, для беспилотных автомобилей или роботов) им нужна внутренняя модель того, как устроен мир и как он реагирует на действия.
Эта технология открывает двери для:
Конечно, технология еще сырая. Генерация не всегда стабильна, есть артефакты, а требования к железу высоки. Но это — реальный, работающий прототип. И тот факт, что он написан на Python и доступен в open-source, позволяет любому энтузиасту прикоснуться к таким технологиям.
Так что, если у вас есть подходящее железо, не поленитесь — соберите и запустите.