Como adaptar o próprio contêiner de inferência - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como adaptar o próprio contêiner de inferência

Se você não puder usar nenhuma das imagens listadas na Use imagens pré-construídas do SageMaker Docker Amazon SageMaker para seu caso de uso, você pode criar seu próprio contêiner Docker e usá-lo internamente SageMaker para treinamento e inferência. Para ser compatível com SageMaker, seu contêiner deve ter as seguintes características:

  • Seu contêiner deve ter uma listagem de servidores web na porta8080.

  • Seu contêiner deve aceitar POST solicitações para os endpoints /invocations e /ping em tempo real. As solicitações que você envia para esses endpoints devem ser retornadas em 60 segundos e ter um tamanho máximo de 6 MB.

Para obter mais informações e um exemplo de como criar seu próprio contêiner do Docker para treinamento e inferência SageMaker, consulte Como criar seu próprio contêiner de algoritmo.

O guia a seguir mostra como usar um JupyterLab espaço com o Amazon SageMaker Studio Classic para adaptar um contêiner de inferência para funcionar com SageMaker hospedagem. O exemplo usa um servidor NGINX web, Gunicorn como uma interface de gateway de servidor Python web e Flask como uma estrutura de aplicativo web. Você pode usar aplicativos diferentes para adaptar seu contêiner, desde que ele atenda aos requisitos listados anteriormente. Para obter mais informações sobre como usar seu próprio código de inferência, consulteUsar seu próprio código de inferência com serviços de hospedagem.

Adapte seu contêiner de inferência

Use as etapas a seguir para adaptar seu próprio contêiner de inferência para funcionar com SageMaker hospedagem. O exemplo mostrado nas etapas a seguir usa um modelo pré-treinado de Reconhecimento de Entidade Nomeada (NER) que usa a biblioteca de processamento de linguagem natural (NLP) do SpacY paraPython:

  • A Dockerfile para criar o contêiner que contém o NER modelo.

  • Scripts de inferência para servir ao NER modelo.

