저장소 아키텍처 및 설계
이 페이지는 라이브러리의 구조, 책임 범위, 그리고 모듈 및 런타임 계약을 깨뜨리지 않고 프레임워크를 확장하는 방법을 이해해야 하는 기여자들을 위한 것입니다.
컴파일된 Scheduler 경계
Core는 SimaScheduler::frontend와 독립적으로 소유되는
simaai::scheduler::client 타입을 사용합니다. 수치 연산 작성과 검사, 동적 선택,
정지된 그래프 연결, 선택된 메모리 접근, 비디오 레이아웃 조회는 이 컴파일된 경계를
통과합니다. Core는 Runner 세션을 열거나 Kernels 또는 Codecs 구현 인터페이스를 포함하지 않습니다.
flowchart LR
Core[Core graph and application policy] --> Scheduler[Scheduler client and GStreamer]
Scheduler --> Runner[Runner execution and memory authority]
Runner --> Kernels[Kernels numerical providers]
Scheduler --> Codecs[Codecs providers]
GenAI[Core GenAI API] --> LLiMa[LLiMa generation runtime]
Benchmark[Core benchmark reports] --> Sentinel[Optional Sentinel telemetry]
Model과 독립형 Resize는 값 전용 ResizeInterpolation 열거형과 하나의 샘플러 토큰 매핑을 공유합니다. Model 계획은 이미지 의도, 스테이지 투영, 그래프 출처를 처리하기 전에 선택적인 열거형 설정을 해석합니다. 기존 문자열은 호환성 경계로 유지됩니다.
모델과 독립형 이미지 옵션은 동일한 일반 Preproc 요청으로 내려갑니다. 고정 원본 연산은 원래 FP32 재스케일링, 크기 조정 후 평균/제수, 양자화 스텝 경계를 유지하며 임의 순서 변환 인터프리터가 아닙니다. 입력 dtype, 양자화, 물리 레이아웃은 여전히 MPK가 결정합니다. 새 옵션은 명시적으로 선택하며 생략하면 기존 바이트를 유지합니다. Core는 의도와 기하만 전달하고, 수치적 허용 여부와 실행은 Kernels가 소유합니다.
Kernels는 연산 카탈로그와 수치 연산 허용 판정의 권한을 유지합니다. Scheduler는 Runner를 통해 범용 요청을 전달하며, Scheduler와 Core 모두 펌웨어 ID나 연산별 디스패치 테이블을 유지하지 않습니다. Core는 공개 노드 API, 형상 정책과 와이어 형식을 담당합니다. Scheduler는 코호트 검증 후 새로운 어댑터/리졸버 팩터리를 인스턴스화합니다. 캐시된 동적 선택은 연산을 유지하되 현재 프레임의 메모리를 바인딩합니다.
GenAI는 Runner나 Scheduler GenAI 어댑터를 거치지 않고 LLiMa를 직접 호출합니다. MLA 프로파일링은 기본적으로 비활성화된 별도의 패스입니다. Core는 Scheduler 클라이언트를 호출하고, Runner가 설치된 mla-rt 명령줄 도구를 실행합니다. 다른 MLA 작업이 없는 유 휴 DevKit이 필요합니다.
GStreamer 인터페이스 소유권
Scheduler는 설치된 gst/SimaaiGstErrors.h 헤더를 포함해 GStreamer 전송 및 구조화된
오류 인터페이스를 소유합니다. Core는 이를 사용하며 별도 구현을 유지하지 않습니다.
Core 0.6.0에는 이 파일 소유권 이전이 포함됩니다. 일치하는 Core/Scheduler
패키지를 함께 업그레이드하십시오. 이 패키지 버전은 플랫폼이나 수치 계약을 변경하지 않습니다.
프레임워크 대 환경
"Neat"이라는 용어는 관련되어 있지만 분리된 두 가지 측면을 나타내는 데 사용됩니다.
- Neat Library: 이 저장소의 C++/Python 라이브러리 및 런타임입니다. 모델 패키를 로드하고, 파이프라인을 구성하고, 계약을 검증하고, Modalix 하드웨어에서 실행하며, 공개 API를 제공합니다.
- Palette SDK / 환경: 프레임워크를 중심으로 구축된 컨테이너화된 개발 워크플로로, DevKit Sync, 공유 작업 공간 및 에이전트 도구를 포함합니다.
이 저장소를 변경할 때, 사람과 에이전트 모두를 지원하는 프레임워크 속성을 최적화하십시오. 즉, 명시적인 API, 결정론적 동작, 구조화된 진단, 엄격한 검증 및 안정적인 공개 계약을 제공해야 합니다.
이 라이브러리의 용도
주요 사용자
다음 작업을 수행하려는 개발자:
- 재사용 가능한 빌딩 블록에서 파이프라인을 조립합니다(원시 GStreamer 보일러플레이트 코드를 작성하지 않고).
- 파이프라인을 조기에 검증하고(CI에 적합) 오류를 빠르게 이해합니다.
appsink를 통해 C++에서 파이프라인을 실행하고 프레임을 소비합니다.- 선택적으로 RTSP를 통해 파이프라인을 제공합니다(
gst-rtsp-server사용). - GStreamer 파이프라인 코드를 작성하지 않고 텐서 친화적인 출력을 통해 ML 코드를 공급합니다.
패키지 소유권
선택한 Core 아티팩트는 함께 설치할 Core, LLiMa 및 일치하는 Scheduler 의존성 패키지의 단일 진실 공급원입니다. Core는 의존성 버전을 다시 선택하거나 수정하지 않고 해당 아티팩트의 전체 의존성을 전달합니다. 아티팩트 외부 패키지는 플랫폼이 소유합니다. 호환되지 않는 플랫폼은 Core나 LLiMa로 복구하지 말고 업데이트하세요.
Core는 하위 CMake 개발 인터페이스가 아니라 설치된 SimaScheduler 클라이언트 컴포넌트를
사용합니다. Scheduler 의존성 코디네이터는 선택한 Kernels/Runner/Codecs 집합을 검증하고
정확한 출처를 유지합니다. 메타데이터 전용 SimaRuntime 호환 별칭은 다른 구현을 소유하지
않습니다. 빌드 진입점은 여전히 Kernels → Runner → Scheduler → Core 순서로 형제 소스를
준비하거나 명시적으로 선택한 패키지를 재사용합니다. 이는 빌드 조정이지 런타임 실행이나
펌웨어 활성화가 아닙니다. 로컬 의존성 빌드를 참조하십시오.
렌더러 및 선택적 백엔드 제공자
Core는 박스/마스크 게시 정책을 소유합니다. 기존 축 정렬 BBOX 페이로드는 int32 좌표를 사용합니다. 별도의 BBOX_OBB_V1 회전 박스 형식은 FP32 기하 정보를 유지하며 축 정렬 렌더러에서는 거부됩니다. Scheduler는 caps,
수명 주기와 준비 단계의 제공자 허용 판정을 담당합니다. 프로덕션 구성에는 렌더러의
타입이 지정된 int32 기능이 필요합니다. 값을 float로 재해석하거나 프레임별 변환을
추가하지 않습니다. Kernels는 표준 A65 render 연산을, Runner는 실행과 ReadWrite
이미지 접근의 안전한 종료를 소유합니다. Scheduler는 검증된 연산과 사용한 Kernels/Runner
식별 정보를 기록합니다. Core는 이 코호트를 검증하고 a65apps 아카이브 없이 일반 의존성을 구성합니다.
Runner는 플랫폼 소유 제공자를 재배포 가능한 의존성과 별도로 기록합니다. Core는 해당 영수증을 보존하고 설치된 플랫폼을 검사하며, 플랫폼 빌드 번호로 호환성을 추정하거나 플랫폼 DSO를 소비자 패키지에 포함하지 않습니다. 제공자 허용 검사와 구성은 로컬 의존성을 참조하세요.
런타임 전송 소유권
Core는 설치된 SimaScheduler 패키지를 사용합니다. SimaScheduler::elements는
neatcamerabridge, neatmultipartjpegdemux, neatlatestbystreammux와 그 GObject
타입 및 프로세스 내부 등록을 소유합니다. Core의 src/gst/ 진입점은 호환성 전달자이며
별도 구현이 아닙니다. 이 요소들은 수치 실행기를 사용하거나 Kernels를 요구하지 않습니다.
Core는 공개 C++/Python API, Node 옵션, 그래프 lowering, Sample/Tensor 객체와 그래프
전용 크레딧을 유지합니다. src/pipeline/gst/RealtimeMuxCredits.cpp는 Scheduler의
값 전용 대여 인터페이스를 통해 크레딧을 투영합니다. mux 대여 레지스트리와 공유 입력
프레임 카운터에는 단일 Scheduler 소유자가 있습니다. 카메라 ABI 레이아웃은 Core 전용
복사본이 아니라 일치하는 할당자 헤더에서 가져옵니다.
mux 공정성/백프레셔, multipart 파싱과 캡처 부모 수명 구현 테스트는 Scheduler에 있습니다. Core는 공개 API, 그래프 크레딧과 종단 간 장치 테스트를 유지합니다. Core 빌드 전에 일치하는 Runner와 Scheduler 패키지를 설치하십시오. Core 내부 테스트는 전송 타깃을 직접 링크합니다. 제공자가 없는 호스트 테스트로 하드웨어 캡처나 compact TensorBuffer 메타데이터를 검증했다고 판단하지 마십시오.
수치 커널 추가
기존 텐서 및 실행 계약으로 표현할 수 있는 연산의 개발 범위는 Kernels와 Core뿐입니다.
- Kernels에서 연산별 타입 요청, 검증된 계획, 수치 구현, 실행 객체 팩터리와 명명된 요청 디코더를 추가합니다. Kernels 소유 카탈로그에 연산을 한 번 등록하고 정확성 테스트를 추가합니다.
- Core에서 Node를 추가하고 옵션을 표준 요청으로 변환합니다. 연산, 명시적 타깃, 입력/출력 명세와 타입 매개변수를 포함하십시오. Scheduler의 범용 준비 API를 호출하며, 연산 팩터리를 직접 호출하거나 Runner/Scheduler에 연산 분기를 추가하지 마십시오.
- Kernels → Runner → Scheduler → Core 순서로 다시 빌드하고 설치합니다. EV 카탈로그 변경에는 Runner 소스가 같아도 명시적으로 구성된 일치하는 펌웨어가 필요합니다. 독점 장치 절차로 검증하십시오.
준비 경로는 Core → Scheduler → Runner → Kernels입니다. Kernels가 수치 검증을 수행하며 Runner는 범용 게이트웨이입니다. 준비 단계 검사는 하드웨어를 열거나 실행 자원을 프로비저닝하지 않습니다. 반환된 검증된 실행 객체를 유지하고 전체 단계 허용 전에 표준 요구사항을 검사하십시오. 스트리밍은 연산 이름을 다시 디코딩하지 않고 같은 실행 객체를 사용합니다.
동적 변형은 설정 시 바인딩된 커널 소유 선택적 기능을 사용합니다. Core는 그래프/메타데이터 정책과 기존 유한 캐시를 유지합니다. 캐시 미스는 불변 매개변수를 구체화할 수 있으며, 제공자가 정확한 텐서 계약/자원 공유 가능 여부나 전체 재검사 필요성을 입증합니다. 캐시 적중은 별도 연산을 만들거나 카메라/코덱 프레임 대여를 유지하지 않습니다.
Runner는 실행, 자원, 일관성과 안전한 종료를 소유하며 Scheduler는 Gst 캐리어, 플러그인과
전송 통합을 소유합니다. 표준 설치 패키지는 SimaRunner와 SimaScheduler입니다.
메타데이터 전용 SimaRuntime 호환 패키지는 이전 타깃을 동일한 구현으로 전달합니다.
헤더 별칭은 표준 Kernels 타입을 재사용하며 정적 링크 의존성은 전이적으로 남을 수 있습니다.
별도의 텐서 스키마, 할당자, 실행 큐 또는 수치 레지스트리는 없습니다.
수치 단계는 neatkernelrunner를 생성하며 폐기된 ProcessCVU 플러그인으로 전환하거나 폴백하지 않습니다. Core 소유 공개 출력 패킹은 기존 메트릭 경계를 유지하는 종속 호스트 연산입니다. Codecs는 별도의 인코딩/디코딩 백엔드이며 Gst 래퍼는 Runner나 수치 Kernels가 아닌 Scheduler가 소유합니다.
빌드 영수증은 정확한 설치 바이트와 사용한 의존성 식별 정보를 묶습니다. 하드웨어나 성능 검증은 아닙니다. 일치하지 않는 패키지의 헤더, 아카이브, 펌웨어, Codecs를 섞지 마십시오.
새 전송, 텐서 표현 또는 실행 기능은 프레임워크 확장이며 Runner 변경이 필요할 수 있습니다. Kernels/Core만 변경한다는 보장은 여기에 적용되지 않습니다. 시간 초과나 취소는 DMA의 안전한 종료를 입증하지 않습니다. 확정적인 완료 또는 검증된 플랫폼 복구까지 기존 할당 소유자를 유지해야 합니다.
Core는 펌웨어 그래프 ID가 아니라 의미 이름으로 연산을 선택합니다. Kernels는 연산 이름과
컴파일된 타깃의 불변 카탈로그를 공개하며, Runner와 Scheduler는 별도 레지스트리를 유지하지
않고 전달합니다. Core는 필수 DetessCast, DetessDequant 융합을 포함한 타입 기반 그래프
재작성 규칙을 소유합니다. 필수 융합 구현이 없으면 연산을 개별 커널로 나누지 않고 준비가
실패합니다. Core 단계가 항상 한 연산에 해당하지는 않습니다. TrackKLT는 기존 복합 요청을 준비합니다.
TrackKLT의 공개 텐서 목록은 이전 이미지, 현재 이미지, 정수 시드 점의 위치 순서를 따릅니다. 선택적 이름은 해당 역할을 확인할 뿐, 저장소 순서를 바꾸지 않습니다. Core는 시드 추론 전과 큐 수용 전에 텐서 데이터를 매핑하거나 복사하지 않고 작성된 입력 계약을 확인합니다. 이름 없는 텐서도 위치 순서를 따릅니다. 이 정책은 명시적으로 작성된 직접 공개 입력에만 적용되며, 내부 단계 연결이나 모델 입력 변환에는 적용되지 않습니다.
추적기 요청이 수치 품질 제어와 선택적 잔차 공개를 소유합니다. Core는 점, 상태, 요청된 특징 뒤에 잔차를 덧붙이며, 상태를 무조건적인 추적 신뢰도로 재해석하지 않습니다. 검출을 끄면 해당 연산과 출력 할당이 제거됩니다. Kernels는 버전이 지정된 네이티브 패킷과 수치 검증을 소유하며, Runner와 Scheduler는 계속 일반적인 검증된 요청을 전송하고 바인딩합니다.