NVIDIA에서 오픈소스 소프트웨어로 제공되는 머신러닝 모델 inference 서버

 

1. 아키텍쳐

Model Repository에 모델 파일들을 올려놓으면 클라이언트가 api로 추론 요청 후 결과를 받을 수 있다.

간단한 사용 예

2. Model Repository [—model-repository]

서빙할 모델 파일들을 저장. 서버의 로컬 또는 클라우드 저장소도 가능

launch할때 옵션으로 여러 개 선택 가능

 

2-1. Model Management [—model-control-mode]

  • none
    • Repository의 모든 모델 로드, 가동 중에는 Rspository 변경 사항이나 management 요청을 무시
  • explicit [—load-model]
    • —load-model 옵션으로 명시된 모델만 로드, 없으면 아무것도 로드하지 않음
  • poll [—repository-poll-secs]
    • 모든 모델을 로드 후 주기적으로 변경 사항을 감지하여 재로드, management 사용 불가

 

2-2. Model Configuration

config.pdtxt 파일에 작성, 필수 옵션 = backend, max_batch_size, input, output

 

 

출처 

https://peaceatlast.tistory.com/25

 

NVIDIA Triton 한 눈에 알아보기

GitHub - triton-inference-server/client: Triton Python, C++ and Java client libraries, and GRPC-generated client examples for go Triton Python, C++ and Java client libraries, and GRPC-generated client examples for go, java and scala. - GitHub - triton-infe

peaceatlast.tistory.com

 

https://github.com/triton-inference-server/server

 

GitHub - triton-inference-server/server: The Triton Inference Server provides an optimized cloud and edge inferencing solution.

The Triton Inference Server provides an optimized cloud and edge inferencing solution. - GitHub - triton-inference-server/server: The Triton Inference Server provides an optimized cloud and edge i...

github.com

 

 

 

'MLOps(DevOps)' 카테고리의 다른 글

RabbitMQ [AMQP / MQTT 비교]  (0) 2025.11.12

 

1. AMQP와 MQTT의 핵심 차이

AMQP (Advanced Message Queuing Protocol) VS MQTT (Message Queuing Telemetry Transport)

주 목적 기업용 메시지 큐 (거래/백엔드 시스템) IoT 센서, 디바이스 통신용
전송 단위 메시지(Message) — 헤더, 속성, 바디 모두 포함 토픽 기반 텍스트/바이너리 데이터
통신 모델 Producer → Exchange → Queue → Consumer Publisher → Broker → Subscriber
표준화 정도 복잡한 프로토콜 (라우팅, 트랜잭션 등 지원) 아주 단순한 프로토콜 (토픽 기반)
전송 보장 수준(QoS) 3단계 보장 (at-most-once, at-least-once, exactly-once) + 트랜잭션 3단계 QoS (0, 1, 2)
전송 방식 TCP 기반, 프레임 단위의 명령어 교환 TCP/IP 위에서 동작, 단순 PUB/SUB
사용 포트 기본 5672 (AMQP), 15672 (관리용 HTTP) 기본 1883 (MQTT), 8883 (TLS)
메시지 라우팅 Exchange(Direct, Fanout, Topic 등) 기반 라우팅 가능 단순 토픽 문자열 기반
Payload 크기 크고 복잡한 메시지도 OK (ex: JSON, 파일, 객체 등) 매우 작고 단순해야 함 (센서 데이터 등)
성능 특성 신뢰성↑, 속도↓, 복잡도↑ 속도↑, 신뢰성↓, 단순도↑
대표 브로커 RabbitMQ, Apache Qpid Mosquitto, HiveMQ, EMQX

 

 

  • AMQP = “기업용 신뢰성 있는 메시지 시스템”
  • MQTT = “IoT 디바이스용 가벼운 실시간 프로토콜”

2. RabbitMQ란?

RabbitMQ는 AMQP 프로토콜을 구현한 오픈소스 메시지 브로커
Erlang 언어로 만들어졌고, 안정성과 신뢰성이 매우 높다.

기본 구조

RabbitMQ는 아래 4단계 구조로 메시지를 전달한다.