Se você adaptar esse exemplo para seu caso de uso, deverá usar scripts a Dockerfile e de inferência necessários para implantar e servir seu modelo.

  1. Crie JupyterLab espaço com o Amazon SageMaker Studio Classic (opcional).

    Você pode usar qualquer notebook para executar scripts e adaptar seu contêiner de inferência à SageMaker hospedagem. Este exemplo mostra como usar um JupyterLab espaço no Amazon SageMaker Studio Classic para iniciar um JupyterLab aplicativo que vem com uma imagem SageMaker de distribuição. Para ter mais informações, consulte SageMaker JupyterLab.

  2. Faça upload de um Docker arquivo e scripts de inferência.

    1. Crie uma nova pasta no seu diretório pessoal. Se você estiver usandoJupyterLab, no canto superior esquerdo, escolha o ícone Nova pasta e insira um nome de pasta para conter sua. Dockerfile Neste exemplo, a pasta é chamadadocker_test_folder.

    2. Faça upload de um arquivo de Dockerfile texto em sua nova pasta. Veja a seguir um exemplo Dockerfile que cria um Docker contêiner com um modelo pré-treinado de Reconhecimento de Entidade Nomeada (NER) da SpacY, os aplicativos e as variáveis de ambiente necessárias para executar o exemplo:

      FROM python:3.8 RUN apt-get -y update && apt-get install -y --no-install-recommends \ wget \ python3 \ nginx \ ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN wget https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py && \ pip install flask gevent gunicorn && \ rm -rf /root/.cache #pre-trained model package installation RUN pip install spacy RUN python -m spacy download en # Set environment variables ENV PYTHONUNBUFFERED=TRUE ENV PYTHONDONTWRITEBYTECODE=TRUE ENV PATH="/opt/program:${PATH}" COPY NER /opt/program WORKDIR /opt/program

      No exemplo de código anterior, a variável de ambiente PYTHONUNBUFFERED Python evita armazenar em buffer o fluxo de saída padrão, o que permite uma entrega mais rápida de registros ao usuário. A variável de ambiente PYTHONDONTWRITEBYTECODE evita Python a gravação de .pyc arquivos de bytecode compilados, que são desnecessários para esse caso de uso. A variável de ambiente PATH é usada para identificar a localização dos serve programas train e quando o contêiner é invocado.

    3. Crie um novo diretório dentro de sua nova pasta para conter scripts para servir ao seu modelo. Este exemplo usa um diretório chamadoNER, que contém os seguintes scripts necessários para executar este exemplo:

      • predictor.py— Um Python script que contém a lógica para carregar e realizar inferências com seu modelo.

      • nginx.conf— Um script para configurar um servidor web.

      • serve— Um script que inicia um servidor de inferência.

      • wsgi.py— Um script auxiliar para servir a um modelo.

      Importante

      Se você copiar seus scripts de inferência em um caderno que termina em .ipynb e renomeá-los, seu script pode conter caracteres de formatação que impedirão a implantação do endpoint. Em vez disso, crie um arquivo de texto e renomeie-o.

    4. Faça upload de um script para disponibilizar seu modelo para inferência. A seguir está um exemplo de script chamado predictor.py that usa Flask para fornecer os /invocations endpoints /ping e:

      from flask import Flask import flask import spacy import os import json import logging #Load in model nlp = spacy.load('en_core_web_sm') #If you plan to use a your own model artifacts, #your model artifacts should be stored in /opt/ml/model/ # The flask app for serving predictions app = Flask(__name__) @app.route('/ping', methods=['GET']) def ping(): # Check if the classifier was loaded correctly health = nlp is not None status = 200 if health else 404 return flask.Response(response= '\n', status=status, mimetype='application/json') @app.route('/invocations', methods=['POST']) def transformation(): #Process input input_json = flask.request.get_json() resp = input_json['input'] #NER doc = nlp(resp) entities = [(X.text, X.label_) for X in doc.ents] # Transform predictions to JSON result = { 'output': entities } resultjson = json.dumps(result) return flask.Response(response=resultjson, status=200, mimetype='application/json')

      O /ping endpoint no exemplo de script anterior retorna um código de status de 200 se o modelo foi carregado corretamente e 404 se o modelo foi carregado incorretamente. O /invocations endpoint processa uma solicitação formatada emJSON, extrai o campo de entrada e usa o NER modelo para identificar e armazenar entidades nas entidades variáveis. O Flask aplicativo retorna a resposta que contém essas entidades. Para obter mais informações sobre essas solicitações de saúde obrigatórias, consulteComo o contêiner deve responder a solicitações de verificação de integridade (ping).

    5. Faça upload de um script para iniciar um servidor de inferência. O exemplo de script a seguir é serve usado Gunicorn como servidor de aplicativos e Nginx como servidor web:

      #!/usr/bin/env python # This file implements the scoring service shell. You don't necessarily need to modify it for various # algorithms. It starts nginx and gunicorn with the correct configurations and then simply waits until # gunicorn exits. # # The flask server is specified to be the app object in wsgi.py # # We set the following parameters: # # Parameter Environment Variable Default Value # --------- -------------------- ------------- # number of workers MODEL_SERVER_WORKERS the number of CPU cores # timeout MODEL_SERVER_TIMEOUT 60 seconds import multiprocessing import os import signal import subprocess import sys cpu_count = multiprocessing.cpu_count() model_server_timeout = os.environ.get('MODEL_SERVER_TIMEOUT', 60) model_server_workers = int(os.environ.get('MODEL_SERVER_WORKERS', cpu_count)) def sigterm_handler(nginx_pid, gunicorn_pid): try: os.kill(nginx_pid, signal.SIGQUIT) except OSError: pass try: os.kill(gunicorn_pid, signal.SIGTERM) except OSError: pass sys.exit(0) def start_server(): print('Starting the inference server with {} workers.'.format(model_server_workers)) # link the log streams to stdout/err so they will be logged to the container logs subprocess.check_call(['ln', '-sf', '/dev/stdout', '/var/log/nginx/access.log']) subprocess.check_call(['ln', '-sf', '/dev/stderr', '/var/log/nginx/error.log']) nginx = subprocess.Popen(['nginx', '-c', '/opt/program/nginx.conf']) gunicorn = subprocess.Popen(['gunicorn', '--timeout', str(model_server_timeout), '-k', 'sync', '-b', 'unix:/tmp/gunicorn.sock', '-w', str(model_server_workers), 'wsgi:app']) signal.signal(signal.SIGTERM, lambda a, b: sigterm_handler(nginx.pid, gunicorn.pid)) # Exit the inference server upon exit of either subprocess pids = set([nginx.pid, gunicorn.pid]) while True: pid, _ = os.wait() if pid in pids: break sigterm_handler(nginx.pid, gunicorn.pid) print('Inference server exiting') # The main routine to invoke the start function. if __name__ == '__main__': start_server()

      O exemplo de script anterior define uma função de manipulador de sinalsigterm_handler, que desliga os Gunicorn subprocessos Nginx e quando recebe um sinal. SIGTERM Uma start_server função inicia o manipulador de sinal, inicia e monitora os Nginx Gunicorn subprocessos e captura fluxos de log.

    6. Faça upload de um script para configurar seu servidor web. O exemplo de script a seguirnginx.conf, chamado, configura um servidor Nginx web usando Gunicorn como servidor de aplicativos para servir seu modelo para inferência:

      worker_processes 1; daemon off; # Prevent forking pid /tmp/nginx.pid; error_log /var/log/nginx/error.log; events { # defaults } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log combined; upstream gunicorn { server unix:/tmp/gunicorn.sock; } server { listen 8080 deferred; client_max_body_size 5m; keepalive_timeout 5; proxy_read_timeout 1200s; location ~ ^/(ping|invocations) { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://gunicorn; } location / { return 404 "{}"; } } }

      O exemplo de script anterior é configurado Nginx para ser executado em primeiro plano, define o local para capturar e define upstream como o error_log soquete do Gunicorn servidor. O servidor configura o bloco do servidor para escutar na porta8080, define limites no tamanho do corpo da solicitação do cliente e nos valores de tempo limite. O bloco do servidor encaminha solicitações contendo um /ping ou /invocations caminhos para o Gunicorn server http://gunicorn e retorna um 404 erro para outros caminhos.

    7. Faça upload de todos os outros scripts necessários para atender ao seu modelo. Este exemplo precisa do seguinte exemplo de script chamado wsgi.py para ajudar a Gunicorn encontrar seu aplicativo:

      import predictor as myapp # This is just a simple wrapper for gunicorn to find your app. # If you want to change the algorithm file, simply change "predictor" above to the # new file. app = myapp.app

    Na pastadocker_test_folder, sua estrutura de diretórios deve conter a Dockerfile e a pastaNER. A NER pasta deve conter os arquivosnginx.conf,, predictor.pyserve, e da wsgi.py seguinte forma:

    The Dockerfile structure has inference scripts under the NER directory next to the Dockerfile.

  3. Crie seu próprio contêiner.

    Na pastadocker_test_folder, crie seu Docker contêiner. O comando de exemplo a seguir criará o Docker contêiner que está configurado em seuDockerfile:

    ! docker build -t byo-container-test .

    O comando anterior criará um contêiner chamado byo-container-test no diretório de trabalho atual. Para obter mais informações sobre os parâmetros de Docker construção, consulte Argumentos de construção.

    nota

    Se você receber a seguinte mensagem de erro que Docker não consegue encontrar o.Dockerfile, verifique se o Dockerfile tem o nome correto e foi salvo no diretório.

    unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ec2-user/SageMaker/docker_test_folder/Dockerfile: no such file or directory

    Dockerprocura um arquivo chamado especificamente Dockerfile sem nenhuma extensão no diretório atual. Se você o nomeou de outra forma, poderá passar o nome do arquivo manualmente com a sinalização -f. Por exemplo, se você nomeou seu Dockerfile comoDockerfile-text.txt, crie seu Docker contêiner usando a -f sinalização seguida pelo seu arquivo da seguinte forma:

    ! docker build -t byo-container-test -f Dockerfile-text.txt .
  4. Envie sua Docker imagem para um Amazon Elastic Container Registry (Amazon ECR)

    Em uma célula de notebook, envie sua Docker imagem para um ECR. O exemplo de código a seguir mostra como criar seu contêiner localmente, fazer login e enviá-lo para um ECR:

    %%sh # Name of algo -> ECR algorithm_name=sm-pretrained-spacy #make serve executable chmod +x NER/serve account=$(aws sts get-caller-identity --query Account --output text) # Region, defaults to us-west-2 region=$(aws configure get region) region=${region:-us-east-1} fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest" # If the repository doesn't exist in ECR, create it. aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1 if [ $? -ne 0 ] then aws ecr create-repository --repository-name "${algorithm_name}" > /dev/nullfi # Get the login command from ECR and execute it directly aws ecr get-login-password --region ${region}|docker login --username AWS --password-stdin ${fullname} # Build the docker image locally with the image name and then push it to ECR # with the full name. docker build -t ${algorithm_name} . docker tag ${algorithm_name} ${fullname} docker push ${fullname}

    No exemplo anterior, mostra como executar as seguintes etapas necessárias para enviar o contêiner Docker de exemplo para um ECR:

    1. Defina o nome do algoritmo comosm-pretrained-spacy.

    2. Torne o serve arquivo dentro da NER pasta executável.

    3. Defina Região da AWS o.

    4. Crie um ECR se ele ainda não existir.

    5. Faça login no ECR.

    6. Crie o Docker contêiner localmente.

    7. Empurre a Docker imagem para o ECR.

  5. Configurar o SageMaker cliente

    Se você quiser usar serviços de SageMaker hospedagem para inferência, deverá criar um modelo, criar uma configuração de endpoint e criar um endpoint. Para obter inferências do seu endpoint, você pode usar o cliente SageMaker boto3 Runtime para invocar seu endpoint. O código a seguir mostra como configurar o SageMaker cliente e o cliente SageMaker Runtime usando o cliente SageMaker boto3:

    import boto3 from sagemaker import get_execution_role sm_client = boto3.client(service_name='sagemaker') runtime_sm_client = boto3.client(service_name='sagemaker-runtime') account_id = boto3.client('sts').get_caller_identity()['Account'] region = boto3.Session().region_name #used to store model artifacts which SageMaker will extract to /opt/ml/model in the container, #in this example case we will not be making use of S3 to store the model artifacts #s3_bucket = '<S3Bucket>' role = get_execution_role()

    No exemplo de código anterior, o bucket do Amazon S3 não é usado, mas inserido como um comentário para mostrar como armazenar artefatos do modelo.

    Se você receber um erro de permissão depois de executar o exemplo de código anterior, talvez seja necessário adicionar permissões à sua função do IAM. Para obter mais informações sobre perfis do IAM, consulte Gerente de SageMaker funções da Amazon. Para obter mais informações sobre como adicionar permissões à sua função atual, consulteAWS Políticas gerenciadas para a Amazon SageMaker.

  6. Crie seu modelo.

    Se você quiser usar serviços de SageMaker hospedagem para inferência, deverá criar um modelo em SageMaker. O exemplo de código a seguir mostra como criar o spaCy NER modelo dentro de SageMaker:

    from time import gmtime, strftime model_name = 'spacy-nermodel-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) # MODEL S3 URL containing model atrifacts as either model.tar.gz or extracted artifacts. # Here we are not #model_url = 's3://{}/spacy/'.format(s3_bucket) container = '{}.dkr.ecr.{}.amazonaws.com/sm-pretrained-spacy:latest'.format(account_id, region) instance_type = 'ml.c5d.18xlarge' print('Model name: ' + model_name) #print('Model data Url: ' + model_url) print('Container image: ' + container) container = { 'Image': container } create_model_response = sm_client.create_model( ModelName = model_name, ExecutionRoleArn = role, Containers = [container]) print("Model Arn: " + create_model_response['ModelArn'])

    O exemplo de código anterior mostra como definir um model_url usando o s3_bucket se você fosse usar o bucket do Amazon S3 a partir dos comentários na Etapa 5 e define o URI do ECR para a imagem do contêiner. Os exemplos de código anteriores definem ml.c5d.18xlarge como o tipo de instância. Você também pode escolher um tipo de instância diferente. Para obter mais informações sobre os tipos de instância disponíveis, consulte Tipos de instância do Amazon EC2.

    No exemplo de código anterior, a Image chave aponta para o URI da imagem do contêiner. A create_model_response definição usa o create_model method para criar um modelo e retornar o nome do modelo, a função e uma lista contendo as informações do contêiner.

    Veja a seguir um exemplo de saída do script anterior:

    Model name: spacy-nermodel-YYYY-MM-DD-HH-MM-SS Model data Url: s3://spacy-sagemaker-us-east-1-bucket/spacy/ Container image: 123456789012.dkr.ecr.us-east-2.amazonaws.com/sm-pretrained-spacy:latest Model Arn: arn:aws:sagemaker:us-east-2:123456789012:model/spacy-nermodel-YYYY-MM-DD-HH-MM-SS
    1. Configurar e criar um endpoint

      Para usar a SageMaker hospedagem para inferência, você também deve configurar e criar um endpoint. SageMaker usará esse endpoint para inferência. O exemplo de configuração a seguir mostra como gerar e configurar um endpoint com o tipo de instância e o nome do modelo que você definiu anteriormente:

      endpoint_config_name = 'spacy-ner-config' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print('Endpoint config name: ' + endpoint_config_name) create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ProductionVariants=[{ 'InstanceType': instance_type, 'InitialInstanceCount': 1, 'InitialVariantWeight': 1, 'ModelName': model_name, 'VariantName': 'AllTraffic'}]) print("Endpoint config Arn: " + create_endpoint_config_response['EndpointConfigArn'])

      No exemplo de configuração anterior, create_endpoint_config_response associa o a um nome de configuração de endpoint exclusivo criado model_name com um endpoint_config_name carimbo de data/hora.

      Veja a seguir um exemplo de saída do script anterior:

      Endpoint config name: spacy-ner-configYYYY-MM-DD-HH-MM-SS Endpoint config Arn: arn:aws:sagemaker:us-east-2:123456789012:endpoint-config/spacy-ner-config-MM-DD-HH-MM-SS

      Para obter mais informações sobre erros de endpoint, consulte Por que meu SageMaker endpoint da Amazon entra em estado de falha quando eu crio ou atualizo um endpoint?

    2. Crie um endpoint e aguarde até que o endpoint esteja em serviço.

      O exemplo de código a seguir cria o endpoint usando a configuração do exemplo de configuração anterior e implanta o modelo:

      %%time import time endpoint_name = 'spacy-ner-endpoint' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print('Endpoint name: ' + endpoint_name) create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print('Endpoint Arn: ' + create_endpoint_response['EndpointArn']) resp = sm_client.describe_endpoint(EndpointName=endpoint_name) status = resp['EndpointStatus'] print("Endpoint Status: " + status) print('Waiting for {} endpoint to be in service...'.format(endpoint_name)) waiter = sm_client.get_waiter('endpoint_in_service') waiter.wait(EndpointName=endpoint_name)

      No exemplo de código anterior, o create_endpoint método cria o endpoint com o nome do endpoint gerado criado no exemplo de código anterior e imprime o Amazon Resource Name do endpoint. O describe_endpoint método retorna informações sobre o endpoint e seu status. Um SageMaker garçom espera que o endpoint esteja em serviço.

  7. Teste seu endpoint.

    Quando seu endpoint estiver em serviço, envie uma solicitação de invocação para seu endpoint. O exemplo de código a seguir mostra como enviar uma solicitação de teste para seu endpoint:

    import json content_type = "application/json" request_body = {"input": "This is a test with NER in America with \ Amazon and Microsoft in Seattle, writing random stuff."} #Serialize data for endpoint #data = json.loads(json.dumps(request_body)) payload = json.dumps(request_body) #Endpoint invocation response = runtime_sm_client.invoke_endpoint( EndpointName=endpoint_name, ContentType=content_type, Body=payload) #Parse results result = json.loads(response['Body'].read().decode())['output'] result

    No exemplo de código anterior, o método json.dumps serializa o request_body em uma string formatada em JSON e a salva na carga útil da variável. Em seguida, o cliente SageMaker Runtime usa o método invoke endpoint para enviar a carga para seu endpoint. O resultado contém a resposta do seu endpoint após extrair o campo de saída.

    O exemplo de código anterior deve retornar a seguinte saída:

    [['NER', 'ORG'], ['America', 'GPE'], ['Amazon', 'ORG'], ['Microsoft', 'ORG'], ['Seattle', 'GPE']]
  8. Exclua seu endpoint

    Depois de concluir suas invocações, exclua seu endpoint para conservar recursos. O exemplo de código a seguir mostra como excluir seu endpoint:

    sm_client.delete_endpoint(EndpointName=endpoint_name) sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name) sm_client.delete_model(ModelName=model_name)

    Para obter um caderno completo contendo o código deste exemplo, consulte BYOC-single-model.

