TensorRT: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
= TensorRT = | |||
High performance inference engine. <br> | High performance inference engine. <br> | ||
pertama-tama download <code>tar.gz</code>-nya di https://developer.nvidia.com/tensorrt-rtx | pertama-tama download <code>tar.gz</code>-nya di https://developer.nvidia.com/tensorrt-rtx | ||
| Line 58: | Line 59: | ||
--exportOutput=test_result.json \ | --exportOutput=test_result.json \ | ||
--verbose | --verbose | ||
</syntaxhighlight> | |||
= Triton Server = | |||
<syntaxhighlight lang=yaml> | |||
# docker-compose.yml | |||
version: "3.9" | |||
services: | |||
tritonserver: | |||
image: nvcr.io/nvidia/tritonserver:24.10-py3 | |||
container_name: tritonserver | |||
restart: unless-stopped | |||
shm_size: 1g | |||
deploy: | |||
resources: | |||
reservations: | |||
devices: | |||
- driver: nvidia | |||
count: all | |||
capabilities: [gpu] | |||
command: > | |||
tritonserver | |||
--model-repository=/models | |||
--log-verbose=1 | |||
--allow-grpc=true | |||
--grpc-port=50001 | |||
--allow-http=true | |||
--http-port=50000 | |||
--metrics-port=50002 | |||
volumes: | |||
- ./model_repository:/models | |||
ports: | |||
- "0.0.0.0:50000:50000" # HTTP/REST | |||
- "0.0.0.0:50001:50001" # gRPC | |||
- "0.0.0.0:50002:50002" # Metrics (Prometheus) | |||
prometheus: | |||
image: prom/prometheus | |||
container_name: prometheus | |||
restart: unless-stopped | |||
volumes: | |||
- ./prometheus.yml:/etc/prometheus/prometheus.yml | |||
ports: | |||
- "0.0.0.0:50004:9090" # Prometheus UI | |||
grafana: | |||
image: grafana/grafana | |||
container_name: grafana | |||
restart: unless-stopped | |||
ports: | |||
- "0.0.0.0:50005:3000" # Grafana UI | |||
volumes: | |||
- grafana-data:/var/lib/grafana | |||
volumes: | |||
grafana-data: | |||
</syntaxhighlight> | |||
<syntaxhighlight lang=yaml> | |||
# prometheus.yml | |||
global: | |||
scrape_interval: 5s | |||
scrape_configs: | |||
- job_name: "triton" | |||
static_configs: | |||
- targets: ["tritonserver:50002"] | |||
</syntaxhighlight> | |||
Struktur direktori <code>model_repository</code> | |||
<syntaxhighlight lang=bash> | |||
model_repository/ | |||
└── brand_equity | |||
├── 1 | |||
│ └── model.plan | |||
└── config.pbtxt | |||
</syntaxhighlight> | |||
contoh config.pbtxt | |||
<syntaxhighlight lang=bash> | |||
name: "my_model" | |||
platform: "tensorrt_plan" | |||
max_batch_size: 10 | |||
input [ | |||
{ | |||
name: "input_ids" | |||
data_type: TYPE_INT64 | |||
dims: [128] | |||
}, | |||
{ | |||
name: "attention_mask" | |||
data_type: TYPE_INT64 | |||
dims: [128] | |||
} | |||
] | |||
output [ | |||
{ | |||
name: "dimensi_logits" | |||
data_type: TYPE_FP32 | |||
dims: [6] | |||
}, | |||
{ | |||
name: "subdimensi_logits" | |||
data_type: TYPE_FP32 | |||
dims: [26] | |||
} | |||
] | |||
instance_group [ | |||
{ | |||
kind: KIND_GPU | |||
count: 1 | |||
} | |||
] | |||
dynamic_batching { | |||
preferred_batch_size: [4, 10] | |||
max_queue_delay_microseconds: 5000 | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 01:48, 27 September 2025
TensorRT
High performance inference engine.
pertama-tama download tar.gz-nya di https://developer.nvidia.com/tensorrt-rtx
tar -xf TensorRT-RTX-1.1.1.26.Linux.x86_64-gnu.cuda-12.9.tar.gz
cd TensorRT-RTX-1.1.1.26
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH # masukin .bashrc atau .zshrc
ln -s $(realpath tensorrt_rtx) /usr/local/bin/trtexec
Convert
# Konversi dasar ONNX ke TensorRT
trtexec --onnx=mobilenetv2-7.onnx --saveEngine=mobilenetv2.trt
# Konversi dengan optimasi tambahan (direkomendasikan)
trtexec --onnx=mobilenetv2-7.onnx \
--saveEngine=mobilenetv2_optimized.trt \
--minShapes=data:1x3x224x224 \
--optShapes=data:1x3x224x224 \
--maxShapes=data:1x3x224x224 \
--builderOptimizationLevel=5 \
--avgTiming=16 \
--memPoolSize=workspace:2G \
--verbose
# Konversi dengan dynamic shapes (jika perlu batch size fleksibel)
trtexec --onnx=mobilenetv2-7.onnx \
--saveEngine=mobilenetv2_dynamic.trt \
--minShapes=data:1x3x224x224 \
--optShapes=data:4x3x224x224 \
--maxShapes=data:16x3x224x224 \
--builderOptimizationLevel=5 \
--verbose
# Konversi dengan precision FP16 untuk performa lebih cepat (jika GPU mendukung)
trtexec --onnx=mobilenetv2-7.onnx \
--saveEngine=mobilenetv2_fp16.trt \
--minShapes=data:1x3x224x224 \
--optShapes=data:1x3x224x224 \
--maxShapes=data:1x3x224x224 \
--fp16 \
--builderOptimizationLevel=5 \
--verbose
# Konversi dengan hardware compatibility (untuk portabilitas GPU)
trtexec --onnx=mobilenetv2-7.onnx \
--saveEngine=mobilenetv2_compatible.trt \
--minShapes=data:1x3x224x224 \
--optShapes=data:1x3x224x224 \
--maxShapes=data:1x3x224x224 \
--hardwareCompatibilityLevel=ampere+ \
--verbose
# Test inference setelah konversi
trtexec --loadEngine=mobilenet.trt \
--shapes=data:1x3x224x224 \
--iterations=100 \
--avgRuns=10 \
--exportOutput=test_result.json \
--verbose
Triton Server
# docker-compose.yml
version: "3.9"
services:
tritonserver:
image: nvcr.io/nvidia/tritonserver:24.10-py3
container_name: tritonserver
restart: unless-stopped
shm_size: 1g
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
command: >
tritonserver
--model-repository=/models
--log-verbose=1
--allow-grpc=true
--grpc-port=50001
--allow-http=true
--http-port=50000
--metrics-port=50002
volumes:
- ./model_repository:/models
ports:
- "0.0.0.0:50000:50000" # HTTP/REST
- "0.0.0.0:50001:50001" # gRPC
- "0.0.0.0:50002:50002" # Metrics (Prometheus)
prometheus:
image: prom/prometheus
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "0.0.0.0:50004:9090" # Prometheus UI
grafana:
image: grafana/grafana
container_name: grafana
restart: unless-stopped
ports:
- "0.0.0.0:50005:3000" # Grafana UI
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
# prometheus.yml
global:
scrape_interval: 5s
scrape_configs:
- job_name: "triton"
static_configs:
- targets: ["tritonserver:50002"]
Struktur direktori model_repository
model_repository/
└── brand_equity
├── 1
│ └── model.plan
└── config.pbtxt
contoh config.pbtxt
name: "my_model"
platform: "tensorrt_plan"
max_batch_size: 10
input [
{
name: "input_ids"
data_type: TYPE_INT64
dims: [128]
},
{
name: "attention_mask"
data_type: TYPE_INT64
dims: [128]
}
]
output [
{
name: "dimensi_logits"
data_type: TYPE_FP32
dims: [6]
},
{
name: "subdimensi_logits"
data_type: TYPE_FP32
dims: [26]
}
]
instance_group [
{
kind: KIND_GPU
count: 1
}
]
dynamic_batching {
preferred_batch_size: [4, 10]
max_queue_delay_microseconds: 5000
}