Achieve Up To 2x Part 2 1117x630.jpg

A medida que la inferencia de inteligencia artificial (IA) generativa se vuelve cada vez más crítica para las empresas, los clientes buscan formas de escalar sus operaciones de IA generativa o integrar modelos de IA generativa en flujos de trabajo existentes. La optimización de modelos ha surgido como un paso crucial, que permite a las organizaciones equilibrar la rentabilidad y la capacidad de respuesta, mejorando la productividad. Sin embargo, los requisitos de precio y rendimiento varían ampliamente según los casos de uso. Para las aplicaciones de chat, minimizar la latencia es clave para ofrecer una experiencia interactiva, mientras que las aplicaciones en tiempo real, como las recomendaciones, requieren maximizar el rendimiento. Navegar por estas compensaciones plantea un desafío significativo para adoptar rápidamente la IA generativa, porque debe seleccionar y evaluar cuidadosamente diferentes técnicas de optimización.

Para superar estos desafíos, nos complace presentar el kit de herramientas de optimización de inferencia, una función de optimización de modelos completamente administrada en Amazon SageMakerEsta nueva característica ofrece un rendimiento hasta ~2 veces mayor y reduce los costos hasta en un ~50 % para los modelos de IA generativos, como los modelos Llama 3, Mistral y Mixtral. Por ejemplo, con un modelo Llama 3-70B, puede lograr hasta ~2400 tokens/seg en una instancia ml.p5.48xlarge en comparación con los ~1200 tokens/seg que obtenía anteriormente sin ninguna optimización.

Este kit de herramientas de optimización de inferencia utiliza las últimas técnicas de optimización de modelos de IA generativa, como Compilacion, cuantificacióny decodificación especulativa para ayudarlo a reducir el tiempo de optimización de modelos de IA generativos de meses a horas, al mismo tiempo que logra la mejor relación precio-rendimiento para su caso de uso. Para la compilación, el kit de herramientas utiliza Neuron Compiler para optimizar el gráfico computacional del modelo para hardware específico, como Inferencia de AWSlo que permite tiempos de ejecución más rápidos y una utilización reducida de los recursos. Para la cuantificación, el kit de herramientas utiliza la cuantificación de peso consciente de la activación (AWQ) para reducir de manera eficiente el tamaño del modelo y la huella de memoria, al tiempo que se preserva la calidad. Para la decodificación especulativa, el kit de herramientas emplea un modelo de borrador más rápido para predecir los resultados de los candidatos en paralelo, lo que mejora la velocidad de inferencia para tareas de generación de texto más largas. Para obtener más información sobre cada técnica, consulte Optimice la inferencia de modelos con Amazon SageMakerPara obtener más detalles y resultados de referencia para modelos de código abierto populares, consulte Consiga un rendimiento hasta aproximadamente el doble y reduzca los costos hasta en un 50 % aproximadamente para la inferencia de IA generativa en Amazon SageMaker con el nuevo kit de herramientas de optimización de inferencia (parte 1).

En esta publicación, demostramos cómo comenzar a utilizar el kit de herramientas de optimización de inferencia para modelos compatibles en Inicio rápido de Amazon SageMaker y el SDK de Python para Amazon SageMakerSageMaker JumpStart es un centro de modelos completamente administrado que le permite explorar, ajustar e implementar modelos populares de código abierto con solo unos pocos clics. Puede usar modelos preoptimizados o crear sus propias optimizaciones personalizadas. Alternativamente, puede lograr esto usando el SDK de Python de SageMaker, como se muestra a continuación. computadora portátilPara obtener la lista completa de modelos compatibles, consulte Optimice la inferencia de modelos con Amazon SageMaker.

Uso de modelos preoptimizados en SageMaker JumpStart

El kit de herramientas de optimización de inferencias proporciona modelos preoptimizados que se optimizaron para lograr la mejor relación costo-rendimiento a escala, sin afectar la precisión. Puede elegir la configuración en función de los requisitos de latencia y rendimiento de su caso de uso e implementarla con un solo clic.

Tomando como ejemplo el modelo Meta-Llama-3-8b en SageMaker JumpStart, puede elegir Desplegar Desde la página del modelo. En la configuración de implementación, puede ampliar las opciones de configuración del modelo, seleccionar la cantidad de usuarios simultáneos e implementar el modelo optimizado.

Implementación de un modelo preoptimizado con el SDK de Python de SageMaker

