Przejdź do głównej zawartości

Serwer Inferencji NVIDIA Triton

Jak uruchomić NVIDIA Triton Inference Server w CGC z repozytorium modeli na wolumenie, skonfigurować model i wykonać inferencję.

Teksty pochodzą z oficjalnej strony internetowej

NVIDIA Triton™, oprogramowanie open-source do serwowania inferencji, standaryzuje wdrożenie i wykonanie modeli AI, dostarczając szybkie i skalowalne AI w środowisku produkcyjnym. Triton jest częścią NVIDIA AI Enterprise, platformy NVIDIA, która przyspiesza pipeline data science i usprawnia rozwój i wdrożenie AI w środowisku produkcyjnym.

Jak Wdrożyć Modele AI w Środowisku Produkcyjnym​

NVIDIA Triton, znany również jako NVIDIA Triton Inference Server, upraszcza i standaryzuje inferencje AI, umożliwiając zespołom wdrożenie, uruchomienie i skalowanie szkolonych modeli ML lub DL z dowolnego frameworka na dowolnej infrastrukturze opartej na GPU lub CPU. Zapewnia on badaczom AI i data science swobodę wyboru odpowiedniego frameworka dla swoich projektów, nie wpływając na wdrożenie w produkcji. Pomaga również programistom dostarczyć inferencje o wysokiej wydajności w chmurze, lokalnie, w edge i w urządzeniach wbudowanych.

Osiągnij Inferencje o wysokiej wydajności​

Triton wykonuje jednocześnie wiele modeli z tego samego lub różnych frameworków na pojedynczym GPU lub CPU. Na serwerze z wieloma GPU Triton automatycznie tworzy instancję każdego modelu na każdym GPU, aby zwiększyć wykorzystanie.

Triton optymalizuje również obsługę inferencji w czasie rzeczywistym ze ściśłymi ograniczeniami czasowymi z dynamic batching, obsługuje też batch inferencing w celu maksymalizacji wykorzystania GPU i CPU oraz zawiera wbudowaną obsługę strumieniowego wejścia audio i wideo. Triton obsługuje zespół modeli do zastosowań, które wymagają pipeline'u wielu modeli z pre- i postprocessingiem do wykonania inferencji end-to-end, takich jak AI konwersacyjne.

Modele mogą być aktualizowane na żywo w produkcji bez ponownego uruchamiania Tritona lub aplikacji. Triton umożliwia inferencje na wielu GPU, na wielu węzłach na bardzo dużych modelach, które nie mieszczą się w pamięci jednego GPU.

Triton obsługuje zestaw znanych backendów, takich jak: TensorRT, ONNX Runtime, TensorFlow, PyTorch, OpenVINO, Python, FIL, ale jest również rozszerzalny i umożliwia tworzenie własnych backendów.

triton high throughput

Uruchamianie​

NVIDIA Triton™ pozwala na równoczesne wykonywanie wielu modeli i/lub wielu instancji tego samego modelu na tym samym systemie. System może mieć zero, jedno lub wiele GPU. Nie zapomnij na początku zamontować woluminu danych z Twoimi modelami. Ilość CPU i RAMu zależy od typu i ilości wybranych GPU. Ilość RAMu powinna wynieść co najmniej RAM ⩾ sum(vRAM) + 2GB - ale pamiętaj, że to tylko zalecenia, zawsze możesz zacząć od małej ilości i rozwijać się wraz z problemem.

Dla prostej inferencji, prawdopodobnie nie będziesz potrzebować więcej niż jednego GPU A5000

Informacja

Obraz Triton Inference Server jest pobierany z NGC (nvcr.io/nvidia/tritonserver) i nie wymaga sekretu do rejestru. Dodaj --repository-secret <secret_name> tylko wtedy, gdy uruchamiasz Tritona z własnego prywatnego rejestru.

Utwórz aplikację od razu z zamontowanym repozytorium modeli. Wolumin powinien być zamontowany z flagą full-path ustawioną na katalog /models.

cgc compute create --name <name> -c <cpu_cores> -m <RAM GiB> -g <gpu_count> -gt <gpu_type> nvidia-triton -v <model_repo_name> -fp /models

Repozytorium możesz też zamontować już po utworzeniu aplikacji - aplikacja zostanie wtedy przeładowana.

cgc volume mount <model_repo_name> -t <triton_name> -fp /models
Uwaga

