PCIe GenAI API
可執行的 C++ 與 Python 範例請參閱透過 PCIe 執行 GenAI 模型。
在 C++ 中使用 simaai::neat::pcie::genai,或在 Python 中使用 pyneatpcie.genai,即可從主機在連接的 Modalix PCIe Card 上執行 LLM、VLM 與 ASR 模型。
此 API 採用與直接 GenAI API相同的請求與串流模式。模型檔案、輸入與結果透過 PCIe 傳輸。與視覺模型協同處理不同,GenAI 不需要視覺模型佇列編號,也不需要呼叫 build()。
開始之前
- 依照安裝 PCIe Host操作,使用支援 GenAI 且互相對應的主機與卡端套件。
- 確認連接的卡片已按照安裝步驟完成設定。
- 在主機上準備 LLiMa 模型目錄。請傳入絕對路徑,或相對於應用程式目前工作目錄的路徑,而非卡端本機路徑。模型開啟期間,請保持檔案可讀取且不要變更。
執行文字請求
此範例假設應用程式目前工作目錄下的 ./models/ 中已有 Qwen3-0.6B-Autoround-a16w4。
#include <simaai/neat/pcie/genai/GenAIModel.h>
#include <iostream>
int main() {
namespace genai = simaai::neat::pcie::genai;
genai::ConnectionOptions connection;
connection.card_id = 0;
genai::GenAIModel model("./models/Qwen3-0.6B-Autoround-a16w4", connection);
genai::GenerationRequest request;
request.prompt = "Explain PCIe in one sentence.";
request.max_new_tokens = 64;
std::cout << model.run(request).text << '\n';
model.close();
}
建構子會載入遠端模型。run() 傳回完整結果;close() 釋放模型資源。Python 上下文管理器會在離開區塊時關閉模型,包括發生例外的情況。C++ 應用程式請連結已安裝的 CMake 目標 SimaPCIeHost::sima_neat_pcie_host。
connection.card_id 選擇卡及其預設位址:0 使用 10.0.0.2,1 使用 10.0.1.2,依此類推。只有在卡使用不同位址時,才需設定 connection.card_host。
若要使用推測解碼,請傳入已準備好的目標/草稿模型配對的父目錄,例如包含 target/ 和 draft/ 的 ./models/speculative-pair。編譯後的設定會識別目標和草稿角色。兩個模型會在同一卡端工作階段中載入,不需要額外的請求選項。請預留足夠的卡端記憶體以容納兩個模型。
產生文字時,請將 request.reasoning_effort 設為 "low"(預設值)、
"medium" 或 "high"。它與控制是否傳回推理內容的 request.enable_thinking 無關。
請使用相符的主機與卡端套件:GenAI 通訊協定修訂版 3 會拒絕較舊的對端,
而不是暗中忽略要求的推理強度。更新套件後,請重新建置 C++ 主機應用程式。
串流、媒體與多個模型
- 使用
model.stream(request)並逐一讀取TokenSample值來串流輸出。 在重複使用模型之前,呼叫cancel()並讀取終止樣本。每個模型同時只能有一個作用中的請求。 - VLM 使用
request.images(UInt8 HWC RGB PCIe 張量;Python 也接受 NumPy 陣列)。請在應用程式中讀取影像檔案,並在指派前轉換為 RGB。ASR 使用request.audio_file或request.audio(Float32 單聲道取樣值)搭配request.sample_rate。 - 透過
request.messages傳入對話歷史;獨立請求不會繼承先前的歷史。 - 為獨立模型建立各自的控制代碼。GenAI 模型可與視覺模型共存,但受限於卡端資源;吞吐量取決於工作負載。
共通的請求、結果與串流概念請參閱直接 GenAI API。請使用 PCIe 請求/張量型別,而非本機 Core 型別。此遠端 API 不提供 LoRA 切換、快取影像重複使用或 GenAI 圖組合。