├── triton └── models │ ├── classifier_onnx │ ├── 1 │ │ └── .gitkeep │ └── config.pbtxt │ └── classifier_trt │ ├── 1 │ └── .gitkeep │ └── config.pbtxt ├── .gitignore ├── test_images ├── 1.jpg ├── 2.jpg └── 3.jpg ├── prometheus └── prometheus.yml ├── README.md ├── test_locust.py ├── test_usual.py ├── docker-compose.yaml ├── api.py ├── test_async.py ├── infer_triton.py ├── imagenet_classes.txt ├── dash-grafana-triton-new.json └── dash-grafana-triton.json /triton/models/classifier_onnx/1/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /triton/models/classifier_trt/1/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .ipynb_checkpoints 3 | **.plan 4 | **.onnx 5 | -------------------------------------------------------------------------------- /test_images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Koldim2001/Triton_example/HEAD/test_images/1.jpg -------------------------------------------------------------------------------- /test_images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Koldim2001/Triton_example/HEAD/test_images/2.jpg -------------------------------------------------------------------------------- /test_images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Koldim2001/Triton_example/HEAD/test_images/3.jpg -------------------------------------------------------------------------------- /prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 5s # Интервал сбора метрик 3 | 4 | scrape_configs: 5 | - job_name: 'triton' 6 | static_configs: 7 | - targets: ['triton:8002'] # Сбор метрик с Triton -------------------------------------------------------------------------------- /triton/models/classifier_onnx/config.pbtxt: -------------------------------------------------------------------------------- 1 | name: "classifier_onnx" 2 | platform: "onnxruntime_onnx" 3 | max_batch_size: 16 4 | 5 | input [ 6 | { 7 | name: "input" 8 | data_type: TYPE_FP32 9 | format: FORMAT_NCHW 10 | dims: [3, 224, 224] 11 | } 12 | ] 13 | 14 | output [ 15 | { 16 | name: "output" 17 | data_type: TYPE_FP32 18 | dims: [1000] 19 | } 20 | ] 21 | 22 | dynamic_batching { 23 | preferred_batch_size: [ 4, 8 ] 24 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Triton example 2 | 3 | Запуск кода: 4 | ``` 5 | docker compose up -d 6 | uvicorn api:app --reload --port 5000 7 | ``` 8 | После запуска документция к API доступна тут - http://127.0.0.1:5000/docs 9 | 10 | --- 11 | Чтобы попасть в терминал trtexec_container: 12 | ``` 13 | docker exec -it trtexec_container bash 14 | ``` 15 | Команда для ONNX -> TensorRT конвертации: 16 | ``` 17 | trtexec --onnx=model.onnx --saveEngine=model.plan --minShapes=input:1x3x224x224 --optShapes=input:8x3x224x224 --maxShapes=input:16x3x224x224 --fp16 --useSpinWait --outputIOFormats=fp16:chw --inputIOFormats=fp16:chw 18 | ``` 19 | --- 20 | Для тестирования производительности вашего API с использованием инструмента Locust: 21 | ``` 22 | locust -f test_locust.py --host=http://127.0.0.1:5000 23 | ``` 24 | Прочие файлы для тестов: test_async.py и test_usual.py 25 | 26 | --- 27 | YouTube-туториал по этому репозиторию доступен по ссылке - [**видео**](https://youtu.be/ljqyuDxd_H0?si=Vpi4PiGrmHKSbKqg) 28 | -------------------------------------------------------------------------------- /test_locust.py: -------------------------------------------------------------------------------- 1 | import time 2 | from locust import HttpUser, task, between 3 | 4 | # Путь к файлу изображения 5 | IMAGE_PATH = "test_images/1.jpg" 6 | # URL вашего API 7 | API_URL = "/predict/" 8 | # Имя модели для использования 9 | MODEL_NAME = "classifier_trt" 10 | 11 | # Предзагрузка файла изображения 12 | with open(IMAGE_PATH, "rb") as image_file: 13 | IMAGE_CONTENT = image_file.read() 14 | 15 | class ApiUser(HttpUser): 16 | wait_time = between(0.5, 1) # Время ожидания между задачами (в секундах) 17 | 18 | @task 19 | def predict(self): 20 | try: 21 | files = { 22 | "file": ("1.jpg", IMAGE_CONTENT, "image/jpeg") # Используем предзагруженное содержимое 23 | } 24 | params = { 25 | "model_name": MODEL_NAME # Параметр model_name 26 | } 27 | # Отправляем POST-запрос 28 | self.client.post(API_URL, params=params, files=files) 29 | except Exception as e: 30 | print(f"Error during request: {e}") -------------------------------------------------------------------------------- /triton/models/classifier_trt/config.pbtxt: -------------------------------------------------------------------------------- 1 | name: "classifier_trt" # Имя модели (должно совпадать с именем папки) 2 | platform: "tensorrt_plan" # Платформа модели (TensorRT использует "tensorrt_plan") 3 | max_batch_size: 16 # Максимальный размер батча 4 | 5 | input [ 6 | { 7 | name: "input" # Имя входного тензора 8 | data_type: TYPE_FP16 # Тип данных (например, FP32) 9 | dims: [3, 224, 224] # Размерность входных данных (без размера батча) 10 | } 11 | ] 12 | 13 | output [ 14 | { 15 | name: "output" # Имя выходного тензора 16 | data_type: TYPE_FP16 # Тип данных (например, FP32) 17 | dims: [1000] # Размерность выходных данных (например, 1000 классов) 18 | } 19 | ] 20 | 21 | dynamic_batching { # Настройка динамического батчинга 22 | preferred_batch_size: 8 23 | max_queue_delay_microseconds: 10000 24 | } 25 | 26 | instance_group [ 27 | { 28 | kind: KIND_GPU # Использование GPU 29 | count: 1 # Количество экземпляров модели на GPU 30 | } 31 | ] -------------------------------------------------------------------------------- /test_usual.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import time 3 | 4 | # Путь к файлу изображения 5 | IMAGE_PATH = "test_images/1.jpg" 6 | # URL вашего API 7 | API_URL = "http://127.0.0.1:5000/predict/" 8 | # Имя модели для использования 9 | MODEL_NAME = "classifier_trt" 10 | 11 | def send_request(image_path, model_name): 12 | """Отправляет POST-запрос к API с использованием multipart/form-data.""" 13 | with open(image_path, "rb") as image_file: 14 | files = { 15 | "file": ("1.jpg", image_file, "image/jpeg") # Файл изображения 16 | } 17 | params = { 18 | "model_name": model_name # Параметр model_name 19 | } 20 | response = requests.post(API_URL, params=params, files=files) 21 | return response.json() 22 | 23 | if __name__ == "__main__": 24 | start_time = time.time() 25 | for i in range(1500): 26 | try: 27 | # Отправляем запрос 28 | response = send_request(IMAGE_PATH, MODEL_NAME) 29 | except Exception as e: 30 | print(f"Error during request {i + 1}: {e}") 31 | elapsed_time = time.time() - start_time 32 | print(f"All requests completed in {elapsed_time:.2f} seconds.") -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | # Тритон для инференса моделей 5 | triton: 6 | container_name: triton 7 | image: nvcr.io/nvidia/tritonserver:24.09-py3 8 | ports: 9 | - 8000:8000 # HTTP endpoint for inference 10 | - 8001:8001 # GRPC endpoint for inference 11 | - 8002:8002 # Metrics endpoint for Prometheus 12 | restart: always 13 | volumes: 14 | - ./triton/models:/models 15 | command: ["tritonserver", "--model-store=/models"] 16 | deploy: 17 | resources: 18 | reservations: 19 | devices: 20 | - capabilities: [gpu] 21 | count: 1 22 | 23 | # Контейнер для конвертации модели в trt из onnx 24 | trtexec_container: 25 | container_name: trtexec_container 26 | image: nvcr.io/nvidia/tensorrt:24.09-py3 27 | volumes: 28 | - ./trtexec_workspace:/workspace 29 | command: ["tail", "-f", "/dev/null"] 30 | deploy: 31 | resources: 32 | reservations: 33 | devices: 34 | - capabilities: [gpu] 35 | count: 1 36 | 37 | # Prometheus для сбора метрик 38 | prometheus: 39 | container_name: prometheus 40 | image: prom/prometheus:latest 41 | ports: 42 | - 9090:9090 43 | volumes: 44 | - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 45 | restart: always 46 | 47 | # Grafana для визуализации метрик 48 | grafana: 49 | container_name: grafana 50 | image: grafana/grafana:latest 51 | ports: 52 | - 3000:3000 53 | environment: 54 | - GF_SECURITY_ADMIN_PASSWORD=admin # Установите пароль для Grafana 55 | restart: always 56 | -------------------------------------------------------------------------------- /api.py: -------------------------------------------------------------------------------- 1 | from fastapi import FastAPI, File, UploadFile, Query 2 | from PIL import Image 3 | import base64 4 | import io 5 | import asyncio 6 | from fastapi import HTTPException 7 | from infer_triton import InferenceModule # Импортируем ваш модуль инференса 8 | 9 | app = FastAPI() 10 | 11 | # Load ImageNet class names 12 | with open('imagenet_classes.txt', encoding='utf-8') as f: 13 | class_names = [line.strip() for line in f.readlines()] 14 | 15 | inference_module = InferenceModule() # Создаем экземпляр модуля инференса 16 | 17 | @app.post("/predict/", description="Выполняет классификацию изображения с использованием указанной модели.") 18 | async def predict( 19 | file: UploadFile = File(..., description="Изображение для классификации."), 20 | model_name: str = Query(..., description="Имя модели тритона для использования") 21 | ): 22 | """ 23 | Выполнить классификацию изображения. 24 | 25 | Args: 26 | file (UploadFile): Загружаемое изображение. 27 | model_name (str): Имя модели для использования в инференсе. 28 | 29 | Returns: 30 | dict: Название класса и значение логита. 31 | """ 32 | try: 33 | # Конвертация загруженного файла в base64 34 | contents = await file.read() 35 | img_base64 = base64.b64encode(contents).decode("utf-8") 36 | 37 | # Выполнение инференса с использованием указанной модели 38 | result = await inference_module.infer_image(img_base64, model_name=model_name) 39 | 40 | # Получение ID класса и логита 41 | class_id = result["class_id"] 42 | logit = round(result["logit"], 3) # Округление логита до 3 знаков после запятой 43 | 44 | # Получение названия класса из списка ImageNet 45 | class_name = class_names[class_id] 46 | 47 | return { 48 | "class_name": class_name, 49 | "logit": logit 50 | } 51 | 52 | except Exception as e: 53 | raise HTTPException(status_code=500, detail=f"Unexpected error: {str(e)}") -------------------------------------------------------------------------------- /test_async.py: -------------------------------------------------------------------------------- 1 | import aiohttp 2 | import asyncio 3 | import time 4 | 5 | # Путь к файлу изображения 6 | IMAGE_PATH = "test_images/1.jpg" 7 | # URL вашего API 8 | API_URL = "http://127.0.0.1:5000/predict/" 9 | # Имя модели для использования 10 | MODEL_NAME = "classifier_trt" 11 | 12 | # Предзагрузка файла изображения 13 | with open(IMAGE_PATH, "rb") as image_file: 14 | IMAGE_CONTENT = image_file.read() 15 | 16 | async def send_request(session, image_content, model_name): 17 | """Отправляет асинхронный POST-запрос к API с предзагруженным файлом.""" 18 | # Создаем FormData для файловых данных 19 | form_data = aiohttp.FormData() 20 | form_data.add_field("file", image_content, filename="1.jpg", content_type="image/jpeg") 21 | 22 | # Добавляем параметр model_name в query string 23 | url_with_params = f"{API_URL}?model_name={model_name}" 24 | 25 | try: 26 | async with session.post(url_with_params, data=form_data) as response: 27 | if response.status == 200: 28 | result = await response.json() 29 | return result 30 | else: 31 | print(f"Request failed with status {response.status}, body: {await response.text()}") 32 | except Exception as e: 33 | print(f"Error during request: {e}") 34 | 35 | async def main(): 36 | """Основная функция для отправки 1500 асинхронных запросов.""" 37 | tasks = [] 38 | async with aiohttp.ClientSession() as session: 39 | for i in range(1500): 40 | task = asyncio.create_task(send_request(session, IMAGE_CONTENT, MODEL_NAME)) 41 | tasks.append(task) 42 | 43 | # Ожидаем завершения всех задач 44 | responses = await asyncio.gather(*tasks, return_exceptions=True) 45 | 46 | # Обработка результатов 47 | for i, response in enumerate(responses): 48 | if isinstance(response, Exception): 49 | print(f"Error in request {i + 1}: {response}") 50 | 51 | 52 | if __name__ == "__main__": 53 | start_time = time.time() 54 | asyncio.run(main()) 55 | elapsed_time = time.time() - start_time 56 | print(f"All requests completed in {elapsed_time:.2f} seconds.") -------------------------------------------------------------------------------- /infer_triton.py: -------------------------------------------------------------------------------- 1 | import os 2 | import numpy as np 3 | from PIL import Image 4 | from torchvision import transforms 5 | import grpc 6 | import tritonclient.grpc.aio as grpcclient 7 | from tritonclient.grpc import service_pb2, service_pb2_grpc 8 | from tritonclient.utils import triton_to_np_dtype 9 | import base64 10 | from io import BytesIO 11 | 12 | 13 | class InferenceModule: 14 | def __init__(self) -> None: 15 | """Initialize.""" 16 | self.url = os.environ.get("TRITON_SERVER_URL", "127.0.0.1:8001") 17 | self.triton_client = grpcclient.InferenceServerClient(url=self.url) 18 | 19 | async def infer_image( 20 | self, 21 | img: str, 22 | model_name: str = "classifier_onnx", 23 | ) -> dict: 24 | """ 25 | Perform inference on the input image. 26 | 27 | Args: 28 | img (str): Base64 encoded image string. 29 | model_name (str): Name of the deployed model. 30 | 31 | Returns: 32 | dict: class ID, and logit. 33 | """ 34 | model_meta, model_config = self.parse_model_metadata(model_name) 35 | shape = model_meta.inputs[0].shape 36 | channels, height, width = shape[1:] 37 | dtype = model_meta.inputs[0].datatype 38 | 39 | # Preprocess the image 40 | img = self.preprocess_image_torchvision(img) # или preprocess_image_pil 41 | 42 | # Create input tensor for Triton 43 | inputs = [grpcclient.InferInput(model_meta.inputs[0].name, [1, channels, height, width], dtype)] 44 | inputs[0].set_data_from_numpy(img.astype(triton_to_np_dtype(dtype))) 45 | 46 | # Define output tensor 47 | outputs = [grpcclient.InferRequestedOutput(model_meta.outputs[0].name)] 48 | 49 | # Perform inference 50 | results = await self.triton_client.infer( 51 | model_name=model_name, 52 | inputs=inputs, 53 | outputs=outputs, 54 | ) 55 | 56 | # Process the output 57 | output = results.as_numpy(model_meta.outputs[0].name)[0] 58 | cls_idx = np.argmax(output) 59 | cls_logit = output[cls_idx] 60 | 61 | return {"class_id": int(cls_idx), "logit": float(cls_logit)} 62 | 63 | def parse_model_metadata(self, model_name: str) -> object: 64 | """ 65 | Parse metadata and configuration of the model. 66 | 67 | Args: 68 | model_name (str): Name of the deployed model. 69 | 70 | Returns: 71 | tuple: Metadata and configuration of the model. 72 | """ 73 | channel = grpc.insecure_channel(self.url) 74 | grpc_stub = service_pb2_grpc.GRPCInferenceServiceStub(channel) 75 | metadata_request = service_pb2.ModelMetadataRequest(name=model_name) 76 | metadata_response = grpc_stub.ModelMetadata(metadata_request) 77 | 78 | config_request = service_pb2.ModelConfigRequest(name=model_name) 79 | config_response = grpc_stub.ModelConfig(config_request) 80 | 81 | return metadata_response, config_response 82 | 83 | def preprocess_image_pil( 84 | self, 85 | img: str, 86 | ) -> np.ndarray: 87 | """ 88 | Preprocess the input image for ResNet. 89 | 90 | Args: 91 | img (str): Base64 encoded image string. 92 | height (int): Target height for resizing. 93 | width (int): Target width for resizing. 94 | 95 | Returns: 96 | np.ndarray: Preprocessed image as a NumPy array. 97 | """ 98 | # Decode base64 image to PIL Image 99 | pil_img = self.decode_img(img) 100 | 101 | # Resize and center crop 102 | resized_img = pil_img.resize((256, 256), Image.BILINEAR) 103 | cropped_img = self.center_crop(resized_img, 224, 224) # Центрированная обрезка до 224x224 104 | 105 | np_img = np.array(cropped_img).astype(np.float32) 106 | 107 | # Normalize using ImageNet mean and std 108 | normalized_img = (np_img / 255.0 - np.array([0.485, 0.456, 0.406])) / np.array([0.229, 0.224, 0.225]) 109 | 110 | # Transpose to match NCHW format 111 | ordered_img = np.transpose(normalized_img, (2, 0, 1)) 112 | 113 | # Add batch dimension 114 | batched_img = np.expand_dims(ordered_img, axis=0) 115 | 116 | return batched_img 117 | 118 | @staticmethod 119 | def center_crop(img: Image.Image, width: int, height: int) -> Image.Image: 120 | """ 121 | Центрированная обрезка изображения до указанного размера. 122 | 123 | Args: 124 | img (Image.Image): Исходное изображение. 125 | width (int): Требуемая ширина. 126 | height (int): Требуемая высота. 127 | 128 | Returns: 129 | Image.Image: Обрезанное изображение. 130 | """ 131 | w, h = img.size # Текущие размеры изображения 132 | left = (w - width) / 2 133 | top = (h - height) / 2 134 | right = (w + width) / 2 135 | bottom = (h + height) / 2 136 | 137 | return img.crop((left, top, right, bottom)) 138 | 139 | @staticmethod 140 | def decode_img(img_base64: str) -> Image.Image: 141 | """ 142 | Декодирует base64-строку в объект изображения PIL. 143 | 144 | Args: 145 | img_base64 (str): Base64-кодированная строка изображения. 146 | 147 | Returns: 148 | Image.Image: Объект изображения PIL. 149 | """ 150 | # Удаляем префикс data URL, если он есть 151 | if img_base64.startswith("data:image/"): 152 | header, encoded = img_base64.split(",", 1) 153 | else: 154 | encoded = img_base64 155 | 156 | # Декодируем base64 в байты 157 | img_bytes = base64.b64decode(encoded) 158 | 159 | # Создаем объект BytesIO для чтения байтов 160 | img_buffer = BytesIO(img_bytes) 161 | 162 | # Открываем изображение с помощью PIL 163 | return Image.open(img_buffer).convert("RGB") 164 | 165 | 166 | def preprocess_image_torchvision( 167 | self, 168 | img: str, 169 | ) -> np.ndarray: 170 | """ 171 | Preprocess the input image for ResNet using torchvision.transforms. 172 | 173 | Args: 174 | img (str): Base64 encoded image string. 175 | 176 | Returns: 177 | np.ndarray: Preprocessed image as a NumPy array. 178 | """ 179 | # Decode base64 image to PIL Image 180 | pil_img = self.decode_img(img) 181 | 182 | # Define preprocessing pipeline using torchvision.transforms 183 | self.preprocess = transforms.Compose([ 184 | transforms.Resize(256, interpolation=transforms.InterpolationMode.BILINEAR), 185 | ]) 186 | 187 | # Apply preprocessing pipeline 188 | pil_img = self.preprocess(pil_img) 189 | 190 | # Center crop 224x224 191 | pil_img = self.center_crop(pil_img, 224, 224) 192 | 193 | # Convert PyTorch tensor to NumPy array and add batch dimension 194 | np_img = np.array(pil_img).astype(np.float32) 195 | 196 | # Normalize using ImageNet mean and std 197 | normalized_img = (np_img / 255.0 - np.array([0.485, 0.456, 0.406])) / np.array([0.229, 0.224, 0.225]) 198 | 199 | # Transpose to match NCHW format 200 | ordered_img = np.transpose(normalized_img, (2, 0, 1)) 201 | 202 | # Add batch dimension 203 | batched_img = np.expand_dims(ordered_img, axis=0) 204 | 205 | return batched_img 206 | -------------------------------------------------------------------------------- /imagenet_classes.txt: -------------------------------------------------------------------------------- 1 | tench 2 | goldfish 3 | great white shark 4 | tiger shark 5 | hammerhead 6 | electric ray 7 | stingray 8 | cock 9 | hen 10 | ostrich 11 | brambling 12 | goldfinch 13 | house finch 14 | junco 15 | indigo bunting 16 | robin 17 | bulbul 18 | jay 19 | magpie 20 | chickadee 21 | water ouzel 22 | kite 23 | bald eagle 24 | vulture 25 | great grey owl 26 | European fire salamander 27 | common newt 28 | eft 29 | spotted salamander 30 | axolotl 31 | bullfrog 32 | tree frog 33 | tailed frog 34 | loggerhead 35 | leatherback turtle 36 | mud turtle 37 | terrapin 38 | box turtle 39 | banded gecko 40 | common iguana 41 | American chameleon 42 | whiptail 43 | agama 44 | frilled lizard 45 | alligator lizard 46 | Gila monster 47 | green lizard 48 | African chameleon 49 | Komodo dragon 50 | African crocodile 51 | American alligator 52 | triceratops 53 | thunder snake 54 | ringneck snake 55 | hognose snake 56 | green snake 57 | king snake 58 | garter snake 59 | water snake 60 | vine snake 61 | night snake 62 | boa constrictor 63 | rock python 64 | Indian cobra 65 | green mamba 66 | sea snake 67 | horned viper 68 | diamondback 69 | sidewinder 70 | trilobite 71 | harvestman 72 | scorpion 73 | black and gold garden spider 74 | barn spider 75 | garden spider 76 | black widow 77 | tarantula 78 | wolf spider 79 | tick 80 | centipede 81 | black grouse 82 | ptarmigan 83 | ruffed grouse 84 | prairie chicken 85 | peacock 86 | quail 87 | partridge 88 | African grey 89 | macaw 90 | sulphur-crested cockatoo 91 | lorikeet 92 | coucal 93 | bee eater 94 | hornbill 95 | hummingbird 96 | jacamar 97 | toucan 98 | drake 99 | red-breasted merganser 100 | goose 101 | black swan 102 | tusker 103 | echidna 104 | platypus 105 | wallaby 106 | koala 107 | wombat 108 | jellyfish 109 | sea anemone 110 | brain coral 111 | flatworm 112 | nematode 113 | conch 114 | snail 115 | slug 116 | sea slug 117 | chiton 118 | chambered nautilus 119 | Dungeness crab 120 | rock crab 121 | fiddler crab 122 | king crab 123 | American lobster 124 | spiny lobster 125 | crayfish 126 | hermit crab 127 | isopod 128 | white stork 129 | black stork 130 | spoonbill 131 | flamingo 132 | little blue heron 133 | American egret 134 | bittern 135 | crane 136 | limpkin 137 | European gallinule 138 | American coot 139 | bustard 140 | ruddy turnstone 141 | red-backed sandpiper 142 | redshank 143 | dowitcher 144 | oystercatcher 145 | pelican 146 | king penguin 147 | albatross 148 | grey whale 149 | killer whale 150 | dugong 151 | sea lion 152 | Chihuahua 153 | Japanese spaniel 154 | Maltese dog 155 | Pekinese 156 | Shih-Tzu 157 | Blenheim spaniel 158 | papillon 159 | toy terrier 160 | Rhodesian ridgeback 161 | Afghan hound 162 | basset 163 | beagle 164 | bloodhound 165 | bluetick 166 | black-and-tan coonhound 167 | Walker hound 168 | English foxhound 169 | redbone 170 | borzoi 171 | Irish wolfhound 172 | Italian greyhound 173 | whippet 174 | Ibizan hound 175 | Norwegian elkhound 176 | otterhound 177 | Saluki 178 | Scottish deerhound 179 | Weimaraner 180 | Staffordshire bullterrier 181 | American Staffordshire terrier 182 | Bedlington terrier 183 | Border terrier 184 | Kerry blue terrier 185 | Irish terrier 186 | Norfolk terrier 187 | Norwich terrier 188 | Yorkshire terrier 189 | wire-haired fox terrier 190 | Lakeland terrier 191 | Sealyham terrier 192 | Airedale 193 | cairn 194 | Australian terrier 195 | Dandie Dinmont 196 | Boston bull 197 | miniature schnauzer 198 | giant schnauzer 199 | standard schnauzer 200 | Scotch terrier 201 | Tibetan terrier 202 | silky terrier 203 | soft-coated wheaten terrier 204 | West Highland white terrier 205 | Lhasa 206 | flat-coated retriever 207 | curly-coated retriever 208 | golden retriever 209 | Labrador retriever 210 | Chesapeake Bay retriever 211 | German short-haired pointer 212 | vizsla 213 | English setter 214 | Irish setter 215 | Gordon setter 216 | Brittany spaniel 217 | clumber 218 | English springer 219 | Welsh springer spaniel 220 | cocker spaniel 221 | Sussex spaniel 222 | Irish water spaniel 223 | kuvasz 224 | schipperke 225 | groenendael 226 | malinois 227 | briard 228 | kelpie 229 | komondor 230 | Old English sheepdog 231 | Shetland sheepdog 232 | collie 233 | Border collie 234 | Bouvier des Flandres 235 | Rottweiler 236 | German shepherd 237 | Doberman 238 | miniature pinscher 239 | Greater Swiss Mountain dog 240 | Bernese mountain dog 241 | Appenzeller 242 | EntleBucher 243 | boxer 244 | bull mastiff 245 | Tibetan mastiff 246 | French bulldog 247 | Great Dane 248 | Saint Bernard 249 | Eskimo dog 250 | malamute 251 | Siberian husky 252 | dalmatian 253 | affenpinscher 254 | basenji 255 | pug 256 | Leonberg 257 | Newfoundland 258 | Great Pyrenees 259 | Samoyed 260 | Pomeranian 261 | chow 262 | keeshond 263 | Brabancon griffon 264 | Pembroke 265 | Cardigan 266 | toy poodle 267 | miniature poodle 268 | standard poodle 269 | Mexican hairless 270 | timber wolf 271 | white wolf 272 | red wolf 273 | coyote 274 | dingo 275 | dhole 276 | African hunting dog 277 | hyena 278 | red fox 279 | kit fox 280 | Arctic fox 281 | grey fox 282 | tabby 283 | tiger cat 284 | Persian cat 285 | Siamese cat 286 | Egyptian cat 287 | cougar 288 | lynx 289 | leopard 290 | snow leopard 291 | jaguar 292 | lion 293 | tiger 294 | cheetah 295 | brown bear 296 | American black bear 297 | ice bear 298 | sloth bear 299 | mongoose 300 | meerkat 301 | tiger beetle 302 | ladybug 303 | ground beetle 304 | long-horned beetle 305 | leaf beetle 306 | dung beetle 307 | rhinoceros beetle 308 | weevil 309 | fly 310 | bee 311 | ant 312 | grasshopper 313 | cricket 314 | walking stick 315 | cockroach 316 | mantis 317 | cicada 318 | leafhopper 319 | lacewing 320 | dragonfly 321 | damselfly 322 | admiral 323 | ringlet 324 | monarch 325 | cabbage butterfly 326 | sulphur butterfly 327 | lycaenid 328 | starfish 329 | sea urchin 330 | sea cucumber 331 | wood rabbit 332 | hare 333 | Angora 334 | hamster 335 | porcupine 336 | fox squirrel 337 | marmot 338 | beaver 339 | guinea pig 340 | sorrel 341 | zebra 342 | hog 343 | wild boar 344 | warthog 345 | hippopotamus 346 | ox 347 | water buffalo 348 | bison 349 | ram 350 | bighorn 351 | ibex 352 | hartebeest 353 | impala 354 | gazelle 355 | Arabian camel 356 | llama 357 | weasel 358 | mink 359 | polecat 360 | black-footed ferret 361 | otter 362 | skunk 363 | badger 364 | armadillo 365 | three-toed sloth 366 | orangutan 367 | gorilla 368 | chimpanzee 369 | gibbon 370 | siamang 371 | guenon 372 | patas 373 | baboon 374 | macaque 375 | langur 376 | colobus 377 | proboscis monkey 378 | marmoset 379 | capuchin 380 | howler monkey 381 | titi 382 | spider monkey 383 | squirrel monkey 384 | Madagascar cat 385 | indri 386 | Indian elephant 387 | African elephant 388 | lesser panda 389 | giant panda 390 | barracouta 391 | eel 392 | coho 393 | rock beauty 394 | anemone fish 395 | sturgeon 396 | gar 397 | lionfish 398 | puffer 399 | abacus 400 | abaya 401 | academic gown 402 | accordion 403 | acoustic guitar 404 | aircraft carrier 405 | airliner 406 | airship 407 | altar 408 | ambulance 409 | amphibian 410 | analog clock 411 | apiary 412 | apron 413 | ashcan 414 | assault rifle 415 | backpack 416 | bakery 417 | balance beam 418 | balloon 419 | ballpoint 420 | Band Aid 421 | banjo 422 | bannister 423 | barbell 424 | barber chair 425 | barbershop 426 | barn 427 | barometer 428 | barrel 429 | barrow 430 | baseball 431 | basketball 432 | bassinet 433 | bassoon 434 | bathing cap 435 | bath towel 436 | bathtub 437 | beach wagon 438 | beacon 439 | beaker 440 | bearskin 441 | beer bottle 442 | beer glass 443 | bell cote 444 | bib 445 | bicycle-built-for-two 446 | bikini 447 | binder 448 | binoculars 449 | birdhouse 450 | boathouse 451 | bobsled 452 | bolo tie 453 | bonnet 454 | bookcase 455 | bookshop 456 | bottlecap 457 | bow 458 | bow tie 459 | brass 460 | brassiere 461 | breakwater 462 | breastplate 463 | broom 464 | bucket 465 | buckle 466 | bulletproof vest 467 | bullet train 468 | butcher shop 469 | cab 470 | caldron 471 | candle 472 | cannon 473 | canoe 474 | can opener 475 | cardigan 476 | car mirror 477 | carousel 478 | carpenter's kit 479 | carton 480 | car wheel 481 | cash machine 482 | cassette 483 | cassette player 484 | castle 485 | catamaran 486 | CD player 487 | cello 488 | cellular telephone 489 | chain 490 | chainlink fence 491 | chain mail 492 | chain saw 493 | chest 494 | chiffonier 495 | chime 496 | china cabinet 497 | Christmas stocking 498 | church 499 | cinema 500 | cleaver 501 | cliff dwelling 502 | cloak 503 | clog 504 | cocktail shaker 505 | coffee mug 506 | coffeepot 507 | coil 508 | combination lock 509 | computer keyboard 510 | confectionery 511 | container ship 512 | convertible 513 | corkscrew 514 | cornet 515 | cowboy boot 516 | cowboy hat 517 | cradle 518 | crane 519 | crash helmet 520 | crate 521 | crib 522 | Crock Pot 523 | croquet ball 524 | crutch 525 | cuirass 526 | dam 527 | desk 528 | desktop computer 529 | dial telephone 530 | diaper 531 | digital clock 532 | digital watch 533 | dining table 534 | dishrag 535 | dishwasher 536 | disk brake 537 | dock 538 | dogsled 539 | dome 540 | doormat 541 | drilling platform 542 | drum 543 | drumstick 544 | dumbbell 545 | Dutch oven 546 | electric fan 547 | electric guitar 548 | electric locomotive 549 | entertainment center 550 | envelope 551 | espresso maker 552 | face powder 553 | feather boa 554 | file 555 | fireboat 556 | fire engine 557 | fire screen 558 | flagpole 559 | flute 560 | folding chair 561 | football helmet 562 | forklift 563 | fountain 564 | fountain pen 565 | four-poster 566 | freight car 567 | French horn 568 | frying pan 569 | fur coat 570 | garbage truck 571 | gasmask 572 | gas pump 573 | goblet 574 | go-kart 575 | golf ball 576 | golfcart 577 | gondola 578 | gong 579 | gown 580 | grand piano 581 | greenhouse 582 | grille 583 | grocery store 584 | guillotine 585 | hair slide 586 | hair spray 587 | half track 588 | hammer 589 | hamper 590 | hand blower 591 | hand-held computer 592 | handkerchief 593 | hard disc 594 | harmonica 595 | harp 596 | harvester 597 | hatchet 598 | holster 599 | home theater 600 | honeycomb 601 | hook 602 | hoopskirt 603 | horizontal bar 604 | horse cart 605 | hourglass 606 | iPod 607 | iron 608 | jack-o'-lantern 609 | jean 610 | jeep 611 | jersey 612 | jigsaw puzzle 613 | jinrikisha 614 | joystick 615 | kimono 616 | knee pad 617 | knot 618 | lab coat 619 | ladle 620 | lampshade 621 | laptop 622 | lawn mower 623 | lens cap 624 | letter opener 625 | library 626 | lifeboat 627 | lighter 628 | limousine 629 | liner 630 | lipstick 631 | Loafer 632 | lotion 633 | loudspeaker 634 | loupe 635 | lumbermill 636 | magnetic compass 637 | mailbag 638 | mailbox 639 | maillot 640 | maillot 641 | manhole cover 642 | maraca 643 | marimba 644 | mask 645 | matchstick 646 | maypole 647 | maze 648 | measuring cup 649 | medicine chest 650 | megalith 651 | microphone 652 | microwave 653 | military uniform 654 | milk can 655 | minibus 656 | miniskirt 657 | minivan 658 | missile 659 | mitten 660 | mixing bowl 661 | mobile home 662 | Model T 663 | modem 664 | monastery 665 | monitor 666 | moped 667 | mortar 668 | mortarboard 669 | mosque 670 | mosquito net 671 | motor scooter 672 | mountain bike 673 | mountain tent 674 | mouse 675 | mousetrap 676 | moving van 677 | muzzle 678 | nail 679 | neck brace 680 | necklace 681 | nipple 682 | notebook 683 | obelisk 684 | oboe 685 | ocarina 686 | odometer 687 | oil filter 688 | organ 689 | oscilloscope 690 | overskirt 691 | oxcart 692 | oxygen mask 693 | packet 694 | paddle 695 | paddlewheel 696 | padlock 697 | paintbrush 698 | pajama 699 | palace 700 | panpipe 701 | paper towel 702 | parachute 703 | parallel bars 704 | park bench 705 | parking meter 706 | passenger car 707 | patio 708 | pay-phone 709 | pedestal 710 | pencil box 711 | pencil sharpener 712 | perfume 713 | Petri dish 714 | photocopier 715 | pick 716 | pickelhaube 717 | picket fence 718 | pickup 719 | pier 720 | piggy bank 721 | pill bottle 722 | pillow 723 | ping-pong ball 724 | pinwheel 725 | pirate 726 | pitcher 727 | plane 728 | planetarium 729 | plastic bag 730 | plate rack 731 | plow 732 | plunger 733 | Polaroid camera 734 | pole 735 | police van 736 | poncho 737 | pool table 738 | pop bottle 739 | pot 740 | potter's wheel 741 | power drill 742 | prayer rug 743 | printer 744 | prison 745 | projectile 746 | projector 747 | puck 748 | punching bag 749 | purse 750 | quill 751 | quilt 752 | racer 753 | racket 754 | radiator 755 | radio 756 | radio telescope 757 | rain barrel 758 | recreational vehicle 759 | reel 760 | reflex camera 761 | refrigerator 762 | remote control 763 | restaurant 764 | revolver 765 | rifle 766 | rocking chair 767 | rotisserie 768 | rubber eraser 769 | rugby ball 770 | rule 771 | running shoe 772 | safe 773 | safety pin 774 | saltshaker 775 | sandal 776 | sarong 777 | sax 778 | scabbard 779 | scale 780 | school bus 781 | schooner 782 | scoreboard 783 | screen 784 | screw 785 | screwdriver 786 | seat belt 787 | sewing machine 788 | shield 789 | shoe shop 790 | shoji 791 | shopping basket 792 | shopping cart 793 | shovel 794 | shower cap 795 | shower curtain 796 | ski 797 | ski mask 798 | sleeping bag 799 | slide rule 800 | sliding door 801 | slot 802 | snorkel 803 | snowmobile 804 | snowplow 805 | soap dispenser 806 | soccer ball 807 | sock 808 | solar dish 809 | sombrero 810 | soup bowl 811 | space bar 812 | space heater 813 | space shuttle 814 | spatula 815 | speedboat 816 | spider web 817 | spindle 818 | sports car 819 | spotlight 820 | stage 821 | steam locomotive 822 | steel arch bridge 823 | steel drum 824 | stethoscope 825 | stole 826 | stone wall 827 | stopwatch 828 | stove 829 | strainer 830 | streetcar 831 | stretcher 832 | studio couch 833 | stupa 834 | submarine 835 | suit 836 | sundial 837 | sunglass 838 | sunglasses 839 | sunscreen 840 | suspension bridge 841 | swab 842 | sweatshirt 843 | swimming trunks 844 | swing 845 | switch 846 | syringe 847 | table lamp 848 | tank 849 | tape player 850 | teapot 851 | teddy 852 | television 853 | tennis ball 854 | thatch 855 | theater curtain 856 | thimble 857 | thresher 858 | throne 859 | tile roof 860 | toaster 861 | tobacco shop 862 | toilet seat 863 | torch 864 | totem pole 865 | tow truck 866 | toyshop 867 | tractor 868 | trailer truck 869 | tray 870 | trench coat 871 | tricycle 872 | trimaran 873 | tripod 874 | triumphal arch 875 | trolleybus 876 | trombone 877 | tub 878 | turnstile 879 | typewriter keyboard 880 | umbrella 881 | unicycle 882 | upright 883 | vacuum 884 | vase 885 | vault 886 | velvet 887 | vending machine 888 | vestment 889 | viaduct 890 | violin 891 | volleyball 892 | waffle iron 893 | wall clock 894 | wallet 895 | wardrobe 896 | warplane 897 | washbasin 898 | washer 899 | water bottle 900 | water jug 901 | water tower 902 | whiskey jug 903 | whistle 904 | wig 905 | window screen 906 | window shade 907 | Windsor tie 908 | wine bottle 909 | wing 910 | wok 911 | wooden spoon 912 | wool 913 | worm fence 914 | wreck 915 | yawl 916 | yurt 917 | web site 918 | comic book 919 | crossword puzzle 920 | street sign 921 | traffic light 922 | book jacket 923 | menu 924 | plate 925 | guacamole 926 | consomme 927 | hot pot 928 | trifle 929 | ice cream 930 | ice lolly 931 | French loaf 932 | bagel 933 | pretzel 934 | cheeseburger 935 | hotdog 936 | mashed potato 937 | head cabbage 938 | broccoli 939 | cauliflower 940 | zucchini 941 | spaghetti squash 942 | acorn squash 943 | butternut squash 944 | cucumber 945 | artichoke 946 | bell pepper 947 | cardoon 948 | mushroom 949 | Granny Smith 950 | strawberry 951 | orange 952 | lemon 953 | fig 954 | pineapple 955 | banana 956 | jackfruit 957 | custard apple 958 | pomegranate 959 | hay 960 | carbonara 961 | chocolate sauce 962 | dough 963 | meat loaf 964 | pizza 965 | potpie 966 | burrito 967 | red wine 968 | espresso 969 | cup 970 | eggnog 971 | alp 972 | bubble 973 | cliff 974 | coral reef 975 | geyser 976 | lakeside 977 | promontory 978 | sandbar 979 | seashore 980 | valley 981 | volcano 982 | ballplayer 983 | groom 984 | scuba diver 985 | rapeseed 986 | daisy 987 | yellow lady's slipper 988 | corn 989 | acorn 990 | hip 991 | buckeye 992 | coral fungus 993 | agaric 994 | gyromitra 995 | stinkhorn 996 | earthstar 997 | hen-of-the-woods 998 | bolete 999 | ear 1000 | toilet tissue -------------------------------------------------------------------------------- /dash-grafana-triton-new.json: -------------------------------------------------------------------------------- 1 | { 2 | "__inputs": [ 3 | { 4 | "name": "DS_PROMETHEUS", 5 | "label": "prometheus", 6 | "description": "", 7 | "type": "datasource", 8 | "pluginId": "prometheus", 9 | "pluginName": "Prometheus" 10 | } 11 | ], 12 | "__elements": {}, 13 | "__requires": [ 14 | { 15 | "type": "grafana", 16 | "id": "grafana", 17 | "name": "Grafana", 18 | "version": "12.0.1" 19 | }, 20 | { 21 | "type": "datasource", 22 | "id": "prometheus", 23 | "name": "Prometheus", 24 | "version": "1.0.0" 25 | }, 26 | { 27 | "type": "panel", 28 | "id": "timeseries", 29 | "name": "Time series", 30 | "version": "" 31 | } 32 | ], 33 | "annotations": { 34 | "list": [ 35 | { 36 | "builtIn": 1, 37 | "datasource": { 38 | "type": "grafana", 39 | "uid": "-- Grafana --" 40 | }, 41 | "enable": true, 42 | "hide": true, 43 | "iconColor": "rgba(0, 211, 255, 1)", 44 | "name": "Annotations & Alerts", 45 | "type": "dashboard" 46 | } 47 | ] 48 | }, 49 | "editable": true, 50 | "fiscalYearStartMonth": 0, 51 | "graphTooltip": 0, 52 | "id": null, 53 | "links": [], 54 | "panels": [ 55 | { 56 | "collapsed": false, 57 | "gridPos": { 58 | "h": 1, 59 | "w": 24, 60 | "x": 0, 61 | "y": 0 62 | }, 63 | "id": 12, 64 | "panels": [], 65 | "title": "Аналитика времени", 66 | "type": "row" 67 | }, 68 | { 69 | "datasource": { 70 | "type": "prometheus", 71 | "uid": "${DS_PROMETHEUS}" 72 | }, 73 | "fieldConfig": { 74 | "defaults": { 75 | "color": { 76 | "mode": "palette-classic" 77 | }, 78 | "custom": { 79 | "axisBorderShow": false, 80 | "axisCenteredZero": false, 81 | "axisColorMode": "text", 82 | "axisLabel": "", 83 | "axisPlacement": "auto", 84 | "barAlignment": 0, 85 | "barWidthFactor": 0.6, 86 | "drawStyle": "line", 87 | "fillOpacity": 0, 88 | "gradientMode": "none", 89 | "hideFrom": { 90 | "legend": false, 91 | "tooltip": false, 92 | "viz": false 93 | }, 94 | "insertNulls": false, 95 | "lineInterpolation": "linear", 96 | "lineWidth": 1, 97 | "pointSize": 5, 98 | "scaleDistribution": { 99 | "type": "linear" 100 | }, 101 | "showPoints": "auto", 102 | "spanNulls": false, 103 | "stacking": { 104 | "group": "A", 105 | "mode": "none" 106 | }, 107 | "thresholdsStyle": { 108 | "mode": "off" 109 | } 110 | }, 111 | "mappings": [], 112 | "thresholds": { 113 | "mode": "absolute", 114 | "steps": [ 115 | { 116 | "color": "green" 117 | }, 118 | { 119 | "color": "red", 120 | "value": 80 121 | } 122 | ] 123 | }, 124 | "unit": "ms" 125 | }, 126 | "overrides": [] 127 | }, 128 | "gridPos": { 129 | "h": 8, 130 | "w": 24, 131 | "x": 0, 132 | "y": 1 133 | }, 134 | "id": 17, 135 | "options": { 136 | "legend": { 137 | "calcs": [], 138 | "displayMode": "list", 139 | "placement": "bottom", 140 | "showLegend": true 141 | }, 142 | "tooltip": { 143 | "hideZeros": false, 144 | "mode": "single", 145 | "sort": "none" 146 | } 147 | }, 148 | "pluginVersion": "12.0.1", 149 | "targets": [ 150 | { 151 | "editorMode": "code", 152 | "expr": "(\r\n sum by (model,version)(\r\n increase(nv_inference_compute_infer_duration_us{\r\n job=\"triton\"\r\n }[10s])\r\n))\r\n/ \r\n(\r\n sum by (model,version)\r\n(\r\nincrease(nv_inference_request_success{\r\n job=\"triton\"\r\n}[10s])\r\n))\r\n/ 1000\r\n", 153 | "legendFormat": "__auto", 154 | "range": true, 155 | "refId": "A", 156 | "datasource": { 157 | "type": "prometheus", 158 | "uid": "${DS_PROMETHEUS}" 159 | } 160 | } 161 | ], 162 | "title": "Среднее время выполнения одного запроса", 163 | "type": "timeseries" 164 | }, 165 | { 166 | "datasource": { 167 | "type": "prometheus", 168 | "uid": "${DS_PROMETHEUS}" 169 | }, 170 | "fieldConfig": { 171 | "defaults": { 172 | "color": { 173 | "mode": "palette-classic" 174 | }, 175 | "custom": { 176 | "axisBorderShow": false, 177 | "axisCenteredZero": false, 178 | "axisColorMode": "text", 179 | "axisLabel": "", 180 | "axisPlacement": "auto", 181 | "barAlignment": 0, 182 | "barWidthFactor": 0.6, 183 | "drawStyle": "line", 184 | "fillOpacity": 0, 185 | "gradientMode": "none", 186 | "hideFrom": { 187 | "legend": false, 188 | "tooltip": false, 189 | "viz": false 190 | }, 191 | "insertNulls": false, 192 | "lineInterpolation": "linear", 193 | "lineWidth": 1, 194 | "pointSize": 5, 195 | "scaleDistribution": { 196 | "type": "linear" 197 | }, 198 | "showPoints": "auto", 199 | "spanNulls": false, 200 | "stacking": { 201 | "group": "A", 202 | "mode": "none" 203 | }, 204 | "thresholdsStyle": { 205 | "mode": "off" 206 | } 207 | }, 208 | "mappings": [], 209 | "thresholds": { 210 | "mode": "absolute", 211 | "steps": [ 212 | { 213 | "color": "green" 214 | }, 215 | { 216 | "color": "red", 217 | "value": 80 218 | } 219 | ] 220 | }, 221 | "unit": "ms" 222 | }, 223 | "overrides": [] 224 | }, 225 | "gridPos": { 226 | "h": 8, 227 | "w": 24, 228 | "x": 0, 229 | "y": 9 230 | }, 231 | "id": 18, 232 | "options": { 233 | "legend": { 234 | "calcs": [], 235 | "displayMode": "list", 236 | "placement": "bottom", 237 | "showLegend": true 238 | }, 239 | "tooltip": { 240 | "hideZeros": false, 241 | "mode": "single", 242 | "sort": "none" 243 | } 244 | }, 245 | "pluginVersion": "12.0.1", 246 | "targets": [ 247 | { 248 | "editorMode": "code", 249 | "expr": "sum by (model,version) (\r\n rate(nv_inference_queue_duration_us{job=\"triton\"}[10s])) / 1000", 250 | "legendFormat": "__auto", 251 | "range": true, 252 | "refId": "A", 253 | "datasource": { 254 | "type": "prometheus", 255 | "uid": "${DS_PROMETHEUS}" 256 | } 257 | } 258 | ], 259 | "title": "Среднее время ожидания запроса в очереди", 260 | "type": "timeseries" 261 | }, 262 | { 263 | "collapsed": false, 264 | "gridPos": { 265 | "h": 1, 266 | "w": 24, 267 | "x": 0, 268 | "y": 17 269 | }, 270 | "id": 8, 271 | "panels": [], 272 | "title": "Аналитика запросов", 273 | "type": "row" 274 | }, 275 | { 276 | "datasource": { 277 | "type": "prometheus", 278 | "uid": "${DS_PROMETHEUS}" 279 | }, 280 | "fieldConfig": { 281 | "defaults": { 282 | "color": { 283 | "mode": "palette-classic" 284 | }, 285 | "custom": { 286 | "axisBorderShow": false, 287 | "axisCenteredZero": false, 288 | "axisColorMode": "text", 289 | "axisLabel": "", 290 | "axisPlacement": "auto", 291 | "barAlignment": 0, 292 | "barWidthFactor": 0.6, 293 | "drawStyle": "line", 294 | "fillOpacity": 12, 295 | "gradientMode": "none", 296 | "hideFrom": { 297 | "legend": false, 298 | "tooltip": false, 299 | "viz": false 300 | }, 301 | "insertNulls": false, 302 | "lineInterpolation": "smooth", 303 | "lineWidth": 1, 304 | "pointSize": 5, 305 | "scaleDistribution": { 306 | "type": "linear" 307 | }, 308 | "showPoints": "auto", 309 | "spanNulls": false, 310 | "stacking": { 311 | "group": "A", 312 | "mode": "none" 313 | }, 314 | "thresholdsStyle": { 315 | "mode": "off" 316 | } 317 | }, 318 | "mappings": [], 319 | "thresholds": { 320 | "mode": "absolute", 321 | "steps": [ 322 | { 323 | "color": "green" 324 | }, 325 | { 326 | "color": "red", 327 | "value": 80 328 | } 329 | ] 330 | } 331 | }, 332 | "overrides": [] 333 | }, 334 | "gridPos": { 335 | "h": 10, 336 | "w": 12, 337 | "x": 0, 338 | "y": 18 339 | }, 340 | "id": 16, 341 | "options": { 342 | "legend": { 343 | "calcs": [], 344 | "displayMode": "list", 345 | "placement": "bottom", 346 | "showLegend": true 347 | }, 348 | "tooltip": { 349 | "hideZeros": false, 350 | "mode": "single", 351 | "sort": "none" 352 | } 353 | }, 354 | "pluginVersion": "12.0.1", 355 | "targets": [ 356 | { 357 | "editorMode": "code", 358 | "expr": "sum by (model,version) (rate(nv_inference_count{job=\"triton\"}[10s]))", 359 | "legendFormat": "__auto", 360 | "range": true, 361 | "refId": "A", 362 | "datasource": { 363 | "type": "prometheus", 364 | "uid": "${DS_PROMETHEUS}" 365 | } 366 | } 367 | ], 368 | "title": "Число инференсов (кадров/видосов) в секунду (FPS)", 369 | "type": "timeseries" 370 | }, 371 | { 372 | "datasource": { 373 | "type": "prometheus", 374 | "uid": "${DS_PROMETHEUS}" 375 | }, 376 | "fieldConfig": { 377 | "defaults": { 378 | "color": { 379 | "mode": "palette-classic" 380 | }, 381 | "custom": { 382 | "axisBorderShow": false, 383 | "axisCenteredZero": false, 384 | "axisColorMode": "text", 385 | "axisLabel": "", 386 | "axisPlacement": "auto", 387 | "barAlignment": 0, 388 | "barWidthFactor": 0.6, 389 | "drawStyle": "line", 390 | "fillOpacity": 11, 391 | "gradientMode": "none", 392 | "hideFrom": { 393 | "legend": false, 394 | "tooltip": false, 395 | "viz": false 396 | }, 397 | "insertNulls": false, 398 | "lineInterpolation": "linear", 399 | "lineWidth": 1, 400 | "pointSize": 5, 401 | "scaleDistribution": { 402 | "type": "linear" 403 | }, 404 | "showPoints": "auto", 405 | "spanNulls": false, 406 | "stacking": { 407 | "group": "A", 408 | "mode": "none" 409 | }, 410 | "thresholdsStyle": { 411 | "mode": "off" 412 | } 413 | }, 414 | "mappings": [], 415 | "thresholds": { 416 | "mode": "absolute", 417 | "steps": [ 418 | { 419 | "color": "green" 420 | }, 421 | { 422 | "color": "red", 423 | "value": 80 424 | } 425 | ] 426 | } 427 | }, 428 | "overrides": [] 429 | }, 430 | "gridPos": { 431 | "h": 10, 432 | "w": 12, 433 | "x": 12, 434 | "y": 18 435 | }, 436 | "id": 15, 437 | "options": { 438 | "legend": { 439 | "calcs": [], 440 | "displayMode": "list", 441 | "placement": "bottom", 442 | "showLegend": true 443 | }, 444 | "tooltip": { 445 | "hideZeros": false, 446 | "mode": "single", 447 | "sort": "none" 448 | } 449 | }, 450 | "pluginVersion": "12.0.1", 451 | "targets": [ 452 | { 453 | "datasource": { 454 | "type": "prometheus", 455 | "uid": "${DS_PROMETHEUS}" 456 | }, 457 | "editorMode": "code", 458 | "expr": "sum by (model,version) (rate(nv_inference_request_success{job=\"triton\"}[10s]))", 459 | "legendFormat": "__auto", 460 | "range": true, 461 | "refId": "A" 462 | } 463 | ], 464 | "title": "Число запросов к тритону в секунду (RPS)", 465 | "type": "timeseries" 466 | }, 467 | { 468 | "datasource": { 469 | "type": "prometheus", 470 | "uid": "${DS_PROMETHEUS}" 471 | }, 472 | "fieldConfig": { 473 | "defaults": { 474 | "color": { 475 | "mode": "palette-classic" 476 | }, 477 | "custom": { 478 | "axisBorderShow": false, 479 | "axisCenteredZero": false, 480 | "axisColorMode": "text", 481 | "axisLabel": "", 482 | "axisPlacement": "auto", 483 | "barAlignment": 0, 484 | "barWidthFactor": 0.6, 485 | "drawStyle": "line", 486 | "fillOpacity": 18, 487 | "gradientMode": "none", 488 | "hideFrom": { 489 | "legend": false, 490 | "tooltip": false, 491 | "viz": false 492 | }, 493 | "insertNulls": false, 494 | "lineInterpolation": "linear", 495 | "lineStyle": { 496 | "fill": "solid" 497 | }, 498 | "lineWidth": 1, 499 | "pointSize": 5, 500 | "scaleDistribution": { 501 | "type": "linear" 502 | }, 503 | "showPoints": "auto", 504 | "spanNulls": false, 505 | "stacking": { 506 | "group": "A", 507 | "mode": "none" 508 | }, 509 | "thresholdsStyle": { 510 | "mode": "off" 511 | } 512 | }, 513 | "mappings": [], 514 | "thresholds": { 515 | "mode": "absolute", 516 | "steps": [ 517 | { 518 | "color": "green" 519 | }, 520 | { 521 | "color": "red", 522 | "value": 80 523 | } 524 | ] 525 | } 526 | }, 527 | "overrides": [] 528 | }, 529 | "gridPos": { 530 | "h": 7, 531 | "w": 24, 532 | "x": 0, 533 | "y": 28 534 | }, 535 | "id": 14, 536 | "options": { 537 | "legend": { 538 | "calcs": [], 539 | "displayMode": "list", 540 | "placement": "bottom", 541 | "showLegend": true 542 | }, 543 | "tooltip": { 544 | "hideZeros": false, 545 | "mode": "single", 546 | "sort": "none" 547 | } 548 | }, 549 | "pluginVersion": "12.0.1", 550 | "targets": [ 551 | { 552 | "datasource": { 553 | "type": "prometheus", 554 | "uid": "${DS_PROMETHEUS}" 555 | }, 556 | "editorMode": "code", 557 | "exemplar": true, 558 | "expr": "sum by (model,version) (rate(nv_inference_count{job=\"triton\"}[10s])/rate(nv_inference_exec_count{job=\"triton\"}[10s]) )", 559 | "legendFormat": "{{model}}-{{version}}", 560 | "range": true, 561 | "refId": "A" 562 | } 563 | ], 564 | "title": "Размер батча", 565 | "type": "timeseries" 566 | }, 567 | { 568 | "datasource": { 569 | "type": "prometheus", 570 | "uid": "${DS_PROMETHEUS}" 571 | }, 572 | "fieldConfig": { 573 | "defaults": { 574 | "color": { 575 | "mode": "palette-classic" 576 | }, 577 | "custom": { 578 | "axisBorderShow": false, 579 | "axisCenteredZero": false, 580 | "axisColorMode": "text", 581 | "axisLabel": "", 582 | "axisPlacement": "auto", 583 | "barAlignment": 0, 584 | "barWidthFactor": 0.6, 585 | "drawStyle": "line", 586 | "fillOpacity": 0, 587 | "gradientMode": "none", 588 | "hideFrom": { 589 | "legend": false, 590 | "tooltip": false, 591 | "viz": false 592 | }, 593 | "insertNulls": false, 594 | "lineInterpolation": "linear", 595 | "lineWidth": 1, 596 | "pointSize": 5, 597 | "scaleDistribution": { 598 | "type": "linear" 599 | }, 600 | "showPoints": "auto", 601 | "spanNulls": false, 602 | "stacking": { 603 | "group": "A", 604 | "mode": "none" 605 | }, 606 | "thresholdsStyle": { 607 | "mode": "off" 608 | } 609 | }, 610 | "mappings": [], 611 | "thresholds": { 612 | "mode": "absolute", 613 | "steps": [ 614 | { 615 | "color": "green" 616 | }, 617 | { 618 | "color": "red", 619 | "value": 80 620 | } 621 | ] 622 | } 623 | }, 624 | "overrides": [] 625 | }, 626 | "gridPos": { 627 | "h": 8, 628 | "w": 12, 629 | "x": 0, 630 | "y": 35 631 | }, 632 | "id": 11, 633 | "options": { 634 | "legend": { 635 | "calcs": [], 636 | "displayMode": "list", 637 | "placement": "bottom", 638 | "showLegend": true 639 | }, 640 | "tooltip": { 641 | "hideZeros": false, 642 | "mode": "single", 643 | "sort": "none" 644 | } 645 | }, 646 | "pluginVersion": "12.0.1", 647 | "targets": [ 648 | { 649 | "datasource": { 650 | "type": "prometheus", 651 | "uid": "${DS_PROMETHEUS}" 652 | }, 653 | "disableTextWrap": false, 654 | "editorMode": "builder", 655 | "expr": "nv_inference_exec_count", 656 | "fullMetaSearch": false, 657 | "includeNullMetadata": true, 658 | "instant": false, 659 | "legendFormat": "__auto", 660 | "range": true, 661 | "refId": "A", 662 | "useBackend": false 663 | } 664 | ], 665 | "title": "Сколько раз обращались к модели (amount/batch_size) с момента старта тритона", 666 | "type": "timeseries" 667 | }, 668 | { 669 | "datasource": { 670 | "type": "prometheus", 671 | "uid": "${DS_PROMETHEUS}" 672 | }, 673 | "fieldConfig": { 674 | "defaults": { 675 | "color": { 676 | "mode": "palette-classic" 677 | }, 678 | "custom": { 679 | "axisBorderShow": false, 680 | "axisCenteredZero": false, 681 | "axisColorMode": "text", 682 | "axisLabel": "", 683 | "axisPlacement": "auto", 684 | "barAlignment": 0, 685 | "barWidthFactor": 0.6, 686 | "drawStyle": "line", 687 | "fillOpacity": 0, 688 | "gradientMode": "none", 689 | "hideFrom": { 690 | "legend": false, 691 | "tooltip": false, 692 | "viz": false 693 | }, 694 | "insertNulls": false, 695 | "lineInterpolation": "linear", 696 | "lineWidth": 1, 697 | "pointSize": 5, 698 | "scaleDistribution": { 699 | "type": "linear" 700 | }, 701 | "showPoints": "auto", 702 | "spanNulls": false, 703 | "stacking": { 704 | "group": "A", 705 | "mode": "none" 706 | }, 707 | "thresholdsStyle": { 708 | "mode": "off" 709 | } 710 | }, 711 | "mappings": [], 712 | "thresholds": { 713 | "mode": "absolute", 714 | "steps": [ 715 | { 716 | "color": "green" 717 | }, 718 | { 719 | "color": "red", 720 | "value": 80 721 | } 722 | ] 723 | } 724 | }, 725 | "overrides": [] 726 | }, 727 | "gridPos": { 728 | "h": 8, 729 | "w": 12, 730 | "x": 12, 731 | "y": 35 732 | }, 733 | "id": 3, 734 | "options": { 735 | "legend": { 736 | "calcs": [], 737 | "displayMode": "list", 738 | "placement": "bottom", 739 | "showLegend": true 740 | }, 741 | "tooltip": { 742 | "hideZeros": false, 743 | "mode": "single", 744 | "sort": "none" 745 | } 746 | }, 747 | "pluginVersion": "12.0.1", 748 | "targets": [ 749 | { 750 | "datasource": { 751 | "type": "prometheus", 752 | "uid": "${DS_PROMETHEUS}" 753 | }, 754 | "disableTextWrap": false, 755 | "editorMode": "builder", 756 | "expr": "nv_inference_count", 757 | "fullMetaSearch": false, 758 | "includeNullMetadata": true, 759 | "instant": false, 760 | "legendFormat": "__auto", 761 | "range": true, 762 | "refId": "A", 763 | "useBackend": false 764 | } 765 | ], 766 | "title": "Число инференсов (число прогнанных кадров/видосов) с момента старта тритона", 767 | "type": "timeseries" 768 | }, 769 | { 770 | "datasource": { 771 | "type": "prometheus", 772 | "uid": "${DS_PROMETHEUS}" 773 | }, 774 | "fieldConfig": { 775 | "defaults": { 776 | "color": { 777 | "mode": "palette-classic" 778 | }, 779 | "custom": { 780 | "axisBorderShow": false, 781 | "axisCenteredZero": false, 782 | "axisColorMode": "text", 783 | "axisLabel": "", 784 | "axisPlacement": "auto", 785 | "barAlignment": 0, 786 | "barWidthFactor": 0.6, 787 | "drawStyle": "line", 788 | "fillOpacity": 0, 789 | "gradientMode": "none", 790 | "hideFrom": { 791 | "legend": false, 792 | "tooltip": false, 793 | "viz": false 794 | }, 795 | "insertNulls": false, 796 | "lineInterpolation": "linear", 797 | "lineWidth": 1, 798 | "pointSize": 5, 799 | "scaleDistribution": { 800 | "type": "linear" 801 | }, 802 | "showPoints": "auto", 803 | "spanNulls": false, 804 | "stacking": { 805 | "group": "A", 806 | "mode": "none" 807 | }, 808 | "thresholdsStyle": { 809 | "mode": "off" 810 | } 811 | }, 812 | "mappings": [], 813 | "thresholds": { 814 | "mode": "absolute", 815 | "steps": [ 816 | { 817 | "color": "green" 818 | }, 819 | { 820 | "color": "red", 821 | "value": 80 822 | } 823 | ] 824 | } 825 | }, 826 | "overrides": [] 827 | }, 828 | "gridPos": { 829 | "h": 8, 830 | "w": 12, 831 | "x": 0, 832 | "y": 43 833 | }, 834 | "id": 4, 835 | "options": { 836 | "legend": { 837 | "calcs": [], 838 | "displayMode": "list", 839 | "placement": "bottom", 840 | "showLegend": true 841 | }, 842 | "tooltip": { 843 | "hideZeros": false, 844 | "mode": "single", 845 | "sort": "none" 846 | } 847 | }, 848 | "pluginVersion": "12.0.1", 849 | "targets": [ 850 | { 851 | "datasource": { 852 | "type": "prometheus", 853 | "uid": "${DS_PROMETHEUS}" 854 | }, 855 | "disableTextWrap": false, 856 | "editorMode": "builder", 857 | "expr": "nv_inference_request_success", 858 | "fullMetaSearch": false, 859 | "includeNullMetadata": true, 860 | "instant": false, 861 | "legendFormat": "__auto", 862 | "range": true, 863 | "refId": "A", 864 | "useBackend": false 865 | } 866 | ], 867 | "title": "Число успешных запросов по апи с момента старта тритона", 868 | "type": "timeseries" 869 | }, 870 | { 871 | "datasource": { 872 | "type": "prometheus", 873 | "uid": "${DS_PROMETHEUS}" 874 | }, 875 | "fieldConfig": { 876 | "defaults": { 877 | "color": { 878 | "mode": "palette-classic" 879 | }, 880 | "custom": { 881 | "axisBorderShow": false, 882 | "axisCenteredZero": false, 883 | "axisColorMode": "text", 884 | "axisLabel": "", 885 | "axisPlacement": "auto", 886 | "barAlignment": 0, 887 | "barWidthFactor": 0.6, 888 | "drawStyle": "line", 889 | "fillOpacity": 0, 890 | "gradientMode": "none", 891 | "hideFrom": { 892 | "legend": false, 893 | "tooltip": false, 894 | "viz": false 895 | }, 896 | "insertNulls": false, 897 | "lineInterpolation": "linear", 898 | "lineWidth": 1, 899 | "pointSize": 5, 900 | "scaleDistribution": { 901 | "type": "linear" 902 | }, 903 | "showPoints": "auto", 904 | "spanNulls": false, 905 | "stacking": { 906 | "group": "A", 907 | "mode": "none" 908 | }, 909 | "thresholdsStyle": { 910 | "mode": "off" 911 | } 912 | }, 913 | "mappings": [], 914 | "thresholds": { 915 | "mode": "absolute", 916 | "steps": [ 917 | { 918 | "color": "green" 919 | }, 920 | { 921 | "color": "red", 922 | "value": 80 923 | } 924 | ] 925 | } 926 | }, 927 | "overrides": [] 928 | }, 929 | "gridPos": { 930 | "h": 8, 931 | "w": 12, 932 | "x": 12, 933 | "y": 43 934 | }, 935 | "id": 9, 936 | "options": { 937 | "legend": { 938 | "calcs": [], 939 | "displayMode": "list", 940 | "placement": "bottom", 941 | "showLegend": true 942 | }, 943 | "tooltip": { 944 | "hideZeros": false, 945 | "mode": "single", 946 | "sort": "none" 947 | } 948 | }, 949 | "pluginVersion": "12.0.1", 950 | "targets": [ 951 | { 952 | "datasource": { 953 | "type": "prometheus", 954 | "uid": "${DS_PROMETHEUS}" 955 | }, 956 | "disableTextWrap": false, 957 | "editorMode": "builder", 958 | "expr": "nv_inference_request_failure", 959 | "fullMetaSearch": false, 960 | "includeNullMetadata": true, 961 | "instant": false, 962 | "legendFormat": "__auto", 963 | "range": true, 964 | "refId": "A", 965 | "useBackend": false 966 | } 967 | ], 968 | "title": "Число падений запросов с момента старта тритона", 969 | "type": "timeseries" 970 | }, 971 | { 972 | "collapsed": false, 973 | "gridPos": { 974 | "h": 1, 975 | "w": 24, 976 | "x": 0, 977 | "y": 51 978 | }, 979 | "id": 13, 980 | "panels": [], 981 | "title": "Аналитика утилизации", 982 | "type": "row" 983 | }, 984 | { 985 | "datasource": { 986 | "type": "prometheus", 987 | "uid": "${DS_PROMETHEUS}" 988 | }, 989 | "fieldConfig": { 990 | "defaults": { 991 | "color": { 992 | "mode": "palette-classic" 993 | }, 994 | "custom": { 995 | "axisBorderShow": false, 996 | "axisCenteredZero": false, 997 | "axisColorMode": "text", 998 | "axisLabel": "", 999 | "axisPlacement": "auto", 1000 | "barAlignment": 0, 1001 | "barWidthFactor": 0.6, 1002 | "drawStyle": "line", 1003 | "fillOpacity": 9, 1004 | "gradientMode": "none", 1005 | "hideFrom": { 1006 | "legend": false, 1007 | "tooltip": false, 1008 | "viz": false 1009 | }, 1010 | "insertNulls": false, 1011 | "lineInterpolation": "linear", 1012 | "lineWidth": 1, 1013 | "pointSize": 5, 1014 | "scaleDistribution": { 1015 | "type": "linear" 1016 | }, 1017 | "showPoints": "auto", 1018 | "spanNulls": false, 1019 | "stacking": { 1020 | "group": "A", 1021 | "mode": "none" 1022 | }, 1023 | "thresholdsStyle": { 1024 | "mode": "off" 1025 | } 1026 | }, 1027 | "mappings": [], 1028 | "thresholds": { 1029 | "mode": "absolute", 1030 | "steps": [ 1031 | { 1032 | "color": "green" 1033 | }, 1034 | { 1035 | "color": "red", 1036 | "value": 80 1037 | } 1038 | ] 1039 | } 1040 | }, 1041 | "overrides": [] 1042 | }, 1043 | "gridPos": { 1044 | "h": 8, 1045 | "w": 12, 1046 | "x": 0, 1047 | "y": 52 1048 | }, 1049 | "id": 2, 1050 | "options": { 1051 | "legend": { 1052 | "calcs": [], 1053 | "displayMode": "list", 1054 | "placement": "bottom", 1055 | "showLegend": true 1056 | }, 1057 | "tooltip": { 1058 | "hideZeros": false, 1059 | "mode": "single", 1060 | "sort": "none" 1061 | } 1062 | }, 1063 | "pluginVersion": "12.0.1", 1064 | "targets": [ 1065 | { 1066 | "datasource": { 1067 | "type": "prometheus", 1068 | "uid": "${DS_PROMETHEUS}" 1069 | }, 1070 | "disableTextWrap": false, 1071 | "editorMode": "builder", 1072 | "expr": "nv_gpu_utilization", 1073 | "fullMetaSearch": false, 1074 | "includeNullMetadata": true, 1075 | "instant": false, 1076 | "legendFormat": "__auto", 1077 | "range": true, 1078 | "refId": "A", 1079 | "useBackend": false 1080 | } 1081 | ], 1082 | "title": "Доля GPU утилизации памяти", 1083 | "type": "timeseries" 1084 | }, 1085 | { 1086 | "datasource": { 1087 | "type": "prometheus", 1088 | "uid": "${DS_PROMETHEUS}" 1089 | }, 1090 | "fieldConfig": { 1091 | "defaults": { 1092 | "color": { 1093 | "mode": "palette-classic" 1094 | }, 1095 | "custom": { 1096 | "axisBorderShow": false, 1097 | "axisCenteredZero": false, 1098 | "axisColorMode": "text", 1099 | "axisLabel": "", 1100 | "axisPlacement": "auto", 1101 | "barAlignment": 0, 1102 | "barWidthFactor": 0.6, 1103 | "drawStyle": "line", 1104 | "fillOpacity": 9, 1105 | "gradientMode": "none", 1106 | "hideFrom": { 1107 | "legend": false, 1108 | "tooltip": false, 1109 | "viz": false 1110 | }, 1111 | "insertNulls": false, 1112 | "lineInterpolation": "smooth", 1113 | "lineWidth": 1, 1114 | "pointSize": 5, 1115 | "scaleDistribution": { 1116 | "type": "linear" 1117 | }, 1118 | "showPoints": "auto", 1119 | "spanNulls": false, 1120 | "stacking": { 1121 | "group": "A", 1122 | "mode": "none" 1123 | }, 1124 | "thresholdsStyle": { 1125 | "mode": "off" 1126 | } 1127 | }, 1128 | "mappings": [], 1129 | "thresholds": { 1130 | "mode": "absolute", 1131 | "steps": [ 1132 | { 1133 | "color": "green" 1134 | }, 1135 | { 1136 | "color": "red", 1137 | "value": 80 1138 | } 1139 | ] 1140 | } 1141 | }, 1142 | "overrides": [] 1143 | }, 1144 | "gridPos": { 1145 | "h": 8, 1146 | "w": 12, 1147 | "x": 12, 1148 | "y": 52 1149 | }, 1150 | "id": 1, 1151 | "options": { 1152 | "legend": { 1153 | "calcs": [], 1154 | "displayMode": "list", 1155 | "placement": "bottom", 1156 | "showLegend": true 1157 | }, 1158 | "tooltip": { 1159 | "hideZeros": false, 1160 | "mode": "single", 1161 | "sort": "none" 1162 | } 1163 | }, 1164 | "pluginVersion": "12.0.1", 1165 | "targets": [ 1166 | { 1167 | "datasource": { 1168 | "type": "prometheus", 1169 | "uid": "${DS_PROMETHEUS}" 1170 | }, 1171 | "disableTextWrap": false, 1172 | "editorMode": "code", 1173 | "expr": "sum by (gpu_uuid) (rate(nv_energy_consumption{job=\"triton\"}[30s]))", 1174 | "fullMetaSearch": false, 1175 | "includeNullMetadata": true, 1176 | "instant": false, 1177 | "legendFormat": "__auto", 1178 | "range": true, 1179 | "refId": "A", 1180 | "useBackend": false 1181 | } 1182 | ], 1183 | "title": "GPU потребление энергии", 1184 | "type": "timeseries" 1185 | }, 1186 | { 1187 | "datasource": { 1188 | "type": "prometheus", 1189 | "uid": "${DS_PROMETHEUS}" 1190 | }, 1191 | "fieldConfig": { 1192 | "defaults": { 1193 | "color": { 1194 | "mode": "palette-classic" 1195 | }, 1196 | "custom": { 1197 | "axisBorderShow": false, 1198 | "axisCenteredZero": false, 1199 | "axisColorMode": "text", 1200 | "axisLabel": "", 1201 | "axisPlacement": "auto", 1202 | "barAlignment": 0, 1203 | "barWidthFactor": 0.6, 1204 | "drawStyle": "line", 1205 | "fillOpacity": 9, 1206 | "gradientMode": "none", 1207 | "hideFrom": { 1208 | "legend": false, 1209 | "tooltip": false, 1210 | "viz": false 1211 | }, 1212 | "insertNulls": false, 1213 | "lineInterpolation": "smooth", 1214 | "lineWidth": 1, 1215 | "pointSize": 5, 1216 | "scaleDistribution": { 1217 | "type": "linear" 1218 | }, 1219 | "showPoints": "auto", 1220 | "spanNulls": false, 1221 | "stacking": { 1222 | "group": "A", 1223 | "mode": "none" 1224 | }, 1225 | "thresholdsStyle": { 1226 | "mode": "off" 1227 | } 1228 | }, 1229 | "mappings": [], 1230 | "thresholds": { 1231 | "mode": "absolute", 1232 | "steps": [ 1233 | { 1234 | "color": "green" 1235 | }, 1236 | { 1237 | "color": "red", 1238 | "value": 80 1239 | } 1240 | ] 1241 | }, 1242 | "unit": "decgbytes" 1243 | }, 1244 | "overrides": [] 1245 | }, 1246 | "gridPos": { 1247 | "h": 7, 1248 | "w": 24, 1249 | "x": 0, 1250 | "y": 60 1251 | }, 1252 | "id": 19, 1253 | "options": { 1254 | "legend": { 1255 | "calcs": [], 1256 | "displayMode": "list", 1257 | "placement": "bottom", 1258 | "showLegend": true 1259 | }, 1260 | "tooltip": { 1261 | "hideZeros": false, 1262 | "mode": "single", 1263 | "sort": "none" 1264 | } 1265 | }, 1266 | "pluginVersion": "12.0.1", 1267 | "targets": [ 1268 | { 1269 | "editorMode": "code", 1270 | "expr": "sum by (gpu_uuid) (\r\n nv_gpu_memory_used_bytes{job=\"triton\"}\r\n) / (1024^3)", 1271 | "legendFormat": "__auto", 1272 | "range": true, 1273 | "refId": "A", 1274 | "datasource": { 1275 | "type": "prometheus", 1276 | "uid": "${DS_PROMETHEUS}" 1277 | } 1278 | } 1279 | ], 1280 | "title": "Занятая память GPU", 1281 | "type": "timeseries" 1282 | } 1283 | ], 1284 | "refresh": "5s", 1285 | "schemaVersion": 41, 1286 | "tags": [], 1287 | "templating": { 1288 | "list": [] 1289 | }, 1290 | "time": { 1291 | "from": "now-15m", 1292 | "to": "now" 1293 | }, 1294 | "timepicker": {}, 1295 | "timezone": "", 1296 | "title": "Тритон метрики", 1297 | "uid": "e11dcbe0-07e4-47cd-a3d6-806f3f867550", 1298 | "version": 34, 1299 | "weekStart": "" 1300 | } -------------------------------------------------------------------------------- /dash-grafana-triton.json: -------------------------------------------------------------------------------- 1 | { 2 | "__inputs": [ 3 | { 4 | "name": "DS_PROMETHEUS", 5 | "label": "prometheus", 6 | "description": "", 7 | "type": "datasource", 8 | "pluginId": "prometheus", 9 | "pluginName": "Prometheus" 10 | } 11 | ], 12 | "__elements": {}, 13 | "__requires": [ 14 | { 15 | "type": "grafana", 16 | "id": "grafana", 17 | "name": "Grafana", 18 | "version": "11.5.2" 19 | }, 20 | { 21 | "type": "datasource", 22 | "id": "prometheus", 23 | "name": "Prometheus", 24 | "version": "1.0.0" 25 | }, 26 | { 27 | "type": "panel", 28 | "id": "timeseries", 29 | "name": "Time series", 30 | "version": "" 31 | } 32 | ], 33 | "annotations": { 34 | "list": [ 35 | { 36 | "builtIn": 1, 37 | "datasource": { 38 | "type": "grafana", 39 | "uid": "-- Grafana --" 40 | }, 41 | "enable": true, 42 | "hide": true, 43 | "iconColor": "rgba(0, 211, 255, 1)", 44 | "name": "Annotations & Alerts", 45 | "type": "dashboard" 46 | } 47 | ] 48 | }, 49 | "editable": true, 50 | "fiscalYearStartMonth": 0, 51 | "graphTooltip": 0, 52 | "id": null, 53 | "links": [], 54 | "panels": [ 55 | { 56 | "collapsed": false, 57 | "gridPos": { 58 | "h": 1, 59 | "w": 24, 60 | "x": 0, 61 | "y": 0 62 | }, 63 | "id": 12, 64 | "panels": [], 65 | "title": "Аналитика времени", 66 | "type": "row" 67 | }, 68 | { 69 | "datasource": { 70 | "type": "prometheus", 71 | "uid": "${DS_PROMETHEUS}" 72 | }, 73 | "fieldConfig": { 74 | "defaults": { 75 | "color": { 76 | "mode": "palette-classic" 77 | }, 78 | "custom": { 79 | "axisBorderShow": false, 80 | "axisCenteredZero": false, 81 | "axisColorMode": "text", 82 | "axisLabel": "", 83 | "axisPlacement": "auto", 84 | "barAlignment": 0, 85 | "barWidthFactor": 0.6, 86 | "drawStyle": "line", 87 | "fillOpacity": 0, 88 | "gradientMode": "none", 89 | "hideFrom": { 90 | "legend": false, 91 | "tooltip": false, 92 | "viz": false 93 | }, 94 | "insertNulls": false, 95 | "lineInterpolation": "linear", 96 | "lineWidth": 1, 97 | "pointSize": 5, 98 | "scaleDistribution": { 99 | "type": "linear" 100 | }, 101 | "showPoints": "auto", 102 | "spanNulls": false, 103 | "stacking": { 104 | "group": "A", 105 | "mode": "none" 106 | }, 107 | "thresholdsStyle": { 108 | "mode": "off" 109 | } 110 | }, 111 | "mappings": [], 112 | "thresholds": { 113 | "mode": "absolute", 114 | "steps": [ 115 | { 116 | "color": "green", 117 | "value": null 118 | }, 119 | { 120 | "color": "red", 121 | "value": 80 122 | } 123 | ] 124 | } 125 | }, 126 | "overrides": [] 127 | }, 128 | "gridPos": { 129 | "h": 7, 130 | "w": 24, 131 | "x": 0, 132 | "y": 1 133 | }, 134 | "id": 10, 135 | "options": { 136 | "legend": { 137 | "calcs": [], 138 | "displayMode": "list", 139 | "placement": "bottom", 140 | "showLegend": true 141 | }, 142 | "tooltip": { 143 | "hideZeros": false, 144 | "mode": "single", 145 | "sort": "none" 146 | } 147 | }, 148 | "pluginVersion": "11.5.2", 149 | "targets": [ 150 | { 151 | "datasource": { 152 | "type": "prometheus", 153 | "uid": "${DS_PROMETHEUS}" 154 | }, 155 | "disableTextWrap": false, 156 | "editorMode": "builder", 157 | "expr": "nv_inference_request_duration_us", 158 | "fullMetaSearch": false, 159 | "includeNullMetadata": true, 160 | "instant": false, 161 | "legendFormat": "__auto", 162 | "range": true, 163 | "refId": "A", 164 | "useBackend": false 165 | } 166 | ], 167 | "title": "Общее время запроса", 168 | "type": "timeseries" 169 | }, 170 | { 171 | "datasource": { 172 | "type": "prometheus", 173 | "uid": "${DS_PROMETHEUS}" 174 | }, 175 | "fieldConfig": { 176 | "defaults": { 177 | "color": { 178 | "mode": "palette-classic" 179 | }, 180 | "custom": { 181 | "axisBorderShow": false, 182 | "axisCenteredZero": false, 183 | "axisColorMode": "text", 184 | "axisLabel": "", 185 | "axisPlacement": "auto", 186 | "barAlignment": 0, 187 | "barWidthFactor": 0.6, 188 | "drawStyle": "line", 189 | "fillOpacity": 0, 190 | "gradientMode": "none", 191 | "hideFrom": { 192 | "legend": false, 193 | "tooltip": false, 194 | "viz": false 195 | }, 196 | "insertNulls": false, 197 | "lineInterpolation": "linear", 198 | "lineWidth": 1, 199 | "pointSize": 5, 200 | "scaleDistribution": { 201 | "type": "linear" 202 | }, 203 | "showPoints": "auto", 204 | "spanNulls": false, 205 | "stacking": { 206 | "group": "A", 207 | "mode": "none" 208 | }, 209 | "thresholdsStyle": { 210 | "mode": "off" 211 | } 212 | }, 213 | "mappings": [], 214 | "thresholds": { 215 | "mode": "absolute", 216 | "steps": [ 217 | { 218 | "color": "green", 219 | "value": null 220 | }, 221 | { 222 | "color": "red", 223 | "value": 80 224 | } 225 | ] 226 | } 227 | }, 228 | "overrides": [] 229 | }, 230 | "gridPos": { 231 | "h": 8, 232 | "w": 12, 233 | "x": 0, 234 | "y": 8 235 | }, 236 | "id": 6, 237 | "options": { 238 | "legend": { 239 | "calcs": [], 240 | "displayMode": "list", 241 | "placement": "bottom", 242 | "showLegend": true 243 | }, 244 | "tooltip": { 245 | "hideZeros": false, 246 | "mode": "single", 247 | "sort": "none" 248 | } 249 | }, 250 | "pluginVersion": "11.5.2", 251 | "targets": [ 252 | { 253 | "datasource": { 254 | "type": "prometheus", 255 | "uid": "${DS_PROMETHEUS}" 256 | }, 257 | "disableTextWrap": false, 258 | "editorMode": "builder", 259 | "expr": "nv_inference_compute_input_duration_us", 260 | "fullMetaSearch": false, 261 | "includeNullMetadata": true, 262 | "instant": false, 263 | "legendFormat": "__auto", 264 | "range": true, 265 | "refId": "A", 266 | "useBackend": false 267 | } 268 | ], 269 | "title": "Время инпута", 270 | "type": "timeseries" 271 | }, 272 | { 273 | "datasource": { 274 | "type": "prometheus", 275 | "uid": "${DS_PROMETHEUS}" 276 | }, 277 | "fieldConfig": { 278 | "defaults": { 279 | "color": { 280 | "mode": "palette-classic" 281 | }, 282 | "custom": { 283 | "axisBorderShow": false, 284 | "axisCenteredZero": false, 285 | "axisColorMode": "text", 286 | "axisLabel": "", 287 | "axisPlacement": "auto", 288 | "barAlignment": 0, 289 | "barWidthFactor": 0.6, 290 | "drawStyle": "line", 291 | "fillOpacity": 0, 292 | "gradientMode": "none", 293 | "hideFrom": { 294 | "legend": false, 295 | "tooltip": false, 296 | "viz": false 297 | }, 298 | "insertNulls": false, 299 | "lineInterpolation": "linear", 300 | "lineWidth": 1, 301 | "pointSize": 5, 302 | "scaleDistribution": { 303 | "type": "linear" 304 | }, 305 | "showPoints": "auto", 306 | "spanNulls": false, 307 | "stacking": { 308 | "group": "A", 309 | "mode": "none" 310 | }, 311 | "thresholdsStyle": { 312 | "mode": "off" 313 | } 314 | }, 315 | "mappings": [], 316 | "thresholds": { 317 | "mode": "absolute", 318 | "steps": [ 319 | { 320 | "color": "green", 321 | "value": null 322 | }, 323 | { 324 | "color": "red", 325 | "value": 80 326 | } 327 | ] 328 | } 329 | }, 330 | "overrides": [] 331 | }, 332 | "gridPos": { 333 | "h": 8, 334 | "w": 12, 335 | "x": 12, 336 | "y": 8 337 | }, 338 | "id": 7, 339 | "options": { 340 | "legend": { 341 | "calcs": [], 342 | "displayMode": "list", 343 | "placement": "bottom", 344 | "showLegend": true 345 | }, 346 | "tooltip": { 347 | "hideZeros": false, 348 | "mode": "single", 349 | "sort": "none" 350 | } 351 | }, 352 | "pluginVersion": "11.5.2", 353 | "targets": [ 354 | { 355 | "datasource": { 356 | "type": "prometheus", 357 | "uid": "${DS_PROMETHEUS}" 358 | }, 359 | "disableTextWrap": false, 360 | "editorMode": "builder", 361 | "expr": "nv_inference_compute_output_duration_us", 362 | "fullMetaSearch": false, 363 | "includeNullMetadata": true, 364 | "instant": false, 365 | "legendFormat": "__auto", 366 | "range": true, 367 | "refId": "A", 368 | "useBackend": false 369 | } 370 | ], 371 | "title": "Время аутпута", 372 | "type": "timeseries" 373 | }, 374 | { 375 | "datasource": { 376 | "type": "prometheus", 377 | "uid": "${DS_PROMETHEUS}" 378 | }, 379 | "fieldConfig": { 380 | "defaults": { 381 | "color": { 382 | "mode": "palette-classic" 383 | }, 384 | "custom": { 385 | "axisBorderShow": false, 386 | "axisCenteredZero": false, 387 | "axisColorMode": "text", 388 | "axisLabel": "", 389 | "axisPlacement": "auto", 390 | "barAlignment": 0, 391 | "barWidthFactor": 0.6, 392 | "drawStyle": "line", 393 | "fillOpacity": 0, 394 | "gradientMode": "none", 395 | "hideFrom": { 396 | "legend": false, 397 | "tooltip": false, 398 | "viz": false 399 | }, 400 | "insertNulls": false, 401 | "lineInterpolation": "linear", 402 | "lineWidth": 1, 403 | "pointSize": 5, 404 | "scaleDistribution": { 405 | "type": "linear" 406 | }, 407 | "showPoints": "auto", 408 | "spanNulls": false, 409 | "stacking": { 410 | "group": "A", 411 | "mode": "none" 412 | }, 413 | "thresholdsStyle": { 414 | "mode": "off" 415 | } 416 | }, 417 | "mappings": [], 418 | "thresholds": { 419 | "mode": "absolute", 420 | "steps": [ 421 | { 422 | "color": "green", 423 | "value": null 424 | }, 425 | { 426 | "color": "red", 427 | "value": 80 428 | } 429 | ] 430 | } 431 | }, 432 | "overrides": [] 433 | }, 434 | "gridPos": { 435 | "h": 8, 436 | "w": 12, 437 | "x": 0, 438 | "y": 16 439 | }, 440 | "id": 5, 441 | "options": { 442 | "legend": { 443 | "calcs": [], 444 | "displayMode": "list", 445 | "placement": "bottom", 446 | "showLegend": true 447 | }, 448 | "tooltip": { 449 | "hideZeros": false, 450 | "mode": "single", 451 | "sort": "none" 452 | } 453 | }, 454 | "pluginVersion": "11.5.2", 455 | "targets": [ 456 | { 457 | "datasource": { 458 | "type": "prometheus", 459 | "uid": "${DS_PROMETHEUS}" 460 | }, 461 | "disableTextWrap": false, 462 | "editorMode": "builder", 463 | "expr": "nv_inference_compute_infer_duration_us", 464 | "fullMetaSearch": false, 465 | "includeNullMetadata": true, 466 | "instant": false, 467 | "legendFormat": "__auto", 468 | "range": true, 469 | "refId": "A", 470 | "useBackend": false 471 | } 472 | ], 473 | "title": "Время инференса (forward pass)", 474 | "type": "timeseries" 475 | }, 476 | { 477 | "collapsed": false, 478 | "gridPos": { 479 | "h": 1, 480 | "w": 24, 481 | "x": 0, 482 | "y": 24 483 | }, 484 | "id": 8, 485 | "panels": [], 486 | "title": "Аналитика запросов", 487 | "type": "row" 488 | }, 489 | { 490 | "datasource": { 491 | "type": "prometheus", 492 | "uid": "${DS_PROMETHEUS}" 493 | }, 494 | "fieldConfig": { 495 | "defaults": { 496 | "color": { 497 | "mode": "palette-classic" 498 | }, 499 | "custom": { 500 | "axisBorderShow": false, 501 | "axisCenteredZero": false, 502 | "axisColorMode": "text", 503 | "axisLabel": "", 504 | "axisPlacement": "auto", 505 | "barAlignment": 0, 506 | "barWidthFactor": 0.6, 507 | "drawStyle": "line", 508 | "fillOpacity": 0, 509 | "gradientMode": "none", 510 | "hideFrom": { 511 | "legend": false, 512 | "tooltip": false, 513 | "viz": false 514 | }, 515 | "insertNulls": false, 516 | "lineInterpolation": "linear", 517 | "lineWidth": 1, 518 | "pointSize": 5, 519 | "scaleDistribution": { 520 | "type": "linear" 521 | }, 522 | "showPoints": "auto", 523 | "spanNulls": false, 524 | "stacking": { 525 | "group": "A", 526 | "mode": "none" 527 | }, 528 | "thresholdsStyle": { 529 | "mode": "off" 530 | } 531 | }, 532 | "mappings": [], 533 | "thresholds": { 534 | "mode": "absolute", 535 | "steps": [ 536 | { 537 | "color": "green", 538 | "value": null 539 | }, 540 | { 541 | "color": "red", 542 | "value": 80 543 | } 544 | ] 545 | } 546 | }, 547 | "overrides": [] 548 | }, 549 | "gridPos": { 550 | "h": 8, 551 | "w": 12, 552 | "x": 0, 553 | "y": 25 554 | }, 555 | "id": 11, 556 | "options": { 557 | "legend": { 558 | "calcs": [], 559 | "displayMode": "list", 560 | "placement": "bottom", 561 | "showLegend": true 562 | }, 563 | "tooltip": { 564 | "hideZeros": false, 565 | "mode": "single", 566 | "sort": "none" 567 | } 568 | }, 569 | "pluginVersion": "11.5.2", 570 | "targets": [ 571 | { 572 | "datasource": { 573 | "type": "prometheus", 574 | "uid": "${DS_PROMETHEUS}" 575 | }, 576 | "disableTextWrap": false, 577 | "editorMode": "builder", 578 | "expr": "nv_inference_exec_count", 579 | "fullMetaSearch": false, 580 | "includeNullMetadata": true, 581 | "instant": false, 582 | "legendFormat": "__auto", 583 | "range": true, 584 | "refId": "A", 585 | "useBackend": false 586 | } 587 | ], 588 | "title": "Сколько раз обращались к модели (amount/batch_size)", 589 | "type": "timeseries" 590 | }, 591 | { 592 | "datasource": { 593 | "type": "prometheus", 594 | "uid": "${DS_PROMETHEUS}" 595 | }, 596 | "fieldConfig": { 597 | "defaults": { 598 | "color": { 599 | "mode": "palette-classic" 600 | }, 601 | "custom": { 602 | "axisBorderShow": false, 603 | "axisCenteredZero": false, 604 | "axisColorMode": "text", 605 | "axisLabel": "", 606 | "axisPlacement": "auto", 607 | "barAlignment": 0, 608 | "barWidthFactor": 0.6, 609 | "drawStyle": "line", 610 | "fillOpacity": 0, 611 | "gradientMode": "none", 612 | "hideFrom": { 613 | "legend": false, 614 | "tooltip": false, 615 | "viz": false 616 | }, 617 | "insertNulls": false, 618 | "lineInterpolation": "linear", 619 | "lineWidth": 1, 620 | "pointSize": 5, 621 | "scaleDistribution": { 622 | "type": "linear" 623 | }, 624 | "showPoints": "auto", 625 | "spanNulls": false, 626 | "stacking": { 627 | "group": "A", 628 | "mode": "none" 629 | }, 630 | "thresholdsStyle": { 631 | "mode": "off" 632 | } 633 | }, 634 | "mappings": [], 635 | "thresholds": { 636 | "mode": "absolute", 637 | "steps": [ 638 | { 639 | "color": "green", 640 | "value": null 641 | }, 642 | { 643 | "color": "red", 644 | "value": 80 645 | } 646 | ] 647 | } 648 | }, 649 | "overrides": [] 650 | }, 651 | "gridPos": { 652 | "h": 8, 653 | "w": 12, 654 | "x": 12, 655 | "y": 25 656 | }, 657 | "id": 3, 658 | "options": { 659 | "legend": { 660 | "calcs": [], 661 | "displayMode": "list", 662 | "placement": "bottom", 663 | "showLegend": true 664 | }, 665 | "tooltip": { 666 | "hideZeros": false, 667 | "mode": "single", 668 | "sort": "none" 669 | } 670 | }, 671 | "pluginVersion": "11.5.2", 672 | "targets": [ 673 | { 674 | "datasource": { 675 | "type": "prometheus", 676 | "uid": "${DS_PROMETHEUS}" 677 | }, 678 | "disableTextWrap": false, 679 | "editorMode": "builder", 680 | "expr": "nv_inference_count", 681 | "fullMetaSearch": false, 682 | "includeNullMetadata": true, 683 | "instant": false, 684 | "legendFormat": "__auto", 685 | "range": true, 686 | "refId": "A", 687 | "useBackend": false 688 | } 689 | ], 690 | "title": "Число инференсов (число прогнанных кадров)", 691 | "type": "timeseries" 692 | }, 693 | { 694 | "datasource": { 695 | "type": "prometheus", 696 | "uid": "${DS_PROMETHEUS}" 697 | }, 698 | "fieldConfig": { 699 | "defaults": { 700 | "color": { 701 | "mode": "palette-classic" 702 | }, 703 | "custom": { 704 | "axisBorderShow": false, 705 | "axisCenteredZero": false, 706 | "axisColorMode": "text", 707 | "axisLabel": "", 708 | "axisPlacement": "auto", 709 | "barAlignment": 0, 710 | "barWidthFactor": 0.6, 711 | "drawStyle": "line", 712 | "fillOpacity": 0, 713 | "gradientMode": "none", 714 | "hideFrom": { 715 | "legend": false, 716 | "tooltip": false, 717 | "viz": false 718 | }, 719 | "insertNulls": false, 720 | "lineInterpolation": "linear", 721 | "lineWidth": 1, 722 | "pointSize": 5, 723 | "scaleDistribution": { 724 | "type": "linear" 725 | }, 726 | "showPoints": "auto", 727 | "spanNulls": false, 728 | "stacking": { 729 | "group": "A", 730 | "mode": "none" 731 | }, 732 | "thresholdsStyle": { 733 | "mode": "off" 734 | } 735 | }, 736 | "mappings": [], 737 | "thresholds": { 738 | "mode": "absolute", 739 | "steps": [ 740 | { 741 | "color": "green", 742 | "value": null 743 | }, 744 | { 745 | "color": "red", 746 | "value": 80 747 | } 748 | ] 749 | } 750 | }, 751 | "overrides": [] 752 | }, 753 | "gridPos": { 754 | "h": 8, 755 | "w": 12, 756 | "x": 0, 757 | "y": 33 758 | }, 759 | "id": 4, 760 | "options": { 761 | "legend": { 762 | "calcs": [], 763 | "displayMode": "list", 764 | "placement": "bottom", 765 | "showLegend": true 766 | }, 767 | "tooltip": { 768 | "hideZeros": false, 769 | "mode": "single", 770 | "sort": "none" 771 | } 772 | }, 773 | "pluginVersion": "11.5.2", 774 | "targets": [ 775 | { 776 | "datasource": { 777 | "type": "prometheus", 778 | "uid": "${DS_PROMETHEUS}" 779 | }, 780 | "disableTextWrap": false, 781 | "editorMode": "builder", 782 | "expr": "nv_inference_request_success", 783 | "fullMetaSearch": false, 784 | "includeNullMetadata": true, 785 | "instant": false, 786 | "legendFormat": "__auto", 787 | "range": true, 788 | "refId": "A", 789 | "useBackend": false 790 | } 791 | ], 792 | "title": "Число успешных запросов по апи", 793 | "type": "timeseries" 794 | }, 795 | { 796 | "datasource": { 797 | "type": "prometheus", 798 | "uid": "${DS_PROMETHEUS}" 799 | }, 800 | "fieldConfig": { 801 | "defaults": { 802 | "color": { 803 | "mode": "palette-classic" 804 | }, 805 | "custom": { 806 | "axisBorderShow": false, 807 | "axisCenteredZero": false, 808 | "axisColorMode": "text", 809 | "axisLabel": "", 810 | "axisPlacement": "auto", 811 | "barAlignment": 0, 812 | "barWidthFactor": 0.6, 813 | "drawStyle": "line", 814 | "fillOpacity": 0, 815 | "gradientMode": "none", 816 | "hideFrom": { 817 | "legend": false, 818 | "tooltip": false, 819 | "viz": false 820 | }, 821 | "insertNulls": false, 822 | "lineInterpolation": "linear", 823 | "lineWidth": 1, 824 | "pointSize": 5, 825 | "scaleDistribution": { 826 | "type": "linear" 827 | }, 828 | "showPoints": "auto", 829 | "spanNulls": false, 830 | "stacking": { 831 | "group": "A", 832 | "mode": "none" 833 | }, 834 | "thresholdsStyle": { 835 | "mode": "off" 836 | } 837 | }, 838 | "mappings": [], 839 | "thresholds": { 840 | "mode": "absolute", 841 | "steps": [ 842 | { 843 | "color": "green", 844 | "value": null 845 | }, 846 | { 847 | "color": "red", 848 | "value": 80 849 | } 850 | ] 851 | } 852 | }, 853 | "overrides": [] 854 | }, 855 | "gridPos": { 856 | "h": 8, 857 | "w": 12, 858 | "x": 12, 859 | "y": 33 860 | }, 861 | "id": 9, 862 | "options": { 863 | "legend": { 864 | "calcs": [], 865 | "displayMode": "list", 866 | "placement": "bottom", 867 | "showLegend": true 868 | }, 869 | "tooltip": { 870 | "hideZeros": false, 871 | "mode": "single", 872 | "sort": "none" 873 | } 874 | }, 875 | "pluginVersion": "11.5.2", 876 | "targets": [ 877 | { 878 | "datasource": { 879 | "type": "prometheus", 880 | "uid": "${DS_PROMETHEUS}" 881 | }, 882 | "disableTextWrap": false, 883 | "editorMode": "builder", 884 | "expr": "nv_inference_request_failure", 885 | "fullMetaSearch": false, 886 | "includeNullMetadata": true, 887 | "instant": false, 888 | "legendFormat": "__auto", 889 | "range": true, 890 | "refId": "A", 891 | "useBackend": false 892 | } 893 | ], 894 | "title": "Число падений запросов", 895 | "type": "timeseries" 896 | }, 897 | { 898 | "datasource": { 899 | "type": "prometheus", 900 | "uid": "${DS_PROMETHEUS}" 901 | }, 902 | "fieldConfig": { 903 | "defaults": { 904 | "color": { 905 | "mode": "palette-classic" 906 | }, 907 | "custom": { 908 | "axisBorderShow": false, 909 | "axisCenteredZero": false, 910 | "axisColorMode": "text", 911 | "axisLabel": "", 912 | "axisPlacement": "auto", 913 | "barAlignment": 0, 914 | "barWidthFactor": 0.6, 915 | "drawStyle": "line", 916 | "fillOpacity": 18, 917 | "gradientMode": "none", 918 | "hideFrom": { 919 | "legend": false, 920 | "tooltip": false, 921 | "viz": false 922 | }, 923 | "insertNulls": false, 924 | "lineInterpolation": "linear", 925 | "lineStyle": { 926 | "fill": "solid" 927 | }, 928 | "lineWidth": 1, 929 | "pointSize": 5, 930 | "scaleDistribution": { 931 | "type": "linear" 932 | }, 933 | "showPoints": "auto", 934 | "spanNulls": false, 935 | "stacking": { 936 | "group": "A", 937 | "mode": "none" 938 | }, 939 | "thresholdsStyle": { 940 | "mode": "off" 941 | } 942 | }, 943 | "mappings": [], 944 | "thresholds": { 945 | "mode": "absolute", 946 | "steps": [ 947 | { 948 | "color": "green", 949 | "value": null 950 | }, 951 | { 952 | "color": "red", 953 | "value": 80 954 | } 955 | ] 956 | } 957 | }, 958 | "overrides": [] 959 | }, 960 | "gridPos": { 961 | "h": 7, 962 | "w": 12, 963 | "x": 0, 964 | "y": 41 965 | }, 966 | "id": 14, 967 | "options": { 968 | "legend": { 969 | "calcs": [], 970 | "displayMode": "list", 971 | "placement": "bottom", 972 | "showLegend": true 973 | }, 974 | "tooltip": { 975 | "hideZeros": false, 976 | "mode": "single", 977 | "sort": "none" 978 | } 979 | }, 980 | "pluginVersion": "11.5.2", 981 | "targets": [ 982 | { 983 | "editorMode": "code", 984 | "exemplar": true, 985 | "expr": "sum by (model,version) (rate(nv_inference_count{job=\"triton\"}[10s])/rate(nv_inference_exec_count{job=\"triton\"}[10s]) )", 986 | "legendFormat": "{{model}}-{{version}}", 987 | "range": true, 988 | "refId": "A", 989 | "datasource": { 990 | "type": "prometheus", 991 | "uid": "${DS_PROMETHEUS}" 992 | } 993 | } 994 | ], 995 | "title": "Размер батча", 996 | "type": "timeseries" 997 | }, 998 | { 999 | "datasource": { 1000 | "type": "prometheus", 1001 | "uid": "${DS_PROMETHEUS}" 1002 | }, 1003 | "fieldConfig": { 1004 | "defaults": { 1005 | "color": { 1006 | "mode": "palette-classic" 1007 | }, 1008 | "custom": { 1009 | "axisBorderShow": false, 1010 | "axisCenteredZero": false, 1011 | "axisColorMode": "text", 1012 | "axisLabel": "", 1013 | "axisPlacement": "auto", 1014 | "barAlignment": 0, 1015 | "barWidthFactor": 0.6, 1016 | "drawStyle": "line", 1017 | "fillOpacity": 11, 1018 | "gradientMode": "none", 1019 | "hideFrom": { 1020 | "legend": false, 1021 | "tooltip": false, 1022 | "viz": false 1023 | }, 1024 | "insertNulls": false, 1025 | "lineInterpolation": "linear", 1026 | "lineWidth": 1, 1027 | "pointSize": 5, 1028 | "scaleDistribution": { 1029 | "type": "linear" 1030 | }, 1031 | "showPoints": "auto", 1032 | "spanNulls": false, 1033 | "stacking": { 1034 | "group": "A", 1035 | "mode": "none" 1036 | }, 1037 | "thresholdsStyle": { 1038 | "mode": "off" 1039 | } 1040 | }, 1041 | "mappings": [], 1042 | "thresholds": { 1043 | "mode": "absolute", 1044 | "steps": [ 1045 | { 1046 | "color": "green", 1047 | "value": null 1048 | }, 1049 | { 1050 | "color": "red", 1051 | "value": 80 1052 | } 1053 | ] 1054 | } 1055 | }, 1056 | "overrides": [] 1057 | }, 1058 | "gridPos": { 1059 | "h": 7, 1060 | "w": 12, 1061 | "x": 12, 1062 | "y": 41 1063 | }, 1064 | "id": 15, 1065 | "options": { 1066 | "legend": { 1067 | "calcs": [], 1068 | "displayMode": "list", 1069 | "placement": "bottom", 1070 | "showLegend": true 1071 | }, 1072 | "tooltip": { 1073 | "hideZeros": false, 1074 | "mode": "single", 1075 | "sort": "none" 1076 | } 1077 | }, 1078 | "pluginVersion": "11.5.2", 1079 | "targets": [ 1080 | { 1081 | "editorMode": "code", 1082 | "expr": "sum by (model,version) (rate(nv_inference_request_success{job=\"triton\"}[10s]))", 1083 | "legendFormat": "__auto", 1084 | "range": true, 1085 | "refId": "A", 1086 | "datasource": { 1087 | "type": "prometheus", 1088 | "uid": "${DS_PROMETHEUS}" 1089 | } 1090 | } 1091 | ], 1092 | "title": "Число запросов в секунду", 1093 | "type": "timeseries" 1094 | }, 1095 | { 1096 | "collapsed": false, 1097 | "gridPos": { 1098 | "h": 1, 1099 | "w": 24, 1100 | "x": 0, 1101 | "y": 48 1102 | }, 1103 | "id": 13, 1104 | "panels": [], 1105 | "title": "Аналитика утилизации", 1106 | "type": "row" 1107 | }, 1108 | { 1109 | "datasource": { 1110 | "type": "prometheus", 1111 | "uid": "${DS_PROMETHEUS}" 1112 | }, 1113 | "fieldConfig": { 1114 | "defaults": { 1115 | "color": { 1116 | "mode": "palette-classic" 1117 | }, 1118 | "custom": { 1119 | "axisBorderShow": false, 1120 | "axisCenteredZero": false, 1121 | "axisColorMode": "text", 1122 | "axisLabel": "", 1123 | "axisPlacement": "auto", 1124 | "barAlignment": 0, 1125 | "barWidthFactor": 0.6, 1126 | "drawStyle": "line", 1127 | "fillOpacity": 0, 1128 | "gradientMode": "none", 1129 | "hideFrom": { 1130 | "legend": false, 1131 | "tooltip": false, 1132 | "viz": false 1133 | }, 1134 | "insertNulls": false, 1135 | "lineInterpolation": "linear", 1136 | "lineWidth": 1, 1137 | "pointSize": 5, 1138 | "scaleDistribution": { 1139 | "type": "linear" 1140 | }, 1141 | "showPoints": "auto", 1142 | "spanNulls": false, 1143 | "stacking": { 1144 | "group": "A", 1145 | "mode": "none" 1146 | }, 1147 | "thresholdsStyle": { 1148 | "mode": "off" 1149 | } 1150 | }, 1151 | "mappings": [], 1152 | "thresholds": { 1153 | "mode": "absolute", 1154 | "steps": [ 1155 | { 1156 | "color": "green", 1157 | "value": null 1158 | }, 1159 | { 1160 | "color": "red", 1161 | "value": 80 1162 | } 1163 | ] 1164 | } 1165 | }, 1166 | "overrides": [] 1167 | }, 1168 | "gridPos": { 1169 | "h": 8, 1170 | "w": 12, 1171 | "x": 0, 1172 | "y": 49 1173 | }, 1174 | "id": 2, 1175 | "options": { 1176 | "legend": { 1177 | "calcs": [], 1178 | "displayMode": "list", 1179 | "placement": "bottom", 1180 | "showLegend": true 1181 | }, 1182 | "tooltip": { 1183 | "hideZeros": false, 1184 | "mode": "single", 1185 | "sort": "none" 1186 | } 1187 | }, 1188 | "pluginVersion": "11.5.2", 1189 | "targets": [ 1190 | { 1191 | "datasource": { 1192 | "type": "prometheus", 1193 | "uid": "${DS_PROMETHEUS}" 1194 | }, 1195 | "disableTextWrap": false, 1196 | "editorMode": "builder", 1197 | "expr": "nv_gpu_utilization", 1198 | "fullMetaSearch": false, 1199 | "includeNullMetadata": true, 1200 | "instant": false, 1201 | "legendFormat": "__auto", 1202 | "range": true, 1203 | "refId": "A", 1204 | "useBackend": false 1205 | } 1206 | ], 1207 | "title": "Доля GPU утилизации памяти", 1208 | "type": "timeseries" 1209 | }, 1210 | { 1211 | "datasource": { 1212 | "type": "prometheus", 1213 | "uid": "${DS_PROMETHEUS}" 1214 | }, 1215 | "fieldConfig": { 1216 | "defaults": { 1217 | "color": { 1218 | "mode": "palette-classic" 1219 | }, 1220 | "custom": { 1221 | "axisBorderShow": false, 1222 | "axisCenteredZero": false, 1223 | "axisColorMode": "text", 1224 | "axisLabel": "", 1225 | "axisPlacement": "auto", 1226 | "barAlignment": 0, 1227 | "barWidthFactor": 0.6, 1228 | "drawStyle": "line", 1229 | "fillOpacity": 0, 1230 | "gradientMode": "none", 1231 | "hideFrom": { 1232 | "legend": false, 1233 | "tooltip": false, 1234 | "viz": false 1235 | }, 1236 | "insertNulls": false, 1237 | "lineInterpolation": "linear", 1238 | "lineWidth": 1, 1239 | "pointSize": 5, 1240 | "scaleDistribution": { 1241 | "type": "linear" 1242 | }, 1243 | "showPoints": "auto", 1244 | "spanNulls": false, 1245 | "stacking": { 1246 | "group": "A", 1247 | "mode": "none" 1248 | }, 1249 | "thresholdsStyle": { 1250 | "mode": "off" 1251 | } 1252 | }, 1253 | "mappings": [], 1254 | "thresholds": { 1255 | "mode": "absolute", 1256 | "steps": [ 1257 | { 1258 | "color": "green", 1259 | "value": null 1260 | }, 1261 | { 1262 | "color": "red", 1263 | "value": 80 1264 | } 1265 | ] 1266 | } 1267 | }, 1268 | "overrides": [] 1269 | }, 1270 | "gridPos": { 1271 | "h": 8, 1272 | "w": 12, 1273 | "x": 12, 1274 | "y": 49 1275 | }, 1276 | "id": 1, 1277 | "options": { 1278 | "legend": { 1279 | "calcs": [], 1280 | "displayMode": "list", 1281 | "placement": "bottom", 1282 | "showLegend": true 1283 | }, 1284 | "tooltip": { 1285 | "hideZeros": false, 1286 | "mode": "single", 1287 | "sort": "none" 1288 | } 1289 | }, 1290 | "pluginVersion": "11.5.2", 1291 | "targets": [ 1292 | { 1293 | "datasource": { 1294 | "type": "prometheus", 1295 | "uid": "${DS_PROMETHEUS}" 1296 | }, 1297 | "disableTextWrap": false, 1298 | "editorMode": "builder", 1299 | "expr": "nv_energy_consumption", 1300 | "fullMetaSearch": false, 1301 | "includeNullMetadata": true, 1302 | "instant": false, 1303 | "legendFormat": "__auto", 1304 | "range": true, 1305 | "refId": "A", 1306 | "useBackend": false 1307 | } 1308 | ], 1309 | "title": "GPU потребление энергии", 1310 | "type": "timeseries" 1311 | } 1312 | ], 1313 | "refresh": "5s", 1314 | "schemaVersion": 40, 1315 | "tags": [], 1316 | "templating": { 1317 | "list": [] 1318 | }, 1319 | "time": { 1320 | "from": "now-5m", 1321 | "to": "now" 1322 | }, 1323 | "timepicker": {}, 1324 | "timezone": "", 1325 | "title": "Тритон метрики", 1326 | "uid": "e11dcbe0-07e4-47cd-a3d6-806f3f867550", 1327 | "version": 1, 1328 | "weekStart": "" 1329 | } --------------------------------------------------------------------------------