제퍼넷 로고

Deep Java Library 및 AWS Lambda로 더욱 쉬워 진 모델 제공

시간

딥 러닝 모델 개발 및 배포에는 데이터 수집 및 정리, 모델 설계, 모델 매개 변수 미세 조정, 결과 평가, 원하는 결과를 얻을 때까지 다시 진행하는 등 여러 단계가 포함됩니다. 그런 다음 마지막 단계 인 모델 배포입니다.

AWS 람다 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수있는 가장 비용 효율적인 서비스 중 하나입니다. 서버리스 인프라로 작업 할 때 많은 이점을 제공합니다. 단일 요청에 대해 딥 러닝 서비스의 로직을 단일 Lambda 함수로 분해하면 상황이 훨씬 더 간단 해지고 확장이 쉬워집니다. 모델로 들어오는 병렬 요청에 필요한 리소스 처리에 대해 모두 잊어 버릴 수 있습니다. 사용량이 적고 더 긴 지연 시간을 견딜 수있는 경우 Lambda는 다양한 솔루션 중에서 훌륭한 선택입니다.

이제 Lambda를 사용하여 모델을 배포하기로 결정했다고 가정 해 보겠습니다. 프로세스를 거치지 만 모델을 실행하기위한 다양한 설정 단계로 인해 혼란 스럽거나 복잡해집니다. 즉, Lambda 크기 제한 및 모델 종속성 관리 문제에 직면합니다.

딥 자바 라이브러리 (DJL)은 당신의 삶을 더 쉽게 만들어 줄 딥 러닝 프레임 워크입니다. DJL은 사용 사례에 대해 다양한 딥 러닝 백엔드 (예 : Apache MXNet, PyTorch 및 TensorFlow)를 사용하며 Java 애플리케이션 내에서 쉽게 설정하고 통합 할 수 있습니다! 탁월한 종속성 관리 설계 덕분에 DJL은 Lambda에 배포 할 수있는 프로젝트를 매우 간단하게 생성 할 수 있습니다. DJL은 사전 패키징 된 프레임 워크 종속성을 다운로드하여 우리가 언급 한 일부 문제를 완화하는 데 도움이되므로 직접 패키징 할 필요가 없으며 다음과 같은 지정된 위치에서 모델을로드합니다. 아마존 단순 스토리지 서비스 (Amazon S3) 따라서 모델을 Lambda로 푸시하는 방법을 알아낼 필요가 없습니다.

이 게시물에서는 5 분 안에 DJL을 사용하여 Lambda에서 모델을 실행하는 방법을 다룹니다.

DJL 정보

딥 자바 라이브러리(DJL) Java로 작성된 딥 러닝 프레임 워크로 훈련과 추론을 모두 지원합니다. DJL은 최신 딥 러닝 엔진 (예 : TenserFlow, PyTorch 및 MXNet)을 기반으로 구축되었습니다. DJL을 쉽게 사용하여 모델을 훈련 시키거나 추가 변환없이 다양한 엔진에서 좋아하는 모델을 배포 할 수 있습니다. 여기에는 훈련 된 모델을 관리하고 한 줄로로드 할 수있는 강력한 모델 동물원 디자인이 포함되어 있습니다. 빌트인 모델 동물원은 현재 GluonCV, HuggingFace, TorchHub 및 Keras에서 70 개 이상의 사전 훈련되고 바로 사용할 수있는 모델을 지원합니다.

사전 조건

계속하려면 다음 항목이 필요합니다.

이 게시물에서는 다음 단계를 따릅니다. GitHub 레포.

AWS에서 빌드 및 배포

먼저 올바른 코드 디렉토리에 있는지 확인해야합니다. 스토리지 용 S3 버킷을 생성해야합니다. AWS 클라우드 포메이션 스택 및 Lambda 함수는 다음 코드를 사용합니다.

cd lambda-model-serving
./gradlew deploy

그러면 다음이 생성됩니다.

  • 이름이 bucket-name.txt에 저장된 S3 버킷
  • 이름이 CloudFormation 스택 djl-lambda out.yml이라는 템플릿 파일
  • 명명 된 Lambda 함수 DJL-Lambda

이제 모델이 서버리스 API에 배포되었습니다. 다음 섹션에서는 Lambda 함수를 호출합니다.

Lambda 함수 호출

다음 코드를 사용하여 Lambda 함수를 호출 할 수 있습니다.

aws lambda invoke --function-name DJL-Lambda --payload '{"inputImageUrl":"https://djl-ai.s3.amazonaws.com/resources/images/kitten.jpg"}' build/output.json

출력은 다음에 저장됩니다. build/output.json:

cat build/output.json
[ { "className": "n02123045 tabby, tabby cat", "probability": 0.48384541273117065 }, { "className": "n02123159 tiger cat", "probability": 0.20599405467510223 }, { "className": "n02124075 Egyptian cat", "probability": 0.18810519576072693 }, { "className": "n02123394 Persian cat", "probability": 0.06411759555339813 }, { "className": "n02127052 lynx, catamount", "probability": 0.01021555159240961 }
]

청소

정리 스크립트를 사용하여 리소스를 정리하고 AWS 계정에서 생성 된 서비스를 해체합니다.

./cleanup.sh

비용 분석

