Error message:
Traceback (most recent call last):
File "/var/runtime/bootstrap.py", line 60, in <module>
main()
File "/var/runtime/bootstrap.py", line 55, in main
add_default_site_directories()
...
중략
...
File "/var/lang/lib/python3.9/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 64: invalid start byte
Cause:
딥러닝 모델 파일(.pth)을 AWS lambda working directory에 COPY한 후, decode하는 과정에서 에러 발생
Solution:
① Dockerfile에 COPY 경로를 정확하게 적었는지 확인하기
아래 예시처럼 ${LAMBDA_TASK_ROOT}
에 해당 파일이나 디렉토리가 잘 복사되도록 작성한다.
사실 어차피 base image에서 ${LAMBDA_TASK_ROOT}
를 WORKDIR로 미리 설정하기 때문에 아래와 같이 명시하는 것이 의무는 아닌 것 같지만... 혹시 모르니까 잘 적어주었다.
FROM public.ecr.aws/lambda/python:3.9
COPY requirements.txt .
RUN pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host download.pytorch.org --trusted-host=files.pythonhosted.org --no-cache-dir -r requirements.txt --no-deps --target "${LAMBDA_TASK_ROOT}"
RUN yum -y update && yum -y install mesa-libGL
COPY app.py ${LAMBDA_TASK_ROOT}
COPY model ${LAMBDA_TASK_ROOT}/model
CMD [ "app.handler" ]
② 모델 파일(.pth)을 직접 COPY하지 않고 S3에서 가져와서 사용하기
사실 이게 크리티컬했다.
원래는 모델 파일도 함께 ${LAMBDA_TASK_ROOT}
에 COPY하여 컨테이너 이미지를 빌드했다.
그런데 그렇게 했더니 어떤 방식으로도 decodeerror가 해결되지 않았다.
결국 S3에 모델 파일을 올려두었다가 람다 함수가 실행될 때 다운로드해서 로드하는 것으로 변경했다.
그랬더니 바로 해결!
이때 주의할 것은 다운로드 경로를 /tmp
디렉토리 안에 담아야 한다는 것이다.
import boto3
s3_client = boto3.client("s3")
net = DeeplearningModel(
encoder_name='resnet50',
in_channels=3,
classes=1
)
s3_client.download_file("BUCKET_NAME", "MODEL_FILE.pth", "/tmp/MODEL_FILE.pth")
def handler(event, context):
return {
"statusCode": 200,
"body": json.dumps(DATA)
}
반응형
'공부하며 성장하기 > Fixing Errors' 카테고리의 다른 글
Docker Desktop shutting down 해결 (0) | 2024.02.22 |
---|---|
Loss function returned Nan values 해결 (0) | 2023.12.08 |
torch.load 시 _pickle.UnpicklingError: invalid load key 해결 (0) | 2022.10.29 |
requirements.txt에서 URL로 PyTorch 설치하기 (1) | 2022.09.21 |
torch.cuda.is_available() False 해결 (2) | 2022.06.11 |