Dopóki repozytorium nie jest zamontowane, Triton kończy pracę błędem error: creating server: Internal - failed to stat file /models, a aplikacja restartuje się w pętli.

Domyślna konfiguracja​

Triton jest uruchamiany za pomocą polecenia mpirun z następującymi argumentami:

  • -n 1 — liczba procesów do uruchomienia
  • --allow-run-as-root — pozwala serwerowi działać jako użytkownik root

Do polecenia tritonserver są domyślnie dodawane następujące argumenty:

  • --model-repository=/models — ścieżka do repozytorium modeli

Repozytorium modeli​

Serwer inferencji Triton oczekuje specyficznego sposobu dostarczania modeli. Twój kontener model-repository powinien mieć tę strukturę:

models-repository/
└── yolov8n
├── 1
│ └── model.plan
└── config.pbtxt

Gdzie

  • yolov8n - nazwa Twojego modelu
  • 1 - wersja modelu
  • model.plan - engine utworzony z TensorRT. Inne backendy mają własną nazwę pliku i platform, na przykład model.onnx z platform: "onnxruntime_onnx". Sprawdź obsługiwane backendy tutaj. Aby uzyskać instrukcję, jak przygotować engine dla swojego modelu, odwiedź naszą sekcję Zastosowania.
  • config.pbtxt - konfiguracja Twojego modelu. Zobacz przykładową konfigurację tutaj
Uwaga

Przygotowując wolumin model-repository za pomocą Jupyter notebook, upewnij się, że nie występują dodatkowe katalogi, takie jak .Trash0 i ipynb_checkpoints. Usuń te katalogi przed zamontowaniem repozytorium w Triton Inference Server, aby uniknąć potencjalnych problemów.

Przykład​

Aby zobaczyć rozszerzoną instrukcję, odwiedź naszą sekcję Zastosowania.

Utwórz repozytorium modeli​

Najpierw musisz utworzyć i przygotować repozytorium modeli. Zacznij od utworzenia nowego woluminu.

cgc volume create -s 10 -sc <storage_class> models-repository

Następnie umieść swoje modele na swoim woluminie za pomocą filebrowser lub jednej z naszych aplikacji. Możesz zamontować ten wolumin do dowolnej liczby aplikacji. Aby zobaczyć cały proces, wejdź tutaj.

Plik konfiguracyjny​

name: "yolov8n"
platform: "tensorrt_plan"
max_batch_size: 1
input [
{
name: "images"
data_type: TYPE_FP32
dims: [ 3, 928, 928 ]
}
]
output [
{
name: "output0"
data_type: TYPE_FP32
dims: [ 6, 17661 ]
}
]

Uruchom instancję​

cgc compute create --name triton01 -c 2 -m 26 -g 1 -gt NVIDIA-RTX-A5000 nvidia-triton -v models-repository -fp /models

Jeśli utworzyłeś aplikację bez repozytorium, zamontuj je teraz - wolumin powinien być zamontowany z flagą full-path ustawioną na katalog /models. Montowanie przeładowuje aplikację.

cgc volume mount models-repository -t triton01 -fp /models

Włącz inferencje​

Triton nie ma publicznego adresu - cgc compute create wypisuje Will be accessible at: None, a cgc compute port list <triton_name> zwraca No ingress found for resource. Odpytuj go z innej aplikacji w tej samej przestrzeni nazw pod adresem <triton_name>:8000 (HTTP), <triton_name>:8001 (gRPC) lub <triton_name>:8002 (metryki Prometheus). Token aplikacji nie jest potrzebny, TLS jest wyłączony.

Najpierw zainstaluj tritonclient za pomocą pip

!pip install tritonclient[http]

Następnie wykonaj inferencje za pomocą zainstalowanego klienta

import tritonclient.http as httpclient

# Inicjalizuj klienta - triton01 to nazwa Twojej aplikacji Triton
triton_client = httpclient.InferenceServerClient(url="triton01:8000", verbose=False, ssl=False)

# Przygotuj miejsce na input i output
inputs = [
httpclient.InferInput(input_name, [*processed_image.shape], fp)
]
outputs = [httpclient.InferRequestedOutput(output_name)]
# Wstaw output
inputs[0].set_data_from_numpy(processed_image)

# Inferencja
results = triton_client.infer(
model_name=model_name, inputs=inputs, outputs=outputs
)
print(results.as_numpy(output_name))
Informacja

Potrzebujesz funkcji preprocess i postprocess, aby dopasować swój input i output