Crie um trabalho de otimização 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á.

Crie um trabalho de otimização de inferência

Você pode criar um trabalho de otimização de inferência usando o Studio ou o SageMaker PythonSDK.

Preços de instâncias para trabalhos de otimização de inferência

Quando você cria um trabalho de otimização de inferência que aplica quantização ou compilação, SageMaker escolhe qual tipo de instância usar para executar o trabalho. Você é cobrado com base na instância usada.

Para ver os possíveis tipos de instância e seus detalhes de preços, consulte as informações de preços de otimização de inferência na página de SageMaker preços da Amazon.

Você não incorre em custos adicionais para trabalhos que aplicam decodificação especulativa.

Conclua as etapas a seguir para criar um trabalho de otimização de inferência no Studio.

Para começar a criar um trabalho de otimização
  1. No SageMaker Studio, crie um trabalho de otimização por meio de qualquer um dos seguintes caminhos:

    • Para criar um trabalho para um JumpStart modelo, faça o seguinte:

      1. No menu de navegação, selecione JumpStart.

      2. Na página Todos os modelos públicos, escolha um provedor de modelos e, em seguida, escolha um dos modelos que ofereça suporte à otimização.

      3. Na página de detalhes do modelo, escolha Otimizar. Esse botão está ativado somente para modelos que oferecem suporte à otimização.

      4. Na página Criar tarefa de otimização de inferência, alguns JumpStart modelos exigem que você assine um contrato de licença de usuário final (EULA) antes de continuar. Se solicitado, revise os termos da licença na seção Contrato de licença. Se os termos forem aceitáveis para seu caso de uso, marque a caixa de seleção Aceito o EULA e leia os termos e condições.

    • Para criar um trabalho para um JumpStart modelo ajustado, faça o seguinte:

      1. No menu de navegação, em Trabalhos, escolha Treinamento.

      2. Na página Tarefas de treinamento, escolha o nome de uma tarefa que você usou para ajustar um JumpStart modelo. Esses trabalhos têm o tipo JumpStart treinamento na coluna Tipo de trabalho.

      3. Na página de detalhes do trabalho de treinamento, escolha Otimizar.

    • Para criar um trabalho para um modelo personalizado, faça o seguinte:

      1. No menu de navegação, em Trabalhos, escolha Otimização de inferência.

      2. Escolha Create new job (Criar uma nova tarefa).

      3. Na página Criar tarefa de otimização de inferência, escolha Adicionar modelo.

      4. Na janela Adicionar modelo, escolha Modelo personalizado.

      5. Em Nome do modelo personalizado, insira um nome.

      6. Para o S3 URI, insira o URI local no Amazon S3 onde você armazenou os artefatos do seu modelo.

  2. Na página Criar tarefa de otimização de inferência, em Job name, você pode aceitar o nome padrão atribuído SageMaker . Ou, para inserir um nome de trabalho personalizado, escolha o campo Nome do trabalho e escolha Inserir nome do trabalho.

Para definir as configurações de otimização
  1. Em Tipo de instância de implantação, escolha o tipo de instância para o qual você deseja otimizar o modelo.

    O tipo de instância afeta as técnicas de otimização que você pode escolher. Para a maioria dos tipos que usam GPU hardware, as técnicas suportadas são quantização e decodificação especulativa. Se você escolher uma instância que usa silício personalizado, como a instância AWS Inferentia ml.inf2.8xlarge, a técnica suportada é a Compilação, que você pode usar para compilar o modelo para esse tipo específico de hardware.

  2. Selecione uma ou mais das técnicas de otimização que o Studio fornece:

    • Se você selecionar Quantização, escolha um tipo de dados para o tipo de dados Precisão.

    • Se você selecionar Decodificação especulativa, escolha o modelo de SageMaker rascunho se quiser usar o modelo de rascunho que SageMaker fornece. Ou, se quiser usar seu próprio modelo de rascunho, escolha Usar seu próprio modelo de rascunho e forneça o S3 URI que o localiza.

    • Se você escolher uma instância que usa silício personalizado, o Studio pode mostrar que a compilação é a única opção compatível. Nesse caso, o Studio seleciona essa opção para você.

  3. Em Saída, insira o URI de um local no Amazon S3. Lá, SageMaker armazena os artefatos do modelo otimizado que seu trabalho cria.

  4. (Opcional) Expanda as opções avançadas para obter um controle mais refinado sobre configuraçõesVPC, como a IAM função e as variáveis de ambiente. Para obter mais informações, consulte Opções avançadas abaixo.

  5. Quando terminar de configurar o trabalho, escolha Criar trabalho.

    O Studio mostra a página de detalhes do trabalho, que mostra o status do trabalho e todas as suas configurações.

Opções avançadas

Você pode definir as seguintes opções avançadas ao criar um trabalho de otimização de inferência.

Em Configurações, você pode definir as seguintes opções:

Tensor de grau paralelo

Um valor para o grau de paralelismo do tensor. O paralelismo de tensores é um tipo de paralelismo de modelo no qual pesos, gradientes e estados do otimizador específicos do modelo são divididos entre dispositivos. O valor deve dividir uniformemente o número de GPUs em seu cluster.

Tamanho máximo do token

O limite para o número de tokens a serem gerados pelo modelo. Observe que o modelo nem sempre gera o número máximo de tokens.

Simultaneidade

A capacidade de executar várias instâncias de um modelo no mesmo hardware subjacente. Use a simultaneidade para fornecer previsões para vários usuários e maximizar a utilização do hardware.

Tamanho do lote