Solução de problemas na implantação do seu contêiner

Se seu endpoint não foi implantado, verifique os registros de CloudWatch eventos da Amazon da seguinte forma:

  1. No painel de navegação SageMaker do console https://console.aws.amazon.com/sagemaker/, escolha Inferência.

  2. Em Inferência, escolha Endpoints.

  3. Encontre seu endpoint em Nome e clique no nome do endpoint. Neste exemplo, o nome seguiria a convenção spacy-ner-configYYYY-MM-DD-HH-MM-SS de nomenclatura.

  4. Em Resumo do endpoint, escolha o link em Model container logs.

  5. Escolha o fluxo de log mais recente na caixa Streams de log.

Use a lista a seguir para solucionar problemas de implantação do seu endpoint. Se precisar de mais ajuda, entre em contato com o AWS Support ou AWS Developer Forums for Amazon SageMaker.

Tópicos

  • Erro de nome

  • Cota insuficiente

  • Erro de tempo limite do upstream

Erro de nome

Se os registros indicaremNameError: name 'null' is not defined, certifique-se de que seus scripts não tenham sido criados em um caderno que termina em .ipnyb e depois renomeados para outro nome de arquivo, comoDockerfile. Quando você cria um notebook, a formatação de caracteres pode impedir que seu endpoint seja implantado. Se você receber esse erro e alterar seus scripts para corrigi-lo, talvez seja necessário reiniciar o kernel para que as alterações entrem em vigor.

