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.
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
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 modelu1
- wersja modelumodel.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
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
)
Potrzebujesz funkcji preprocess i postprocess, aby dopasować swój input i output