También puede implementar un modelo de IA generativa preoptimizado utilizando el SDK de Python de SageMaker en tan solo unas pocas líneas de código. En el siguiente código, configuramos un ModelBuilder clase para el modelo SageMaker JumpStart. Constructor de modelos es una clase del SDK de Python de SageMaker que proporciona un control detallado sobre varios aspectos de implementación, como tipos de instancia, aislamiento de red y asignación de recursos. Puede utilizarla para crear una instancia de modelo implementable, convirtiendo modelos de marco (como XGBoost o PyTorch) o especificaciones de inferencia en modelos compatibles con SageMaker para la implementación. Consulte Crear un modelo en Amazon SageMaker con ModelBuilder para más detalles.

sample_input = {
    "inputs": "Hello, I'm a language model,",
    "parameters": {"max_new_tokens":128, "do_sample":True}
}

sample_output = [
    {
        "generated_text": "Hello, I'm a language model, and I'm here to help you with your English."
    }
]
schema_builder = SchemaBuilder(sample_input, sample_output)

builder = ModelBuilder(
    model="meta-textgeneration-llama-3-8b", # JumpStart model ID
    schema_builder=schema_builder,
    role_arn=role_arn,
)

Enumere las configuraciones pre-comparativas disponibles con el siguiente código:

builder.display_benchmark_metrics()

Elige el adecuado instance_type y config_name de la lista en función de los usuarios simultáneos, la latencia y los requisitos de rendimiento. En la tabla anterior, puede ver la latencia y el rendimiento en diferentes niveles de simultaneidad para el tipo de instancia y el nombre de configuración determinados. Si el nombre de configuración es lmi-optimizedeso significa que la configuración está optimizada previamente por SageMaker. Luego, puedes llamar .build() para ejecutar el trabajo de optimización. Cuando el trabajo esté completo, puede implementarlo en un punto final y probar las predicciones del modelo. Vea el siguiente código:

# set deployment config with pre-configured optimization
bulder.set_deployment_config(
    instance_type="ml.g5.12xlarge", 
    config_name="lmi-optimized"
)

# build the deployable model
model = builder.build()

# deploy the model to a SageMaker endpoint
predictor = model.deploy(accept_eula=True)

# use sample input payload to test the deployed endpoint
predictor.predict(sample_input)

Uso del kit de herramientas de optimización de inferencia para crear optimizaciones personalizadas

Además de crear un modelo preoptimizado, puede crear optimizaciones personalizadas en función del tipo de instancia que elija. La siguiente tabla proporciona una lista completa de las combinaciones disponibles. En las siguientes secciones, primero exploramos la compilación en AWS Inferentia y luego probamos otras técnicas de optimización para instancias de GPU.

Tipos de instancia Técnica de optimización Configuraciones
Inferencia de AWS Compilacion Compilador de neuronas
GPU Cuantización Cuartel General Adjunto
GPU Descodificación especulativa Modelo de borrador proporcionado por SageMaker o Traiga su propio (BYO)

Compilación de SageMaker JumpStart

Para la compilación, puede seleccionar el mismo modelo Meta-Llama-3-8b de SageMaker JumpStart y elegir Optimizar En la página del modelo. En la página de configuración de optimización, puede elegir ml.inf2.8xlarge para su tipo de instancia. Luego, proporcione una salida Servicio de almacenamiento simple de Amazon (Amazon S3) Ubicación de los artefactos optimizados. En el caso de modelos grandes como Llama 2 70B, por ejemplo, el trabajo de compilación puede tardar más de una hora. Por lo tanto, recomendamos utilizar el kit de herramientas de optimización de inferencia para realizar una compilación con anticipación. De esa manera, solo necesita compilar una vez.

Compilación con el SDK de Python de SageMaker

Para el SDK de Python de SageMaker, puede configurar la compilación modificando las variables de entorno en la función .optimize(). Para obtener más detalles sobre compilation_configReferirse a Tutorial de compilación anticipada de modelos de LMI NeuronX.

compiled_model = builder.optimize(
    instance_type="ml.inf2.8xlarge",
    accept_eula=True,
    compilation_config={
        "OverrideEnvironment": {
            "OPTION_TENSOR_PARALLEL_DEGREE": "2",
            "OPTION_N_POSITIONS": "2048",
            "OPTION_DTYPE": "fp16",
            "OPTION_ROLLING_BATCH": "auto",
            "OPTION_MAX_ROLLING_BATCH_SIZE": "4",
            "OPTION_NEURON_OPTIMIZE_LEVEL": "2",
        }
   },
   output_path=f"s3://{output_bucket_name}/compiled/"
)

# deploy the compiled model to a SageMaker endpoint
predictor = compiled_model.deploy(accept_eula=True)

# use sample input payload to test the deployed endpoint
predictor.predict(sample_input)