Cota insuficiente

Se você receber um ResourceLimitExceeded erro, deverá solicitar uma cota adicional da seguinte forma:

Solicite um aumento AWS de Quotas de Serviço
  1. Recupere o nome da instância, a cota atual e a cota necessária na mensagem de erro na tela. Por exemplo, no seguinte exemplo de erro:

    • O nome da instância éml.c5d.18xlarge.

    • A cota atual do número a seguir current utilization é1 instances.

    • A cota adicional exigida do número a seguir request delta é1 instances.

    O exemplo de erro é o seguinte:

    ResourceLimitExceeded: An error occurred (ResourceLimitExceeded) when calling the CreateEndpoint operation: The account-level service limit 'ml.c5d.18xlarge for endpoint usage' is 1 Instances, with current utilization of 1 Instances and a request delta of 1 Instances. Please use AWS Service Quotas to request an increase for this quota. If AWS Service Quotas is not available, contact AWS support to request an increase for this quota.
  2. Faça login AWS Management Console e abra o console Service Quotas.

  3. No painel de navegação, em Gerenciar cotas, insira Amazon. SageMaker

  4. Escolha Exibir cotas.

  5. Na barra de pesquisa, em Cotas de serviço, insira o nome da instância da Etapa 1. Por exemplo, usando as informações contidas na mensagem de erro da Etapa 1, insiraml.c5d.18xlarge.

  6. Escolha o nome da cota que aparece ao lado do nome da instância e termina com para uso do endpoint. Por exemplo, usando as informações contidas na mensagem de erro da Etapa 1, escolha ml.g5.12xlarge o uso do endpoint.

  7. Escolha Solicitar aumento no nível da conta.

  8. Em Aumentar valor da cota, insira a cota necessária a partir das informações fornecidas na mensagem de erro da Etapa 1. Insira o total de current utilization request delta e. No exemplo anterior, o erro current utilization é 1 Instances e o request delta é1 Instances. Neste exemplo, solicite uma cota de 2 para fornecer a cota necessária.

  9. Escolha Solicitar.

  10. Escolha Histórico de solicitações de cotas no painel de navegação.

  11. Quando o status mudar de Pendente para Aprovado, execute seu trabalho novamente. Talvez seja necessário atualizar seu navegador para ver a alteração.

Para obter mais informações sobre como solicitar um aumento em sua cota, consulte Solicitando um aumento de cota.

Erro de tempo limite do upstream

Se você receber uma upstream timed out (110: Connection timed out) mensagem de erro, tente o seguinte:

  • Reduza a latência do contêiner ou aumente o limite de tempo limite do contêiner. SageMaker exige que seu contêiner responda a uma solicitação em 60 segundos.

  • Aumente a quantidade de tempo antes que seu servidor web espere por uma resposta do modelo.

Para obter mais informações sobre erros de tempo limite, consulte Como posso resolver o erro de SageMaker inferência da Amazon “upstream timed out (110: tempo limite de conexão) ao ler o cabeçalho de resposta do upstream”?