GenAI API через PCIe
Готові до запуску приклади C++ та Python наведено в Запуску моделей GenAI через PCIe.
Використовуйте simaai::neat::pcie::genai у C++ або pyneatpcie.genai у Python для запуску моделей LLM, VLM та ASR із хоста на підключеній Modalix PCIe Card.
API використовує той самий підхід до запитів і потокового виводу, що й прямі GenAI API. Файли моделі, вхідні дані й результати передаються через PCIe. На відміну від співобробки моделей комп’ютерного зору, GenAI не потребує номера черги для моделей комп’ютерного зору чи виклику build().
Перед початком
- Виконайте встановлення PCIe Host, використовуючи відповідні сумісні пакети хоста й карти з підтримкою GenAI.
- Переконайтеся, що підключену карту налаштовано згідно з інструкціями встановлення.
- Підготуйте теку моделі LLiMa на хості. Передайте абсолютний шлях або шлях відносно поточної робочої теки застосунку, а не локальний шлях на карті. Поки модель відкрита, зберігайте файли доступним и для читання та не змінюйте їх.
Виконайте текстовий запит
У цьому прикладі передбачається, що Qwen3-0.6B-Autoround-a16w4 доступна в ./models/ відносно поточної робочої теки застосунку.
#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 лише тоді, коли ваша карта використовує іншу адресу.
Для спекулятивного декодування передайте батьківський каталог підготовленої пари цільової та чернеткової моделей, наприклад ./models/speculative-pair, що містить target/ і draft/. Скомпільовані конфігурації визначають ролі моделей. Обидві моделі завантажуються в одному сеансі карти; додаткова опція зап иту не потрібна. Передбачте пам’ять карти для обох моделей.
Для генерування тексту задайте request.reasoning_effort як "low" (типове
значення), "medium" або "high". Це не залежить від request.enable_thinking,
який керує поверненням міркувань. Використовуйте узгоджені пакети хоста й карти:
ревізія 3 протоколу GenAI відхиляє старіші сторони з’єднання замість непомітного
ігнорування запитаного рівня зусиль. Перебудуйте хостові застосунки C++ після
оновлення пакетів.
Потоковий вивід, медіа та кілька моделей
- Використовуйте
model.stream(request)та ітеруйте значенняTokenSampleдля потокового виводу. Перед повторним використанням моделі викличтеcancel()і прочитайте завершальний зразок. На одну модель дозволено лише один активний запит. - Для VLM використовуйте
request.images(тензори PCIe UInt8 HWC RGB; Python також приймає масиви NumPy). Завантажуйте файли зображень у застосунку та перетворюйте їх на RGB перед присвоєнням. Для ASR використовуйтеrequest.audio_fileабоrequest.audio(монофонічні відліки Float32) разом ізrequest.sample_rate. - Передавайте історію розмови через
request.messages; окремі запити не успадковують попередню історію. - Створюйте окремі дескриптори для незалежних моделей. Робочі процеси GenAI можуть співіснувати з моделями комп’ютерного зору в межах ресурсів карти; пропускна здатність залежить від навантаження.
Спільні концепції запитів, результатів і потокового виводу описано в прямих GenAI API. Використовуйте типи запитів і тензорів PCIe замість локальних типів Core. Цей віддалений API не надає перемикання LoRA, повторного використання кешованих зображень чи композиції графа GenAI.