본문으로 건너뛰기

PCIe GenAI API

C++와 Python으로 실행 가능한 예제는 PCIe를 통해 GenAI 모델 실행하기를 참조하세요.

C++에서는 simaai::neat::pcie::genai, Python에서는 pyneatpcie.genai를 사용하여 호스트 머신에서 연결된 Modalix PCIe 카드의 LLM, VLM 및 ASR 모델을 실행합니다.

요청과 스트리밍 방식은 직접 GenAI API와 같습니다. 모델 파일, 입력 및 결과는 PCIe로 전송됩니다. 비전 공동 처리와 달리 GenAI에는 비전 큐 번호나 build()가 필요하지 않습니다.

시작하기 전에​

  • PCIe 호스트 설치를 따라 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를 참조하세요. 로컬 Core 타입 대신 PCIe 요청/텐서 타입을 사용하세요. 이 원격 API는 LoRA 전환, 캐시된 이미지 재사용 및 GenAI 그래프 구성을 제공하지 않습니다.