YOLO26 모델을 위한 TensorRT 내보내기#
고성능 환경에 컴퓨터 비전 모델을 배포하려면 속도와 효율성을 극대화하는 형식이 필요할 수 있습니다. NVIDIA GPU에 모델을 배포할 때 특히 그렇습니다.
TensorRT 내보내기 형식을 사용하면 NVIDIA 하드웨어에서 빠르고 효율적으로 추론할 수 있도록 Ultralytics YOLO26 모델을 최적화할 수 있습니다. 이 가이드에서는 변환 과정을 따라 하기 쉬운 단계별로 안내하고, 딥러닝 프로젝트에서 NVIDIA의 첨단 기술을 최대한 활용하도록 돕습니다.
TensorRT#
NVIDIA가 개발한 TensorRT는 고속 딥러닝 추론을 위해 설계된 고급 소프트웨어 개발 키트(SDK)입니다. 객체 탐지와 같은 실시간 애플리케이션에 적합합니다.
이 툴킷은 NVIDIA GPU에 맞게 딥러닝 모델을 최적화하여 더 빠르고 효율적인 연산을 가능하게 합니다. TensorRT 모델은 레이어 융합, 정밀도 보정(INT8 및 FP16), 동적 텐서 메모리 관리, 커널 자동 튜닝 등의 기법을 포함하는 TensorRT 최적화를 거칩니다. 딥러닝 모델을 TensorRT 형식으로 변환하면 개발자는 NVIDIA GPU의 잠재력을 최대한 활용할 수 있습니다.
TensorRT는 TensorFlow, PyTorch, ONNX 등 다양한 모델 형식과 호환되므로, 여러 프레임워크의 모델을 통합하고 최적화할 수 있는 유연한 솔루션을 제공합니다. 이러한 다용도성은 다양한 하드웨어 및 소프트웨어 환경에서 효율적인 모델 배포를 지원합니다.
TensorRT는 엔진을 빌드한 GPU에서 프로파일링하고 튜닝합니다. 배포 대상 GPU 아키텍처에 맞춰 빌드하고 TensorRT/CUDA 런타임도 일치시켜야 합니다. .engine 파일을 이식 가능한 모델 형식으로 취급하지 마세요. 엣지 배포의 경우 Ultralytics Platform에서 Jetson 대상 장치 8가지를 선택할 수 있으며, 각 장치의 실제 빌드 및 검증 상태가 문서화되어 있습니다. 또는 대상 장치에서 로컬로 내보낼 수 있습니다.
TensorRT 모델의 주요 기능#
TensorRT 모델은 고속 딥러닝 추론의 효율성과 효과에 기여하는 여러 핵심 기능을 제공합니다.
-
정밀도 보정: TensorRT는 정밀도 보정을 지원하므로 특정 정확도 요구사항에 맞춰 모델을 미세 조정할 수 있습니다. 여기에는 INT8 및 FP16과 같은 저정밀도 형식 지원도 포함되며, 이를 통해 허용 가능한 정확도 수준을 유지하면서 추론 속도를 더욱 높일 수 있습니다.
-
레이어 융합: TensorRT 최적화 과정에서는 여러 신경망 레이어를 하나의 연산으로 결합하는 레이어 융합을 수행합니다. 이를 통해 메모리 액세스와 연산을 최소화하여 계산 오버헤드를 줄이고 추론 속도를 높입니다.
-
동적 텐서 메모리 관리: TensorRT는 추론 중 텐서 메모리 사용량을 효율적으로 관리하여 메모리 오버헤드를 줄이고 메모리 할당을 최적화합니다. 그 결과 GPU 메모리를 더욱 효율적으로 활용할 수 있습니다.
-
커널 자동 튜닝: TensorRT는 모델의 각 레이어에 가장 최적화된 GPU 커널을 선택하도록 커널을 자동 튜닝합니다. 이러한 적응형 접근 방식은 모델이 GPU의 연산 능력을 최대한 활용하도록 합니다.
TensorRT의 배포 옵션#
YOLO26 모델을 TensorRT 형식으로 내보내는 코드를 살펴보기 전에, 일반적으로 TensorRT 모델이 사용되는 곳을 알아보겠습니다.
TensorRT는 여러 배포 옵션을 제공하며, 각 옵션은 통합 편의성, 성능 최적화, 유연성 사이에서 서로 다른 균형을 제공합니다.
- TensorFlow 내 배포: 이 방법은 TensorRT를 TensorFlow에 통합하여 익숙한 TensorFlow 환경에서 최적화된 모델을 실행합니다. TF-TRT가 지원 및 미지원 레이어가 혼합된 모델을 효율적으로 처리할 수 있어 유용합니다.
-
독립 실행형 TensorRT 런타임 API: 세밀한 제어 기능을 제공하므로 성능이 중요한 애플리케이션에 적합합니다. 더 복잡하지만 지원되지 않는 연산자를 사용자 지정 방식으로 구현할 수 있습니다.
-
NVIDIA Triton 추론 서버: 다양한 프레임워크의 모델을 지원하는 옵션입니다. 클라우드 또는 엣지 추론에 특히 적합하며, 동시 모델 실행 및 모델 분석과 같은 기능을 제공합니다.
지원 작업#
TensorRT 내보내기는 Ultralytics의 7가지 태스크를 모두 지원합니다. 시맨틱 세그멘테이션과 깊이 추정은 해당 헤드를 제공하는 유일한 제품군인 YOLO26에서만 사용할 수 있습니다.
YOLO26 모델을 TensorRT로 내보내기#
YOLO26 모델을 TensorRT 형식으로 변환하면 실행 효율성을 높이고 성능을 최적화할 수 있습니다.
설치#
필수 패키지를 설치하려면 다음을 실행하세요:
# Install the required package for YOLO26
pip install ultralytics설치 과정에 관한 자세한 지침과 모범 사례는 YOLO26 설치 가이드를 확인하세요. YOLO26에 필요한 패키지를 설치하는 중 문제가 발생하면 해결 방법과 팁이 담긴 일반적인 문제 가이드를 참조하세요.
사용법#
사용 안내를 자세히 살펴보기 전에 Ultralytics에서 제공하는 다양한 YOLO26 모델을 확인하세요. 이를 통해 프로젝트 요구 사항에 가장 적합한 모델을 선택할 수 있습니다.
TensorRT 형식은 내보내기, 예측, 검증 모드를 지원합니다. 추론 및 검증에는 NVIDIA GPU가 필요합니다. 모델을 내보낸 다음 내보낸 모델을 로드하여 추론을 실행하거나 정확도를 검증하세요.
from ultralytics import YOLO
# YOLO26 모델 로드
model = YOLO("yolo26n.pt")
# 모델을 TensorRT 형식으로 내보내기
model.export(format="engine") # 'yolo26n.engine' 생성from ultralytics import YOLO
# 내보낸 TensorRT 모델 로드
model = YOLO("yolo26n.engine")
# 추론 실행
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# 내보낸 TensorRT 모델 로드
model = YOLO("yolo26n.engine")
# COCO8 데이터셋에서 정확도 검증
metrics = model.val(data="coco8.yaml")내보내기 인수#
| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
format | str | 'engine' | 내보낸 모델의 대상 형식으로, 다양한 배포 환경과의 호환성을 정의합니다. |
imgsz | int 또는 tuple | 640 | 모델 입력에 사용할 이미지 크기입니다. 정사각형 이미지에는 정수를 사용하고, 특정 크기에는 튜플 (height, width)을 사용할 수 있습니다. |
quantize | int 또는 str | None | 양자화 정밀도: 16(FP16) 또는 8(INT8/PTQ; 보정 data/fraction 필요); 32/미설정은 FP32입니다. quantize=8로 학습된 체크포인트는 보정 없이 체크포인트에 포함된 범위에서 항상 INT8로 내보냅니다. 사용 중단된 half/int8 플래그를 대체합니다. |
dynamic | bool | False | 동적 입력 크기를 허용하여 다양한 이미지 크기를 유연하게 처리할 수 있습니다. |
simplify | bool | True | onnxslim을 사용해 모델 그래프를 단순화하여 성능과 호환성을 높일 수 있습니다. |
opset | int | None | 중간 ONNX 그래프의 ONNX opset 버전을 지정합니다. 설정하지 않으면 지원되는 최신 버전을 사용합니다. |
workspace | float 또는 None | None | TensorRT 최적화를 위한 최대 워크스페이스 크기를 GiB 단위로 설정하여 메모리 사용량과 성능 간 균형을 맞춥니다. TensorRT가 장치의 최대 용량까지 자동으로 메모리를 할당하도록 하려면 None을 사용하세요. |
nms | bool, 선택 사항 | None | 원시 출력(None, 기본값), 내장 NMS(True) 또는 NMS가 없는 head(False)를 선택합니다. |
batch | int | 1 | 내보내기 모델의 배치 추론 크기 또는 predict 모드에서 내보낸 모델이 동시에 처리할 최대 이미지 수를 지정합니다. |
data | str | None | 양자화에 필수적인 데이터 세트 YAML 경로입니다. 분류 작업에서는 데이터 세트 디렉터리 또는 내장 데이터 세트 이름을 사용합니다. quantize=8과 함께 생략하면 Ultralytics가 모델 태스크에 맞는 기본 보정 데이터 세트를 선택합니다. quantize=8로 학습된 체크포인트에는 필요하지 않습니다. |
fraction | float, int 또는 list | 1.0 | 비율, 이미지 수 또는 [train, val, test] 비율/개수로 지정하는 보정 하위 집합입니다. 항목이 두 개인 목록에서는 test이 전체로 설정되고, 0는 건너뜁니다. |
device | str | None | 내보내기에 사용할 장치를 지정합니다. GPU는 device=0, NVIDIA Jetson의 DLA는 device=dla:0 또는 device=dla:1입니다. |
TensorRT로 내보낼 때는 CUDA를 지원하는 GPU를 사용해야 합니다.
TensorRT 11.2.1은 Thor를 포함해 JetPack을 지원하지 않습니다. 사용 중인 JetPack 릴리스에서 지원되는 TensorRT 10.x 런타임을 사용하세요. device=dla:0 또는 device=dla:1의 경우, NVIDIA는 TensorRT 10.7이 DLA를 지원하는 마지막 릴리스라고 안내합니다. TensorRT 11.0, 11.1, 11.2는 DLA를 지원하지 않습니다.
내보내기 프로세스에 관한 자세한 내용은 내보내기에 관한 Ultralytics 문서 페이지를 참조하세요.
INT8 양자화를 적용해 TensorRT로 내보내기#
TensorRT를 사용해 Ultralytics YOLO 모델을 INT8 정밀도로 내보내면 학습 후 양자화(PTQ)가 수행됩니다. TensorRT는 PTQ에 보정을 사용합니다. YOLO 모델이 대표 입력 데이터로 추론을 처리할 때 각 활성화 텐서 내 활성화 분포를 측정하고, 그 분포를 이용해 각 텐서의 스케일 값을 추정합니다. 양자화 후보인 각 활성화 텐서에는 보정 과정을 통해 결정되는 스케일이 연결됩니다. 양자화 인식 학습을 통해 quantize=8로 미세 조정된 체크포인트에는 이미 INT8 범위가 포함되어 있으므로, 내보낼 때 이 범위를 사용하고 보정은 건너뜁니다.
TensorRT 11에서는 암시적 양자화와 IInt8Calibrator 인터페이스가 제거되었습니다. TensorRT 11 이상에서 Ultralytics는 NVIDIA ModelOpt의 명시적 양자화를 사용해 INT8 양자화를 수행합니다. 이 과정에서는 강한 타입의 엔진을 빌드하기 전에 ONNX 그래프에 Q/DQ 노드를 삽입하며, FP16은 ModelOpt AutoCast 혼합 정밀도 변환으로 적용됩니다. quantize=8, quantize=16, data 인수는 동일하게 작동하며, ModelOpt는 처음 사용할 때 자동으로 설치됩니다. TensorRT 7~10에서는 아래 설명된 레거시 보정기를 대신 사용합니다.
암시적으로 양자화된 네트워크를 처리할 때 TensorRT는 레이어 실행 시간을 최적화하기 위해 필요에 따라 INT8을 사용합니다. 레이어가 INT8에서 더 빠르게 실행되고 입력 및 출력 데이터에 양자화 스케일이 지정되어 있으면 해당 레이어에 INT8 정밀도 커널을 할당합니다. 그렇지 않으면 TensorRT는 해당 레이어를 더 빠르게 실행하는 쪽에 따라 FP32 또는 FP16 정밀도 커널을 선택합니다.
배포 시 TensorRT 모델 가중치를 사용할 장치와 동일한 장치를 INT8 정밀도 내보내기에도 사용해야 합니다. 보정 결과는 장치마다 다를 수 있기 때문입니다.
INT8 내보내기 구성#
Ultralytics YOLO 모델에서 내보내기를 사용할 때 지정하는 인수는 내보낸 모델의 성능에 큰 영향을 미칩니다. 사용 가능한 장치 리소스에 따라 인수를 선택해야 하지만, 기본 인수는 대부분의 Ampere(또는 그 이후 아키텍처) NVIDIA 외장 GPU에서 정상적으로 작동해야 합니다. GPU 내보내기에는 "MINMAX_CALIBRATION" 보정 알고리즘을 사용하고, NVIDIA Jetson의 DLA 내보내기에는 "ENTROPY_CALIBRATION_2"을 사용합니다. 사용 가능한 옵션에 대한 자세한 내용은 TensorRT 개발자 가이드를 참고하세요. Ultralytics 테스트 결과 GPU 내보내기에는 "MINMAX_CALIBRATION"가 가장 적합했으며, 내보내기 장치에 따라 알고리즘이 자동으로 선택됩니다.
-
workspace: 모델 가중치를 변환하는 동안 할당할 장치 메모리의 크기(GiB)를 제어합니다.-
보정 요구사항과 사용 가능한 리소스에 따라
workspace값을 조정하세요.workspace을 늘리면 보정 시간이 길어질 수 있지만, TensorRT가 더 다양한 최적화 전략을 탐색하여 모델 성능과 정확도를 향상시킬 수 있습니다. 반대로workspace을 줄이면 보정 시간은 단축될 수 있지만 최적화 전략이 제한되어 양자화된 모델의 품질에 영향을 줄 수 있습니다. -
기본값은
workspace=None이며, TensorRT가 메모리를 자동으로 할당합니다. 수동으로 구성할 때 보정이 충돌 없이 종료되는 경우 이 값을 늘려야 할 수 있습니다. -
workspace값이 장치에서 사용 가능한 메모리보다 크면 TensorRT는 내보내기 중UNSUPPORTED_STATE을 보고합니다. 이는workspace값을 낮추거나None으로 설정해야 한다는 의미입니다. -
workspace을 최댓값으로 설정했는데 보정이 실패하거나 충돌하는 경우, 자동 할당을 위해None을 사용하거나imgsz와batch값을 줄여 메모리 요구량을 낮추세요. -
유의하세요. INT8 보정은 장치별로 다릅니다. 보정에 "고성능" GPU를 빌려 사용하면 다른 장치에서 추론을 실행할 때 성능이 저하될 수 있습니다.
-
-
batch: 추론에 사용할 최대 배치 크기입니다.dynamic=True을 사용하면 추론 중 더 작은 배치를 사용할 수 있지만, 지정한 크기보다 큰 배치는 처리할 수 없습니다.
작은 배치를 사용하면 INT8 보정 중 스케일이 부정확해질 수 있습니다. 보정 과정은 입력 데이터에 따라 조정되기 때문입니다. 작은 배치로는 전체 값 범위를 포착하지 못해 최종 보정에 문제가 생길 수 있습니다. 더 대표성 있는 보정 결과를 얻으려면 더 큰 배치 크기를 사용하세요.
NVIDIA의 실험 결과, INT8 양자화 보정에는 모델 데이터의 특성을 대표하는 이미지가 최소 500장 필요하다고 권장합니다. 이는 지침이며 엄격한 요구사항은 아닙니다. 데이터 세트에서 좋은 성능을 내는 데 필요한 이미지 수는 직접 실험해야 합니다. TensorRT의 INT8 보정에는 보정 데이터가 필요하므로, TensorRT용으로 quantize=8에서 quantize=8(학습 후 양자화) 없이 학습된 체크포인트를 내보낼 때는 data 인수를 사용하고, 검증 이미지를 보정에 사용하는 data="my_dataset.yaml"를 지정해야 합니다. quantize=8로 학습된 체크포인트는 보정을 건너뛰므로 해당 체크포인트에는 data을 생략하세요. TensorRT로 INT8 양자화 내보내기를 수행할 때 data 값을 지정하지 않으면 오류가 발생하는 대신 모델 태스크에 따른 "small" 예제 데이터 세트 중 하나가 기본으로 사용됩니다.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
quantize=8,
data="coco.yaml", # (4)!
)
# 내보낸 TensorRT INT8 모델 로드
model = YOLO("yolo26n.engine", task="detect")
# 추론 실행
result = model.predict("https://ultralytics.com/images/bus.jpg")- 동적 축으로 내보내며, 입력 크기는 32픽셀부터 내보내기
imgsz의 두 배까지 허용합니다. 명시적으로 설정하지 않으면dynamic은False로 유지됩니다. 자세한 내용은 내보내기 인수를 참고하세요. - 내보낸 모델과 INT8 보정에 사용할 최대 배치 크기를 8로 설정합니다.
- 변환 과정에서 장치 전체 메모리 대신 4 GiB를 할당합니다.
- 보정에 COCO 데이터 세트를 사용하며, 구체적으로는 검증에 사용되는 이미지(총 5,000장)를 사용합니다.
YOLO와 TensorRT INT8 사용의 장점#
-
모델 크기 감소: FP32에서 INT8로 양자화하면 모델 크기를 4배 줄일 수 있습니다(디스크 또는 메모리 기준). 이에 따라 다운로드 시간이 단축되고, 저장 공간 요구량과 모델 배포 시 메모리 사용량이 감소합니다.
-
전력 소비 감소: INT8로 내보낸 YOLO 모델의 저정밀도 연산은 FP32 모델보다 전력을 적게 소비할 수 있으며, 특히 배터리 구동 기기에서 효과적입니다.
-
추론 속도 향상: TensorRT는 대상 하드웨어에 맞게 모델을 최적화하므로 GPU, 임베디드 기기 및 가속기에서 추론 속도가 향상될 수 있습니다.
추론 속도 관련 참고 사항
TensorRT INT8로 내보낸 모델을 사용하여 처음 몇 차례 추론을 실행할 때는 전처리, 추론 및/또는 후처리 시간이 평소보다 길 수 있습니다. 추론 중에 imgsz을 변경할 때도 이러한 현상이 발생할 수 있습니다. 특히 imgsz이 내보내기 시 지정한 값과 다르면 더욱 그렇습니다(내보내기 imgsz는 TensorRT의 "optimal" 프로필로 설정됩니다).
YOLO와 TensorRT INT8 사용의 단점#
-
평가 지표 저하: 정밀도를 낮추면
mAP,Precision,Recall또는 모델 성능 평가에 사용되는 기타 지표가 다소 나빠질 가능성이 있습니다. 점수 보정을 유지하기 위해 Sigmoid 레이어는 높은 정밀도로 유지되지만, INT8에서도 confidence 값이 달라질 수 있으므로 INT8 모델 자체의 F1 곡선을 기준으로 운영 임계값을 선택하세요. 다양한 기기의 소규모 샘플에서 INT8로 내보낼 때mAP50와mAP50-95의 차이를 비교하려면 성능 결과 섹션을 참조하세요. -
개발 시간 증가: 데이터셋과 기기에 맞는 INT8 보정의 "최적" 설정을 찾으려면 상당한 테스트 시간이 소요될 수 있습니다.
-
하드웨어 종속성: 보정 및 성능 향상은 하드웨어에 크게 좌우될 수 있으며, 모델 가중치의 이식성이 낮아집니다.
Ultralytics YOLO TensorRT 내보내기 성능#
NVIDIA A100#
Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1 환경에서 테스트했습니다.
COCO에서 학습되고 사전 학습된 클래스 80개를 포함하는 이 모델의 사용 예제는 탐지 문서를 참조하세요. COCO를 참조하세요.
각 테스트에서 사전 학습된 가중치 yolov8n.engine를 사용한 mean, min(가장 빠름), max(가장 느림)의 추론 시간입니다.
| 정밀도 | 평가 테스트 | 평균 (ms) | 최소 | 최대 (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | 크기 (픽셀) |
|---|---|---|---|---|---|---|---|
| FP32 | 예측 | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | 예측 | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | 예측 | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
소비자용 GPU#
Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6 환경에서 테스트했습니다.
각 테스트에서 사전 학습된 가중치 yolov8n.engine를 사용한 mean, min(가장 빠름), max(가장 느림)의 추론 시간입니다.
| 정밀도 | 평가 테스트 | 평균 (ms) | 최소 | 최대 (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | 크기 (픽셀) |
|---|---|---|---|---|---|---|---|
| FP32 | 예측 | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | 예측 | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | 예측 | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
임베디드 기기#
JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1 환경에서 테스트했습니다.
각 테스트에서 사전 학습된 가중치 yolov8n.engine를 사용한 mean, min(가장 빠름), max(가장 느림)의 추론 시간입니다.
| 정밀도 | 평가 테스트 | 평균 (ms) | 최소 | 최대 (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | 크기 (픽셀) |
|---|---|---|---|---|---|---|---|
| FP32 | 예측 | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | 예측 | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | 예측 | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
설정 및 구성에 대한 자세한 내용은 NVIDIA Jetson에서 Ultralytics YOLO를 사용하는 빠른 시작 가이드를 참조하세요.
설정 및 구성에 대한 자세한 내용은 NVIDIA DGX Spark에서 Ultralytics YOLO를 사용하는 빠른 시작 가이드를 참조하세요.
평가 방법#
아래 섹션을 펼쳐 모델의 내보내기 및 테스트 방법에 관한 정보를 확인하세요.
내보내기 구성
내보내기 구성 인수에 대한 자세한 내용은 내보내기 모드를 참조하세요.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)
# 보정용 `data`를 사용하는 TensorRT INT8(즉, 해당 모델 작업에 적합한 COCO, ImageNet 또는 DOTAv1)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)예측 루프
자세한 내용은 예측 모드를 참조하세요.
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # 동일한 이미지로 batch=8
verbose=False,
device="cuda",
)검증 구성
검증 구성 인수에 대한 자세한 내용은 val 모드를 참조하세요.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # 해당 모델 작업에 적합한 COCO, ImageNet 또는 DOTAv1
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)내보낸 YOLO26 TensorRT 모델 배포#
Ultralytics YOLO26 모델을 TensorRT 형식으로 성공적으로 내보냈다면 이제 배포할 준비가 된 것입니다. 다양한 환경에서 TensorRT 모델을 배포하는 자세한 방법은 다음 리소스를 참조하세요.
-
Triton Server로 Ultralytics 배포: Ultralytics YOLO 모델에 NVIDIA Triton Inference(이전 명칭 TensorRT Inference) Server를 사용하는 방법을 안내합니다.
-
NVIDIA TensorRT를 사용한 심층 신경망 배포: 이 문서에서는 GPU 기반 배포 플랫폼에 심층 신경망을 효율적으로 배포하는 데 NVIDIA TensorRT를 사용하는 방법을 설명합니다.
-
NVIDIA 기반 PC를 위한 엔드투엔드 AI: NVIDIA TensorRT 배포: 이 블로그 게시물에서는 NVIDIA 기반 PC에서 AI 모델을 최적화하고 배포하기 위해 NVIDIA TensorRT를 사용하는 방법을 설명합니다.
-
NVIDIA TensorRT GitHub 저장소: NVIDIA TensorRT의 소스 코드와 문서가 포함된 공식 GitHub 저장소입니다.
요약#
이 가이드에서는 Ultralytics YOLO26 모델을 NVIDIA TensorRT 모델 형식으로 변환하는 방법을 살펴봤습니다. 이 변환 단계는 YOLO26 모델의 효율성과 속도를 높여 다양한 배포 환경에 더욱 적합하고 효과적으로 만드는 데 중요합니다.
사용 세부 정보는 TensorRT 공식 문서를 참조하세요.
Ultralytics YOLO26의 추가 통합 기능에 관심이 있다면, 다양한 유용한 리소스와 정보를 제공하는 통합 가이드 페이지를 확인하세요.
자주 묻는 질문#
최적화된 NVIDIA GPU 추론을 위해 Ultralytics YOLO26 모델을 TensorRT 형식으로 변환하려면 다음 단계를 따르세요.
-
필수 패키지 설치:
pip install ultralytics -
YOLO26 모델 내보내기:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # 'yolo26n.engine' 생성 # 추론 실행 model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
자세한 내용은 YOLO26 설치 가이드와 내보내기 문서를 참조하세요.
-
TensorRT로 YOLO26 모델을 최적화하면 다음과 같은 여러 이점을 얻을 수 있습니다.
- 추론 속도 향상: TensorRT는 모델 레이어를 최적화하고 정밀도 보정(INT8 및 FP16)을 사용하여 정확도를 크게 희생하지 않으면서 추론 속도를 높입니다.
- 메모리 효율성: TensorRT는 텐서 메모리를 동적으로 관리하여 오버헤드를 줄이고 GPU 메모리 활용도를 높입니다.
- 레이어 융합: 여러 레이어를 단일 연산으로 결합하여 계산 복잡성을 줄입니다.
- 커널 자동 튜닝: 각 모델 레이어에 최적화된 GPU 커널을 자동으로 선택하여 최대 성능을 보장합니다.
자세한 내용은 NVIDIA 공식 TensorRT 문서와 TensorRT 심층 개요를 확인하세요.
예. TensorRT에서 INT8 양자화를 사용하여 YOLO26 모델을 내보낼 수 있습니다. 이 과정에는 학습 후 양자화(PTQ)와 보정이 포함됩니다. 단, 체크포인트가
quantize=8(양자화 인식 학습)으로 학습된 경우에는 체크포인트에 저장된 범위를 보정 없이 내보냅니다.-
INT8로 내보내기:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
추론 실행:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
자세한 내용은 INT8 양자화를 적용한 TensorRT 내보내기 섹션을 참조하세요.
-
다음 리소스를 활용하여 NVIDIA Triton Inference Server에 YOLO26 TensorRT 모델을 배포할 수 있습니다.
- Triton Server를 사용하여 Ultralytics YOLO26 배포: Triton Inference Server의 설정 및 사용 방법을 단계별로 안내합니다.
- NVIDIA TensorRT를 사용한 심층 신경망 배포: 세부적인 배포 옵션과 구성에 관한 NVIDIA의 TensorRT 기반 딥러닝 모델 배포 가이드입니다.
이 가이드를 통해 다양한 배포 환경에 YOLO26 모델을 효율적으로 통합할 수 있습니다.
TensorRT를 통한 성능 향상은 모델과 사용 하드웨어에 따라 달라질 수 있습니다. 다음은 YOLOv8n으로 측정한 일반적인 벤치마크이며, 정밀도별 상대적인 성능 향상을 보여줍니다.
-
NVIDIA A100:
- FP32 추론: 이미지당 ~0.52 ms
- FP16 추론: 이미지당 ~0.34 ms
- INT8 추론: 이미지당 ~0.28 ms
- INT8 정밀도에서는 mAP가 약간 낮아지지만 속도는 크게 향상됩니다.
-
소비자용 GPU(예: RTX 3080):
- FP32 추론: 이미지당 ~1.06 ms
- FP16 추론: 이미지당 ~0.62 ms
- INT8 추론: 이미지당 ~0.52 ms
다양한 하드웨어 구성의 상세 성능 벤치마크는 성능 섹션에서 확인할 수 있습니다.
TensorRT 성능에 대한 더욱 포괄적인 정보는 Ultralytics 문서와 성능 분석 보고서를 참조하세요.
-