Creación de un trabajo de optimización de inferencias - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de un trabajo de optimización de inferencias

Puede crear un trabajo de optimización de inferencias mediante Studio o SageMaker AI PythonSDK. El trabajo optimiza el modelo mediante la aplicación de las técnicas que elija. Para obtener más información, consulte Técnicas de optimización.

Precios de instancias para trabajos de optimización de inferencias

Al crear un trabajo de optimización de inferencias que aplica la cuantificación o la compilación, la SageMaker IA elige qué tipo de instancia usar para ejecutar el trabajo. Se le cobrará en función de la instancia utilizada.

Para conocer los posibles tipos de instancias y los detalles de sus precios, consulta la información sobre precios de optimización por inferencia en la página de precios de Amazon SageMaker AI.

No se aplicarán costos adicionales en los trabajos en los que se aplique la decodificación especulativa.

Para ver los modelos compatibles que puede optimizar, consulteReferencia de modelos compatibles.

Complete los siguientes pasos para crear un trabajo de optimización de inferencias en Studio.

Cómo empezar a crear un trabajo de optimización
  1. En SageMaker AI Studio, cree un trabajo de optimización mediante cualquiera de las siguientes rutas:

    • Para crear un trabajo para un JumpStart modelo, haga lo siguiente:

      1. En el menú de navegación, elija JumpStart.

      2. En la página Todos los modelos públicos, elija un proveedor de modelos y, a continuación, seleccione uno de los modelos que admitan la optimización.

      3. En la página de detalles del modelo, elija Optimizar. Este botón solo está habilitado para los modelos que admiten la optimización.

      4. En la página Crear un trabajo de optimización de inferencias, algunos JumpStart modelos requieren que firme un acuerdo de licencia de usuario final (EULA) antes de poder continuar. Si se solicita, revise los términos de la licencia en la sección Acuerdo de licencia. Si los términos son aceptables para su caso de uso, active la casilla de verificación correspondiente a Acepto los EULA términos y condiciones y léalos.

    • Para crear una tarea para un JumpStart modelo ajustado, haga lo siguiente:

      1. En el panel de navegación, en Trabajos, elija Entrenamiento.

      2. En la página Trabajos de formación, elija el nombre de un trabajo que utilizó para ajustar un JumpStart modelo. Estos trabajos tienen el tipo JumpStartFormación en la columna Tipo de trabajo.

      3. En la página de detalles del trabajo de entrenamiento, elija Optimizar.

    • Para crear un trabajo para un modelo personalizado, haga lo siguiente:

      1. En el menú de navegación, en Trabajos, elija Optimización de inferencias.

      2. Elige Crear nuevo tarea.

      3. En la página Crear trabajo de optimización de inferencias, elija Agregar modelo.

      4. En la ventana Agregar modelo, elija Modelo personalizado.

      5. En Nombre de modelo personalizado, escriba un nombre.

      6. Para S3 URI, introduzca la URI ubicación en Amazon S3 en la que ha almacenado los artefactos del modelo.

  2. En la página Crear trabajo de optimización de inferencias, en Nombre del trabajo, puede aceptar el nombre predeterminado que la SageMaker IA asigna. O bien, para introducir un nombre de trabajo personalizado, seleccione el campo Nombre del trabajo y elija Introducir nombre del trabajo.

