Open Foundation Models (FMS) permite a las organizaciones construir aplicaciones de IA personalizadas mediante el ajuste de sus dominios o tareas específicos, al tiempo que conservan el control sobre los costos e implementaciones. Sin embargo, la implementación puede ser una parte significativa del esfuerzo, a menudo requerir el 30% del tiempo del proyecto porque los ingenieros deben optimizar cuidadosamente los tipos de instancias y configurar los parámetros de servicio a través de pruebas cuidadosas. Este proceso puede ser complejo y lento, lo que requiere conocimiento especializado y pruebas iterativas para lograr el rendimiento deseado.

Importación de modelos personalizados de Amazon Bedrock Simplifica las implementaciones de modelos personalizados al ofrecer una API directa para la implementación e invocación del modelo. Puede cargar pesos de modelo y dejar que AWS maneje una implementación óptima y totalmente administrada. Esto asegura que las implementaciones sean rentables y rentables. La importación de modelos personalizados de Amazon Bedrock también maneja la escala automática, incluida la escala a cero. Cuando no está en uso y no hay invocaciones durante 5 minutos, se escala a cero. Paga solo por lo que usa en incrementos de 5 minutos. También maneja la escala, aumentando automáticamente el número de copias del modelo activo cuando se requiere una mayor concurrencia. Estas características hacen que Amazon Bedrock Modelo personalizado importe una solución atractiva para organizaciones que buscan usar modelos personalizados en Roca madre de Amazon proporcionando simplicidad y rentabilidad.

Antes de implementar estos modelos en producción, es crucial evaluar su rendimiento utilizando herramientas de evaluación comparativa. Estas herramientas ayudan a detectar de manera proactiva posibles problemas de producción, como los estranguladores y verificar que las implementaciones puedan manejar las cargas de producción esperadas.

Esta publicación comienza una serie de blogs que explora Deepseek y Open FMS en Amazon Bedrock Custom Model Import. Cubre el proceso de evaluación comparativa de modelos personalizados en Amazon Bedrock utilizando herramientas populares de código abierto: LLMPERF y LITELLM. Incluye un computadora portátil que incluye instrucciones paso a paso para implementar un Deepseek-r1-Distill-llama-8b Modelo, pero los mismos pasos se aplican para cualquier otro modelo admitido por Amazon Bedrock Custom Model Import.

Requisitos previos

Esta publicación requiere un modelo personalizado de roca madre de Amazon. Si aún no tiene uno en su cuenta de AWS, siga las instrucciones de Implementar modelos de LLAMA destilados Deepseek-R1 con la importación de modelos personalizados de Amazon Bedrock.

Uso de Open Source Tools LLMPerf y Litellm para la evaluación comparativa de rendimiento

Para realizar la evaluación comparativa de rendimiento, utilizará Llmperfuna popular biblioteca de código abierto para modelos Benchmarking Foundation. LLMPERF simula las pruebas de carga en las API de invocación de modelos creando clientes de rayos concurrentes y analizando sus respuestas. Una ventaja clave de LLMPERF es un amplio soporte de las API del modelo de base. Esto incluye Litellmque apoya Todos los modelos disponibles en Amazon Bedrock.

Configuración de su invocación de modelo personalizado con litellm

Litellm es una herramienta de código abierto versátil que se puede usar tanto como un SDK de Python como un servidor proxy (AI Gateway) para acceder a más de 100 FM diferentes utilizando un formato estandarizado. Litellm estandariza las entradas para que coincidan con los requisitos de punto final específicos de cada proveedor de FM. Admite las API de roca madre de Amazon, incluidas InvokeModel y Converse API y FMS disponibles en Amazon Bedrock, incluidos modelos personalizados importados.

Para invocar un modelo personalizado con litellm, utiliza el parámetro del modelo (ver Documentación de litellm de Amazon Bedrock en Litellm). Esta es una cadena que sigue al bedrock/provider_route/model_arn formato.

El provider_route Indica la implementación litellm de la especificación de solicitud/respuesta para usar. Los modelos Deepseek R1 se pueden invocar utilizando su plantilla de chat personalizada utilizando el Ruta del proveedor Deepseek R1o con la plantilla de chat de Llama usando la Ruta del proveedor de llamas.

El model_arn es el modelo Nombre de recursos de Amazon (ARN) del modelo importado. Puede obtener el modelo ARN de su modelo importado en la consola o enviando un ListimortedModels pedido.

Por ejemplo, el siguiente script invoca el modelo personalizado utilizando la plantilla de chat Deepseek R1.

import time
from litellm import completion

while True:
    try:
        response = completion(
            model=f"bedrock/deepseek_r1/{model_id}",
            messages=[{"role": "user", "content": """Given the following financial data:
        - Company A's revenue grew from $10M to $15M in 2023
        - Operating costs increased by 20%
        - Initial operating costs were $7M
        
        Calculate the company's operating margin for 2023. Please reason step by step."""},
                      {"role": "assistant", "content": "<think>"}],
            max_tokens=4096,
        )
        print(response['choices'][0]['message']['content'])
        break
    except:
        time.sleep(60)

