본문 바로가기
DevOps/AWS

AWS Lambda Scikit-Learn Layer생성하기

by 푸푸망나뇽 2021. 8. 20.
반응형

AWS Lambda에서 모델링을 진행하면서 scikit learn을 사용하고싶었다.

그런데,,, 로컬에 설치하고 Layer로 더해줬는데 계속 모듈이 없다는 에러가 발생했다ㅠ

그래서 구글링을 해본결과 AWS Linux환경에 맞는 모듈을 설치해야하는 것을 알았다.

 

그래서 AWS Linux를 도커로 띄우고 컨테이너안에서 모듈을 설치해준후 zip파일로 만들어주기로하였다!

 


우선 도커를 설치해야한다. 

도커 설치 및 실행은 도커 홈페이지에서 다운받고 설치 후 실행시켜주면 된다.

 

그 후 AWS Linux 컨테이너 실행 및 접속한다.

아래 명령어로 로컬  파이썬 모듈을 설치해줄 python 디렉토리와 도커컨테이너의 볼륨을 연결하여 컨테이너 실행 및 접속한다.

Lambda에서 파이썬 Layer는 python 디렉토리에 저장되어있어야하므로 python디텍토리에 저장해야한다! 

 

docker run -it --rm -v $HOME/python/python:/app onema/amazonlinux4lambda bash

 

컨테이너 접속 후 모듈을 설치한다.

컨테이너에 접속하면 로컬 python 디렉토리와 연결한 app 파일로 이동하여 모듈을 설치한다.

numpy와 scipy는 AWS에서 제공하는 공식 Layer를 사용할것이므로 삭제해준다.

(용량제한이 있는 Lambda에서 Layer로 올리기엔 용량이 많다,,)

zip파일로 만들어주면 완성이다

cd /app
mkdir -p scikitlearn/python
cd scikitlearn/
pip3 install --ignore-installed --target=python scikit-learn
rm -rf python/numpy* python/scipy*
zip -r ../scikitlearn.zip .

 

 

컨테이너와 연결한 로컬 디렉토리로 가서 python.zip파일을 확인하고 

Lambda Layer를 생성 해주고 사용하면 잘 작동이 될것이다!

AWS에서 기본적으로 제공해주는 Layer인 AWSLambda-Python37-SciPy1x도 추가해주는것을 잊지말자

 


참고

 

https://onema.io/blog/scikit-learn-layer-for-aws-lambda/

반응형

댓글