Establecimiento de las configuraciones de optimización
  1. En Tipo de instancia de implementación, elija el tipo de instancia para el que desee optimizar el modelo.

    El tipo de instancia afecta a las técnicas de optimización que puede elegir. Para la mayoría de los tipos que utilizan GPU hardware, las técnicas admitidas son la cuantificación y la decodificación especulativa. Si eliges una instancia que usa silicio personalizado, como la instancia de AWS Inferentia ml.inf2.8xlarge, la técnica admitida es la compilación, que puedes usar para compilar el modelo para ese tipo de hardware específico.

  2. Seleccione una o varias de las técnicas de optimización que Studio proporciona:

    • Si selecciona Cuantización, elija un tipo de datos para la opción Tipo de datos de precisión.

    • Si seleccionas Decodificación especulativa, elige una de las siguientes opciones:

      • Utilizar el modelo de borrador de SageMaker IA: elija utilizar el modelo de borrador que proporciona la SageMaker IA.

        nota

        Si opta por utilizar el modelo de borrador de SageMaker IA, también debe habilitar el aislamiento de la red. Studio ofrece esta opción en Seguridad.

      • Elegir modelo de JumpStart borrador: elija seleccionar un modelo del JumpStart catálogo para usarlo como modelo de borrador.

      • Elija su propio modelo de borrador: elija usar su propio modelo de borrador y proporcione el S3 URI que lo ubica.

    • Si selecciona Carga rápida del modelo, Studio muestra la variable de OPTION_TENSOR_PARALLEL_DEGREE entorno. Utilice el campo Valor para establecer el grado de paralelismo del tensor. El valor debe dividir GPUs en partes iguales el número de instancias que haya elegido como tipo de instancia de despliegue. Por ejemplo, para fragmentar el modelo mientras usas una instancia con 8GPUs, usa los valores 2, 4 u 8.

    • Si estableces el tipo de instancia de despliegue en una instancia de AWS Inferentia o AWS Trainium, Studio podría mostrar que la compilación es la única opción admitida. En tal caso, Studio selecciona esta opción automáticamente.

  3. En Output, introduzca el URI de una ubicación en Amazon S3. Allí, la SageMaker IA almacena los artefactos del modelo optimizado que crea su trabajo.

  4. (Opcional) Amplíe las opciones avanzadas para obtener un control más detallado de ajustes como el IAM rol y las variables de VPC entorno. Para obtener más información, consulte a continuación Opciones avanzadas.

  5. Cuando haya terminado de configurar el trabajo, seleccione Crear trabajo.

    Studio muestra la página de detalles del trabajo, que muestra el estado del trabajo y todos sus ajustes.

Opciones avanzadas

Puede definir las siguientes opciones avanzadas al crear un trabajo de optimización de inferencias.

En Configuraciones, puede configurar las siguientes opciones:

Grado de tensor paralelo

Un valor para el grado de paralelismo de tensores. El paralelismo de tensores es un tipo de paralelismo de modelos en el que las ponderaciones, gradientes y estados del optimizador específicos del modelo se dividen entre los dispositivos. El valor debe dividir en partes iguales el número de miembros del clústerGPUs.

Longitud máxima del token

El límite de la cantidad de tokens que generará el modelo. Tenga en cuenta que es posible que el modelo no siempre genere la cantidad máxima de tokens.

Simultaneidad

La capacidad de ejecutar varias instancias de un modelo en el mismo hardware subyacente. Utilice la simultaneidad para ofrecer predicciones a varios usuarios y sacar el máximo partido de la utilización del hardware.

Tamaño de lote

Si el modelo realiza inferencias por lotes, utilice esta opción para controlar el tamaño de los lotes que procesa el modelo.

La inferencia por lotes genera predicciones de modelos a partir de un lote de observaciones. Es una buena opción para conjuntos de datos grandes o si no necesita una respuesta inmediata a una solicitud de inferencia.

En Seguridad, puede configurar las siguientes opciones:

Rol de IAM

Un IAM rol que permite a la SageMaker IA realizar tareas en tu nombre. Durante la optimización del modelo, la SageMaker IA necesita su permiso para:

  • Leer los datos de entrada de un bucket de S3

  • Escribir artefactos de modelos en un bucket de S3

  • Escribir registros en Amazon CloudWatch Logs

  • Publica métricas en Amazon CloudWatch

Otorgas permisos para todas estas tareas a un IAM rol.

Para obtener más información, consulte Cómo utilizar las funciones de ejecución de la SageMaker IA.

KMSClave de cifrado

Una clave en AWS Key Management Service (AWS KMS). SageMaker La IA utiliza la clave para cifrar los artefactos del modelo optimizado cuando la SageMaker IA carga el modelo en Amazon S3.

VPC

SageMaker La IA utiliza esta información para crear interfaces de red y conectarlas a los contenedores de sus modelos. Las interfaces de red proporcionan a sus contenedores modelo una conexión de red VPC interna que no está conectada a Internet. También permiten que su modelo se conecte a los recursos de su entorno privadoVPC.

Para obtener más información, consulte Ofrezca a los puntos finales alojados en SageMaker IA acceso a los recursos de su Amazon VPC.

Habilitación del aislamiento de la red

Active esta opción si desea restringir el acceso a Internet por parte del contenedor. Los contenedores que funcionan con el aislamiento de la red no pueden realizar llamadas de red salientes.

nota

Debe activar esta opción cuando optimice con decodificación especulativa y utilice el modelo SageMaker AI Draft.

