Przejdź do głównej zawartości

Serwer Inferencji NVIDIA Triton

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

Uwaga

Obraz Triton Inference Server jest dostępny tylko urzytkowników nvcr.io. Aby uzyskać dostęp, należy wcześniej utworzyć klucz dostępowy do repozytorium NVidii i zapisać go w CGC.

$ cgc compute create --name <name> -c <cpu_cores> -m <RAM GiB> -g <gpu_count> -gt <gpu_type> nvidia-triton --repository-secret <secret_name>

Następnie musisz zamontować swoje repozytorium modeli. Wolumin powinien być zamontowany z flagą full-path ustawioną na katalog /models.

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

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. 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 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 A5000 nvidia-triton

Następnie zamontuj swoje repozytorium modeli utworzone w poprzednim kroku. Wolumin powinien być zamontowany z flagą full-path ustawioną na katalog /models.

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

Włącz inferencje

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
triton_client = httpclient.InferenceServerClient(url=self.url, verbose=False, ssl=False)

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

# Inferencja
results = self.triton_client.infer(
model_name=self.model_name, inputs=inputs, outputs=outputs
)
Informacja

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