Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде Ultralytics YOLOv8
рд╡рд╣реА Triton Inference Server (рдкреВрд░реНрд╡ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ TensorRT рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░) рдХрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ? NVIDIA. рдпрд╣ рдПрдХ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдорд╛рди рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ NVIDIA рдЬреАрдкреАрдпреВред Triton рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдПрдЖрдИ рдореЙрдбрд▓ рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдПрдХреАрдХрд░рдг Ultralytics YOLOv8 рдХреЗ рд╕рд╛рде Triton Inference Server рдЖрдкрдХреЛ рд╕реНрдХреЗрд▓реЗрдмрд▓, рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдорд╛рди рд╡рд░реНрдХрд▓реЛрдб рдХреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдПрдХреАрдХрд░рдг рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ.
рд╕рддрд░реНрдХрддрд╛: рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ред
рдХреНрдпрд╛ рд╣реИ Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░?
Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ AI рдореЙрдбрд▓ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЧрд╣рд░реА рд╢рд┐рдХреНрд╖рд╛ рдФрд░ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ TensorFlow, PyTorch, ONNX рд░рдирдЯрд╛рдЗрдо, рдФрд░ рдХрдИ рдЕрдиреНрдпред рдЗрд╕рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ:
- рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ред
- рд╕рд░реНрд╡рд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдЧрддрд┐рд╢реАрд▓ рдореЙрдбрд▓ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдирд▓реЛрдбрд┐рдВрдЧред
- рдЕрдиреБрдорд╛рди, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- A/B рдкрд░реАрдХреНрд╖рдг рдФрд░ рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдгред
рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ рд╣реИрдВ:
- рдЖрдкрдХреА рдорд╢реАрди рдкрд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
- рдкрджрд╛рд╕реАрди рдХрд░рдирд╛
tritonclient
:
рдирд┐рд░реНрдпрд╛рдд YOLOv8 рддрдХ ONNX рдкреНрд░рд╛рд░реВрдк
рдореЙрдбрд▓ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Triton, рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ONNX рдкреНрд░рд╛рд░реВрдкред ONNX (рдУрдкрди рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ) рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ export
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ YOLO
рдХрдХреНрд╖рд╛:
from ultralytics import YOLO
# Load a model
model = YOLO("yolov8n.pt") # load an official model
# Export the model
onnx_file = model.export(format="onnx", dynamic=True)
рд╕реНрдерд╛рдкрдирд╛ Triton рдореЙрдбрд▓ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
рд╡рд╣реА Triton рдореЙрдбрд▓ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдПрдХ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ Triton рдореЙрдбрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдФрд░ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
-
рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдБ:
-
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ ONNX рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ Triton рдХреЛрд╖:
рднрд╛рдЧрдирд╛ Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░
рдЪрд▓рд╛рдПрдБ Triton рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░:
import contextlib
import subprocess
import time
from tritonclient.http import InferenceServerClient
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:23.09-py3" # 6.4 GB
# Pull the image
subprocess.call(f"docker pull {tag}", shell=True)
# Run the Triton server and capture the container ID
container_id = (
subprocess.check_output(
f"docker run -d --rm -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
shell=True,
)
.decode("utf-8")
.strip()
)
# Wait for the Triton server to start
triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False)
# Wait until model is ready
for _ in range(10):
with contextlib.suppress(Exception):
assert triton_client.is_model_ready(model_name)
break
time.sleep(1)
рдлрд┐рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдорд╛рди рдЪрд▓рд╛рдПрдВ Triton рд╕рд░реНрд╡рд░ рдореЙрдбрд▓:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВ:
# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)
рдЙрдкрд░реЛрдХреНрдд рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ, рдЖрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ Ultralytics YOLOv8 рдореЙрдбрд▓ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЪрд╛рд▓реВ Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░, рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдФрд░ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЖрдкрдХреЗ рдФрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рджреЗрдЦреЗрдВ рдЕрдлрд╝рд╕рд░ Triton рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рддрдХ рдкрд╣реБрдВрдЪреЗрдВ Ultralytics рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рд╕рдореБрджрд╛рдпред
рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди
рдореИрдВ рдХреИрд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░реВрдБ Ultralytics YOLOv8 рдХреЗ рд╕рд╛рде NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░?
рд╕реНрдерд╛рдкрдирд╛ Ultralytics YOLOv8 рдХреЗ рд╕рд╛рде NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
-
рдирд┐рд░реНрдпрд╛рддрд┐рдд рдорд╛рд▓ YOLOv8 рддрдХ ONNX рдкреНрд░рд╛рд░реВрдк:
-
рддреИрдпрд╛рд░ рдХрд░рдирд╛ Triton рдореЙрдбрд▓ рднрдВрдбрд╛рд░:
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True) Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") (triton_model_path / "config.pbtxt").touch()
-
рдЪрд▓рд╛рдПрдБ Triton рд╕рд░реНрд╡рд░:
import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:23.09-py3" subprocess.call(f"docker pull {tag}", shell=True) container_id = ( subprocess.check_output( f"docker run -d --rm -v {triton_repo_path}/models -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ) .decode("utf-8") .strip() ) triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False) for _ in range(10): with contextlib.suppress(Exception): assert triton_client.is_model_ready(model_name) break time.sleep(1)
рдпрд╣ рд╕реЗрдЯрдЕрдк рдЖрдкрдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ YOLOv8 рдкреИрдорд╛рдиреЗ рдкрд░ рдореЙрдбрд▓ Triton рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдПрдЖрдИ рдореЙрдбрд▓ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ред
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ Ultralytics YOLOv8 рдХреЗ рд╕рд╛рде NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдкреНрд░рд╕реНрддрд╛рд╡?
рдПрдХреАрдХрд░рдг Ultralytics YOLOv8 рдХреЗ рд╕рд╛рде NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдХрдИ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рд╕реНрдХреЗрд▓реЗрдмрд▓ AI рдЕрдиреБрдорд╛рди: Triton рдПрдХ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЧрддрд┐рд╢реАрд▓ рдореЙрдбрд▓ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдирд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╡рд┐рд╡рд┐рдз рдПрдЖрдИ рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди: рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд NVIDIA рдЬреАрдкреАрдпреВ, Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдЙрдЪреНрдЪ рдЧрддрд┐ рдЕрдиреБрдорд╛рди рд╕рдВрдЪрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред
- рдкрд╣рдирд╛рд╡рд╛ рдФрд░ рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдг: Tritonрдкрд╣рдирд╛рд╡рд╛ рдореЛрдб рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдг A/B рдкрд░реАрдХреНрд╖рдг рдФрд░ рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП YOLOv8 рдХреЗ рд╕рд╛рде Triton, рдЖрдк рд╕реЗрдЯрдЕрдк рдЧрд╛рдЗрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЕрдкрдирд╛ рдирд┐рд░реНрдпрд╛рдд рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП YOLOv8 рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ ONNX рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╛рд░реВрдк Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░?
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ONNX (рдУрдкрди рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ) рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк Ultralytics YOLOv8 рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЙрдбрд▓ NVIDIA Triton Inference Server рдХрдИ рдкреНрд░рдореБрдЦ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА: ONNX рдкреНрд░рд╛рд░реВрдк рд╡рд┐рднрд┐рдиреНрди рдЧрд╣рди рд╢рд┐рдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ PyTorch, TensorFlow), рд╡реНрдпрд╛рдкрдХ рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ред
- рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди: рдХрдИ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рд╡реЗрд╢, рдЬрд┐рдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Triton, рдХреЗ рд▓рд┐рдП рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВ ONNX, рддреЗрдЬреА рд╕реЗ рдЕрдиреБрдорд╛рди рдФрд░ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ред
- рддреИрдирд╛рддреА рдореЗрдВ рдЖрд╕рд╛рдиреА: ONNX рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реБрдП, рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред
рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
onnx_file = model.export(format="onnx", dynamic=True)
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдирд┐рд░реНрдпрд╛рдд рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдореИрдВ Ultralytics YOLOv8 рдореЙрдбрд▓ рдСрди Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░?
рд╣рд╛рдВ, рдЖрдк Ultralytics YOLOv8 рдореЙрдбрд▓ рдСрди NVIDIA Triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ред рдПрдХ рдмрд╛рд░ рдЖрдкрдХрд╛ рдореЙрдбрд▓ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж Triton рдореЙрдбрд▓ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдФрд░ рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдкрд░ рдЕрдиреБрдорд╛рди рд▓реЛрдб рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд╣рди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП Triton рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде YOLOv8, рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ рднрд╛рдЧрдирд╛ triton рдЕрдиреБрдорд╛рди рд╕рд░реНрд╡рд░ рдЕрдиреБрднрд╛рдЧред
рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ Ultralytics YOLOv8 рд╕реЗ рддреБрд▓рдирд╛ рдХрд░реЗрдВ TensorFlow рдФрд░ PyTorch рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓?
Ultralytics YOLOv8 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЕрджреНрд╡рд┐рддреАрдп рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ TensorFlow рдФрд░ PyTorch рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓:
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд╕реНрддреБ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд, YOLOv8 рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЗрд╡ рд╡реАрдбрд┐рдпреЛ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдмрдирд╛рддрд╛ рд╣реИред
- рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА: YOLOv8 рдХреЗ рд╕рд╛рде рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ Triton Inference Server рдФрд░ рд╡рд┐рд╡рд┐рдз рдирд┐рд░реНрдпрд╛рдд рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (ONNX, TensorRT, CoreML), рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИред
- рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ: YOLOv8 рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЙрдбрд▓ рд▓реЛрдбрд┐рдВрдЧ, рдореЙрдбрд▓ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдФрд░ рдПрдирд╕реЗрдВрдмрд▓ рдЗрдирдлрд░реЗрдВрд╕ рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдЖрдИ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ.
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ 2023-11-12, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-07-05
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (10)