Para obtener más información sobre el aislamiento de la red, consulteAislamiento de red.

En Definición avanzada de contenedores, puede configurar las siguientes opciones:

Condición de parada

Especifica el límite de tiempo durante el que se puede ejecutar un trabajo. Cuando el trabajo alcanza el límite de tiempo, la SageMaker IA finaliza el trabajo. Utilice esta opción para limitar los costos.

Tags

Pares clave-valor asociadas al trabajo de optimización.

Para obtener más información sobre las etiquetas, consulte Tagging AWS resources en la Referencia general de AWS.

Variables de entorno

Pares clave-valor que definen las variables de entorno que se han de establecer en el contenedor del modelo.

Puede crear un trabajo de optimización de inferencias mediante el uso de Python de SageMaker IA SDK en su proyecto. En primer lugar, defina una Model instancia mediante la ModelBuilder clase. A continuación, se utiliza el optimize() método para ejecutar un trabajo que optimice el modelo mediante la cuantificación, la decodificación especulativa o la compilación. Cuando se complete el trabajo, se implementa el modelo en un punto final de inferencia mediante el método. deploy()

Para obtener más información sobre las clases y los métodos utilizados en los siguientes ejemplos, consulte APIsla SDK documentación de SageMaker AI Python.

Configuración de un proyecto
  1. En el código de la aplicación, importe las bibliotecas necesarias. El siguiente ejemplo importa el SDK para Python (Boto3). También importa las clases del Python de SageMaker IA SDK que se utilizan para definir y trabajar con los modelos:

    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
  2. Inicializa una sesión de SageMaker IA. En el siguiente ejemplo, se utiliza la Session() clase:

    sagemaker_session = Session()
Definición de un modelo
  1. Cree una instancia de SchemaBuilder y proporcione ejemplos de entrada y salida. Al definir un modelo, debe proporcionar esta instancia a la clase ModelBuilder. Con ella, la SageMaker IA genera automáticamente las funciones de clasificación para serializar y deserializar la entrada y la salida.

    Para obtener más información sobre el uso de las clases SchemaBuilder y ModelBuilder, consulte Cree un modelo en Amazon SageMaker AI con ModelBuilder.

    En el ejemplo siguiente se proporcionan ejemplos de cadenas de entrada y salida para la clase SchemaBuilder:

    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)
  2. Defina su modelo según la IA. SageMaker En el ejemplo siguiente se definen los parámetros para inicializar una instancia de ModelBuilder:

    model_builder = ModelBuilder( model="jumpstart-model-id", schema_builder=schema_builder, sagemaker_session=sagemaker_session, role_arn=sagemaker_session.get_caller_identity_arn(), )

    En este ejemplo se utiliza un JumpStart modelo. jumpstart-model-idSustitúyalo por el identificador de un JumpStart modelo, por ejemplometa-textgeneration-llama-3-70b.

    nota

    Si quiere optimizar con una decodificación especulativa y quiere utilizar el borrador de SageMaker IA, debe habilitar el aislamiento de la red. Para habilitarlo, incluye el siguiente argumento al inicializar una ModelBuilder instancia:

    enable_network_isolation=True,

    Para obtener más información sobre el aislamiento de la red, consulteAislamiento de red.

Para optimizar con la cuantificación
  1. Para ejecutar un trabajo de cuantificación, utilice el optimize() método y establezca el quantization_config argumento. El siguiente ejemplo se establece OPTION_QUANTIZE como una variable de entorno en el contenedor de optimización:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, quantization_config={ "OverrideEnvironment": { "OPTION_QUANTIZE": "awq", }, }, output_path="s3://output-path", )

    En este ejemplo, instance-type sustitúyala por una instancia de ML, comoml.p4d.24xlarge. s3://output-pathSustitúyala por la ruta a la ubicación S3 en la que se almacena el modelo optimizado que crea el trabajo.

    El optimize() método devuelve un Model objeto, que puede utilizar para implementar el modelo en un punto final.

  2. Cuando se complete el trabajo, despliegue el modelo. En el siguiente ejemplo se utiliza el deploy() método:

    predictor = optimized_model.deploy( instance_type="instance-type", accept_eula=True, )

    En este ejemplo, instance-type sustituya por una instancia de ML, comoml.p4d.24xlarge.

    El deploy() método devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto final que aloja el modelo.

Para optimizarlo con decodificación especulativa utilizando el borrador del modelo de IA SageMaker

