BLOG
AWS는 지속적으로 GPU 오퍼링을 개발해 AWS 파트너들이 이룬 기술 개선으로 어떻게 플랫폼 성능을 발전시킬 수 있는지 보여주고자 노력합니다.
이에 대한 일환으로 AWS와 NVIDIA의 협업 결과를 예를 들 수 있는데요. 바로 G2 및 G3에서 기술 업데이트된 G4 인스턴스 유형의 출시입니다. G4는 16GB GPU 메모리를 가진 Turing T4 GPU를 특징으로 하며, 노드 당 하나의 GPU에서 4개의 GPU로 Nitro 하이퍼 바이저에서 제공됩니다. 베어 메탈 옵션은 앞으로 몇 달 안에 출시 될 예정으로 최대 1.8TB의 로컬 비 휘발성 메모리 익스프레스 (NVMe) 스토리지와 최대 100Gbps의 네트워크 대역폭을 포함합니다.
Turing T4는 NVIDIA의 최신 제품으로 ML(machine learning) 교육 및 추론, 비디오 트랜스 코딩 및 기타 컴퓨팅 집약적 워크로드를 가속화합니다. 이렇게 다양한 최적화된 지시문을 사용하여 이제 단일 인스턴스 제품군에서 다양한 가속 컴퓨팅 워크로드를 수행할 수 있습니다.
엔비디아는 또한 엔비디아 GPU 클라우드(NGC) 컨테이너 레지스트리를 통해 SDK 및 컨테이너 솔루션 형태로 강력하고 성능이 뛰어난 소프트웨어 계층을 제공하는 데 앞장 섰습니다. 이렇게 가속화된 구성 요소는 AWS 탄력성 및 규모와 결합되어 AWS의 성능 파이프 라인을 위한 강력한 결합체가 됩니다.
NVIDIA DeepStream SDK
오늘은 이러한 NVIDIA SDK 중 하나인 DeepStream 을 중점적으로 다루어 보겠습니다.
DeepStream SDK는 엔드 투 엔드 비디오 처리 및 ML 추론 분석 솔루션을 제공하도록 제작되었습니다. Video Codec API 및 TensorRT를 주요 구성 요소로 사용합니다.
DeepStream은 또한 추가 처리를 위해 에지 및 기타 센서 메타 데이터에 대한 인식을 AWS로 스트리밍하기위한 엣지 클라우드 전략을 지원합니다. 예를 들어 Amazon Kinesis 플랫폼을 통한 다중 카메라 스트림 및 메타 데이터의 광역 소비가 포함 됩니다.
DeepStream을 활용할 수 있는 또 다른 클래식 워크로드는 Amazon SageMaker Neo를 사용하여 AWS의 분산 교육으로 인한 모델 아티팩트를 컴파일하는 것 입니다. 엣지 또는 Amazon S3 비디오 데이터 레이크 에서이 모델을 사용해 보십시오.
이러한 솔루션을 살펴 보려면 AWS 계정팀에 문의주시기 바랍니다.
전개
SSH 액세스를 라우팅하는 서브넷에서 Ubuntu 18.04로 g4dn.2xlarge 인스턴스 유형을 인스턴스화하도록 AWS에 프로그래밍 방식으로 액세스를 설정하십시오. 전체 스택 세부 정보에 관심이 있는 경우 DeepStream SDK 워크 플로를 실행하도록 인스턴스를 설정하려면 다음이 필요합니다.
- 우분투 18.04 인스턴스 :
- NVIDIA Turing T4 드라이버 (418.67 이상)
- CUDA 10.1
- 엔비디아 독커 2
또는 최신 드라이버 및 SDK가 포함된 AWS Marketplace에서 제공되는 NVIDIA Deep Learning AMI를 시작할 수 있습니다.
aws ec2 run–instances —region us–east–1 —image–id ami–026c8acd92718196b —instance–type g4dn.2xlarge —key–name <key–name> —subnet–id <subnet> —security–group–ids {<security–groupids>} —block–device–mappings ‘DeviceName=/dev/sda1,Ebs={VolumeSize=75}’
인스턴스가 가동되면 SSH에 연결하고 NGC 컨테이너 레지스트리에서 최신 DeepStream SDK Docker 이미지를 가져옵니다.
docker pull nvcr.io/nvidia/deepstream:4.0–19.07
nvidia–docker run –it —rm –v /usr/lib/x86_64–linux–gnu/libnvidia–encode.so:/usr/lib/x86_64–linux–gnu/libnvidia–encode.so –v /tmp/.X11–unix:/tmp/.X11–unix –p 8554:8554 –e DISPLAY=$DISPLAY nvcr.io/nvidia/deepstream: 4.0–19.07
인스턴스가 전체 X 환경을 실행중인 경우 인증 및 디스플레이를 컨테이너에 전달하여 결과를 실시간으로 볼 수 있습니다. 그러나 이 게시물에선 본래의 목적을 위해 셸에서 작업 부하만 실행합니다.
/root/deepstream_sdk_v4.0_x86_64/samples/configs/deepstream-app/폴더로 이동하십시오.
패키지에는 다음 구성 파일이 포함되어 있습니다.
- source30_1080p_resnet_dec_infer_tiled_display_int8.txt: 이 구성 파일은 기본 추론을 사용하여 30 개의 스트림 디코딩을 보여줍니다.
- source4_1080p_resnet_dec_infer_tiled_display_int8.txt: 이 구성 파일은 1 차 추론, 객체 추적 및 3 개의 다른 2 차 분류기로 4 개의 스트림 디코딩을 보여줍니다.
- source4_1080p_resnet_dec_infer_tracker_sgie_tiled_display_int8_gpu1.txt: 이 구성 파일은 GPU 1에서 기본 추론, 객체 추적 및 세 개의 다른 보조 분류기로 4 개의 스트림 디코딩을 보여줍니다.
- config_infer_primary.txt: 이 구성 파일은 nvinfer 요소를 기본 탐지기로 구성합니다.
- config_infer_secondary_carcolor.txt, config_infer_secondary_carmake.txt, config_infer_secondary_vehicletypes.txt: 이 구성 파일은 nvinfer 요소를 보조 분류기로 구성합니다.
- iou_config.txt: 이 구성 파일은 낮은 수준의 IOU (Intersection over Union) 추적기를 구성합니다.
- source1_usb_dec_infer_resnet_int8.txt: 이 구성 파일은 하나의 USB 카메라를 입력으로 보여줍니다.
SDK와 함께 다음 샘플 모델이 제공됩니다.
모델 | 모형 유형 | 수업 수 | 해결 |
1 차 검출기 | Resnet10 | 4 | 640 x 368 |
이차 자동차 색상 분류기 | 레스 넷 18 | 12 | 224 x 224 |
이차 차는 분류자를 만든다 | 레스 넷 18 | 6 | 224 x 224 |
이차 차량 유형 분류기 | 레스 넷 18 | 20 | 224 x 224 |
구성 파일 source30_1080p_dec_infer-resnet_tiled_display_int8.txt을 편집하여 파일 출력 을 비활성화 [sink0]및 활성화 [sink1]하십시오. 파일을 저장한 다음 DeepStream 샘플 코드를 실행해줍니다.
[sink0]
enable=0
#Type – 1=FakeSink 2=EglSink 3=File
type=2
[sink1]
enable=1
type=3
#1=mp4 2=mkv
container=1
#1=h264 2=h265
codec=1
sync=0
#iframeinterval=10
bitrate=2000000
output–file=out.mp4
source–id=0
deepstream–app –c source30_1080p_dec_infer–resnet_tiled_display_int8.txt
추론 워크 플로에 대한 성능 데이터를 얻습니다.
(deepstream–app:1059): GLib–GObject–WARNING **: 20:38:25.991: g_object_set_is_valid_property: object class ‘nvv4l2h264enc’ has no property named ‘bufapi-version’
Creating LL OSD context new
Runtime commands:
h: Print this help
q: Quit
p: Pause
r: Resume
NOTE: To expand a source in the 2D tiled display and view object details, left–click on the source.
To go back to the tiled display, right–click anywhere on the window.
** INFO: <bus_callback:163>: Pipeline ready
Creating LL OSD context new
** INFO: <bus_callback:149>: Pipeline running
**PERF: FPS 0 (Avg) FPS 1 (Avg) FPS 2 (Avg) FPS 3 (Avg) FPS 4 (Avg) FPS 5 (Avg) FPS 6 (Avg) FPS 7 (Avg) FPS 8 (Avg) FPS 9 (Avg) FPS 10 (Avg) FPS 11 (Avg) FPS 12 (Avg) FPS 13 (Avg) FPS 14 (Avg) FPS 15 (Avg) FPS 16 (Avg) FPS 17 (Avg) FPS 18 (Avg) FPS 19 (Avg) FPS 20 (Avg) FPS 21 (Avg) FPS 22 (Avg) FPS 23 (Avg) FPS 24 (Avg) FPS 25 (Avg) FPS 26 (Avg) FPS 27 (Avg) FPS 28 (Avg) FPS 29 (Avg)
**PERF: 35.02 (35.02) 37.92 (37.92) 37.93 (37.93) 35.85 (35.85) 36.39 (36.39) 38.40 (38.40) 35.85 (35.85) 35.18 (35.18) 35.60 (35.60) 35.02 (35.02) 38.77 (38.77) 37.71 (37.71) 35.18 (35.18) 38.60 (38.60) 38.40 (38.40) 38.60 (38.60) 34.77 (34.77) 37.70 (37.70) 35.97 (35.97) 37.00 (37.00) 35.51 (35.51) 38.40 (38.40) 38.60 (38.60) 38.40 (38.40) 38.13 (38.13) 37.70 (37.70) 35.85 (35.85) 35.97 (35.97) 37.92 (37.92) 37.92 (37.92)
**PERF: 39.10 (37.76) 38.90 (38.60) 38.70 (38.47) 38.70 (37.78) 38.90 (38.10) 38.90 (38.75) 39.10 (38.05) 38.70 (37.55) 39.10 (37.96) 39.10 (37.76) 39.10 (39.00) 39.10 (38.68) 39.10 (37.83) 39.10 (38.95) 39.10 (38.89) 39.10 (38.95) 38.90 (37.55) 38.70 (38.39) 38.90 (37.96) 38.50 (38.03) 39.10 (37.98) 38.90 (38.75) 38.30 (38.39) 38.70 (38.61) 38.90 (38.67) 39.10 (38.66) 39.10 (38.05) 39.10 (38.10) 39.10 (38.74) 38.90 (38.60)
**PERF: 38.91 (38.22) 38.71 (38.65) 39.31 (38.82) 39.31 (38.40) 39.11 (38.51) 38.91 (38.82) 39.31 (38.56) 39.31 (38.26) 39.11 (38.42) 38.51 (38.06) 38.51 (38.80) 39.31 (38.94) 39.31 (38.42) 39.11 (39.02) 37.71 (38.41) 39.31 (39.10) 39.31 (38.26) 39.31 (38.77) 39.31 (38.51) 39.31 (38.55) 39.11 (38.44) 39.31 (38.98) 39.11 (38.69) 39.31 (38.90) 39.11 (38.85) 39.31 (38.93) 39.31 (38.56) 39.31 (38.59) 39.31 (38.97) 39.31 (38.89)
**PERF: 37.56 (38.03) 38.15 (38.50) 38.35 (38.68) 38.35 (38.38) 37.76 (38.29) 38.15 (38.62) 38.35 (38.50) 37.56 (38.06) 38.15 (38.35) 37.76 (37.97) 37.96 (38.55) 38.35 (38.77) 38.35 (38.40) 37.56 (38.59) 38.35 (38.39) 37.96 (38.77) 36.96 (37.88) 38.35 (38.65) 38.15 (38.41) 38.35 (38.49) 38.35 (38.41) 38.35 (38.80) 37.96 (38.47) 37.96 (38.62) 37.56 (38.47) 37.56 (38.53) 38.15 (38.44) 38.35 (38.52) 38.35 (38.79) 38.35 (38.73)
**PERF: 40.71 (38.63) 40.31 (38.91) 40.51 (39.09) 40.90 (38.95) 39.91 (38.65) 40.90 (39.14) 40.90 (39.04) 40.51 (38.60) 40.71 (38.87) 40.51 (38.54) 40.71 (39.04) 40.90 (39.25) 40.71 (38.92) 40.90 (39.11) 40.90 (38.96) 40.90 (39.25) 40.90 (38.56) 40.90 (39.15) 40.11 (38.79) 40.90 (39.03) 40.90 (38.97) 40.90 (39.27) 40.90 (39.02) 40.90 (39.14) 39.51 (38.71) 40.90 (39.06) 40.51 (38.90) 40.71 (39.01) 40.90 (39.27) 40.90 (39.22)
**PERF: 39.46 (38.78) 39.26 (38.97) 39.46 (39.16) 39.26 (39.00) 39.26 (38.76) 39.26 (39.16) 39.06 (39.04) 39.46 (38.76) 39.46 (38.98) 39.26 (38.67) 39.46 (39.12) 39.46 (39.29) 39.26 (38.98) 39.26 (39.14) 39.26 (39.01) 38.65 (39.14) 38.45 (38.54) 39.46 (39.21) 39.46 (38.91) 39.46 (39.11) 39.26 (39.03) 39.26 (39.27) 39.46 (39.10) 39.26 (39.16) 39.26 (38.81) 39.26 (39.10) 39.06 (38.93) 39.46 (39.09) 39.06 (39.23) 39.26 (39.23)
**PERF: 39.04 (38.82) 38.84 (38.95) 38.84 (39.11) 38.84 (38.98) 38.84 (38.77) 38.64 (39.08) 39.04 (39.04) 39.04 (38.80) 39.04 (38.99) 39.04 (38.73) 38.64 (39.04) 39.04 (39.25) 38.44 (38.90) 39.04 (39.13) 38.84 (38.99) 38.44 (39.03) 39.04 (38.62) 39.04 (39.18) 38.84 (38.90) 38.84 (39.07) 37.84 (38.84) 39.04 (39.24) 39.04 (39.09) 39.04 (39.14) 38.64 (38.78) 38.64 (39.03) 39.04 (38.95) 38.84 (39.05) 38.64 (39.14) 38.24 (39.08)
** INFO: <bus_callback:186>: Received EOS. Exiting …
Quitting
App run successful
출력 비디오 파일 out.mp4은 현재 폴더 아래에 있으며 다운로드 후에 재생할 수 있습니다.
아키텍처를 더욱 확장하면 AWS Batch를 사용하여 이벤트 중심 파이프 라인을 실행할 수 있습니다.
여기서 S3의 입력 파일은 파이프 라인을 처리하기 위해 Amazon ECR가 제공한 DeepStream Docker 이미지를 가지고 있는 G4 인스턴스를 사용하고, Amazon CloudWatch 이벤트를 트리거합니다 . 추가 처리를 위해 비디오 및 ML 분석 결과를 S3으로 다시 푸시할 수 있습니다.
결론
이 기본 아키텍처를 사용하면 비디오 분석 및 ML 추론 파이프 라인을 실행할 수 있습니다. 향후 이 작업에는 Kinesis와의 통합 및 DeepStream 결과 카탈로그화도 포함될 수 있습니다. AWS에서 DeepStream 및 NVIDIA 컨테이너 스택과 함께 작동하는 법을 알아보세요.
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.