이것을 설정하려고하면 어떻게 되나요? 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스를 사용하고 비용을 Lambda와 비교 하시겠습니까? EC2 인스턴스는 언제든지 요청을 수신하기 위해 지속적으로 실행되어야합니다. 이는 사용하지 않을 때 추가 시간을 지불한다는 것을 의미합니다. vCPU 3 개와 메모리 2GB가 포함 된 저렴한 t1.micro 인스턴스를 사용하는 경우 (이 메모리 중 일부가 운영 체제 및 기타 작업에 사용된다는 사실을 알고 있음) 비용은 한 달에 $ 7.48 또는 약 1.6 만 건의 요청으로 발생합니다. 람다. 3 개의 vCPU와 2GB의 메모리가있는 t4.small과 같은 더 강력한 인스턴스를 사용하는 경우 비용은 월 $ 29.95 또는 Lambda에 대한 약 2.57 만 개의 요청이됩니다.

호스팅에 Lambda 또는 Amazon EC2를 사용하는 데는 장단점이 있으며 요구 사항과 비용이 있습니다. Lambda는 자주 사용하지 않을 때 Lambda의 콜드 시작 (5 초 시작)으로 인해 요구 사항이 부족한 사용량과 더 긴 지연 시간을 허용하는 경우 이상적인 선택이지만 많이 사용하지 않는 경우 Amazon EC2보다 저렴합니다. , 첫 번째 통화가 느릴 수 있습니다. 후속 요청은 더 빨라지지만 Lambda가 30 ~ 45 분 동안 유휴 상태에 있으면 콜드 시작 모드로 돌아갑니다.

반면에 Amazon EC2는 지연 시간이 짧은 호출이 항상 필요하거나 Lambda의 비용 (다음 차트 참조)보다 더 많은 요청을하는 경우 더 좋습니다.

최소 패키지 크기

DJL은 런타임에 딥 러닝 프레임 워크를 자동으로 다운로드하므로 패키지 크기를 줄일 수 있습니다. 다음 종속성을 사용합니다.

runtimeOnly "ai.djl.mxnet:mxnet-native-auto:1.7.0-backport"

이 자동 감지 종속성으로 인해 3MB 미만의 .zip 파일이 생성됩니다. 다운로드 된 MXNet 네이티브 라이브러리 파일은 /tmp 약 155MB의 공간을 차지하는 폴더. MKL 지원없이 MXNet의 사용자 지정 빌드를 사용하는 경우이를 50MB로 더 줄일 수 있습니다.

MXNet 네이티브 라이브러리는 S3 버킷에 저장되며 Lambda 시작 시간과 비교할 때 프레임 워크 다운로드 지연 시간은 무시할 수 있습니다.

모델 로딩

DJL 모델 동물원은 모델 배포를위한 여러 가지 쉬운 옵션을 제공합니다.

  • .zip 파일로 모델 번들링
  • 커스텀 모델 동물원에서 모델 불러 오기
  • S3 버킷에서 모델로드 (지원 아마존 세이지 메이커 훈련 된 모델 .tar.gz 형식)

MXNet 모델 동물원을 사용하여 모델을로드합니다. 기본적으로 모델을 지정하지 않았기 때문에 resnet-18 모델을 전달하여 변경할 수 있습니다. artifactId 요청의 매개 변수 :

aws lambda invoke --function-name DJL-Lambda --payload '{"artifactId": "squeezenet", "inputImageUrl":"https://djl-ai.s3.amazonaws.com/resources/images/kitten.jpg"}' build/output.json

제한 사항

다음의 특정 제한 특히 AWS Lambda에서 서버리스 API를 사용하는 경우 :

  • 이 글을 쓰는 시점에서 GPU 인스턴스는 아직 사용할 수 없습니다.
  • Lambda에는 512MB 제한이 있습니다. /tmp 폴더
  • 엔드 포인트를 자주 사용하지 않으면 콜드 스타트가 느려질 수 있습니다.

앞서 언급했듯이 Lambda에서 모델을 호스팅하는이 방법은 요청이 드물고 Lambda 콜드 시작으로 인해 더 높은 지연 시간 호출이 허용되는 경우에 이상적입니다. 요구 사항에 모든 요청에 ​​대해 짧은 지연 시간이 필요한 경우 AWS 엘라스틱 빈스토크 EC2 인스턴스와 함께.

결론

이 게시물에서는 DJL을 사용하여 서버리스 API를 쉽게 시작하는 방법을 시연했습니다. 이렇게하려면 S3 버킷, CloudFormation 스택 및 Lambda 함수를 생성하는 gradle 배포 명령을 실행하기 만하면됩니다. 이렇게하면 자체 딥 러닝 모델을 실행하기위한 매개 변수를 수락하는 엔드 포인트가 생성됩니다.

Lambda에 DJL을 사용하여 모델을 배포하는 것은 Lambda의 사용량이 적고 콜드 시작 특성으로 인해 높은 지연 시간을 허용하는 경우 훌륭하고 비용 효율적인 방법입니다. DJL을 사용하면 팀이 ML 모델을 설계, 구축 및 개선하는 데 더 집중하는 동시에 비용을 낮추고 배포 프로세스를 쉽고 확장 가능하게 유지할 수 있습니다.

DJL 및 기타 기능에 대한 자세한 내용은 딥 자바 라이브러리.

우리를 따라 GitHub 레포, 데모 저장소, 여유 채널트위터 DJL의 더 많은 문서와 예제를 위해!


저자에 관하여

프랭크 리우 AWS Deep Learning의 소프트웨어 엔지니어입니다. 그는 소프트웨어 엔지니어와 과학자를위한 혁신적인 딥 러닝 도구를 구축하는 데 중점을 둡니다. 여가 시간에는 친구 및 가족과 함께 하이킹을 즐깁니다.

출처 : https://aws.amazon.com/blogs/machine-learning/model-serving-made-easier-with-deep-java-library-and-aws-lambda/

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?