Serving YOLOv5 Object Detection Model using Triton Inference Server
Introduction
Definition of Triton Inference Server
Triton Inference Server는 NVIDIA에서 개발한 딥 러닝 모델 인퍼런스를 위한 고성능 인퍼런스 서버입니다. Triton Inference Server는 다중 모델을 지원하며, TensorFlow, PyTorch, ONNX 등의 주요 딥 러닝 프레임워크를 모두 지원합니다.
이를 통해 사용자는 다양한 모델을 효율적으로 서빙할 수 있습니다.
Triton Inference Server는 NVIDIA TensorRT 엔진을 기반으로하며, GPU 가속을 통해 모델 추론을 빠르게 수행할 수 있습니다.
또한 Triton Inference Server는 TensorFlow Serving과 호환되는 gRPC 인터페이스를 제공하며 Triton Inference Server는 TensorFlow Serving, TorchServe와 같은 기존 인퍼런스 서버와 비교하여 성능 및 유연성 면에서 우수한 성능을 발휘합니다.
Triton Inference Server는 Kubernetes, Docker 및 NVIDIA DeepOps와 같은 오케스트레이션 툴과 통합되어 쉽게 배포할 수 있습니다.
Triton Inference Server는 성능, 확장성 및 유연성 면에서 우수한 기능을 제공하므로, 대규모 딥 러닝 모델 인퍼런스를 위한 선택적이고 강력한 도구로 자리 잡고 있습니다.
Docker Image:
triton-server
Triton Inference Server 이미지는 NVIDIA에서 제공하는 Docker 이미지입니다. 이 이미지는 NVIDIA GPU 드라이버와 CUDA 라이브러리를 포함하며, 딥 러닝 인퍼런스를 실행하는 데 필요한 모든 라이브러리와 의존성을 포함합니다.
Triton Inference Server 이미지는 NGC(NVIDIA GPU Cloud)와 Docker Hub에서 제공됩니다. NGC에서는 최신 버전의 Triton Inference Server 이미지를 제공하며, TensorFlow, PyTorch, ONNX와 같은 다양한 프레임워크에서 학습된 모델을 지원합니다. 또한, TensorRT와 같은 최적화 라이브러리를 사용하여 높은 성능을 발휘합니다.
Docker Hub에서도 NVIDIA에서 공식적으로 제공하는 Triton Inference Server 이미지를 찾을 수 있습니다. Docker Hub에서는 다양한 버전의 Triton Inference Server 이미지를 제공하며, TensorFlow, PyTorch, ONNX와 같은 다양한 프레임워크를 지원합니다.
이러한 Triton Inference Server 이미지는 Kubernetes, Docker Compose와 같은 오케스트레이션 툴과 통합되어 배포 및 관리할 수 있으며, 쉽게 다양한 환경에서 실행할 수 있습니다.
이러한 Triton Inference Server를 통해 YOLOv5 모델을 Serving하고, 간략한 Client를 개발하여 Server가 잘 구동되는지 확인하는 방법을 설명하겠다.
Labeling with Label Studio for Pre-labeled Data using YOLOv5
Introduction
Label Studio
Label Studio는 오픈 소스 데이터 라벨링 툴로, 기계 학습 및 데이터 분석 작업을 위해 데이터에 레이블을 부착하는 데 사용되는 도구입니다. Label Studio를 사용하면 이미지, 텍스트, 오디오, 비디오 등 다양한 유형의 데이터에 대해 레이블을 지정하고, 데이터를 분류, 개체 감지, 개체 분류, 개체 추출, 텍스트 분석 등의 작업을 수행할 수 있습니다.
Label Studio는 다양한 데이터 형식 및 레이블링 작업에 대한 다양한 템플릿을 제공하며, 커스텀 레이블링 작업을 설정할 수 있습니다. 또한, 데이터 라벨링 작업을 위해 다양한 작업자를 관리하고, 작업 상태를 추적하며, 결과를 검토하고 승인할 수 있는 기능들을 제공합니다.
Label Studio는 웹 기반 인터페이스를 제공하여 다양한 사용자가 쉽게 접근하고 사용할 수 있습니다. 또한, API를 통해 레이블링 작업을 자동화하고, 다양한 형식의 데이터를 가져와 레이블링을 수행할 수 있습니다.
Label Studio는 머신러닝, 딥러닝, 자연어 처리, 컴퓨터 비전 등 다양한 분야에서 데이터 라벨링 작업을 수행하는 데 유용하게 사용될 수 있습니다. 오픈 소스로 제공되기 때문에, 사용자들은 커스터마이징이 가능하고 개발자들은 소스 코드를 수정하여 자신의 요구에 맞게 확장할 수 있습니다.
Implementing Mask R-CNN with PyTorch
Introduction
Mask R-CNN?
Mask R-CNN은 Faster R-CNN에 Segmentation 네트워크를 추가한 딥러닝 알고리즘으로, 객체 검출 (Object detection)과 분할을 모두 수행할 수 있습니다.
기존 Faster R-CNN은 RPN (Region Proposal Network)을 사용하여 객체의 경계 상자 (Bounding box)를 추출하고, 추출된 경계 상자를 입력으로 사용하여 객체 인식을 수행합니다. 이러한 방식은 객체의 위치와 클래스 정보를 검출할 수 있지만, 객체 내부의 픽셀-레벨 Segmentation 정보는 제공하지 않습니다.
Mask R-CNN은 Faster R-CNN의 RPN 뿐만 아니라, RoIAlign (Rectangle of Interest Alignment)을 사용하여 추출된 경계 상자 내부의 픽셀-레벨 Segmentation 정보를 추출할 수 있는 분할 네트워크를 추가합니다. 이를 통해, 객체 검출과 동시에 객체 내부의 픽셀-레벨 Segmentation 정보를 추출할 수 있습니다.
또한, Mask R-CNN은 이를 위해 Faster R-CNN과 함께 사용되는 합성곱 신경망 (Convolutional Neural Network)을 미세 조정 (Fine-tuning)하여 분할 네트워크의 성능을 최적화합니다.
Mask R-CNN은 객체 검출과 분할 작업에서 매우 강력한 성능을 보여주며, COCO (Common Objects in Context) 데이터셋에서 현재 가장 높은 정확도를 보이고 있습니다. 따라서, 객체 검출과 분할이 모두 필요한 다양한 응용 분야에서 활용되고 있습니다.
1 | ├── makeGT.py |
Mask R-CNN의 training, test, visualization, evaluation을 진행할 수 있게 PyTorch를 사용하여 위와 같은 구조로 개발하는 과정을 기록한다.
사용될 데이터는 ISIC 2016 Challenge - Task 3B: Segmented Lesion Classification이며 예시는 아래와 같다.
1 | ├── ISBI2016_ISIC_Part3B_Test_Data |
How to Convert a PyTorch Model to TensorRT
Introduction
TensorRT
- Features
- 학습된 Deep Learning 모델을 최적화하여 NVIDIA GPU 상에서 Inference 속도를 향상시켜 Deep Learning 서비스 TCO (Total Cost of Ownership)를 개선하는데 도움을 줄 수 있는 모델 최적화 엔진
- NVIDIA GPU 연산에 적합한 최적화 기법들을 이용해 모델을 최적화하는 Optimizer와 다양한 GPU에서 모델 연산을 수행하는 Runtime Engine을 포함
- 대부분의 Deep Learning Frameworks (TensorFlow, PyTorch, Etc.)에서 학습된 모델 지원
- C++ 및 Python의 API 레벨 지원을 통해 GPU programming language인 CUDA 지식이 별도로 없더라도 사용 가능
- TensorRT Optimizations
- Quantization & Precision Calibration
- Graph Optimization
- Kernel Auto-tuning
- Dynamic Tensor Memory & Multi-stream Execution
MLOps for MLE: Stream
Stream Serving
Data Subscriber
1 | import os |
How to Change PyTorch Model Structure and Train Only Some Layers
Introduction
논문의 저자가 제공하거나 논문을 참고하여 개발된 모델은 보통 config 파일 (e.g. config.yaml
, config.py
)이 존재하고, 해당 파일을 통해 이렇게 모델 구조를 변경할 수 있다.
하지만 기존의 소스에 본인이 원하는 모델 구조가 없다면 어떻게 개발하는지, 그리고 기존에 없던 레이어를 어떻게 훈련하면 좋을지 알아보자.
이 글에서는 이 논문을 기반으로 개발된 모델인 whai362/pan_pp.pytorch를 기준으로 개발하겠다.
간단한 목표 설정을 해보기 위해 대략적인 모델의 설명을 진행하겠다.
PAN++
PAN++는 STR (Scene Text Recognition)을 위해 개발되었지만, 본 글에서는 STD (Scene Text Detection) 부분까지만 사용하며 해당 부분은 아래와 같이 진행된다.
- Feature Extraction
- Layer: Backbone (ResNet)
- Output: Feature map
- Feature Fusion
- Layer: FPEM (Feature Pyramid Enhancement Module)
- Output: Enhanced feature map
- Detection
- Layer: Detection Head
- Output: Text region, text kernel, instance vector
- Post-processing (Pixel Aggregation, PA)
- Output: Axis of bbox (bounding box)
Goal
- FPEM의 stack 수 편집
- 원문 코드: 2 stacked FPEMs 사용
- 목표: 4 stacked FPEMs
- Fine-tuning
- 목표: 추가된 2 stacked FPEMs 계층만을 훈련
전문연구요원: 훈련소 준비
전문연구요원: 시작
킹받는 호돌이
Introduction
안녕하세요, 저는 2023년 2월 22일에 건국대학교 기계설계학과에서 석사학위를 취득했고 2023년 2월 1일에 전문연구요원으로 편입하기 위해 AgileSoDA에 입사하였습니다.
학위과정을 거친 모든 연구자 분들이 공식 문서나 복잡한 서류들을 자주 읽어서 헤메는 분들이 많진 않겠지만, 제 블로그를 통해 전문연구요원을 준비하시는 석, 박사과정 분들과 현재 재직 중이신 전문연구요원 분들에게 작은 도움이 됐으면 합니다.
먼저 본격적인 전문연구요원 편입 과정에 앞서 학위 수여 전 유의해야할 사항에 대해 알려드리겠습니다.
MLOps for MLE: Kafka
Kafka System
1 | FROM confluentinc/cp-kafka-connect:7.3.0 |
MLOps for MLE: API Serving
Model API
모델 다운로드
1 | import os |
MLOps for MLE: FastAPI
Introduction
1 | $ conda activate MLOps |
1 | from fastapi import FastAPI |
app = FastAPI()
:FastAPI
클래스의 인스턴스 생성- Path Operation Decorator: API 작업의 endpoint를 HTTP method를 통해 지정
- Operation:
POST
,GET
,PUT
,DELETE
등의 HTTP method - Ex.
@app.get("/")
: FastAPI가 path/
에서GET
operation 수행
- Operation:
- Path Operation Function: Path operation 수행 시 실행될 Python 함수
- Return:
dict
,list
,str
,int
, Pydantic Model, etc…
- Return:
MLOps for MLE: Model Registry
MLflow Setup
- MLflow: A machine learning lifecycle platform
- MLflow Tracking: 학습 과정에서의 매개 변수, 코드, 결과를 기록하고 대화형 UI로 비교할 수 있는 API
- MLflow project: ML 코드 공유를 위한 Conda 및 Docker 기반 패키지 형식 지원
- MLflow Models: Docker, Apache Spark, Azure ML, AWS SageMaker 등의 플랫폼에 ML 코드를 배포할 수 있는 패키징 형식 및 도구
- MLflow Model Registry: MLflow 모델의 전체 수명 주기를 공동으로 관리하기 위한 중앙 집중식 모델 저장소, API, UI의 집합
- Backend Store: 수치 데이터와 MLflow 서버의 정보들을 체계적으로 관리하기 위한 DB
- 모델 데이터
- 학습 결과
- Accuracy
- F1-score
- 학습 과정의 loss
- 모델 자체 정보 (hyperparameters)
- 학습 결과
- MLflow의 메타 데이터
- run_id
- run_name
- experiment_name
- 모델 데이터
Programmers: 자물쇠와 열쇠
풀이
Programmers 60059: 자물쇠와 열쇠
새로운 key
를 만들어서 이동하고 회전하면 시간 복잡도가 너무 커질 것 같아서 key
의 좌표를 회전된 것처럼 맵핑해줄 수 있는 convert_func
함수를 개발했다. 는 행렬 다시 만들고 이동 및 회전해도 풀 수 있음;key
와 lock
이 겹쳐지는 순간 겹쳐지지 않은 key
의 부분을 쉽게 고려하기 위해 for
문을 M
(len(key)
)에 대해 개발하였고, 해당 부분을 위해 key
를 회전하는 것은 lock
을 회전하는 것과 같은 성질을 이용해 lock
을 회전했다.
또한 lock
의 모든 부분에 일일히 key
를 넣어보며 확인하면 시간 복잡도가 커질 것 같아서 key
의 삽입이 필요한 구간을 idx_i_1
, idx_j_1
, idx_i_2
, idx_j_2
로 정의했다. 는 이것도 그냥 풀 수 있음;
최종적으로 꼭 key
의 삽입이 필요한 구간에 대해서만 완벽히 일치하는지에 대한 여부 확인을 위한 함수 match
를 수행했다.