이 블로그 게시물은 Intel의 Jonathan Lee, Nelson Leung, Paul Min 및 Troy Squillaci가 공동으로 작성했습니다.
In 파트 1 이 게시물에서는 Intel®3DAT가 AWS 기계 학습 전문 서비스 (MLPS) 확장 가능한 AI SaaS 애플리케이션을 구축합니다. 3DAT는 컴퓨터 비전과 AI를 사용하여 표준 비디오에서 1,000개 이상의 생체 역학 데이터 포인트를 인식, 추적 및 분석합니다. 이를 통해 고객은 상세한 성능 데이터 및 XNUMX차원 시각화를 통해 웹 및 모바일 애플리케이션과 같은 풍부하고 강력한 생체 역학 기반 제품을 만들 수 있습니다.
이 게시물의 2부에서는 아키텍처의 각 단계에 대해 자세히 알아봅니다. 다음을 포함하여 3DAT 설계 요구 사항을 충족하는 데 사용되는 AWS 서비스를 살펴봅니다. Amazon Kinesis 데이터 스트림 및 Amazon Elastic Kubernetes 서비스 (Amazon EKS), 이 SaaS(Software as a Service) 애플리케이션에 필요한 포즈 추정 모델을 확장 가능하게 배포합니다.
아키텍처 개요
MLPS 팀의 주요 목표는 2D 및 3D 포즈 추정 모델 파이프라인을 생산하고 기능적이고 확장 가능한 애플리케이션을 만드는 것이었습니다. 다음 다이어그램은 솔루션 아키텍처를 보여줍니다.
전체 아키텍처는 다섯 가지 주요 구성 요소로 나뉩니다.
- 사용자 애플리케이션 인터페이스 계층
- 데이터베이스
- 워크플로 오케스트레이션
- 확장 가능한 포즈 추정 추론 생성
- 운영 모니터링
각 구성 요소, 구성 요소의 상호 작용 및 디자인 선택에 대한 근거에 대해 자세히 살펴보겠습니다.
사용자 애플리케이션 인터페이스 계층
다음 다이어그램은 애플리케이션과 해당 리소스에 대한 사용자 액세스 및 제어를 제공하는 애플리케이션 인터페이스 계층을 보여줍니다.
이러한 액세스 포인트는 다양한 고객 페르소나를 기반으로 다양한 사용 사례를 지원합니다. 예를 들어 애플리케이션 사용자는 CLI를 통해 작업을 제출할 수 있는 반면 개발자는 Python SDK를 사용하여 애플리케이션을 빌드하고 포즈 추정 인텔리전스를 애플리케이션에 포함할 수 있습니다. CLI 및 SDK는 모듈식 구성 요소로 구축됩니다. 두 레이어 모두 다음을 사용하여 구축된 API 레이어의 래퍼입니다. 아마존 API 게이트웨이 API 호출을 해결하고 연결된 AWS Lambda 각 API 호출과 관련된 백엔드 로직을 처리하는 함수. 이러한 계층은 이 SaaS 애플리케이션을 효과적으로 사용할 수 있는 광범위한 고객 기반을 제공하기 때문에 Intel OTG 팀에게 중요한 구성 요소였습니다.
API 계층
솔루션에는 이 플랫폼에서 작동하는 개체 유형에 해당하는 XNUMX가지 API의 핵심 세트가 있습니다. 각 API에는 실행할 수 있는 API 작업을 정의하는 Python 파일이 있습니다. 새 개체를 만들 때 자동으로 개체 ID가 순차적으로 할당됩니다. 이러한 개체의 속성은 아마존 오로라 서버리스 이 ID를 사용하는 데이터베이스. 따라서 API 작업은 Aurora 데이터베이스 쿼리를 위한 백엔드 로직이 포함된 중앙 파일에 정의된 기능에 다시 연결됩니다. 이 백엔드 로직은 Boto3를 사용합니다. Amazon RDS 데이터 서비스 클라이언트 데이터베이스 클러스터에 액세스합니다.
한 가지 예외는 /job
API는 create_job
새 처리 작업을 만들기 위한 비디오 제출을 처리하는 메서드입니다. 이 방법은 시작 AWS 단계 함수 작업을 실행하기 위한 워크플로 논리. 통과하여 job_id
, 이 방법은 Boto3를 사용합니다. Step Functions 클라이언트 전화를 걸다. start_execution
지정된 방법 stateMachineARN
(Amazon 리소스 이름).
XNUMX개의 객체 API는 다음 표에 요약된 것과 같은 메소드 및 유사한 액세스 패턴을 가지고 있습니다.
방법 유형 | 기능 명 | 상품 설명 |
바로 | list_[object_name]s |
데이터베이스에서 이 유형의 모든 객체를 선택하고 표시합니다. |
POST | create_[object] |
필수 입력이 있는 새 개체 레코드를 데이터베이스에 삽입합니다. |
바로 | get_[object] |
데이터베이스에서 개체 ID를 기반으로 개체 속성을 선택하고 표시합니다. |
PUT | update_[object] |
필수 입력으로 기존 개체 레코드를 업데이트합니다. |
삭제 | delete_[object] |
개체 ID를 기반으로 데이터베이스에서 기존 개체 레코드를 삭제합니다. |
XNUMX개의 API에 대한 세부 정보는 다음과 같습니다.
- /사용자 – 사용자는 이 애플리케이션에 작업을 제출할 권한이 있는 사람의 ID입니다. 사용자를 생성하려면 사용자 이름, 사용자 이메일 및 사용자가 속한 그룹 ID가 필요합니다.
- /사용자 그룹 – 사용자 그룹은 사용자 모음입니다. 모든 사용자 그룹은 하나의 프로젝트와 하나의 파이프라인 매개변수 세트에 매핑됩니다. 다른 계층(인프라 리소스 및 파이프라인 매개변수 측면에서)을 갖기 위해 사용자는 사용자 그룹으로 나뉩니다. 각 사용자는 하나의 사용자 그룹에만 속할 수 있습니다. 사용자 그룹을 생성하려면 프로젝트 ID, 파이프라인 매개변수 세트 ID, 사용자 그룹 이름 및 사용자 그룹 설명이 필요합니다. 사용자 그룹은 AWS 계정에 정의된 사용자 역할과 다릅니다. 후자는 액세스 역할(예: admin)에 따라 다른 수준의 액세스를 제공하는 데 사용됩니다.
- /프로젝트 – 프로젝트는 서로 다른 기반 시설 리소스 집합을 함께 그룹화하는 데 사용됩니다. 프로젝트는 단일
project_cluster_url
(Aurora 클러스터) 사용자, 작업 및 기타 메타데이터 기록,project_queue_arn
(Kinesis Data Streams ARN) 및 프레임 배치에서 추론을 실행하거나 비디오에서 후처리하는 데 사용되는 컴퓨팅 런타임 환경(현재 Cortex를 통해 제어됨). 각 사용자 그룹은 하나의 프로젝트에 연결되며 이 메커니즘은 다른 사용자 그룹에 대한 지연 시간 및 컴퓨팅 성능 측면에서 서로 다른 계층이 활성화되는 방식입니다. 프로젝트를 생성하려면 프로젝트 이름, 프로젝트 클러스터 URL 및 프로젝트 대기열 ARN이 필요합니다. - /관로 – 파이프라인은 Cortex에서 조정하는 Amazon EKS 추론 생성 클러스터에서 비디오 처리를 수행하는 일련의 처리 컨테이너에 대한 단일 구성과 연결됩니다(자세한 내용은 비디오 처리 추론 생성 섹션 참조). 일반적으로 사전 처리 및 디코딩, 객체 감지 및 포즈 추정의 세 가지 컨테이너로 구성됩니다. 예를 들어 디코딩 및 개체 감지 단계는 2D 및 3D 파이프라인에 대해 동일하지만 HRNet 또는 3DMPPE를 사용하여 마지막 컨테이너를 교체하면 2D 대 3D 처리 파이프라인에 대한 매개변수 세트가 생성됩니다. 새로운 구성을 생성하여 처리에 사용할 수 있는 가능한 파이프라인을 정의할 수 있으며 해당 파이프라인을 정의하는 모델 끝점 호출의 순서를 자세히 설명하는 Cortex 리포지토리의 새 Python 파일이 입력으로 필요합니다(비디오 처리 추론 생성 섹션 참조 ). 파이프라인 끝점은 단일 프레임을 처리하기 위해 호출되는 Cortex 끝점입니다. 파이프라인을 생성하려면 파이프라인 이름, 파이프라인 설명 및 파이프라인 끝점이 필요합니다.
- /파이프라인_매개변수_세트 – 파이프라인 매개변수 세트는 특정 파이프라인에 대한 여러 매개변수(파이프라인 구성 런타임)의 유연한 JSON 컬렉션이며 여러 파이프라인 구성 런타임이 필요할 때 향후 사용자 지정을 위한 유연성을 제공하기 위해 추가되었습니다. 사용자 그룹은 특정 파이프라인 매개변수 세트와 연관될 수 있으며 그 목적은 사용자 그룹 및 파이프라인당 매개변수 그룹을 다르게 하는 것입니다. 이것은 Intel OTG가 다양한 고객, 특히 ISV가 응용 프로그램을 사용하기 시작할 때 이식성을 지원하는 사용자 지정 기능을 구축하기 위한 중요한 미래 지향적인 추가 사항이었습니다.
- /파이프라인_매개변수 – 파이프라인 매개변수의 단일 컬렉션은 파이프라인 매개변수 세트의 인스턴스화입니다. 이렇게 하면 파이프라인 매개변수 세트를 파이프라인 매개변수로 일대다 매핑합니다. 이 API에는 파이프라인 매개변수를 파이프라인에 1:1 매핑하기 위한 파이프라인 생성을 가능하게 하는 파이프라인 매개변수 세트와 연결할 파이프라인 ID가 필요합니다. 이 API에 필요한 다른 입력은 파이프라인 매개변수 세트 ID, 파이프라인 매개변수 값 및 파이프라인 매개변수 이름입니다.
- /동영상 – 비디오 개체는 작업 중에 제출된 .zip 패키지를 구성하는 개별 비디오를 정의하는 데 사용됩니다. 이 파일은 제출 후 여러 동영상으로 나뉩니다. 관련 영상입니다
job_id
.zip 패키지가 제출된 작업의 경우 아마존 단순 스토리지 서비스 (Amazon S3) 분리된 원시 비디오의 위치 및 각 비디오의 후처리 결과에 대한 경로입니다. 비디오 개체에는 해당 비디오의 개별 프레임 배치를 처리하는 동안 지속적으로 업데이트되는 비디오 진행률과 완료 여부에 대한 비디오 상태 플래그도 포함됩니다. 비디오를 만들려면 작업 ID, 비디오 경로, 비디오 결과 경로, 비디오 진행률 및 비디오 상태가 필요합니다. - /프레임_배치 - A
frame_batch
개체는 단일 비디오를 샘플링하여 만든 프레임의 미니 배치입니다. 비디오를 일반 크기의 프레임 배치로 분리하면 대기 시간을 조정하고 병렬화 및 처리량을 높일 수 있습니다. 추론을 위해 Kinesis Data Streams를 통해 실행되는 세분화된 단위입니다. 프레임 배치를 생성하려면 비디오 ID, 프레임 배치 시작 번호, 프레임 배치 종료 번호, 프레임 배치 입력 경로, 프레임 배치 결과 경로, 프레임 배치 상태가 필요합니다. - /직업 – 이 상호작용 API는 처리 작업을 시작하기 위한 파일 제출에 사용됩니다. 이 API는 비디오 처리 백엔드 Step Functions 워크플로 조정 및 Amazon EKS 클러스터와 상호 작용하는 직접 경로이기 때문에 다른 객체 API와 기능이 다릅니다. 이 API에는 사용자 ID, 프로젝트 ID, 파이프라인 ID, 파이프라인 매개변수 세트 ID, 작업 매개변수 및 작업 상태가 필요합니다. 작업 매개변수에는 처리할 비디오의 .zip 패키지가 있는 Amazon S3의 위치인 입력 파일 경로가 지정됩니다. 파일 업로드는
upload_handler
사용자가 파일을 배치할 수 있도록 미리 서명된 S3 URL을 생성하는 메서드입니다. WORKFLOW_STATEMACHINE_ARN은create_job
작업을 시작하기 위해 입력 파일 경로가 있는 비디오 .zip 패키지가 제출되는 위치를 지정하는 API입니다.
다음 표에는 API의 기능이 요약되어 있습니다.
방법 유형 | 함수 | 상품 설명 |
바로 | list_jobs |
데이터베이스에서 모든 작업을 선택하고 표시합니다. |
POST | create_ job |
사용자 ID, 프로젝트 ID, 파이프라인 ID, 파이프라인 매개변수 세트 ID, 작업 결과 경로, 작업 매개변수 및 작업 상태가 있는 새 작업 레코드를 삽입합니다. |
바로 | get_ job |
데이터베이스에서 작업 ID를 기반으로 작업 속성을 선택하고 표시합니다. |
바로 | upload_handler |
.zip 파일 업로드 위치로 미리 서명된 S3 URL을 생성합니다. S3 버킷 이름이 필요하고 애플리케이션/zip 파일 유형이 필요합니다. |
파이썬 SDK 레이어
API를 기반으로 팀은 개발자가 API 메서드에 더 쉽게 액세스할 수 있도록 Python SDK 클라이언트 라이브러리를 래퍼로 만들었습니다. 그들은 오픈 소스를 사용했습니다 시, Python 패키징 및 종속성 관리를 처리합니다. 그들은 창조했다 client.py
Python을 사용하여 각 API를 래핑하는 함수가 포함된 파일 requests
API 요청 및 예외를 처리하는 라이브러리.
개발자가 Intel 3DAT SDK를 시작하려면 Poetry 패키지를 설치하고 빌드해야 합니다. 그런 다음 간단한 Python 가져오기를 추가할 수 있습니다. intel_3dat_sdk
모든 Python 코드에.
클라이언트를 사용하려면 API 엔드포인트를 지정하여 클라이언트의 인스턴스를 생성할 수 있습니다.
그런 다음 클라이언트를 사용하여 다음과 같은 개별 메서드를 호출할 수 있습니다. create_pipeline
메서드(다음 코드 참조)를 사용하여 파이프라인 이름 및 파이프라인 설명과 같은 적절한 인수를 사용합니다.
CLI 계층
마찬가지로 팀은 API를 기반으로 구축하여 Python 코드를 작성할 필요 없이 간단한 인터페이스로 API 메서드에 액세스하려는 사용자를 위한 명령줄 인터페이스를 만들었습니다. 그들은 오픈 소스 Python 패키지를 사용했습니다. (명령줄 인터페이스 생성 키트). 이 프레임워크의 이점은 명령의 임의 중첩, 자동 도움말 페이지 생성 및 런타임 시 하위 명령의 지연 로드 지원입니다. 같은 client.py
SDK에서와 같이 파일에서 각 SDK 클라이언트 메서드는 Click을 사용하여 래핑되었고 필요한 메서드 인수는 명령줄 플래그로 변환되었습니다. 플래그 입력은 SDK 명령을 호출할 때 사용됩니다.
CLI를 시작하려면 다음을 사용할 수 있습니다. CLI configure
명령. 엔드포인트 URL을 입력하라는 메시지가 표시됩니다.
이제 CLI를 사용하여 API 메서드와 관련된 다양한 명령을 호출할 수 있습니다. 예를 들면 다음과 같습니다.
데이터베이스
데이터베이스로서 이 애플리케이션은 MYSQL을 데이터베이스 엔진으로 사용하는 각 API와 연결된 메타데이터를 저장하기 위해 Aurora Serverless를 사용합니다. Aurora Serverless 데이터베이스 서비스를 선택하면 가능한 경우 서버리스 AWS 서비스를 활용하여 인프라 오버헤드를 최소화하는 설계 원칙을 준수합니다. 다음 다이어그램은 이 아키텍처를 보여줍니다.
XNUMXD덴탈의 서버리스 엔진 모드 이 애플리케이션은 신규 고객으로 확장되고 워크로드는 여전히 불확실하기 때문에 간헐적 사용 패턴을 충족합니다. 데이터베이스 엔드포인트를 시작할 때 특정 DB 인스턴스 크기는 필요하지 않으며 클러스터 용량의 최소 및 최대 범위만 필요합니다. Aurora Serverless는 라우터 플릿의 적절한 프로비저닝을 처리하고 리소스 간에 워크로드를 분산합니다. Aurora Serverless는 최소 1일에서 최대 35일 동안 백업 보존을 자동으로 수행합니다. 팀은 기본값을 최대값인 35로 설정하여 안전에 최적화했습니다.
또한 팀에서 사용한 데이터 API 영구 연결이 필요하지 않고 대신 보안 HTTP 엔드포인트 및 AWS SDK와의 통합을 제공하는 Aurora Serverless 클러스터에 대한 액세스를 처리합니다. 이 기능은 다음을 사용합니다. AWS 비밀 관리자 자격 증명을 명시적으로 전달할 필요가 없도록 데이터베이스 자격 증명을 저장합니다. CREATE TABLE 스크립트는 XNUMX개의 API에 해당하는 XNUMX개의 테이블 각각에 대해 .sql 파일로 작성되었습니다. 이 데이터베이스에는 시스템에 있는 개체의 모든 메타데이터와 상태가 포함되어 있기 때문에 API 메서드는 적절한 SQL 명령(예: select * from Job
위한 list_jobs
API)에 전달 execute_statement
데이터 API의 Amazon RDS 클라이언트에서 메서드.
워크플로 오케스트레이션
애플리케이션의 기능적 백본은 다음 다이어그램과 같이 워크플로를 조정하기 위해 Step Functions를 사용하여 처리되었습니다.
상태 머신은 XNUMX개의 Lambda 함수 시퀀스로 구성되며, 다음을 사용하여 작업이 제출될 때 시작됩니다. create_job
의 방법 job
API. 작업 생성에는 사용자 ID, 프로젝트 ID, 파이프라인 ID, 파이프라인 매개변수 세트 ID, 작업 결과 경로, 작업 매개변수 및 작업 상태가 필요합니다. 먼저 다음을 사용하여 비디오 파일의 .zip 패키지를 업로드할 수 있습니다. upload_handler
작업 API의 메서드를 사용하여 미리 서명된 S3 URL을 생성합니다. 작업 제출 중에 입력 파일 경로가 작업 매개변수를 통해 전달되어 파일 위치를 지정합니다. 이렇게 하면 워크플로 상태 시스템의 실행이 시작되어 XNUMX가지 주요 단계가 트리거됩니다.
- 초기화 람다 함수
- 제출자 Lambda 함수
- 완료 확인 Lambda 함수
- 수집기 람다 함수
초기화 람다 함수
이니셜라이저의 주요 기능은 .zip 패키지를 개별 비디오 파일로 분리하고 제출자를 위해 준비하는 것입니다. 먼저 .zip 파일을 다운로드한 다음 비디오 파일을 포함한 각 개별 파일의 압축을 풀고 압축을 풉니다. 가급적이면 .mp4 형식의 비디오가 S3 버킷으로 다시 업로드됩니다. 사용 create_video
의 방법 video
API, 비디오 경로를 입력으로 비디오 객체가 생성됩니다. 그러면 각 비디오의 데이터가 Aurora 데이터베이스에 삽입됩니다. JSON 파일과 같은 다른 모든 파일 형식은 메타데이터로 간주되어 유사하게 업로드되지만 동영상 개체는 생성되지 않습니다. 추출된 파일 및 비디오 파일의 이름 목록은 다음 단계로 전달됩니다.
제출자 Lambda 함수
Submitter 기능은 Initializer에서 추출한 비디오 파일을 가져와서 비디오 프레임의 미니 배치를 이미지로 생성합니다. 현재 생산 중인 대부분의 컴퓨터 비전 모델은 이미지에 대해 훈련되어 있으므로 비디오가 처리되더라도 모델 추론 전에 먼저 이미지 프레임으로 분리됩니다. 최첨단 포즈 추정 모델을 사용하는 이 현재 솔루션도 다르지 않습니다. 제출자의 프레임 배치가 Kinesis Data Streams로 전달되어 추론 생성 단계를 시작합니다.
먼저 Lambda 함수에서 동영상 파일을 다운로드합니다. 프레임 속도와 프레임 수는 다음을 사용하여 계산됩니다. FileVideoStream
에서 모듈 imutils.video
처리 라이브러리. 이 파이프라인의 핵심 조정 매개변수 중 하나인 지정된 미니 배치 크기에 따라 프레임이 추출되고 그룹화됩니다. Python pickle 라이브러리를 사용하여 데이터가 직렬화되고 Amazon S3에 업로드됩니다. 이후에 프레임 배치 객체가 생성되고 Aurora 데이터베이스에 메타데이터 항목이 생성됩니다. 이 Lambda 함수는 다음에 대한 종속성이 있는 Dockerfile을 사용하여 구축되었습니다. opencv-python
, numpy
및 imutils
라이브러리.
완료 확인 Lambda 함수
완료 확인 기능은 계속해서 Aurora 데이터베이스를 쿼리하여 이 현재 작업에 대한 .zip 패키지의 각 비디오에 대해 완료됨 상태에 있는 프레임 배치 수를 확인합니다. 모든 비디오에 대한 모든 프레임 배치가 완료되면 이 확인 프로세스가 완료됩니다.
수집기 람다 함수
Collector 기능은 소비자 단계에서 각 프레임에서 수행된 추론의 출력을 가져와 프레임 배치와 비디오 전체에서 결합합니다. 결합된 병합된 데이터는 그런 다음 S3 버킷에 업로드됩니다. 그런 다음 함수는 사후 처리 계산을 수행하기 위해 특정 ML 파이프라인에 대한 Cortex 사후 처리 API를 호출하고 비디오별로 집계된 결과를 출력 버킷에 추가합니다. 이러한 메트릭의 대부분은 속도, 가속도 및 관절 각도와 같은 프레임에서 계산되므로 이 계산은 집계된 데이터에 대해 수행해야 합니다. 주요 출력에는 바디 키 포인트 데이터(CSV 형식으로 집계), BMA 계산(예: 가속도) 및 이미지 파일의 각 프레임에 추가된 키 포인트의 시각적 오버레이가 포함됩니다.
확장 가능한 포즈 추정 추론 생성
ML 추론의 확장을 지원하는 처리 엔진이 이 단계에서 발생합니다. 여기에는 세 가지 주요 부분이 포함되며, 각각에는 대기 시간 트레이드오프를 위해 조정할 수 있는 자체 동시성 레버가 있습니다(다음 다이어그램 참조).
이 아키텍처는 애플리케이션에 액세스하는 최종 사용자 세그먼트의 다양한 조합으로 워크로드가 변경될 수 있는 미래에 대한 유연성뿐만 아니라 지연 시간 이득을 테스트하는 실험을 허용합니다.
Kinesis 데이터 스트림
팀은 일반적으로 스트리밍 데이터를 처리하는 데 사용되기 때문에 Kinesis Data Streams를 선택했고, 이 경우 비슷한 방식으로 프레임 배치를 처리하여 확장성과 병렬화를 제공할 수 있기 때문에 이 경우에 적합합니다. 제출자 Lambda 함수에서 Kinesis Boto3 클라이언트가 사용되며, put_record
프레임 배치 ID, 프레임 배치 시작 프레임, 프레임 배치 종료 프레임, 이미지 모양, 프레임 속도 및 비디오 ID와 같은 단일 프레임 배치와 관련된 메타데이터를 전달하는 메서드.
다양한 작업 대기열 및 Kinesis 데이터 스트림 구성을 정의하여 다양한 사용자 그룹의 우선 순위 수준에 다시 연결되는 처리량 수준을 설정했습니다. 다양한 수준의 처리 능력에 대한 액세스는 다음을 사용하여 새 프로젝트를 생성할 때 프로젝트 대기열 ARN을 전달하여 연결됩니다. project
API. 모든 사용자 그룹은 사용자 그룹 생성 중에 특정 프로젝트에 연결됩니다. 세 가지 기본 스트림 구성이 정의되어 있습니다. AWS 서버리스 애플리케이션 모델 (AWS SAM) 인프라 템플릿:
- ㅁㄴㅇㄹ -
JobStreamShardCount
- 우선 -
PriorityJobStreamShardCount
- 높은 우선 순위 -
HighPriorityJobStreamShardCount
팀은 다음 표에 요약된 것처럼 몇 가지 다른 수단을 사용하여 각 스트림의 처리 능력을 차별화하거나 시스템의 대기 시간을 조정했습니다.
지레 | 상품 설명 | 기본값 |
사금파리 | 샤드는 Kinesis Data Streams에 고유합니다. 수집 처리량의 기본 단위입니다. 기본값은 초당 1개의 데이터 레코드에 해당하는 1,000MB/초입니다. | 2 |
KinesisBatchSize |
Kinesis Data Streams가 소비자 Lambda 함수를 호출하기 전에 단일 배치에서 검색하는 최대 레코드 수입니다. | 1 |
KinesisParallelizationFactor |
각 샤드에서 동시에 처리할 배치 수입니다. | 1 |
향상된 팬아웃 | 향상된 팬아웃이 활성화된 데이터 소비자는 소비자 간에 처리량을 공유하는 대신 소비자당 전용 수집 처리량(예: 기본 1MB/초)을 갖습니다. | 떨어져서 |
소비자 Lambda 함수
Kinesis Data Streams의 관점에서 데이터 소비자는 데이터가 스트림에서 생성될 때 데이터 스트림 샤드에서 데이터를 검색하는 AWS 서비스입니다. 이 애플리케이션은 데이터 스트림 대기열에서 메시지가 전달될 때 호출되는 소비자 Lambda 함수를 사용합니다. 각 소비자 함수는 다음 단계를 수행하여 하나의 프레임 배치를 처리합니다. 먼저 모델 추론 파이프라인을 호스팅하는 엔드포인트인 Cortex 프로세서 API를 동기식으로 호출합니다(자세한 내용은 Cortex가 포함된 Amazon EKS에 대한 다음 섹션 참조). 결과는 Amazon S3에 저장되고 처리된 프레임 배치의 상태를 다음으로 변경하여 데이터베이스에 업데이트됩니다. Complete
. 오류 처리는 재시도 횟수를 504로 설정하여 Cortex 클러스터의 모든 5 오류를 처리하기 위해 재시도 루프로 Cortex API 호출을 관리하기 위해 내장되어 있습니다.
ML 추론을 위한 Cortex가 포함된 Amazon EKS
팀은 ML 추론을 위한 컴퓨팅 엔진으로 AWS의 관리형 Kubernetes 서비스인 Amazon EKS를 사용했습니다. Amazon EKS를 사용하여 ML 엔드포인트를 호스팅하도록 설계를 선택하여 다음을 통해 AWS에서 완전히 관리되는 클러스터 옵션과 함께 업스트림 Kubernetes를 유연하게 실행할 수 있습니다. AWS 파게이트, 또는 온프레미스 하드웨어를 통해 Amazon EKS 어디서나. 이것은 예를 들어 이 응용 프로그램을 전문화된 온프레미스 하드웨어에 연결할 수 있는 옵션을 제공하는 Intel OTG가 원하는 중요한 기능이었습니다.
추론 파이프라인을 구성하기 위한 빌딩 블록인 세 가지 ML 모델은 맞춤형 Yolo 모델(객체 감지용), 맞춤형 HRNet 모델(2D 포즈 추정용) 및 3DMPPE 모델(3D 포즈 추정용)이었습니다(이전 참조 자세한 내용은 ML 섹션 참조). 그들은 오픈 소스를 사용했습니다 피질 ML 추론 파이프라인 엔드포인트의 배포 및 관리, Amazon EKS 클러스터 시작 및 배포를 처리하는 라이브러리. 이러한 각 모델은 Docker 컨테이너로 패키징되었습니다. 모델 파일은 Amazon S3에 저장되고 모델 이미지는 Amazon Elastic Container Registry (Amazon ECR) - Cortex Realtime API로 배포됩니다. CPU 및 GPU에서 실행되는 모델 컨테이너 버전은 컴퓨팅 하드웨어 유형에 대한 유연성을 제공하기 위해 생성되었습니다. 향후 추가 모델 또는 모델 파이프라인을 추가해야 하는 경우 추가 Cortex Realtime API를 생성하기만 하면 됩니다.
그런 다음 Cortex Realtime 모델 API를 Cortex Realtime 파이프라인 API로 함께 구성하여 추론 파이프라인을 구성했습니다. 단일 실시간 파이프라인 API는 일련의 실시간 모델 API 호출로 구성되었습니다. 처리된 소비자 Lambda 함수 pipeline
단일 API 호출을 사용하여 이미지에 대한 최종 추론 출력을 검색하는 블랙박스로서의 API. 2D 파이프라인과 3D 파이프라인이라는 두 개의 파이프라인이 생성되었습니다.
2D 파이프라인은 디코딩 전처리 단계, 운동 선수를 찾고 경계 상자를 생성하기 위한 맞춤형 Yolo 모델을 사용한 객체 감지, 그리고 마지막으로 포즈 추정을 위한 2D 키 포인트를 생성하기 위한 맞춤형 HRNet 모델을 결합합니다.
3D 파이프라인은 디코딩 전처리 단계, 사용자 지정 Yolo 모델을 사용하여 운동 선수를 찾고 경계 상자를 생성하는 객체 감지, 마지막으로 포즈 추정을 위한 3D 키 포인트를 생성하기 위한 3DMPPE 모델을 결합합니다.
프레임 배치에 대한 추론을 생성한 후 각 파이프라인에는 세 가지 주요 출력을 생성하는 별도의 사후 처리 Realtime Cortex 엔드포인트도 포함됩니다.
- 단일 CSV 파일로 집계된 본문 핵심 포인트 데이터
- BMA 계산(예: 가속도)
- 이미지 파일의 각 프레임에 추가된 주요 포인트의 시각적 오버레이
Collector Lambda 함수는 프레임 ID 및 포즈 추정 추론 출력의 S3 위치와 같은 특정 비디오와 연결된 적절한 메타데이터를 엔드포인트에 제출하여 이러한 후처리 출력을 생성합니다.
Cortex는 Amazon EKS와 통합되도록 설계되었으며 클러스터 구성 파일과 Kubernetes 클러스터를 시작하는 간단한 명령만 있으면 됩니다.
성능 조정을 위한 또 다른 수단은 컴퓨팅 클러스터에 대한 인스턴스 구성이었습니다. M5 및 G4dn 인스턴스의 다양한 혼합으로 5개의 계층이 생성되었으며 클러스터 이름, 지역, 인스턴스 구성 및 혼합과 같은 사양이 있는 .yaml 파일로 성문화되었습니다. M4 인스턴스는 저비용 CPU 기반이고 GXNUMXdn은 비용 대비 성능 절충점을 제공하기 위해 고비용 GPU 기반입니다.
운영 모니터링
운영 로깅 표준을 유지하기 위해 모든 Lambda 기능에는 다음을 통해 로그를 기록하고 수집하는 코드가 포함됩니다. 아마존 키네 시스 데이터 파이어 호스. 예를 들어 제출자 Lambda 함수에서 처리된 모든 프레임 배치는 타임스탬프, 작업 이름 및 Lambda 함수 응답 JSON과 함께 기록되고 Amazon S3에 저장됩니다. 다음 다이어그램은 아키텍처의 이 단계를 보여줍니다.
전개
배포는 AWS에서 서버리스 애플리케이션을 구축하기 위한 오픈 소스 프레임워크인 AWS SAM을 사용하여 처리됩니다. AWS SAM을 사용하면 기능, API, 데이터베이스 및 이벤트 소스 매핑을 포함한 인프라 설계를 코드화하고 새로운 AWS 환경에 쉽게 배포할 수 있습니다. 배포하는 동안 AWS SAM 구문은 다음으로 변환됩니다. AWS 클라우드 포메이션 인프라 프로비저닝을 처리합니다.
A template.yaml
파일에는 이전 섹션에서 자세히 설명한 Kinesis Data Streams 지연 시간 레버와 같은 조정 가능한 파라미터와 함께 인프라 사양이 포함되어 있습니다. ㅏ samconfig.toml
파일에는 스택 이름, Lambda 함수 코드와 같은 애플리케이션 파일이 저장되는 S3 버킷 이름, 비용 추적을 위한 리소스 태그와 같은 배포 매개변수가 포함됩니다. 간단한 명령이 포함된 deploy.sh 셸 스크립트만 있으면 전체 템플릿을 빌드하고 배포할 수 있습니다.
사용자 작업 흐름
요약하자면, 인프라가 배포된 후 다음 워크플로에 따라 시작할 수 있습니다.
- 클라이언트 라이브러리를 사용하여 Intel 3DAT 클라이언트를 만듭니다.
- API를 사용하여 3D 포즈 추정과 같이 필요한 처리 유형에 해당하는 파이프라인의 새 인스턴스를 생성합니다.
- 클러스터 ARN 및 Kinesis 대기열 ARN을 전달하여 프로젝트의 새 인스턴스를 생성합니다.
- 파이프라인 매개변수 세트의 새 인스턴스를 생성합니다.
- 파이프라인 매개변수 세트에 매핑되는 파이프라인 매개변수의 새 인스턴스를 생성합니다.
- 프로젝트 ID 및 파이프라인 파라미터 세트 ID와 연결된 새 사용자 그룹을 생성합니다.
- 사용자 그룹과 연결된 새 사용자를 만듭니다.
- 작업 API의 업로드 기능으로 생성된 미리 서명된 S3 URL을 사용하여 동영상의 .zip 파일을 Amazon S3에 업로드합니다.
- 제출
create_job
비디오 파일의 위치를 지정하는 작업 매개변수가 있는 API 호출. 처리 작업을 시작합니다.
결론
이제 응용 프로그램이 실행되어 선수와 코치 모두와 함께 테스트할 준비가 되었습니다. Intel OTG는 개발자에서 운동선수, 소프트웨어 공급업체 파트너에 이르기까지 다양한 사용자가 액세스할 수 있는 컴퓨터 비전을 사용하는 혁신적인 자세 추정 기술을 만들게 된 것을 기쁘게 생각합니다.
AWS 팀은 Intel OTG와 같은 고객이 ML Solutions Lab을 통한 아이디어 및 발견 단계부터 AWS ML ProServe를 통한 강화 및 배포 단계에 이르기까지 ML 여정을 가속화하도록 돕는 데 열정을 쏟고 있습니다. 우리 모두는 올 여름 2021년 도쿄 올림픽에서 ML이 스포츠에서 잠금 해제할 수 있는 모든 발전을 상상하기 위해 면밀히 주시할 것입니다.
오늘 시작하세요! 이 게시물에 언급 된 서비스와 AWS 관리 콘솔.
저자에 관하여
한만 캘리포니아 샌디에고에 위치한 AWS의 기계 학습 및 AI 수석 관리자입니다. 그는 Northwestern University에서 공학 박사 학위를 받았으며 제조, 금융 서비스 및 에너지 분야에서 고객에게 자문을 제공하는 경영 컨설턴트로 수년 간의 경험을 가지고 있습니다. 오늘날 그는 AWS에서 기계 학습 및 AI 솔루션을 개발하고 구현하기 위해 다양한 산업 분야의 고객과 열정적으로 협력하고 있습니다. 그는 NBA를 팔로우하고 여가 시간에 농구를 즐깁니다.
이만 카미야비 AWS Professional Services의 ML 엔지니어입니다. 그는 반복 가능하고 안정적인 ML 파이프라인을 설정하는 모범 사례를 옹호하기 위해 다양한 AWS 고객과 협력했습니다.
이 조나단 인텔의 올림픽 기술 그룹 스포츠 성능 기술 이사입니다. 그는 UCLA에서 학부 시절과 옥스퍼드 대학교에서 대학원 과정을 거치면서 기계 학습을 건강에 적용하는 방법을 공부했습니다. 그의 경력은 건강과 인간의 성능을위한 알고리즘 및 센서 개발에 초점을 맞추 었습니다. 그는 현재 인텔에서 3D 선수 추적 프로젝트를 이끌고 있습니다.
넬슨 렁 Intel의 Sports Performance CoE의 플랫폼 설계자로, 선수의 성능을 향상시키는 최첨단 제품을위한 엔드-투-엔드 아키텍처를 정의합니다. 또한 다양한 인텔 파트너를 대상으로 이러한 기계 학습 솔루션의 구현, 배포 및 생산을 대규모로 이끌고 있습니다.
트로이 스퀼라시 Intel의 DecSecOps 엔지니어로 DevOps 모범 사례를 통해 고객에게 전문 소프트웨어 솔루션을 제공합니다. 그는 AI 솔루션을 다양한 도메인의 확장 가능한 플랫폼에 통합하는 것을 즐깁니다.
폴 민 Amazon Web Services(AWS)의 Associate Solutions Architect 인턴으로 다양한 업종의 고객이 미션을 수행하고 클라우드 채택을 가속화하도록 돕습니다. 이전에는 Intel에서 소프트웨어 엔지니어링 인턴으로 근무하여 3D Athlete Tracking Cloud SDK 개발을 도왔습니다. Paul은 직장 밖에서 골프를 치는 것을 즐기고 노래를 들을 수 있습니다.
- "
- &
- 000
- 100
- 2021
- 3d
- 소개
- 가속
- ACCESS
- 얻기 쉬운
- 에 따르면
- 계정
- 가로질러
- 동작
- 행위
- 또한
- 추가
- 관리자
- 양자
- AI
- 연산
- All
- 아마존
- Amazon Web Services
- 사이에
- API를
- API
- 어플리케이션
- 어플리케이션
- 적당한
- 아키텍처
- 인수
- 할당 된
- 준
- 선수
- 속성
- Automatic
- AWS
- 백업
- 농구
- 전에
- 혜택
- BEST
- 모범 사례
- 검정
- 블로그
- 몸
- 보물상자
- 빌드
- 건물
- 전화
- 생산 능력
- 한
- 채용
- 가지 경우
- 중심적인
- 챔피언
- 이전 단계로 돌아가기
- 선택
- 클라이언트
- 클라우드
- 암호
- 수집
- 수집가
- 결합 된
- 구성 요소
- 계산
- 컴퓨터
- 구성
- 연결
- 컨설턴트
- 소비자
- 소비자
- 컨테이너
- 용기
- 이 포함되어 있습니다
- 계속
- 제어
- 좌표의
- 핵심
- 동
- 만들
- 만든
- 생성
- 만들기
- 창조
- 신임장
- 임계
- 결정적인
- Current
- 현재
- 관습
- 고객
- 고객
- 최첨단
- 데이터
- 데이터베이스
- 데이터베이스
- 일
- 전용
- 깊이
- 제공
- 배포
- 배포
- 전개
- 배치하다
- 디자인
- 설계
- 세부 묘사
- 상세한
- 세부설명
- Detection System
- 개발
- 개발자
- 개발자
- 개발
- 다른
- 구별 짓다
- 곧장
- 책임자
- 발견
- 디스플레이
- 도커
- 하지 않습니다
- 도메인
- 아래 (down)
- ...동안
- 용이하게
- 이메일
- 종점
- 에너지
- 엔진
- 기사
- 엔지니어링
- 환경
- 이벤트
- 예
- 흥분한
- 현존하는
- ~을 기대하는
- 경험
- 탐험
- 특색
- 최종적으로
- 금융
- 금융 서비스
- 먼저,
- 맞게
- 함대
- 유연성
- 융통성있는
- 집중
- 따라
- 수행원
- 다음
- 체재
- 미래 지향적 인
- FRAME
- 뼈대
- 기능
- 기능의
- 기능
- 기능
- 미래
- 생성
- 생성
- 세대
- 기부
- 골
- 좋은
- GPU
- 졸업
- 그룹
- 여러 떼
- 핸들
- 처리
- 하드웨어
- 건강
- 들었다
- 도움
- 도움이
- 도움이
- 여기에서 지금 확인해 보세요.
- 더 높은
- 방법
- HTTPS
- 사람의
- 통합 인증
- 영상
- 구현
- 이행
- 중대한
- 포함
- 포함
- 포함
- 개인
- 산업
- 산업
- 인프라
- 혁신적인
- 입력
- 삽입물
- 설치
- 통합 된
- 완성
- 인텔
- 인텔리전스
- 상호 작용
- 인터페이스
- IT
- 일
- 작업
- 여행
- 키
- 실험실
- 시작
- 진수
- 오퍼
- 배우기
- 레벨
- 도서관
- 라인
- 명부
- 로드
- 위치
- 위치
- 기계
- 기계 학습
- 만든
- 유지하다
- 주요한
- 제작
- 사람
- 관리
- 관리
- 구축
- 제조
- 지도
- 매핑
- 말하는
- 방법
- 통계
- 최저한의
- Mission
- ML
- 모바일
- 모바일 응용 프로그램
- 모델
- 모델
- 모듈러
- 배우기
- 가장
- 여러
- 이름
- NBA
- 필요한
- 요구
- 번호
- 올림픽
- 열립니다
- 운영
- 최적화
- 선택권
- 주문
- 기타
- 자신의
- 옥스퍼드
- 꾸러미
- 부품
- 특별한
- 특별히
- 파트너
- 통과
- 열렬한
- 무늬
- tỷ lệ phần trăm
- 성능
- 실행할 수 있는
- 관점
- 조각
- 플랫폼
- 플랫폼
- 연주
- 시
- 전철기
- 가능한
- 힘
- 강한
- Prepare
- 너무 이른
- 일차
- 원칙
- 우선
- 방법
- 프로세스
- 처리
- 프로세서
- 생산
- 생산
- 제품
- 링크를
- 프로젝트
- 제공
- 제공
- 목적
- 범위
- 살갗이 벗어 진
- 실시간
- 인식
- 기록
- 기록
- 에 관한
- 신뢰할 수있는
- 요청
- 필요
- 필수
- 요구조건 니즈
- 필요
- 의지
- 자료
- 응답
- 결과
- 달리기
- 달리는
- 안전
- 산
- 확장성
- 확장성
- 규모
- 스케일링
- SDK
- 안전해야합니다.
- 세그먼트
- 서버리스
- 서비스
- 서비스
- 세트
- 설정
- 셰이프
- 공유
- 껍질
- 표시
- 비슷한
- 비슷하게
- 단순, 간단, 편리
- 크기
- So
- 소프트웨어
- 서비스로서의 소프트웨어
- 소프트웨어 공학
- 해결책
- 솔루션
- 일부
- 어떤 사람
- 전문
- 명세서
- 속도
- 스포츠
- 스택
- 단계
- 표준
- 기준
- 스타트
- 시작
- 시작
- 주 정부
- 최첨단
- Status
- 저장
- 저장
- 흐름
- 스트리밍
- 제출
- 그후
- 여름
- SUPPORT
- 지원
- 체계
- 복용
- 팀
- Technology
- 지원
- 따라서
- 을 통하여
- TIE
- 시간
- 오늘
- 함께
- 도쿄
- 선로
- 추적
- 유형
- 일반적으로
- 움라
- 대학
- 옥스퍼드 대학
- 잠금을 해제
- 업데이트
- 사용
- 사용자
- 활용
- 가치
- 종류
- 여러
- 업종
- Video
- 동영상
- 시력
- 웹
- 웹 서비스
- 누구
- 없이
- 작업
- 일
- 일하는
- 년