• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    借助全新的游戲內推理 SDK,將 NVIDIA ACE AI 角色引入游戲

    NVIDIA ACE 是一套數字人技術,可借助生成式 AI 讓游戲角色和數字助理如生。ACE 設備上模型為自主游戲角色提供代理工作流,這些角色可以感知環境、理解多模態輸入、戰略性地規劃一組行動并實時執行所有這些行動,從而為玩家提供動態體驗。

    為了與游戲引擎一起運行這些模型, NVIDIA In-Game Inferencing (NVIGI) SDK 使您能夠將 AI 推理直接集成到 C++ 游戲和應用中,以實現出色的性能和延遲。

    本文介紹了 NVIGI 如何與 NVIDIA ACE 集成,在游戲開發中實現無縫 AI 推理。我們介紹了 NVIGI 架構、主要功能,以及如何開始使用 NVIDIA ACE 設備端模型創建自主角色。

    NVIDIA ACE 設備端模型?

    NVIDIA ACE 支持由生成式 AI 提供支持的語音、智能和動畫。它提供了一套 AI 模型,使游戲角色能夠根據玩家的互動進行實時感知、推理和行動:

    • 感知: 即將推出的 NeMoAudio-4B-Instruct 模型通過提高音頻的上下文感知來增強角色交互。您可以輕松集成更多的多模態模型,通過整合其他感官輸入來進一步擴展這些功能。
    • 認知 Mistral-Nemo-Minitron-Instruct 系列小語言模型 在指令跟隨功能方面位列圖表榜首,這些功能可讓角色準確地進行角色扮演。
    • 內存: 嵌入 E5-Large-Unsupervised 等模型可讓角色回想起過去的交互,豐富沉浸感。
    • 動畫 :Audio2Face 等實時 AI 驅動的 動畫 可實現精確的唇部同步,呈現動態生動的情緒。
    • 動作: 簡單的界面和自定義邏輯使角色能夠采取有意義的行動,從選擇游戲中的響應到執行戰略計劃,再到模型驅動的決策和提示。

    什么是 NVIDIA In-Game Inferencing SDK?

    A diagram shows the NVIGI SDK core plugins, helper plugins, unified APIs, and local execution; NVIDIA ACE AI models; and the local PC.
    圖 1. NVIGI SDK 架構

    NVIGI SDK 是一款基于插件的 GPU 優化推理管理器,旨在簡化 ACE 模型與游戲和交互式應用的集成。它提供以下功能:

    • 插件靈活性: 輕松添加、更新和管理 AI 插件 (ASR、語言模型、嵌入)。
    • Windows 原生 DLL: 簡化 C++ 游戲和應用的工作流。
    • GPU 優化: 使用 compute-in-graphics (CIG) 技術,在執行渲染任務的同時實現高效的 AI 推理。

    通過將 NVIGI 與 ACE 相結合,您可以創建具有高級生成式 AI 功能的自主角色,例如實時 NPC 對話、上下文內存和如生的動畫。

    NVIGI 的工作原理?

    NVIGI 架構的核心是基于模塊化插件,可靈活集成各種 AI 功能:

    • 核心插件 :提供自動語音識別(ASR)、生成式推理和嵌入檢索等 AI 功能。
    • 輔助插件: 處理 GPU 調度和網絡通信等實用程序。
    • 統一 API: 簡化插件管理并降低代碼復雜性。
    • 本地和云執行: 支持設備上推理 (CPU/GPU) 和基于云的 AI 工作流。

    這些組件協同工作,提供無縫的 AI 驅動的游戲體驗。例如,想象一個玩家向 NPC 提問。NVIGI 編排代理工作流,使角色能夠實時聆聽、推理、講話并制作動畫。

    此過程遵循幾個關鍵步驟:

    1. 使用 ASR 聆聽用戶的聲音:NPC 使用 NVIDIA Riva ASR 處理玩家語音,將口語輸入轉換為文本,以便進一步推理。
    2. 使用 SLM 生成響應:轉錄文本將傳遞至小型語言模型 (SLM),例如 Mistral-NVIDIA NeMo Curator-Minitron-128K-Instruct,該模型會生成與上下文相關的動態響應。如果需要其他上下文,可以使用檢索增強生成 (RAG) 方法,其中 E5-Large-Unsupervised 等嵌入模型將文本轉換為向量表示。然后,在相似性搜索中使用這些向量來檢索相關知識,從而通過額外的上下文豐富 SLM 的響應。
    3. 使用 TTS 為角色提供語音 :生成的響應被合成為如生的聲音,確保自然的語調和表現力。
    4. 創建交互式動畫 :然后,語音響應使用 Audio2Face-3D 驅動面部 Blendshape 以實現實時動畫,確保準確的唇部同步和富有表現力的角色動作。

    在整個過程中,GPU 調度和 CiG 可確保 AI 推理工作負載與渲染任務同時運行,同時最大限度地減少對幀率的影響。這可確保提供無縫的實時體驗。

    1、NVIDIA ACE|inZOI – 使用可協作的角色創建模擬城市

    有關為進程內執行實現這些插件和模型的更多信息,請參閱后續部分。

    ACE 設備端推理入門

    本節概述了如何將 NVIGI 與 ACE SLM 結合使用,以便與渲染工作負載一起啟用進程內 AI 推理。

    NVIGI 包含批處理文件,這些文件可從 NVIDIA NGC 和 Hugging Face 等資源庫中獲取模型。這樣可以將初始下載量降至最低,并確保您只需下載要使用的模型即可。它還包含一套本地推理插件,我們稍后會重點介紹這些插件,以幫助您入門。

    初始化 NVIGI?

    第一步是初始化 NVIGI 框架。此過程會設置 NVIGI 在游戲中運行所需的插件路徑、日志記錄和核心配置。

    以下代碼示例展示了如何在游戲中初始化 NVIGI:

    nvigi::Preferences preferences{};
    preferences.logLevel = nvigi::LogLevel::eVerbose; // Enable verbose logging
    preferences.utf8PathsToPlugins = {"path/to/plugins"}; // Set plugin path
    preferences.utf8PathToLogsAndData = "path/to/logs";    // Define log path
     
    if (nvigiInit(preferences, nullptr, nvigi::kSDKVersion) != nvigi::kResultOk) {
        std::cerr << "Failed to initialize NVIGI." << std::endl;
    }

    加載插件和模型?

    NVIGI 架構圍繞具有模塊化和靈活性的插件系統構建。包含適用于 LLM、ASR 和嵌入檢索等 AI 模型類別的插件。借助這些插件,您可以部署 ACE 范圍的 AI 模型,以實現所需的功能和行為。

    每個插件都支持多個共享指定后端和底層 API 的模型。NVIGI 包含支持熱門后端 (例如 GGML (llama.cppwhisper.cppembedding.cpp)、ONNX Runtime 和 DirectML) 的進程內插件。

    以下是一些示例:

    • nvigi.plugin.asr.ggml.cuda:使用 GGML 和 CUDA 將語音轉換為文本。
    • nvigi.plugin.gpt.ggml.cuda:為 AI 生成的對話和推理提供支持。
    • nvigi.plugin.embed.ggml.*:根據情感查找相關文本,以提供更好的上下文。

    要使用 GPT 插件,請先加載其接口以查詢模型的功能:

    // Load GPT plugin interface
    nvigi::IGeneralPurposeTransformer* gpt = nullptr;
    nvigiGetInterfaceDynamic(nvigi::plugin::gpt::ggml::cuda::kId, &gpt, ptr_nvigiLoadInterface);

    首先,NVIGI 預加載了一系列可手動下載的模型,但您可以從 NGC 或 Hugging Face 上獲得更多 GGUF 模型。然后,為插件定義模型參數,例如以下示例:

    // Configure model parameters
    nvigi::CommonCreationParameters common{};
    common.utf8PathToModels = "path/to/models";
    common.numThreads = 8;                    // Number of CPU threads
    common.vramBudgetMB = vram;               // VRAM allocation in MB
    common.modelGUID = "{YOUR_MODEL_GUID}";   // Model GUID

    加載接口和模型參數后,配置一個實例或進程內推理:

    // Create GPT instance
    nvigi::InferenceInstance* gptInstance = nullptr;
    if (gpt->createInstance(common, &gptInstance) != nvigi::kResultOk || !gptInstance) {
        std::cerr << "Failed to create GPT instance." << std::endl;
    }
     
    // Use GPT instance for inference

    創建運行時配置和推理

    InferenceInstance 接口提供用于執行推理任務的 API,并通過 InferenceExecutionContext 進行配置。此接口支持設置輸入槽、運行時參數和回調機制,以檢索模型響應。

    推理任務依賴于輸入數據 (例如播放器文本或音頻) 以及運行時配置。可以使用 nvigi::kGPTDataSlotSystem 插槽確定用于定義游戲角色個性和角色的上下文:

    // Define NPC role in a system prompt
    std::string npcPrompt = "You are a helpful NPC named TJ in a fantasy game.";
    nvigi::CpuData systemPromptData(npcPrompt.length() + 1, npcPrompt.c_str());
    nvigi::InferenceDataText systemPromptSlot(systemPromptData);
     
    // Set runtime parameters
    nvigi::GPTRuntimeParameters runtime{};
    runtime.tokensToPredict = 200// Limit token prediction to 200 tokens
    runtime.interactive = true;     // Enable multi-turn conversations
    std::vector<nvigi::InferenceDataSlot> slots = {
        {nvigi::kGPTDataSlotSystem, &systemPromptSlot}
    };
     
    // Inference context
    nvigi::InferenceExecutionContext gptExecCtx{};
    gptExecCtx.instance = gptInstance;
    gptExecCtx.runtimeParameters = runtime;
    gptExecCtx.inputs = slots.data();

    玩家和游戲角色之間的動態交互可以通過以下方式進行管理:

    std::string userInput = "What’s your name?"; // example user input
    nvigi::CpuData userInputData(userInput.length() + 1, userInput.c_str());
    nvigi::InferenceDataText userInputSlot(userInputData);
     
    slots = {{nvigi::kGPTDataSlotUser, &userInputSlot}};
    gptExecCtx.inputs = slots.data();

    異步運行推理和處理響應

    if (gptExecCtx.instance->evaluate(&gptExecCtx) == nvigi::kResultOk) {
        std::cout << "Inference completed successfully!" << std::endl;
    }

    每次對話都通過 nvigi::kGPTDataSlotUser 輸入插槽進行處理,從而為多回合對話保留上下文。

    您還可以實現回調函數來捕獲角色響應,以便在游戲中顯示,下一節將展示示例。

    啟用 GPU 調度和渲染集成

    游戲中的 AI 工作負載與渲染任務同時運行,因此有效的 GPU 調度對于保持幀率至關重要。NVIGI 使用 CIG 高效調度 GPU 工作負載。

    為了高效地調度圖形和計算,NVIGI 必須獲得游戲用于圖形的 D3D Direct 隊列。D3D12Parameters 結構可確保 NVIGI 直接與渲染管線集成,從而使 AI 任務能夠并行運行,而不會影響圖形性能。

    以下代碼示例展示了如何使用 NVIGI IHWICuda 接口 (以 ASR 插件為例) 啟用 CIG 以進行 AI 推理:

    // Enable Compute-in-Graphics (CIG)
    nvigi::IHWICuda* icig = nullptr;
    if (nvigiGetInterface(nvigi::plugin::hwi::cuda::kId, &icig) != nvigi::kResultOk || !icig) {
        std::cerr << "Failed to load CIG interface." << std::endl;
        return;
    }
     
    // Set up D3D12 parameters
    nvigi::D3D12Parameters d3d12Params{};
    d3d12Params.device = myD3D12Device;            // D3D12 device used for rendering
    d3d12Params.queue = myD3D12CommandQueue;      // Graphics command queue
     
    // Activate GPU scheduling for both inference and rendering
    if (icig->enableComputeInGraphics(d3d12Params) != nvigi::kResultOk) {
        std::cerr << "Failed to enable Compute-in-Graphics." << std::endl;
        return;
    }
     
    std::cout << "Compute-in-Graphics enabled successfully." << std::endl;

    要在 Unreal Engine 5 (UE5) 中設置 NVIDIA GPU 調度,請使用全局動態渲染硬件接口 (RHI) 訪問游戲的 D3D 設備和命令隊列。

    在 UE5 中配置 CIG 非常簡單:

    // UE5-specific code to retrieve D3D12 resources
    #include "ID3D12DynamicRHI.h"
     
    ID3D12DynamicRHI* RHI = nullptr;
    if (GDynamicRHI && GDynamicRHI->GetInterfaceType() == ERHIInterfaceType::D3D12)
    {
        RHI = static_cast<ID3D12DynamicRHI*>(GDynamicRHI);
    }
     
    ID3D12CommandQueue* CmdQ = nullptr;
    ID3D12Device* D3D12Device = nullptr;
     
    if (RHI) {
        CmdQ = RHI->RHIGetCommandQueue();  // Get graphics command queue
        int DeviceIndex = 0;
        D3D12Device = RHI->RHIGetDevice(DeviceIndex);  // Get D3D12 device
    }
     
    // Configure D3D12 parameters for IGI
    nvigi::D3D12Parameters d3d12Params{};
    d3d12Params.device = D3D12Device;
    d3d12Params.queue = CmdQ;
     
    // Pass the parameters to IGI instances
    nvigi::CommonCreationParameters commonParams{};
    commonParams.chain(d3d12Params);
     
    // Example: Creating an ASR instance with CIG
    nvigi::ASRCreationParameters asrParams{};
    asrParams.common = &commonParams;
     
    nvigi::InferenceInstance* asrInstance = nullptr;
    iasr->createInstance(asrParams, &asrInstance);

    運行推理?

    NVIGI 上的推理任務涉及設置對話上下文、處理用戶輸入以及動態生成響應。以下步驟概述了如何在游戲環境中高效運行推理任務。

    要執行推理,您必須創建推理上下文,其中包括以下內容:

    • 輸入槽 :以模型可以處理的格式準備輸入數據 (用戶文本、語音數據)。
    • 運行時參數 :定義推理行為,例如要預測的令牌數量或交互性設置。
    • 回調機制 :指定如何處理輸出結果。

    推理上下文定義了輸入和輸出的處理方式。首先啟用交互式模式并準備 runtime parameters:

    // Configure runtime parameters for GPT
    nvigi::GPTRuntimeParameters runtime{};
    runtime.tokensToPredict = 200// Predict up to 200 tokens
    runtime.interactive = true;     // Enable interactive mode
     
    // Set up inference context
    nvigi::InferenceExecutionContext gptExecCtx{};
    gptExecCtx.instance = gptInstance;   // Use the GPT instance created earlier
    gptExecCtx.runtimeParameters = runtime;
     
    gptExecCtx.callback = [](const nvigi::InferenceExecutionContext* execCtx, nvigi::InferenceExecutionState state, void* userData) {
        if (state == nvigi::kInferenceExecutionStateDone && execCtx->outputs){
            const nvigi::InferenceDataText* responseText = nullptr;
            execCtx->outputs->findAndValidateSlot(nvigi::kGPTDataSlotResponse, &responseText);
            if (responseText) {
                std::cout << "NPC Response: " << responseText->getUtf8Text() << std::endl;
            }
        }
        return state;
    };

    您可以通過提供定義 NPC 個性或角色的系統提示來開始對話。為此,請使用 nvigi::kGPTDataSlotSystem 插槽:

    // Set up conversation context
    std::string npcPrompt = "You are a helpful NPC in a fantasy game. Respond thoughtfully to player questions.";
     
    nvigi::CpuData systemPromptData(npcPrompt.length() + 1, npcPrompt.c_str());
    nvigi::InferenceDataText systemPromptSlot(systemPromptData);
     
    std::vector<nvigi::InferenceDataSlot> slots = {
        {nvigi::kGPTDataSlotSystem, &systemPromptSlot}  // Set the system prompt
    };
     
    gptExecCtx.inputs = slots.data();
    gptExecCtx.numInputs = slots.size();
     
    // Execute to initialize conversation context
    if (gptExecCtx.instance->evaluate(&gptExecCtx) != nvigi::kResultOk) {
        std::cerr << "Failed to initialize conversation context." << std::endl;
        return;
    }

    可用 NVIGI 插件列表

    您可以立即使用以下語音和智能模型開始構建用于設備上推理的智能體框架。

    NVIGI 插件 支持的推理硬件 支持的模型
    語音 – ASR 本地 GGML 支持 CUDA 的 GPU 或 CPU Whisper ASR
    語音 – ASR 本地 TRT 支持 CUDA 的 GPU NVIDIA RIVA ASR ( 即將推出 )
    語言 – GPT 本地 ONNX DML ONNX 支持的 GPU 或 CPU Mistral-7B-Instruct
    語言 – GPT 本地 GGML 支持 CUDA 的 GPU 或 CPU Llama-3.2-3b Instruct Nemotron-Mini-4B-Instruct Mistral-Nemo-Minitron-2B-128k-Instruct Mistral-Nemo-Minitron-4B-128k-Instruct Mistral-Nemo-Minitron-8B-128k-Instruct Nemovision-4B-Instruct
    RAG – 嵌入本地 GGML 支持 CUDA 的 GPU 或 CPU E5 大型無監督學習
    表 1. 可用的語音和智能模型

    結束語?

    NVIDIA ACE 和 NVIGI 代表著 AI 驅動的游戲開發的下一步發展。通過將 ACE 先進的生成式 AI 模型與 NVIGI 無縫集成和 GPU 優化的性能相結合,您可以將交互性和沉浸感提升到新的水平。

    從動態 NPC 對話和實時語音識別到逼真的動畫和上下文內存,ACE 和 NVIGI 為創建智能、自主角色提供了經濟高效且可擴展的解決方案。

    立即開始使用 NVIDIA ACE 和 NVIGI。

    ?

    0

    標簽

    人人超碰97caoporen国产