Después de que se hayan verificado los parámetros de invocación para el modelo importado, puede configurar LLMPERF para la evaluación comparativa.

Configuración de una prueba de referencia de token con LLMPERF

Para comparar el rendimiento, LLMPERF usa Rayoun marco informático distribuido, para simular cargas realistas. Aterrada múltiples clientes remotos, cada uno capaz de enviar solicitudes concurrentes para modelar API de invocación. Estos clientes se implementan como actores que se ejecutan en paralelo. llmperf.requests_launcher administra la distribución de solicitudes en los clientes de Ray y permite la simulación de varios escenarios de carga y patrones de solicitud concurrentes. Al mismo tiempo, cada cliente recopilará métricas de rendimiento durante las solicitudes, incluidas las tasas de latencia, rendimiento y error.

Dos métricas críticas para el rendimiento incluyen estado latente y rendimiento:

  • La latencia se refiere al tiempo que tarda una sola solicitud en procesarse.
  • El rendimiento mide el número de tokens que se generan por segundo.

Seleccionar la configuración correcta para servir FMS generalmente implica experimentar con diferentes tamaños de lotes mientras monitorea de cerca la utilización de GPU y considerando factores como la memoria disponible, el tamaño del modelo y los requisitos específicos de la carga de trabajo. Para aprender más, ver Optimización de la capacidad de respuesta de la IA: una guía práctica para la inferencia optimizada de latencia en el roca madre de Amazon. Aunque la importación del modelo personalizado de Amazon Bedrock simplifica esto al ofrecer configuraciones de servicio preoptimizadas, todavía es crucial verificar la latencia y el rendimiento de su implementación.

Comience por configurar token_benchmark.pyun script de muestra que facilita la configuración de una prueba de evaluación comparativa. En el script, puede definir parámetros como:

  • API LLM: Use litellm para invocar modelos importados personalizados de Amazon Bedrock.
  • Modelo: Defina la ruta, la API y el modelo ARN para invocar de manera similar a la sección anterior.
  • Desviación media/estándar de tokens de entrada: Parámetros para usar en la distribución de probabilidad a partir de la cual se muestreará el número de tokens de entrada.
  • Desviación media/estándar de tokens de salida: Parámetros para usar en la distribución de probabilidad a partir de la cual se muestreará el número de tokens de salida.
  • Número de solicitudes concurrentes: El número de usuarios que es probable que la aplicación sea compatible cuando esté en uso.
  • Número de solicitudes completadas: El número total de solicitudes para enviar a la API LLM en la prueba.

El siguiente script muestra un ejemplo de cómo invocar el modelo. Ver este cuaderno Para instrucciones paso a paso sobre la importación de un modelo personalizado y ejecutar una prueba de evaluación comparativa.

python3 ${{LLM_PERF_SCRIPT_DIR}}/token_benchmark_ray.py \\
--model "bedrock/llama/{model_id}" \\
--mean-input-tokens {mean_input_tokens} \\
--stddev-input-tokens {stddev_input_tokens} \\
--mean-output-tokens {mean_output_tokens} \\
--stddev-output-tokens {stddev_output_tokens} \\
--max-num-completed-requests ${{LLM_PERF_MAX_REQUESTS}} \\
--timeout 1800 \\
--num-concurrent-requests ${{LLM_PERF_CONCURRENT}} \\
--results-dir "${{LLM_PERF_OUTPUT}}" \\
--llm-api litellm \\
--additional-sampling-params '{{}}'

Al final de la prueba, LLMPERF generará dos archivos JSON: uno con métricas agregadas y otra con entradas separadas para cada invocación.

Escala a cero y latencia de arranque en frío

Una cosa para recordar es que debido a que la importación del modelo personalizado de Amazon Bedrock se reducirá a cero cuando el modelo no se use, primero debe hacer una solicitud para asegurarse de que haya al menos una copia del modelo activo. Si obtiene un error que indica que el modelo no está listo, debe esperar aproximadamente diez segundos y hasta 1 minuto para que Amazon Bedrock prepare al menos una copia del modelo activo. Cuando esté listo, ejecute una invocación de prueba nuevamente y continúe con la evaluación comparativa.

Escenario de ejemplo para Deepseek-R1-Distill-Llama-8B

Considerar un DeepSeek-R1-Distill-Llama-8B Modelo alojado en Amazon Bedrock Custom Model Import, que admite una aplicación AI con bajo tráfico de no más de dos solicitudes concurrentes. Para tener en cuenta la variabilidad, puede ajustar los parámetros para el recuento de tokens para las indicaciones y finalizaciones. Por ejemplo:

  • Número de clientes: 2
  • Recuento medio de token de entrada: 500
  • Recuento de token de entrada de desviación estándar: 25
  • Recuento de token de salida medio: 1000
  • Recuento de token de salida de desviación estándar: 100
  • Número de solicitudes por cliente: 50

Esta prueba ilustrativa lleva aproximadamente 8 minutos. Al final de la prueba, obtendrá un resumen de los resultados de las métricas agregadas:

