Amazon SageMaker 엔드포인트를 배포하거나 BatchTransform 작업을 실행하면 연결 시간이 초과되면서 다음과 같은 오류가 발생합니다.
"upstream timed out (110: Connection timed out) while reading response header from upstream, client: 169.xxx.xxx.xxx, server: , request: "POST /invocations HTTP/1.1", upstream: "http://unix:/tmp/gunicorn.sock/invocations" , host: "169.xxx.xxx.xxx:8080"
간략한 설명
이 오류는 NGINX와 웹 서버 간의 연결에 문제가 있음을 나타냅니다. 이 두 구성 요소는 사용자 자체 컨테이너를 사용하든 사전 구축된 컨테이너를 사용하든 관계없이 모델 컨테이너에서 실행됩니다. 이러한 구성 요소는 SageMaker 호스팅 또는 배치 변환과 직접 관련이 없습니다. 하지만 NGINX와 웹 서버 간의 연결 시간이 초과되면 SageMaker는 /invocations 엔드포인트에서 추론을 수신하지 못합니다.
이 문제를 해결하려면 다음을 수행합니다.
- 알고리즘 컨테이너의 지연 시간을 줄이거나 컨테이너의 제한 시간 한도를 늘립니다.
- Nginx.conf 제한 시간을 늘려 설정합니다.
해결 방법
알고리즘 컨테이너의 지연 시간을 줄이거나 제한 시간 한도를 늘립니다.
- 호스팅 서비스에 대한 추론 코드를 실행하는 경우: 모델 컨테이너는 60초 이내에 요청에 응답해야 합니다. 모델 자체의 최대 처리 시간은 60초입니다. 모델에 50~60초의 처리 시간이 필요하다면 SDK 소켓 시간 제한을 70초로 설정합니다. 자세한 내용은 컨테이너의 추론 요청 응답 방법을 참조하세요.
- 배치 변환에 대한 추론 코드를 실행하는 경우: ModelClientConfig를 사용하여 InvocationsTimeoutInSeconds 및 InvocationsMaxRetries 파라미터를 구성합니다.
Amazon SageMaker는 컨테이너에서 CreateModel 및 CreateTransformJob에 명시된 환경 변수를 설정합니다. 다음 API 파라미터를 조정하여 알고리즘 컨테이너의 지연 시간을 줄입니다. 예를 들어 입력이 분할 가능한 경우 변환 작업을 만들 때 MaxPayloadInMB 필드를 설정하여 각 요청의 페이로드 크기를 제한합니다.
- MaxPayloadInMB: 컨테이너로 전송되는 페이로드의 최대 크기입니다. 컨테이너가 배치 변환을 신속하게 처리할 수 있는 경우 이 속성의 값을 늘립니다. 배치 변환이 예상보다 오래 걸리는 경우 이 속성의 값을 줄입니다.
- MaxConcurrentTransforms: 기본값은 1입니다. 둘 이상의 NGINX 작업자가 있는 경우 이 설정을 늘립니다.
- BatchStrategy: 미니 배치에 가능하면 많은 레코드를 넣으려면(최대 MaxPayloadInMB한도까지) [BatchStrategy]를 [MultiRecord]로 설정하고 [SplitType]을 [Line]으로 설정합니다.
Gunicorn을 구현하는 SageMaker 프레임워크 컨테이너를 사용하는 경우 다음 속성을 Docker 컨테이너에 환경 변수로 전달합니다.
- SAGEMAKER _MODEL_SERVER_TIMEOUT: Gunicorn 서버의 제한 시간입니다. 연결이 종료되기 전에 요청 처리에 더 많은 시간을 허용하려면 이 값을 늘립니다.
- SAGEMAKER _MODEL_SERVER_WORKERS: CPU 당 작업자 수입니다.
Nginx.conf 시간 제한 설정 값을 늘립니다.
Amazon SageMaker의 사전 빌드된 Docker 컨테이너 중 하나를 사용하는 경우 NGINX.conf 파일을 수정할 수 없습니다. 자체 Docker 컨테이너를 사용하는 경우에만 NGINX.conf를 수정할 수 있습니다.
NGINX 시간 제한은 Amazon SageMaker가 제한 시간 후에 연결을 종료하기 때문에 장애를 일으킬 수 있습니다. 컨테이너가 종료된 연결에서 읽거나 쓰려고 시도하면 요청이 실패합니다. 다음 중 하나 이상의 속성을 수정하여 네트워크 오버헤드를 수용하도록 합니다.
- proxy_read_timeout: request.send 호출 후 NGINX가 모델의 응답을 기다리는 시간입니다. 연결을 종료하기 전에 Amazon SageMaker가 요청을 처리하는 데 더 많은 시간을 허용하려면 이 값을 늘립니다.
- worker_processes: 인바운드 연결의 스레드 수입니다. 대부분의 경우 해당 값은 CPU 코어의 개수 이상이어야 합니다. 예를 들어 ml.m5.large와 같은 2코어 인스턴스 유형의 경우 이 속성을 2 이상으로 설정합니다.
- worker_connections: 각 작업자 프로세스에 대한 최대 동시 연결 수입니다. 시작값을 1024로 설정하는 것이 좋습니다.
구성 설정에 대한 자세한 내용은 NGINX 설명서의 Module ngx_http_proxy_module을 참조하세요.