Cuando optimizas tu modelo con decodificación especulativa, puedes optar por usar un borrador de modelo proporcionado por la SageMaker IA o puedes usar el tuyo propio. En los ejemplos siguientes se utiliza el modelo preliminar de SageMaker IA.

Requisito previo

Para optimizar con la decodificación especulativa y el modelo preliminar de SageMaker IA, debe habilitar el aislamiento de la red al definir el modelo.

  1. Para ejecutar un trabajo de decodificación especulativa, utilice el optimize() método y establezca el speculative_decoding_config argumento. El siguiente ejemplo establece la ModelProvider clave SAGEMAKER para utilizar el borrador del modelo que proporciona la SageMaker IA.

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelProvider": "SAGEMAKER", }, )

    En este ejemplo, instance-type sustitúyalo por una instancia de ML, comoml.p4d.24xlarge.

    El optimize() método devuelve un Model objeto, que puede utilizar para implementar el modelo en un punto final.

  2. Cuando se complete el trabajo, despliegue el modelo. En el siguiente ejemplo se utiliza el deploy() método:

    predictor = optimized_model.deploy(accept_eula=True)

    El deploy() método devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto final que aloja el modelo.

Para optimizarlo mediante la decodificación especulativa mediante un modelo de borrador personalizado

Antes de poder proporcionar su borrador de modelo personalizado a SageMaker AI, primero debe cargar los artefactos del modelo en Amazon S3.

Los siguientes ejemplos muestran una forma posible de proporcionar un modelo de borrador personalizado. Los ejemplos descargan el borrador del modelo del Hugging Face Hub, lo suben a Amazon S3 y proporcionan el URI S3 speculative_decoding_config al argumento.

  1. Si quieres descargar un modelo del Hugging Face Hub, añade huggingface_hub la biblioteca a tu proyecto y descarga un modelo con snapshot_download() el método. En el siguiente ejemplo, se descarga un modelo a un directorio local:

    import huggingface_hub huggingface_hub.snapshot_download( repo_id="model-id", revision="main", local_dir=download-dir, token=hf-access-token, )

    En este ejemplo, model-id sustitúyalo por el identificador de un modelo, Hugging Face Hub, comometa-llama/Meta-Llama-3-8B. download-dirSustitúyalo por un directorio local. hf-access-tokenSustitúyalo por tu token de acceso de usuario. Para obtener información sobre cómo obtener tu token de acceso, consulta los Tokens de acceso de usuario en la documentación de Hugging Face.

    Para obtener más información sobre la huggingface_hub biblioteca, consulta la biblioteca cliente de Hub en la documentación de Hugging Face.

  2. Para que el modelo descargado esté disponible para SageMaker AI, cárguelo en Amazon S3. En el siguiente ejemplo, se carga el modelo con el sagemaker_session objeto:

    custom_draft_model_uri = sagemaker_session.upload_data( path=hf_local_download_dir.as_posix(), bucket=sagemaker_session.default_bucket(), key_prefix="prefix", )

    En este ejemplo, prefix sustitúyalo por un calificador que le ayude a distinguir el borrador del modelo en S3, como. spec-dec-custom-draft-model

    El upload_data() método devuelve el S3 de URI los artefactos del modelo.

  3. Para ejecutar un trabajo de decodificación especulativa, utilice el optimize() método y establezca el speculative_decoding_config argumento. El siguiente ejemplo establece la ModelSource clave del S3 URI del modelo de borrador personalizado:

    optimized_model = model_builder.optimize( instance_type="instance-type", accept_eula=True, speculative_decoding_config={ "ModelSource": custom_draft_model_uri + "/", }, )

    En este ejemplo, instance-type sustitúyala por una instancia de ML, comoml.p4d.24xlarge.

    El optimize() método devuelve un Model objeto, que puede utilizar para implementar el modelo en un punto final.

  4. Cuando se complete el trabajo, despliegue el modelo. En el siguiente ejemplo se utiliza el deploy() método:

    predictor = optimized_model.deploy(accept_eula=True)

    El deploy() método devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto final que aloja el modelo.