Cuantificación y decodificación especulativa de SageMaker JumpStart

Para optimizar los modelos en la GPU, ml.g5.12xlarge es el tipo de instancia de implementación predeterminada para Llama-3-8b. Puede elegir cuantificación, decodificación especulativa o ambas como opciones de optimización. La cuantificación utiliza AWQ para reducir los pesos del modelo a representaciones de bajo nivel de bits (INT4). Por último, puede proporcionar una URL de salida S3 para almacenar los artefactos optimizados.

Con la decodificación especulativa, puede mejorar la latencia y el rendimiento utilizando el modelo de borrador proporcionado por SageMaker o trayendo su propio modelo de borrador desde el centro de modelos público Hugging Face o cargándolo desde su propio depósito S3.

Una vez finalizado el trabajo de optimización, puede implementar el modelo o ejecutar más trabajos de evaluación en el modelo optimizado. En la interfaz de usuario de SageMaker Studio, puede optar por utilizar los conjuntos de datos de muestra predeterminados o proporcionar los suyos propios mediante una URI de S3. Al momento de escribir este artículo, la opción de evaluación del rendimiento solo está disponible a través de Estudio Amazon SageMaker Interfaz de usuario.

Cuantificación y decodificación especulativa mediante el SDK de Python de SageMaker

El siguiente es el fragmento de código del SDK de Python de SageMaker para la cuantificación. Solo necesita proporcionar el quantization_config atributo en el .optimize() función.

optimized_model = builder.optimize(
    instance_type="ml.g5.12xlarge",
    accept_eula=True,
    quantization_config={
        "OverrideEnvironment": {
            "OPTION_QUANTIZE": "awq"
        }
    },
    output_path=f"s3://{output_bucket_name}/quantized/"
)

# deploy the optimized model to a SageMaker endpoint
predictor = optimized_model.deploy(accept_eula=True)

# use sample input payload to test the deployed endpoint
predictor.predict(sample_input)

Para la decodificación especulativa, puede cambiar a un speculative_decoding_config Atribuir y configurar SageMaker o un modelo personalizado. Es posible que deba ajustar la utilización de la GPU en función de los tamaños de los modelos de borrador y de destino para que ambos se ajusten a la instancia para la inferencia.

optimized_model = builder.optimize(
    instance_type="ml.g5.12xlarge",
    accept_eula=True,
    speculative_decoding_config={
        "ModelProvider": "sagemaker"
    }
    # speculative_decoding_config={
        # "ModelProvider": "custom",
        # use S3 URI or HuggingFace model ID for custom draft model
        # note: using HuggingFace model ID as draft model requires HF_TOKEN in environment variables
        # "ModelSource": "s3://custom-bucket/draft-model", 
    # }
)

# deploy the optimized model to a SageMaker endpoint
predictor = optimized_model.deploy(accept_eula=True)

# use sample input payload to test the deployed endpoint
predictor.predict(sample_input)

Conclusión

Optimizar los modelos de IA generativa para el rendimiento de inferencia es crucial para ofrecer soluciones de IA generativa rentables y con capacidad de respuesta. Con el lanzamiento del kit de herramientas de optimización de inferencia, ahora puede optimizar sus modelos de IA generativa, utilizando las últimas técnicas, como la decodificación especulativa, la compilación y la cuantificación, para lograr un rendimiento hasta aproximadamente el doble y reducir los costos hasta en un 50 %. Esto lo ayuda a lograr el equilibrio óptimo entre precio y rendimiento para sus casos de uso específicos con solo unos pocos clics en SageMaker JumpStart o unas pocas líneas de código utilizando el SDK de Python de SageMaker. El kit de herramientas de optimización de inferencia simplifica significativamente el proceso de optimización de modelos, lo que permite que su empresa acelere la adopción de IA generativa y desbloquee más oportunidades para impulsar mejores resultados comerciales.

Para obtener más información, consulte Optimice la inferencia de modelos con Amazon SageMaker y Consiga un rendimiento hasta aproximadamente el doble y reduzca los costos hasta en un 50 % aproximadamente para la inferencia de IA generativa en Amazon SageMaker con el nuevo kit de herramientas de optimización de inferencia (parte 1).


Sobre los autores

James Wu es un arquitecto de soluciones especialista sénior en IA/ML
Saurabh Trikande es Gerente Senior de Producto
Rishabh Ray Chaudhury es Gerente Senior de Producto
Kumara Swami Borra es un ingeniero de front-end
Alwin (Qiyun) Zhao es un ingeniero senior de desarrollo de software
Qing Lan es un SDE senior