Producer → Exchange → Queue → Consumer

① Producer

  • 메시지를 생성해서 브로커로 보냄.

② Exchange (교환기)

  • 메시지를 적절한 Queue로 라우팅.
  • Exchange 타입에 따라 라우팅 방식이 다름:
  • 타입설명
    Direct 라우팅키 정확히 일치하는 큐로 전달
    Fanout 연결된 모든 큐에 브로드캐스트
    Topic 와일드카드 기반 토픽 매칭 (sensor.#, *.info 등)
    Headers 메시지 헤더 값 기반으로 라우팅

③ Queue

  • 메시지를 실제로 저장하는 버퍼.
  • 여러 Consumer가 동시에 구독할 수 있음.
  • 메시지는 한 번 소비되면 큐에서 삭제됨(기본 설정).

④ Consumer

  • 큐를 구독해서 메시지를 받아 처리.

 

RabbitMQ의 장점

  1. 메시지 보장 (Durability, Acknowledgement)
    • 메시지를 디스크에 저장해 시스템 다운되어도 복구 가능.
    • ack 메커니즘으로 소비 확인 후 메시지 삭제.
  2. Exchange 기반 라우팅
    • 단순 PUB/SUB보다 훨씬 유연한 라우팅 가능.
  3. 다양한 프로토콜 지원
    • 기본 AMQP 외에도 MQTT, STOMP, HTTP 등 플러그인으로 확장 가능.
  4. 클러스터링 / 고가용성
    • 여러 노드로 구성 가능, HA Queue도 지원.
  5. 관리도구 (Management Plugin)
  6. 성숙한 에코시스템
    • Python(pika), Node.js, Go, Java 등 대부분 언어 클라이언트 지원.

 

3. 정리 요약

항목 AMQP MQTT RabbitMQ

역할 메시지 큐 프로토콜 IoT 통신 프로토콜 AMQP 구현 브로커
특징 신뢰성, 트랜잭션, 라우팅 지원 초경량, 실시간, 저전력 안정적, 다양한 언어 지원
주로 쓰는 곳 금융, 백엔드, 이벤트 시스템 IoT, 센서, 모바일 장치 백엔드 통합, 이벤트 허브
통신 모델 Exchange–Queue Publish–Subscribe Exchange–Queue (AMQP)

 

'MLOps(DevOps)' 카테고리의 다른 글

NVIDIA Triton server  (0) 2025.11.12

1. 논문 개요

이 논문은 그래프 구조를 갖는 데이터(예: 논문 인용 네트워크, SNS 네트워크)에서 노드 분류(node classification) 문제를 풀기 위해 제안된 모델인 Graph Convolutional Network(GCN)을 다룹니다.
기존의 그래프 기반 학습법들이 갖는 한계 — 예컨대 그래프 구조와 노드 특징(feature)을 통합해서 학습하기 어렵다는 점 — 을 해결하는 방식으로, 그래프 위에 신경망 형태의 레이어 전파 규칙을 제시한 것이 특징입니다.

논문의 주요 기여는 다음과 같습니다:

  • 그래프 합성곱(spectral graph convolution)의 1차 근사(first-order approximation) 를 이용해 계산량을 줄인 단순하면서도 강력한 레이어 규칙 제시
  • 해당 구조를 이용해 실제 반지도 학습(semi-supervised) 환경에서 좋은 성능을 보였다는 실험 결과 제시
  • 그래프 + 노드 특징을 동시에 이용하는 신경망 설계 방향을 제시

2. 배경 및 Motivation

논문이 다루는 문제 설정은 다음과 같습니다:

  • 각 노드가 특징 벡터(feature)를 가지고 있고, 그래프의 엣지(adjacency) 정보 또한 주어진다.
  • 일부 노드에는 레이블(label)이 있고, 나머지 노드는 레이블이 없다.
  • 목표는 레이블이 없는 노드의 레이블을 예측하는 것이다 (반지도 학습).
  • 이때, 노드의 특징만 보는 것보다 노드 간의 연결 정보(이웃 정보) 를 이용하면 성능이 향상될 수 있다.
  • 기존 방식들은 그래프 라플라시안(Laplacian)을 이용한 정규화나 임베딩 기반 방식 등이 존재했지만, “깊은 신경망 레이어” 형태로 그래프 구조를 직접 다루는 방식은 부족했다.

이러한 왜곡을 해결하기 위해 논문에서는 그래프 구조의 합성곱 개념을 신경망 레이어 형태로 바꿔 제안합니다.


3. 모델 설명 — 핵심 수식 & 계산 흐름

3.1 레이어 전파 규칙

논문에서 제안된 기본 전파 규칙은 다음과 같습니다:

H(l+1)=σ(D~−12 A~ D~−12 H(l) W(l))H^{(l+1)} = \sigma\bigl(\tilde D^{-\tfrac12} \,\tilde A\, \tilde D^{-\tfrac12}\, H^{(l)}\, W^{(l)}\bigr)

여기서 각 기호는 다음을 의미합니다:

  • H(l)H^{(l)}: ll번째 레이어에서의 노드 표현 행렬 (크기 N×DlN \times D_l)
  • H(0)=XH^{(0)} = X: 입력 노드 특징 행렬 (크기 N×FN \times F)
  • AA: 원본 인접행렬 (크기 N×NN \times N)
  • INI_N: 단위행렬 (자기자신과의 연결, self-loop)
  • A~=A+IN\tilde A = A + I_N: 자기 루프를 포함한 인접행렬
  • D~\tilde D: A~\tilde A의 차수(degree) 대각 행렬, D~ii=∑jA~ij\tilde D_{ii} = \sum_j \tilde A_{ij}
  • W(l)W^{(l)}: 학습 가능한 가중치 행렬 (크기 Dl×Dl+1D_l \times D_{l+1})
  • σ(⋅)\sigma(\cdot): 활성화 함수 (예: ReLU)

그래프 구조를 반영하기 위해 D~−12 A~ D~−12\tilde D^{-\tfrac12}\,\tilde A\,\tilde D^{-\tfrac12} 형태의 정규화된 인접행렬이 사용됩니다.
이 정규화는 깊은 레이어에서 발생할 수 있는 학습 불안정이나 수치 문제(예: 그래디언트 폭발 또는 소멸)를 완화하는 역할을 합니다.

3.2 2-레이어 GCN 예시

논문에서는 실제로 다음과 같은 2-레이어 모델을 제시합니다:

Z=softmax(A^  ReLU(A^ X W(0)) W(1))Z = \mathrm{softmax} \bigl( \hat A \;\mathrm{ReLU}(\hat A\,X\,W^{(0)})\,W^{(1)} \bigr)

여기서 A^=D~−12A~ D~−12\hat A = \tilde D^{-\tfrac12} \tilde A\,\tilde D^{-\tfrac12}.

  1. 우선 입력 특징 XXA^\hat A를 곱해 이웃 노드 정보를 흡수하고, W(0)W^{(0)}를 곱한 뒤 ReLU 활성화.
  2. 다시 A^\hat A를 곱해 두 단계 이웃 정보를 어느 정도 반영하고, W(1)W^{(1)}를 곱한 뒤 softmax를 적용해 각 노드의 레이블 확률 ZZ를 구함.
    이 구조가 반지도 학습 환경에서 효과적으로 작동함을 여러 데이터셋에서 보여줍니다.

3.3 직관적 흐름

  • 각 노드는 자신의 특징뿐 아니라 연결된 이웃 노드들의 특징도 흡수하면서 표현이 갱신됩니다.
  • 첫 레이어는 “직접 이웃(1-hop) 정보”를 모으고, 다음 레이어를 통해 약간 더 먼 거리에 있는 이웃(2-hop) 정보까지 반영 가능해집니다.
  • 이러한 방식으로, 그래프의 구조와 노드 특징이 섞여서 더 풍부한 표현(representation)을 얻게 됩니다.
 

4. 논문의 장점 및 인사이트

✅ 장점

  • 구조적 정보 반영: 단순히 노드의 특징만 보는 것이 아니라, 그래프 연결 구조(이웃 관계)를 깊이 있게 활용합니다.
  • 계산 효율성: 스펙트럴 그래프 합성곱을 복잡하게 구현하는 대신, 1차 근사를 도입해 실제 학습 가능한 형태로 단순화했습니다.
  • 실험적 검증: 여러 그래프 노드 분류 데이터셋(Cora, Citeseer, PubMed 등)에서 우수한 성능을 보였습니다.
  • 설계 단순성: 복잡한 하이퍼파라미터 없이 구조가 비교적 간단해서 이해하기 좋습니다.

💡 인사이트

  • 이 논문을 통해 “그래프 + 신경망” 융합의 기본 틀이 자리잡았습니다. GCN 이후 많은 그래프 신경망(GNN: Graph Neural Network)이 이 구조를 바탕으로 확장되었습니다.
  • “이웃의 정보 흡수”라는 개념이 자연스럽게 메시지 패싱(message passing) 관점에서 재정립되었고, 이후 모델들이 이 패러다임을 활용합니다.

5. 논문의 한계 및 주의사항

⚠️ 한계

  • Full-batch 학습 방식: 논문 모델은 전체 그래프를 한꺼번에 들여와 학습하는 방식으로, 매우 큰 그래프의 경우 메모리/연산 측면에서 부담이 될 수 있습니다.
  • 깊이 확장성의 제약: 레이어 수를 많이 쌓을 경우 “oversmoothing”(모든 노드 표현이 비슷해지는 현상) 문제가 발생할 수 있습니다.
  • 엣지 특징 미지원: 노드 간의 연결에 대한 가중치(edge weight)나 방향(directed edge) 또는 엣지의 추가 특징(edge feature)을 자연스럽게 다루지는 않습니다.
  • 무향 그래프 기반: 기본적으로 논문에서는 무향(undirected) 그래프를 가정하고 있으므로, 방향성이 강한 그래프에는 추가 설계가 필요합니다.

🔍 주의사항

  • 그래프의 규모가 매우 큰 경우에는 미니배치(mini-batch) 기반의 샘플링 방법(예: GraphSAGE)이나 인접행렬의 희소 표현(sparse representation)을 고려해야 합니다.
  • 그래프 구조가 매우 복잡하거나 노드 간 이질성이 크다면, 단순 GCN 구조보다 애드혹(ad-hoc) 한 설계가 필요할 수 있습니다 (예: 엣지 특징, 방향성, 노드군집화 등).

6. 느낀 점 및 적용 가능성

  • 개인적으로 이 논문을 읽으면서 “그래프 데이터에서도 신경망처럼 층(layer)을 쌓을 수 있구나” 라는 인사이트가 강하게 왔습니다.
  • 특히 SNS, 추천시스템, 지식그래프, 생물학 네트워크 등 노드 + 연결 구조가 명확한 영역에서 GCN은 매력적인 모델입니다.
  • 다만 실제 적용 시에는 데이터 특성(노드 수, 엣지 수, 특징 벡터 크기), 학습 리소스, 그래프의 동적 변화 여부 등을 면밀히 고려해야 합니다.
  • 이후에는 이 논문의 구조를 바탕으로 좀 더 최신 모델(예: Graph Attention Network(GAT), GraphSAGE 등)으로 확장해보는 것도 좋을 것 같습니다.

논문: Revealing Key Details to See Differences: A Novel Prototypical Perspective for Skeleton-based Action Recognition (arXiv:2411.18941)
발표 시기: 2024년 11월
키워드: Skeleton-based Action Recognition, Prototype Learning, GCN, Fine-grained Differences


📌 1. 왜 스켈레톤 기반 행동 인식인가?

우리가 영상 속 사람의 행동을 인식하려면 일반적으로 RGB 이미지를 사용합니다.
하지만 조명, 배경, 옷 색깔 등 다양한 요소가 방해 요소로 작용하죠.

이런 한계를 극복하기 위해 등장한 것이 바로
**“스켈레톤 기반 행동 인식 (Skeleton-based Action Recognition)”**입니다.

사람의 **관절 위치(joint coordinates)**만을 사용해서 행동을 인식하기 때문에,
배경과 조명 변화에 강하고, 계산량도 훨씬 적습니다.


🧩 2. 문제의식 — “비슷한 행동을 구분하기 어렵다!”

예를 들어,

  • “손 흔들기(Waving)” vs “손 들기(Raising hand)”
  • “앉기(Sitting down)” vs “숙이기(Bending)”

이런 행동들은 관절의 움직임 패턴이 매우 유사합니다.

기존 모델들은 시퀀스 전체를 평균적으로 표현하기 때문에,
이 **미세한 차이(key difference)**를 잘 포착하지 못합니다.


💡 3. 제안 방법 — ProtoGCN: 프로토타입 기반 차이 학습

🔸 핵심 아이디어

각 행동 클래스마다 **대표적인 형태(Prototype)**를 학습합니다.
그 후, 새로운 입력 시퀀스가 이 프로토타입과 얼마나 다른가를 계산하여
행동을 분류합니다.

즉, 단순히 “이 행동은 ~같다”가 아니라
👉 **“이 행동은 왜 ~와 다르다”**를 학습하는 접근입니다.


🔸 구조 개요

  1. Skeleton Graph Construction
    • 관절들을 노드로, 연결 관계를 엣지로 구성
  2. GCN 기반 피처 추출
    • 공간적(spatial) + 시간적(temporal) 관계를 학습
  3. Prototype Comparison Module
    • 각 클래스의 프로토타입과 거리(distance) 계산
  4. 차이(Δ Feature) 기반 분류기
    • 입력의 ‘차이 벡터’를 통해 최종 행동 인식

🧪 4. 실험 결과

✅ 데이터셋

  • NTU RGB+D 60, 120 등 표준 스켈레톤 행동 데이터셋
  • Kinetics-Skeleton 등 대규모 벤치마크 포함

✅ 결과 요약

비교 모델정확도(%)특징
ST-GCN 84.7 기본 GCN 구조
CTR-GCN 89.2 Temporal 관계 강화
ProtoGCN (제안) 92.3 미세한 차이 인식 향상
  • 혼동 행렬(confusion matrix) 분석 결과,
    유사한 행동 쌍 간의 오분류가 대폭 감소함.
  • 시각화 실험에서도 프로토타입과 입력의 차이 벡터가
    실제로 의미 있는 움직임 영역에 집중되는 것이 확인됨.

⚙️ 5. 분석 — 이 논문의 의의

🌟 장점

  • Fine-grained 구분력 향상: 세밀한 동작 차이를 명시적으로 학습
  • 설명 가능성(Interpretability): “왜 이 행동이 다른지”를 이해할 수 있음
  • 프로토타입 재활용 가능성: 새로운 클래스 학습 시 효율적 전이 가능

⚠️ 한계

  • 클래스 수가 많아질수록 프로토타입 메모리 관리가 복잡
  • 실제 환경 노이즈(센서 오류, 가림 현상)에 대한 추가 검증 필요
  • 시간적 패턴(temporal pattern) 복합성이 충분히 반영되지 않을 수 있음

🔮 6. 향후 연구 및 응용 가능성

이 접근은 단순한 행동 인식을 넘어

  • 스포츠 동작 분석,
  • 헬스케어 재활 모니터링,
  • 감정 행동 인식 등 다양한 분야로 확장될 수 있습니다.

또한, 프로토타입 기반 학습은 Vision 분야 외에도
음성, 텍스트 등 다른 도메인으로의 확장 가능성이 매우 높습니다.


✍️ 7. 마무리 — “차이를 학습하는 인공지능”

이 논문은 스켈레톤 인식 분야에서
단순히 ‘패턴을 인식하는 AI’가 아니라
차이를 이해하는 AI’로의 전환을 보여줍니다.

ProtoGCN은 단순히 동작을 분류하는 것이 아니라,
“무엇이 다르기에 다른 행동인지”를 배웁니다.

핵심 문장:
“Action recognition should not only see similarity, but also understand difference.”

작년에 갤럭시북4 프로 사서 사용하고 있다가 이번에 루나레이크 나오면서 5프로로 갈아탔습니다.

ai 기능은 갤럭시북4에도 조금 들어갔지만 이번에 ai select와 copilot 기능이 더욱 강력하게 나왔다고 합니다.

 

배터리 효율과 발열이 잘 잡혀서 all day 배터리 사용 가능해서 지금 사용중인데 배터리와 발열 잡힌게 체감이 되서

제일 맘에 듭니다.

 

사운드도 일반 스피커와 다르게 영화관처럼 울려서 들리는 사운드가 또렷하게 나오고 갤럭시 생태계의 연결성은

미리 사용해보셨던 분들은 말하지 않아도 아실꺼라고 믿습니다.

 

프로 버전은 역시 마우스가 없어도 탭 말고 터치로도 조작 가능한게 좋고 대학생분들 과제나 리포트 쓸 때 ai의 도움을

받으면 좋을꺼 같습니다.

 

실제 데스크탑 사용 사진입니다.

 

언박싱 사진 입니다.

 

이번에 css grid 공부를 다시 보고 있는데

예전에 한번 봤던 것들이지만 안쓰고 까먹다가 다시보니 흥미로운 것을 정리하려고 한다

grid-template을 사용할 때 반복적인 경우 보통 아래 사진과 같이

repeat(반복될만큼의 숫자, 반복되는 넓이)

이렇게 많이 쓰게 되는데 열이나 행으로 동적으로 늘어나는 경우를 대비할 수 없다.

grid repeat() 예시

 

이런 경우를 위해서 앞에 반복되는 숫자 대신에 auto-fit, auto-fill 이란 속성이 있었다.

둘다 모두 지정된 크기 이하로 떨어질 경우 반응형으로 만들어주는데 

차이점은 여백의 공간이 있을 때 확인할 수 있다.

 


auto-fill의 경우

auto-fill
auto-fill

 

auto-fill 예시 사진
auto-fill 예시 사진

 

여백의 공간이 생기면 그곳에도 박스가 있다는 가정하에 넓이가 측정된다

 

 

auto-fit의 경우

auto-fit
auto-fit

 

auto-fit 예시 사진
auto-fit 예시 사진

 

auto-fit으로 설정하면 나머지 공간을 알아서 존재하는 박스들이 나눠 가진다.

개인적으로 auto-fit이 훨씬 좋아보인다.

Prisma와 planetScale을 사용하여 백엔드를 작업하는데

유저 한명을 삭제하면 그 유저가 가지고 있던 토큰을 삭제하는 방법

 

유저 모델과 토큰 모델 설계구조
유저 모델과 토큰 모델 설계구조

 

위와 같은 상태에서는 prisma studio에서 유저를 삭제하면 에러가 난다.

onDelete: Cascade

속성으로 유저가 삭제되면 연결된 토큰이 삭제되게 설정 가능

'NextJS' 카테고리의 다른 글

[NextJS] NextJS에서 Link Component 사용하기  (0) 2023.04.09

지난 글에 이어서 mysql을 쓰게 되었다.

모든 테이블에서 특정 값으로 조건에 맞는 데이터를 찾는 것인데

sql 잘하시는 분들이 쓰신 여러 글을 볼 수 있었지만 따라하기 무서웠다

겉핥기 중인데다가 js로 하고 있어서 좋지 않은 방법인지는 모르겠지만 쉽게 할 수 있길래 공유한다

export const getDbDistribute = async (root, args) => {
    try {
    // 스키마에서 모든 테이블 이름 배열로 저장하기
      const [tables] = await db.query(`
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'sports_db';
      `);
      let result = [];
 
    // 배열 반복문으로 조건 찾아서 리턴 배열에 저장하기
     await Promise.all(tables.map(async (table) => {
        const [rows] = await db.query(`
        SELECT *
        FROM sports_db.${table.TABLE_NAME}
        WHERE year = ?
        `, [args])
        result.push(...rows);
      }))
      console.log(result)
      return result;
    } catch (error) {
      console.error("쿼리 실행 중 오류:", error);
      throw error;
    }
};

 

쿼리 비동기식이랑 args 쿼리 변수로 사용하는 방법이나 좋은 공부가 되었다.

+ Recent posts