Para optimizar con la compilación
  1. Para ejecutar un trabajo de compilación, utilice el optimize() método y establezca el compilation_config argumento. En el siguiente ejemplo, se utiliza la OverrideEnvironment clave para establecer las variables de entorno necesarias en el contenedor de optimización:

    optimized_model = model_builder.optimize( instance_type="instance-type", 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", )

    En este ejemplo, instance-type configúrelo en un tipo de instancia de ML con hardware acelerado. Por ejemplo, para AWS una inferencia acelerada con Inferentia, puedes establecer el tipo en una instancia Inf2, como. ml.inf2.48xlarge s3://output-pathReemplácelo por la ruta a la ubicación S3 donde almacena el modelo optimizado que crea el trabajo.

  2. Cuando se complete el trabajo, implemente el modelo. En el siguiente ejemplo se utiliza el deploy() método:

    predictor = optimized_model.deploy(accept_eula=True)

    El deploy() método devuelve un objeto predictor, que puede utilizar para enviar solicitudes de inferencia al punto final que aloja el modelo.

Prueba del modelo con una solicitud de inferencia
  • Para enviar una solicitud de inferencia de prueba al modelo implementado, utilice el predict() método de un objeto predictor. El siguiente ejemplo pasa la sample_input variable que también se pasó a la SchemaBuilder clase en los ejemplos para definir el modelo:

    predictor.predict(sample_input)

    La entrada de muestra tiene el mensaje,"What is the largest planet in the solar system?". El predict() método devuelve la respuesta que generó el modelo, como se muestra en el siguiente ejemplo:

    {'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 . . .'}

Limitaciones del borrador del modelo de SageMaker IA

Para cualquier modelo que optimice con el modelo preliminar de SageMaker IA, tenga en cuenta los requisitos, las restricciones y las variables de entorno compatibles.

Requisitos

Debe hacer lo siguiente:

  • Usa un modelo proporcionado por la SageMaker IA JumpStart.

  • Habilite el aislamiento de la red para la implementación del modelo.

  • Si implementa el modelo en un contenedor Large Model Inference (LMI), utilice un DJLServing contenedor de la versión 0.28.0 o superior.

    Para ver los contenedores disponibles, consulte Contenedores de inferencia de modelos grandes en el GitHub repositorio de Deep Learning Containers.

  • Si ajusta el JumpStart modelo con precisión, utilice el formato safetensors para los pesos del modelo.

    Para obtener más información sobre este formato, consulte Safetensors en la documentación de Hugging Face.

Restricciones

No puede hacer lo siguiente:

  • Utilice el modelo en entornos de prueba locales que cree con el modo local.

    Para obtener más información sobre el modo local, consulte Modo local en la SDK documentación de SageMaker AI Python.

  • Acceda al contenedor del modelo a través del AWS Systems Manager agente (SSMagente). El SSM agente proporciona acceso a nivel de shell a tu contenedor modelo para que puedas depurar procesos y registrar comandos con Amazon. CloudWatch

    Para obtener más información acerca de esta característica, consulte Acceda a los contenedores a través de SSM.

  • Configure el contenedor modelo para una descarga de núcleos que se produce si el proceso se bloquea.

    Para obtener más información sobre los volcados principales de los contenedores modelo, consulte. ProductionVariantCoreDumpConfig

  • Implemente el modelo en puntos finales de varios modelos, puntos de enlace de varios contenedores o puntos de enlace que alojan componentes de inferencia.

    Para obtener más información sobre estos tipos de puntos finales, consulte, y. Puntos de conexión multimodelo Puntos de conexión con varios contenedores Componentes de inferencias

  • Cree un paquete de modelos para el modelo. Los paquetes de modelos se utilizan para crear modelos desplegables en los que se publican AWS Marketplace.

    Para obtener más información acerca de esta característica, consulte Cree un recurso de paquete de modelos.

  • Utilice su propio código de inferencia en el contenedor de modelos.

  • Utilice un requirements.txt archivo en el contenedor del modelo. Este tipo de archivo muestra las dependencias de los paquetes.

  • Activa el parámetro Hugging Face. trust_remote_code

Variables de entorno admitidas

Puede configurar el contenedor solo con las siguientes variables de entorno:

  • Variables de entorno comunes para contenedores de inference (LMI) de modelos grandes.

    Para obtener más información sobre estas variables, consulte Configuraciones de variables de entorno en la documentación del LMI contenedor.

  • Variables de entorno comunes para los paquetes que Hugging Face Hub proporciona en sus repositorios de Git.

    Para los repositorios, consulta Hugging Face on. GitHub

  • Variables comunes PyTorch y de CUDA entorno.

    Para obtener más información sobre estas variables, consulte las variables de entorno de Torch en la PyTorch documentación.