Kubernetes에 Model Analyzer 배포

Kubernetes에 Model Analyzer 배포 (Model Analyzer on Kubernetes)

Model Analyzer는 helm 차트를 이용해 쿠버네티스 켜진(kubernetes-enabled) 클러스터에서의 배포를 지원해요. helm 차트에 대한 자세한 내용은 helm 공식 문서에서 확인할 수 있습니다.

요구사항

  • 쿠버네티스가 켜진 클러스터
  • Helm

GPU가 있는 쿠버네티스 사용하기

  • Kubernetes 설치 — NVIDIA Kubernetes 설치 문서의 단계를 따라 설치·검증·문제 해결.
  • 기본 컨테이너 런타임 설정 — 쿠버네티스는 아직 Docker 컨테이너 실행의 --gpus 옵션을 지원하지 않으므로, 모든 GPU 노드에서 nvidia 런타임을 Docker의 기본으로 등록해야 해요. NVIDIA Container Toolkit 설치 문서를 따르세요.
  • NVIDIA Device Plugin 설치 — 쿠버네티스에서 GPU를 쓰려면 NVIDIA Device Plugin도 필요합니다. 디바이스 플러그인은 워커 노드의 GPU 수를 자동으로 열거하고 파드가 그 위에서 실행되게 하는 daemonset을 제공해요. 클러스터에 디바이스 플러그인을 배포하려면 NVIDIA Device Plugin 문서를 따르세요.

Model Analyzer 배포

먼저 클러스터에 필요한 파드가 모두 배포됐는지 확인합니다.

$ kubectl get pods -A
NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-5dc87d545c-5c9sp         1/1     Running   0          21m
kube-system   calico-node-8dcn5                                1/1     Running   0          21m
kube-system   coredns-f9fd979d6-9l29n                          1/1     Running   0          36m
kube-system   coredns-f9fd979d6-mf775                          1/1     Running   0          36m
kube-system   etcd-user.nvidia.com                             1/1     Running   0          36m
kube-system   kube-apiserver-user.nvidia.com                   1/1     Running   0          36m
kube-system   kube-controller-manager-user.nvidia.com          1/1     Running   0          36m
kube-system   kube-proxy-zhpv7                                 1/1     Running   0          36m
kube-system   kube-scheduler-user.nvidia.com                   1/1     Running   0          36m
kube-system   nvidia-device-plugin-1607379880-dblhc            1/1     Running   0          11m

모델 분석기를 배포하기 전에 컨테이너가 마운트할 디렉토리를 helm-chart/values.yaml에 지정해야 해요.

# Job timeout value specified in seconds
jobTimeout: 900

## Configurations for mounting volumes

# Local path to model directory
modelPath: /home/models

# Local path export model config variants
outputModelPath: /home/output_models

# Local path to export data
resultsPath: /home/results

# Local path to store checkpoints
checkpointPath: /home/checkpoints

## Images
images:

analyzer:
image: model-analyzer

triton:
image: nvcr.io/nvidia/tritonserver
tag: 26.08-py3

모델 분석기 실행 파일은 helm-chart/templates/config-map.yaml에 정의된 config 파일을 사용합니다. 이 config로 모델 분석기에 인자를 전달할 수 있어요. 파일의 config.yaml 섹션 아래 내용만 수정해야 합니다.

apiVersion: v1
kind: ConfigMap
metadata:
name: analyzer-config
namespace: default
data:
config.yaml: |
######################
# Config for profile #
######################

override_output_model_repository: True
run_config_search_disable: True
triton_http_endpoint: localhost:8000
triton_grpc_endpoint: localhost:8001
triton_metrics_url: http://localhost:8002/metrics

concurrency: 1,2
batch_sizes: 1

profile_models:
resnet50_libtorch:
model_config_parameters:
instance_group:
-
kind: KIND_GPU
count: [1]
dynamic_batching:

######################
# Config for report #
######################

report_model_configs:
- resnet50_libtorch_i0

이제 Model Analyzer 루트 디렉토리에서 helm 차트를 배포할 수 있어요.

~/model_analyzer$ helm install model-analyzer helm-chart
NAME: model-analyzer
LAST DEPLOYED: Mon Dec  7 15:09:14 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

모델 분석기 파드가 실행 중인지 확인합니다.

~/model_analyzer$ kubectl get pods -A
NAMESPACE     NAME                                             READY   STATUS    RESTARTS   AGE
default       model-analyzer-model-analyzer-t9rsl              1/1     Running   0          23s
kube-system   calico-kube-controllers-5dc87d545c-5c9sp         1/1     Running   0          54m
...

job이 완료되면 결과를 helm-chart/values.yamlresultsPath로 전달한 디렉토리에서 찾을 수 있어요.

~/model_analyzer$ ls -l /home/results
total 12
drwxr-xr-x 4 root root 4096 Jun  2 17:00 plots
drwxr-xr-x 4 root root 4096 Jun  2 17:00 reports
drwxr-xr-x 2 root root 4096 Jun  2 17:00 results

~/model_analyzer$ cat /home/results/results/*
Model,GPU ID,Batch,Concurrency,Model Config Path,Instance Group,Preferred Batch Sizes,Satisfies Constraints,GPU Memory Usage (MB),GPU Utilization (%),GPU Power Usage (W)
resnet50_libtorch,0,1,2,resnet50_libtorch_i0,1/GPU,[32],Yes,1099.0,16.2,85.3
resnet50_libtorch,0,1,1,resnet50_libtorch_i0,1/GPU,[32],Yes,1099.0,14.4,82.2

Model,Batch,Concurrency,Model Config Path,Instance Group,Preferred Batch Sizes,Satisfies Constraints,Throughput (infer/sec),p99 Latency (ms),RAM Usage (MB)
resnet50_libtorch,1,2,resnet50_libtorch_i0,1/GPU,[32],Yes,195.0,11.0,2897.0
resnet50_libtorch,1,1,resnet50_libtorch_i0,1/GPU,[32],Yes,164.0,8.1,2937.0

Model,GPU ID,GPU Memory Usage (MB),GPU Utilization (%),GPU Power Usage (W)
triton-server,0,277.0,0.0,56.5

더 알아보기 (Learn more)