Se seu modelo fizer inferência em lote, use essa opção para controlar o tamanho dos lotes que seu modelo processa.

A inferência em lote gera previsões de modelo em um lote de observações. É uma boa opção para grandes conjuntos de dados ou se você não precisar de uma resposta imediata a uma solicitação de inferência.

Em Segurança, você pode definir as seguintes opções:

IAMFunção

Uma IAM função que permite SageMaker realizar tarefas em seu nome. Durante a otimização do modelo, SageMaker precisa de sua permissão para:

  • Leia os dados de entrada de um bucket S3

  • Grave artefatos de modelo em um bucket S3

  • Grave registros no Amazon CloudWatch Logs

  • Publique métricas na Amazon CloudWatch

Você concede permissões para todas essas tarefas a uma IAM função.

Para obter mais informações, consulte Como usar funções SageMaker de execução.

KMSChave de criptografia

Uma chave em AWS Key Management Service (AWS KMS). SageMaker usa a chave they para criptografar os artefatos do modelo otimizado ao SageMaker fazer o upload do modelo para o Amazon S3.

VPC

SageMaker usa essas informações para criar interfaces de rede e anexá-las aos contêineres do modelo. As interfaces de rede fornecem aos contêineres modelo uma conexão de rede dentro da sua VPC que não está conectada à Internet. Eles também permitem que seu modelo se conecte a recursos em sua privacidadeVPC.

Para obter mais informações, consulte Dê aos endpoints SageMaker hospedados acesso aos recursos em sua Amazon VPC.

Ativar o isolamento da rede

Ative essa opção se quiser restringir o acesso à Internet do seu contêiner. Os contêineres que funcionam com isolamento de rede não podem fazer nenhuma chamada de rede de saída.

Em Definição avançada de contêiner, você pode definir as seguintes opções:

Condição de interrupção

Especifica um limite de quanto tempo um trabalho pode ser executado. Quando o trabalho atinge o limite de tempo, SageMaker termina o trabalho. Use essa opção para limitar os custos.

Tags

Pares de valores-chave associados ao trabalho de otimização.

Para obter mais informações sobre tags, consulte Como marcar seus AWS recursos no Referência geral da AWS.

Variáveis de ambiente

Pares de valores-chave que definem as variáveis de ambiente a serem definidas no contêiner do modelo.

Os exemplos de código a seguir demonstram como otimizar a inferência de modelos com o Amazon SageMaker PythonSDK.

exemplo Exemplo de configuração
import boto3 from sagemaker.serve.builder.model_builder import ModelBuilder from sagemaker.serve.builder.schema_builder import SchemaBuilder from sagemaker.session import Session from pathlib import Path
sagemaker_session = Session() artifacts_bucket_name = sagemaker_session.default_bucket() execution_role_arn = sagemaker_session.get_caller_identity_arn() js_model_id = "meta-textgeneration-llama-3-70b" instance_type = "ml.p4d.24xlarge"
exemplo definição do modelo
response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun." sample_input = { "inputs": "What is the largest planet in the solar system?", "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6}, } sample_output = [{"generated_text": response}] schema_builder = SchemaBuilder(sample_input, sample_output)
model_builder = ModelBuilder( model=js_model_id, schema_builder=schema_builder, sagemaker_session=sagemaker_session, role_arn=execution_role_arn, )
exemplo trabalho de otimização para quantização
optimized_model = model_builder.optimize( instance_type=instance_type, accept_eula=True, quantization_config={ "OverrideEnvironment": { "OPTION_QUANTIZE": "awq", }, }, output_path="s3://output_path", )
predictor = optimized_model.deploy( instance_type="ml.g5.12xlarge", accept_eula=True, )
exemplo trabalho de otimização para decodificação especulativa com o modelo preliminar SageMaker
optimized_model = model_builder.optimize( instance_type=instance_type, accept_eula=True, speculative_decoding_config={ "ModelProvider": "SAGEMAKER", }, )
predictor = optimized_model.deploy(accept_eula=True)
exemplo trabalho de otimização para decodificação especulativa com um modelo de rascunho personalizado
import huggingface_hub custom_draft_model_id="meta-llama/Meta-Llama-3-8B" hf_local_download_dir = download_dir huggingface_hub.snapshot_download( repo_id=custom_draft_model_id, revision="main", local_dir=hf_local_download_dir, token=hf_access_token, )
custom_draft_model_uri = sagemaker_session.upload_data( path=hf_local_download_dir.as_posix(), bucket=artifacts_bucket_name, key_prefix="spec-dec-custom-draft-model", )
optimized_model = model_builder.optimize( instance_type=instance_type, accept_eula=True, speculative_decoding_config={ "ModelSource": custom_draft_model_uri + "/", }, )
predictor = optimized_model.deploy(accept_eula=True)
exemplo trabalho de otimização para compilação
optimized_model = model_builder.optimize( instance_type="ml.inf2.48xlarge", accept_eula=True, compilation_config={ "OverrideEnvironment": { "OPTION_TENSOR_PARALLEL_DEGREE": "24", "OPTION_N_POSITIONS": "8192", "OPTION_DTYPE": "fp16", "OPTION_ROLLING_BATCH": "auto", "OPTION_MAX_ROLLING_BATCH_SIZE": "4", "OPTION_NEURON_OPTIMIZE_LEVEL": "2", } }, output_path="s3://output_path", )
predictor = optimized_model.deploy(accept_eula=True)
exemplo solicitação de inferência
predictor.predict(sample_input)
{'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
exemplo Limpeza
predictor.delete_model() predictor.delete_endpoint(delete_endpoint_config=True)