NVIDIA Blueprints и NIMs для создания 3D-графики. Как развернуть и создавать изображения. Пошаговая инструкция + промты

Генеративный ИИ быстро перешёл из исследовательских лабораторий в руки разработчиков, художников и команд по разработке продуктов, открывая новые формы создания контента для многих отраслей и обещая значительное повышение эффективности.
Но его не так просто запустить, существует множество практических задач: эффективное развертывание больших моделей, управление с постоянно меняющимися зависимостями, соответствие требованиям к оборудованию и поддержание стабильной производительности в различных средах.
Хотя такие сервисы, как ChatGPT, могут очень облегчить жизнь, локальное выполнение задач ИИ - сложная задача. На настройку - даже для технических команд - уйдут недели или месяцы, чтобы создать реальное приложение, использующее современные модели ИИ.
Обычно приходится сталкиваться с огромными размерами моделей, решением проблем совместимости с PyTorch, TensorFlow, ONNX и CUDA, настройкой под различные архитектуры графических процессоров или написанием собственного кода вывода только для того, чтобы простой вызов API работал в продакшене.
Микросервисы вывода NVIDIA (NIM) были разработаны для оптимизации и стандартизации рабочего процесса развертывания.
Эти готовые контейнерные модели ИИ поставляются с высокопроизводительными API, оптимизированными для оборудования NVIDIA, и готовы к корпоративному или периферийному развертыванию.
Независимо от того, управляете ли вы конвейером генерации изображений или моделью многомодального поиска, NIM снимают бремя обслуживания моделей, ускорения на GPU и масштабирования.
Они также включают встроенные функции мониторинга и контроля доступа, необходимые для обеспечения бесперебойной работы в производственных средах.
В этой статье мы рассмотрим рабочий процесс генеративного ИИ на основе NIM: мы используем очень простую 3D-сцену, созданную в Blender, которая предоставляет подсказки нескольким моделям ИИ для преобразования структурированных входных данных в привлекательные стилизованные результаты.
Мы рассмотрим настройку, возможности и ограничения этого конвейера, написание эффективных подсказок, тесты производительности и совместимость с оборудованием.
Что такое NVIDIA Blueprints и NIM?
Представьте себе NIM-модули NVIDIA как готовые к игре предустановленные пакеты модов, но для алгоритмов ИИ.
Загружая сырую модель ИИ, вам придётся потратить немало времени на её настройку, чтобы ваша система могла ее запустить. Это занимает часы, а иногда и дни.
NIM-модули предоставляют вам чистый, оптимизированный контейнер plug-and-play, который «просто работает» на видеокартах NVIDIA.
NIM-модули довольно гибки в плане содержимого:
По сути, это установщики с различными компонентами ИИ, такими как модель диффузии для генерации изображений или обширная языковая модель для генерации текста, обёрнутые в простой в использовании API, который можно вызывать из кода.
Это обеспечивает простой доступ к модели ИИ без необходимости настраивать всё вручную.
NIM-модули разработаны и оптимизированы NVIDIA, поэтому они гарантированно будут хорошо работать на её видеокартах.
Насколько нам известно, поддержка запуска на другом оборудовании, таком как AMD или Intel, отсутствует.
Далее, Blueprints, и здесь мы также попытались использовать игровую аналогию.
Если NIM подобны отдельным персонажам в кооперативной игре: у каждого из которых есть определенная роль, например, танк, хилер или DPS, то NVIDIA Blueprints - это командный состав и стратегия, которая объединяет их всех для победы в матче.
Каждый NIM выполняет одну задачу (генерация текста, генерация изображений, поиск и т. д.), но сам по себе он не приведет вас к цели.
Blueprint настраивает весь отряд: какие NIM использовать, какие инструменты их связывают (например, API, базы данных или пользовательские интерфейсы) и как координировать их сильные стороны в единую слаженную работающую систему.
Как и NIM, большинство Blueprints предоставляются NVIDIA, но мы также видели множество из них от других поставщиков.
Вы можете просмотреть список Blueprints на веб-сайте NVIDIA.
Обратите внимание, что, конечно, вы можете создавать свои собственные рабочие нагрузки с помощью NIM, ограниченные только вашим воображением.
Чертежи предназначены для использования в качестве справочных примеров, помогающих понять механизмы сложных рабочих нагрузок для конкретных сценариев.
Как работает? Что делает (и не делает)?
Генерация текста в изображение - одно из самых популярных применений генеративного ИИ.
Вы вводите краткое описание, например, «космический корабль, летящий над нашей планетой ночью под светом луны», и ИИ создаёт совершенно новое изображение, которое пытается соответствовать вашим словам.
Такие инструменты, как Stable Diffusion, Flux и различные облачные решения, сделали этот процесс широко доступным, особенно для художников, дизайнеров и разработчиков игр, стремящихся быстро визуализировать идеи.
Однако у всех этих систем есть один недостаток: они полностью полагаются на текстовую подсказку, чтобы определить, что будет изображено на картинке, как оно будет выглядеть и как будет выглядеть стилистически.
Если вы когда-либо работали с чат-ботом или генератором изображений на базе ИИ, вы, вероятно, задавались вопросом:
«Разве я не могу просто дать тебе грубый набросок или схему, чтобы показать, что я имею в виду?»
Именно этот пробел и заполняет этот конвейер, но вместо того, чтобы рисовать, вы создаете простую 3D-сцену в Blender.
Это дает вам полный контроль над компоновкой, положением камеры и размещением объектов, которые ИИ затем использует в качестве визуального ориентира.
Традиционные инструменты преобразования текста в изображение полностью полагаются на подсказки, часто давая непредсказуемые результаты, когда вам нужно что-то конкретное.
Передавая структурированную 3D-сцену вместе с подсказками, этот конвейер позволяет вам гораздо точнее управлять выводом.
Под капотом 3D-сцена, созданная вами в Blender, преобразуется в упрощенное представление, которое отображает ее базовую структуру, например, расположение объектов в пространстве и их расстояние от камеры.
Результирующий вывод называется «картой глубины» - он не содержит текстур и освещения, а действует как черно-белый эскиз, показывающий расположение объектов и их форму.
Это визуальное руководство затем передаётся в систему, управляемую генеративным ИИ, которая использует его для управления композицией финального изображения.
Кроме того, текстовое сообщение (промт) предоставляет ИИ творческие входные данные, сообщая ему, какую сцену визуализировать, какой стиль использовать и какие элементы должны быть отображены.
В результате получается сочетание того и другого: структура взята из 3D-сцены, а внешний вид - из подсказки.
Более техническое объяснение заключается в том, что Blender генерирует карту глубины на основе ваших 3D-входных данных.
Flux.dev выступает в качестве уровня оркестровки, беря 3D-изображение макета и направляя его в совместимый с ControlNet конвейер.
Он отвечает за форматирование, предварительную обработку и планирование, необходимые для интеграции руководства по композиции на основе глубины с генеративной моделью, управляемой промтом.
Сам модуль ControlNet расширяет базовую модель diffusion, обусловливая процесс генерации внешними входными данными, такими как глубина, положение или карты краев, позволяя пространственной информации из 3D—сцены определять способ рендеринга изображения и направлять его.
ComfyUI служит модульной средой выполнения вывода, предоставляя интерфейс на основе узлов для объединения компонентов модели (таких как текстовые кодировщики, ControlNet и базовая модель диффузии) в визуально настраиваемый граф.
Это позволяет гибко экспериментировать и корректировать веса, стили и влияние входных данных, не затрагивая низкоуровневый код.
Эти данные передаются в Flux.dev, который использует ControlNet для управления моделью диффузии, работающей в ComfyUI.
При этом текстовое приглашение предоставляет информацию о стиле, теме и тематике.
ИИ-модель объединяет оба входных сигнала: карта глубины задаёт композицию, а промт определяет её внешний вид, в результате чего изображение получается визуально целостным и креативно оформленным.
Зачем использовать 3D-модель для создания изображений?
В отличие от обычных инструментов преобразования текста в изображение, которые могут быть непредсказуемыми и сложными в управлении, использование 3D-модели позволяет настроить сцену именно так, как вам нужно.
Вы сами решаете, где будут располагаться объекты, насколько они велики и что видит камера. Это значительно ускоряет получение желаемых результатов и позволяет легко пробовать разные стили, не переделывая процесс.
Поскольку 3D-модель обеспечивает реальную глубину и перспективу, она лучше обрабатывает такие вещи, как окклюзия (что находится спереди или сзади), чем попытки угадать по плоскому 2D-изображению.
Это также отлично подходит, если у вас уже есть 3D-сцена или ассеты. Вам не нужно быть опытным художником - для начала достаточно базового 3D-моделирования.
Пошаговое руководство по настройке: Blender + FLUX.dev + ComfyUI
При настройке мы следовали руководству с GitHub.
Прежде чем запустить конвейер, необходимо установить несколько базовых компонентов.
Для начала убедитесь, что в вашей системе установлены библиотеки Git и C++ runtime - это стандартные инструменты, необходимые для управления кодом и запуска скомпилированных компонентов в фоновом режиме.
Далее вам понадобится токен доступа Hugging Face. Hugging Face - это популярная платформа для обмена и размещения моделей машинного обучения.
Многие продвинутые модели, включая ту, что используется в этом конвейере, размещены там.
Токены используются для аутентификации вашего доступа, особенно для моделей с ограниченными лицензиями или условиями использования.
Перед загрузкой модели вам также необходимо подтвердить наличие лицензии на модель flux.1-dev на Hugging Face.
Это необходимо, поскольку в некоторых моделях, особенно в тех, которые используют генеративные медиа, могут быть особые условия, касающиеся их использования, совместного использования или модификации.
Если вы не приняли лицензию, вы получите соответствующее сообщение об ошибке. Исправить ошибку будет легко.
После этого вам потребуется установить среду выполнения NVIDIA NIM, которая обеспечивает работу бэкенда ИИ, используемого для вывода данных.
Затем установите соответствующий Blueprint, который настраивает взаимодействие между такими компонентами, как Flux.dev, ControlNet и пользовательским интерфейсом генерации изображений.
Программа установки автоматически настраивает виртуальную машину WSL (подсистема Windows для Linux), которая запускает полноценную среду Linux параллельно с Windows.
Это важно, поскольку многие инструменты ИИ, особенно те, которые используют ускорение GPU и контейнеризированные среды выполнения, разработаны для Linux и не работают стабильно в нативной среде Windows.
Благодаря использованию WSL конвейер обеспечивает совместимость и стабильность Linux без необходимости установки отдельного сервера с двойной загрузкой или внешнего сервера.
После установки бэкенда последний шаг настройки - настройка Blender для использования узла ComfyUI BlenderAI.
Это подключает Blender к конвейеру ИИ, чтобы ваша 3D-сцена могла напрямую взаимодействовать с системой генерации изображений.
Теперь вы готовы начать. Откройте Blender и загрузите прилагаемый файл проекта - он уже содержит городскую сцену, которую вы видели в этой статье.
Теперь вы можете экспериментировать с углами камеры, подсказками и стилями вывода. Мы нашли чрезвычайно полезным включить консоль, чтобы видеть ход выполнения и сообщения об ошибках.
Проблемы при развертывании
Мы столкнулись со следующими проблемами:
«Error: statfs /home/workbench/.cache/nim: no such file or directory»
«Ошибка: statfs /home/workbench/.cache/nim: такого файла или каталога нет» - это ошибка в NIM.
По какой-то причине этот каталог отсутствует в контейнере виртуальной машины WSL.
Вы можете исправить это, войдя в контейнер и создав отсутствующий каталог, а затем просто перезапустив Blender и снова подключившись к NIM.
wsl -d NVIDIA-Workbench -u root
su -l workbench
mkdir -p ./.cache/nim
chmod a+rw ./.cache/nim
«Expecting value: line 1 column 1 (char 0)»
«Ожидаемое значение: строка 1, столбец 1 (символ 0)» - эта ошибка возникает, когда в вашей системе недостаточно оперативной памяти.
На официальной странице указано «рекомендуется 48 ГБ», но это немного неточно.
На самом деле это означает, что требуется именно 48 ГБ или больше, с 32 ГБ работать не будет!
После увеличения объёма памяти с 32 ГБ до 64 ГБ эта ошибка исчезла.
«Result: CONTENT_FILTERED»
Result: CONTENT_FILTERED - Стоит отметить, что многие модели ИИ в этом конвейере оснащены встроенными фильтрами безопасности или защитными барьерами, предназначенными для блокировки запросов, которые могут быть интерпретированы как неуместные или небезопасные.
В результате вы можете иногда видеть ошибки или неудачные генерации в зависимости от формулировки вашего запроса.
К сожалению, надёжного решения этой проблемы, похоже, не существует - лучший вариант, слегка изменить запрос.
Даже небольшие изменения иногда могут иметь значение. Тем не менее, фильтрация может быть довольно агрессивной: например, даже такое невинное слово, как «beach» (пляж), может вызвать эту ошибку, возможно, из-за того, что модель склонна проявлять осторожность в отношении контента, связанного с наготой.
Мы также заметили, что при запуске полезно иметь быстрое хранилище.
С SATA SSD мы периодически видели ошибки тайм-аута, когда диск был загружен на 100% - с NVMe SSD всё гораздо быстрее.
Примеры
Начнем с базовой сцены и промта:
- Потрясающая профессиональная фотография живописной деревни в горах зимой, в центре городской площади виден заснеженный фонтан.
В целом не плохо. Давайте изменим промт:
- Потрясающая профессиональная фотография живописной деревни в горах весной, в центре городской площади виден фонтан.
Всего несколько секунд спустя у нас уже совершенно другая сцена, всё ещё соответствующая заданному макету.
Давайте немного сдвинем камеру - это делается в Blender, без изменений в промте.
Представьте, сколько времени вам потребовалось бы, чтобы описать это движение только с помощью текстового промта.
Изменить окружение легко с помощью текстового промта - внесение подобных изменений в трёхмерную среду заняло бы много времени. Вот лишь небольшое текстовое изменение:
- потрясающая профессиональная фотография живописной деревни в оазисе посреди пустыни
Давайте теперь попробуем водный мир:
- потрясающая профессиональная фотография города Венеции с водой
Откуда этот фонтан? Этот фонтан выглядит не к месту. В Blender мы его убрали и поставил на его место яхту – это заняло около 10 секунд.
Далее оставляем то же самое сообщение (промт), только добавим информацию о типе судна.
- Потрясающая профессиональная фотография Венеции с водой и яхтой в центре.
Другая лодка может полностью изменить динамику. Учитывая, что 3D-модель всё ещё на месте, новый промт может стать ключом к улучшению сцены.
- Потрясающая профессиональная фотография Венеции с водой и туристическим катером в центре.
Всего за несколько минут нам удалось полностью преобразить сгенерированное изображение, сохранив при этом исходную планировку сцены.
Это впечатляет, особенно учитывая, сколько времени потребовалось бы для достижения аналогичного результата с помощью физического 3D-художника.
Показатели производительности
Мы также потратили некоторое время на тестирование производительности, чтобы понять, насколько быстро современная видеокарта может обрабатывать этот конвейер.
В первом тесте мы измерили время, необходимое для генерации одного изображения размером 1280x768, с настройкой по умолчанию в 35 шагов.
Эти шаги определяют количество циклов шумоподавления, которые улучшают качество изображения: большее количество шагов улучшает качество, до определённого предела.
Мы также провели тестирование со 100 шагами, что создает большую нагрузку на графический процессор и требует больше времени для выполнения.
Наконец, что не менее важно, мы также измерили время, необходимое для запуска всего конвейера и генерации первого изображения.
Мы также пробовали запустить игру на других видеокартах, таких как RTX 5070 Ti и RTX 4080, но они не смогли пройти этап «Измерение варианта FLUXVariant.DEPTH», несмотря на то, что мы пробовали разные настройки целевого использования видеопамяти.
Кроме того, как вы, вероятно, уже догадались, вся экосистема NIM и Blueprint оптимизирована для вычислительной архитектуры NVIDIA, поэтому поддержка AMD и Intel отсутствует.
Вывод
В этой статье мы создали полноценный локально работающий конвейер генеративного ИИ, сочетающий структурированную точность 3D-сцен с творческой гибкостью текстовых промтов.
Используя Blender для определения макета и композиции, а также Flux для этой структуры, мы смогли создать потрясающие стилизованные результаты с высокой степенью контроля.
Подобные задачи обычно требуют опытного 3D-художника или значительного объема работы с промтами - теперь это занимает всего несколько минут и обеспечивают стабильные, воспроизводимые результаты.
Важным фактором, способствующим этому переходу, является экосистема NIM (микросервисов вывода NVIDIA) и Blueprints от NVIDIA.
NIM берут сложные модели ИИ и оборачивают их в предварительно оптимизированные контейнеры с ускорением на GPU и чистыми API - нет необходимости управлять зависимостями, разворачивать виртуальные машины, писать собственный код вывода или беспокоиться о совместимости.
Они работают «из коробки» на оборудовании NVIDIA и обеспечивают высокую производительность локальных рабочих процессов.
Что ещё важнее, они позволяют разрабатывать и развертывать функции ИИ в частном порядке, без использования внешних облачных сервисов.
Blueprints расширяет это, предлагая полностью оркестрованные примеры реальных вариантов использования, которые объединяют несколько NIM и сервисов в бесшовные конвейеры.
Работаете ли вы с генерацией изображений, текстом, поиском или мультимодальными данными, Blueprints показывает, как всё взаимодействует, экономя часы (или недели) усилий по интеграции.
Независимость данных и конфиденциальность, пожалуй, два самых важных и недооценённых преимущества этой конфигурации.
Благодаря локальному размещению вашего конвейера ИИ вы полностью владеете своими моделями, подсказками и результатами.
Нет необходимости отправлять конфиденциальные данные в сторонние облачные сервисы, никакие метрики использования не будут регистрироваться, а контент не будет извлекаться для обучения новых моделей.
Ваши идеи останутся вашими. Это также может быть важной возможностью для тех, кто работает с проприетарными активами или секретным контентом.
Да, есть ещё несколько шероховатостей - требования к памяти, случайные ошибки и фильтрация подсказок, но в целом опыт чрезвычайно многообещающий.
Несомненно, инструменты и экосистема будут развиваться и расширяться. Более интуитивные пользовательские интерфейсы, более широкая поддержка оборудования, более быстрое время выполнения и более интеллектуальное обусловливание подсказок уже на горизонте - мир ИИ меняется очень быстро.