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.
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 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
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 modelu1- wersja modelumodel.plan- engine utworzony z TensorRT. Inne backendy mają własną nazwę pliku iplatform, na przykładmodel.onnxzplatform: "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
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))
Potrzebujesz funkcji preprocess i postprocess, aby dopasować swój input i output