inter_token_latency_s
    p25 = 0.010615988283217918
    p50 = 0.010694698716183695
    p75 = 0.010779359342088015
    p90 = 0.010945443657517748
    p95 = 0.01100556307365132
    p99 = 0.011071086908721675
    mean = 0.010710014800224604
    min = 0.010364670612635254
    max = 0.011485444453299149
    stddev = 0.0001658793389904756
ttft_s
    p25 = 0.3356793452499005
    p50 = 0.3783651359990472
    p75 = 0.41098671700046907
    p90 = 0.46655246950049334
    p95 = 0.4846706690498647
    p99 = 0.6790834719300077
    mean = 0.3837810468001226
    min = 0.1878921090010408
    max = 0.7590946710006392
    stddev = 0.0828713133225014
end_to_end_latency_s
    p25 = 9.885957818500174
    p50 = 10.561580732000039
    p75 = 11.271923759749825
    p90 = 11.87688222009965
    p95 = 12.139972019549713
    p99 = 12.6071144856102
    mean = 10.406450886010116
    min = 2.6196457750011177
    max = 12.626598834998731
    stddev = 1.4681851822617253
request_output_throughput_token_per_s
    p25 = 104.68609252502657
    p50 = 107.24619111072519
    p75 = 108.62997591951486
    p90 = 110.90675007239598
    p95 = 113.3896235445618
    p99 = 116.6688412475626
    mean = 107.12082450567561
    min = 97.0053466021563
    max = 129.40680882698936
    stddev = 3.9748004356837137
number_input_tokens
    p25 = 484.0
    p50 = 500.0
    p75 = 514.0
    p90 = 531.2
    p95 = 543.1
    p99 = 569.1200000000001
    mean = 499.06
    min = 433
    max = 581
    stddev = 26.549294727074212
number_output_tokens
    p25 = 1050.75
    p50 = 1128.5
    p75 = 1214.25
    p90 = 1276.1000000000001
    p95 = 1323.75
    p99 = 1372.2
    mean = 1113.51
    min = 339
    max = 1392
    stddev = 160.9598415942952
Number Of Errored Requests: 0
Overall Output Throughput: 208.0008834264341
Number Of Completed Requests: 100
Completed Requests Per Minute: 11.20784995697034

Además del resumen, recibirá métricas para solicitudes individuales que se pueden utilizar para preparar informes detallados como los siguientes histogramas para Es hora de token primero y rendimiento del token.

Analizar los resultados de rendimiento de LLMPERF y estimar los costos utilizando Amazon CloudWatch

LLMPERF le brinda la capacidad de comparar el rendimiento de los modelos personalizados servidos en el lecho de roca de Amazon sin tener que inspeccionar los detalles de las propiedades de servicio y la configuración de su implementación de importación de modelos personalizadas de Amazon Bedrock. Esta información es valiosa porque representa la experiencia de usuario final esperada de su aplicación.

Además, el ejercicio de evaluación comparativa puede servir como una herramienta valiosa para la estimación de costos. Utilizando Amazon CloudWatchpuede observar el número de copias de modelo activas a las que las escalas de importación de modelos personalizados de Amazon Bedrock en respuesta a la prueba de carga. ModelCopy está expuesto como una métrica de CloudWatch en el espacio de nombres AWS/Bedrock y se informa utilizando el modelo ARN importado como etiqueta. La trama para el ModelCopy La métrica se muestra en la figura a continuación. Estos datos ayudarán a estimar los costos, porque la facturación se basa en el número de copias del modelo activo en un momento determinado.

Conclusión

Si bien la importación del modelo personalizado de Amazon Bedrock simplifica la implementación y la escala del modelo, la evaluación comparativa de rendimiento sigue siendo esencial para predecir el rendimiento de producción y comparar modelos en métricas clave como el costo, la latencia y el rendimiento.

Para obtener más información, prueba el cuaderno de ejemplo con tu modelo personalizado.

Recursos adicionales:


Sobre los autores

Felipe López es un arquitecto senior de soluciones especializadas de IA/ML en AWS. Antes de unirse a AWS, Felipe trabajó con GE Digital y SLB, donde se centró en los productos de modelado y optimización para aplicaciones industriales.

Rupinder Grewal es un arquitecto senior de soluciones especializadas de IA/ML con AWS. Actualmente se enfoca en la entrega de modelos y MLOP en Amazon Sagemaker. Antes de este rol, trabajó como ingeniero de aprendizaje automático construyendo y alojando modelos. Fuera del trabajo, le gusta jugar al tenis y andar en bicicleta en los senderos de montaña.

Paras Mehra es un gerente de producto senior en AWS. Está enfocado en ayudar a construir un lecho de roca de Amazon. En su tiempo libre, Paras disfruta pasar tiempo con su familia y andar en bicicleta alrededor del Área de la Bahía.

Prashant Patel es ingeniero senior de desarrollo de software en AWS Bedrock. Le apasiona escalar modelos de idiomas grandes para aplicaciones empresariales. Antes de unirse a AWS, trabajó en IBM en la producción de cargas de trabajo AI/ML a gran escala en Kubernetes. Prashant tiene una maestría de la Escuela de Ingeniería NYU Tandon. Mientras no está en el trabajo, le gusta viajar y jugar con sus perros.

Por automata