in

Reduzca los costos y la latencia con el enrutamiento rápido inteligente de Amazon Bedrock y el almacenamiento en caché rápido (versión preliminar) | Servicios web de Amazon

Hoy, Amazon Bedrock ha presentado en versión preliminar dos capacidades que ayudan a reducir los costos y la latencia de las aplicaciones de IA generativa:

Enrutamiento rápido inteligente de Amazon Bedrock – Al invocar un modelo, ahora puede utilizar una combinación de modelos básicos (FM) de la misma familia de modelos para ayudar a optimizar la calidad y el costo. Por ejemplo, con la familia de modelos Claude de Anthropic, Amazon Bedrock puede enrutar solicitudes de manera inteligente entre Claude 3.5 Sonnet y Claude 3 Haiku dependiendo de la complejidad del mensaje. De manera similar, Amazon Bedrock puede enrutar solicitudes entre Meta Llama 3.1 70B y 8B. El enrutador rápido predice qué modelo proporcionará el mejor rendimiento para cada solicitud y al mismo tiempo optimiza la calidad de la respuesta y el costo. Esto es particularmente útil para aplicaciones como asistentes de servicio al cliente, donde las consultas sencillas pueden manejarse mediante modelos más pequeños, más rápidos y más rentables, y las consultas complejas se enrutan a modelos más capaces. El enrutamiento rápido inteligente puede reducir los costos hasta en un 30 por ciento sin comprometer la precisión.

Amazon Bedrock ahora admite el almacenamiento en caché rápido – Ahora puede almacenar en caché el contexto utilizado con frecuencia en las solicitudes en múltiples invocaciones de modelos. Esto es especialmente valioso para aplicaciones que utilizan repetidamente el mismo contexto, como sistemas de preguntas y respuestas sobre documentos donde los usuarios hacen varias preguntas sobre el mismo documento o asistentes de codificación que necesitan mantener el contexto sobre los archivos de código. El contexto almacenado en caché permanece disponible hasta 5 minutos después de cada acceso. El almacenamiento en caché rápido en Amazon Bedrock puede reducir los costos hasta en un 90 % y la latencia hasta en un 85 % para los modelos compatibles.

Estas características facilitan la reducción de la latencia y equilibran el rendimiento con la rentabilidad. Veamos cómo puedes usarlos en tus aplicaciones.

Uso del enrutamiento rápido inteligente de Amazon Bedrock en la consola
Amazon Bedrock Intelligent Prompt Routing utiliza técnicas avanzadas de coincidencia de mensajes y comprensión de modelos para predecir el rendimiento de cada modelo para cada solicitud, optimizando la calidad de las respuestas y el costo. Durante la vista previa, puede utilizar los enrutadores de aviso predeterminados para las familias de modelos Claude y Meta Llama de Anthropic.

Se puede acceder al enrutamiento de avisos inteligente a través de la Consola de administración de AWS, la interfaz de línea de comandos de AWS (AWS CLI) y los SDK de AWS. En la consola de Amazon Bedrock, elijo enrutadores rápidos en el Modelos de cimentacion sección del panel de navegación.

Captura de pantalla de la consola.

elijo el Enrutador rápido antrópico enrutador predeterminado para obtener más información.

Captura de pantalla de la consola.

Desde la configuración del enrutador de aviso, veo que está enrutando solicitudes entre Claude 3.5 Sonnet y Claude 3 Haiku utilizando perfiles de inferencia entre regiones. Los criterios de enrutamiento definen la diferencia de calidad entre la respuesta del modelo más grande y el modelo más pequeño para cada mensaje según lo predicho por el modelo interno del enrutador en tiempo de ejecución. El modelo alternativo, utilizado cuando ninguno de los modelos elegidos cumple con los criterios de rendimiento deseados, es el Claude 3.5 Sonnet de Anthropic.

yo elijo Abierto en el patio de juegos para chatear usando el mensaje del enrutador e ingrese este mensaje:

Alice has N brothers and she also has M sisters. How many sisters does Alice’s brothers have?

El resultado se proporciona rápidamente. elijo lo nuevo Métricas del enrutador icono a la derecha para ver qué modelo fue seleccionado por el enrutador rápido. En este caso, debido a que la pregunta es bastante compleja, se utilizó el Soneto Claude 3.5 de Anthropic.

Captura de pantalla de la consola.

Ahora hago una pregunta sencilla al mismo mensaje del enrutador:

Describe the purpose of a 'hello world' program in one line.

Esta vez, el enrutador rápido ha seleccionado Claude 3 Haiku de Anthropic.

Captura de pantalla de la consola.

selecciono el Enrutador metaindicador para comprobar su configuración. Está utilizando los perfiles de inferencia entre regiones para Llama 3.1 70B y 8B con el modelo 70B como alternativa.

Captura de pantalla de la consola.

Los enrutadores rápidos se integran con otras capacidades de Amazon Bedrock, como las bases de conocimientos de Amazon Bedrock y los agentes de Amazon Bedrock, o al realizar evaluaciones. Por ejemplo, aquí creo una evaluación de modelo para ayudarme a comparar, para mi caso de uso, un enrutador rápido con otro modelo o enrutador rápido.

Captura de pantalla de la consola.

Para utilizar un enrutador de aviso en una aplicación, necesito configurar el nombre de recurso de Amazon (ARN) del enrutador de aviso como ID de modelo en la API de Amazon Bedrock. Veamos cómo funciona esto con la CLI de AWS y un SDK de AWS.

Uso del enrutamiento rápido inteligente de Amazon Bedrock con la CLI de AWS
La API de Amazon Bedrock se ha ampliado para manejar enrutadores rápidos. Por ejemplo, puedo enumerar las rutas de aviso existentes en una región de AWS usando Lista de enrutadores rápidos:

aws bedrock list-prompt-routers

En el resultado, recibo un resumen de los enrutadores de aviso existentes, similar a lo que vi en la consola.

Aquí está el resultado completo del comando anterior:

{
    "promptRouterSummaries": [
        {
            "promptRouterName": "Anthropic Prompt Router",
            "routingCriteria": {
                "responseQualityDifference": 0.26
            },
            "description": "Routes requests among models in the Claude family",
            "createdAt": "2024-11-20T00:00:00+00:00",
            "updatedAt": "2024-11-20T00:00:00+00:00",
            "promptRouterArn": "arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/anthropic.claude:1",
            "models": [
                {
                    "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.anthropic.claude-3-haiku-20240307-v1:0"
                },
                {
                    "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0"
                }
            ],
            "fallbackModel": {
                "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0"
            },
            "status": "AVAILABLE",
            "type": "default"
        },
        {
            "promptRouterName": "Meta Prompt Router",
            "routingCriteria": {
                "responseQualityDifference": 0.0
            },
            "description": "Routes requests among models in the LLaMA family",
            "createdAt": "2024-11-20T00:00:00+00:00",
            "updatedAt": "2024-11-20T00:00:00+00:00",
            "promptRouterArn": "arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/meta.llama:1",
            "models": [
                {
                    "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-8b-instruct-v1:0"
                },
                {
                    "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-70b-instruct-v1:0"
                }
            ],
            "fallbackModel": {
                "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-70b-instruct-v1:0"
            },
            "status": "AVAILABLE",
            "type": "default"
        }
    ]
}

Puedo obtener información sobre un enrutador rápido específico usando ObtenerPromptRouter con un ARN de enrutador rápido. Por ejemplo, para la familia de modelos Meta Llama:

aws bedrock get-prompt-router --prompt-router-arn arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/meta.llama:1

{
    "promptRouterName": "Meta Prompt Router",
    "routingCriteria": {
        "responseQualityDifference": 0.0
    },
    "description": "Routes requests among models in the LLaMA family",
    "createdAt": "2024-11-20T00:00:00+00:00",
    "updatedAt": "2024-11-20T00:00:00+00:00",
    "promptRouterArn": "arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/meta.llama:1",
    "models": [
        {
            "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-8b-instruct-v1:0"
        },
        {
            "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-70b-instruct-v1:0"
        }
    ],
    "fallbackModel": {
        "modelArn": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-70b-instruct-v1:0"
    },
    "status": "AVAILABLE",
    "type": "default"
}

Para utilizar un enrutador de aviso con Amazon Bedrock, configuro el ARN del enrutador de aviso como ID de modelo al realizar llamadas API. Por ejemplo, aquí utilizo Anthropic Prompt Router con AWS CLI y Amazon Bedrock Converse API:

aws bedrock-runtime converse \
    --model-id arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/anthropic.claude:1 \
    --messages '[{ "role": "user", "content": [ { "text": "Alice has N brothers and she also has M sisters. How many sisters does Alice’s brothers have?" } ] }]' \

En la salida, las invocaciones que utilizan un enrutador rápido incluyen un nuevo trace sección que indica qué modelo se utilizó realmente. En este caso, es el Soneto Claude 3.5 de Anthropic:

{
    "output": {
        "message": {
            "role": "assistant",
            "content": [
                {
                    "text": "To solve this problem, let's think it through step-by-step:\n\n1) First, we need to understand the relationships:\n   - Alice has N brothers\n   - Alice has M sisters\n\n2) Now, we need to consider who Alice's brothers' sisters are:\n   - Alice herself is a sister to all her brothers\n   - All of Alice's sisters are also sisters to Alice's brothers\n\n3) So, the total number of sisters that Alice's brothers have is:\n   - The number of Alice's sisters (M)\n   - Plus Alice herself (+1)\n\n4) Therefore, the answer can be expressed as: M + 1\n\nThus, Alice's brothers have M + 1 sisters."
                }
            ]
        }
    },
    . . .
    "trace": {
        "promptRouter": {
            "invokedModelId": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0"
        }
    }
}

Uso del enrutamiento rápido inteligente de Amazon Bedrock con un SDK de AWS
El uso de un SDK de AWS con un enrutador de solicitud es similar a la experiencia anterior de la línea de comandos. Al invocar un modelo, configuro el ID del modelo en el ARN del modelo de solicitud. Por ejemplo, en este código Python estoy usando el enrutador Meta Llama con el ConverseStream API:

import json
import boto3

bedrock_runtime = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
)

MODEL_ID = "arn:aws:bedrock:us-east-1:123412341234:default-prompt-router/meta.llama:1"

user_message = "Describe the purpose of a 'hello world' program in one line."
messages = [
    {
        "role": "user",
        "content": [{"text": user_message}],
    }
]

streaming_response = bedrock_runtime.converse_stream(
    modelId=MODEL_ID,
    messages=messages,
)

for chunk in streaming_response["stream"]:
    if "contentBlockDelta" in chunk:
        text = chunk["contentBlockDelta"]["delta"]["text"]
        print(text, end="")
    if "messageStop" in chunk:
        print()
    if "metadata" in chunk:
        if "trace" in chunk["metadata"]:
            print(json.dumps(chunk['metadata']['trace'], indent=2))

Este script imprime el texto de la respuesta y el contenido del seguimiento en los metadatos de la respuesta. Para esta solicitud sencilla, el enrutador rápido ha seleccionado el modelo más rápido y asequible:

A "Hello World" program is a simple, introductory program that serves as a basic example to demonstrate the fundamental syntax and functionality of a programming language, typically used to verify that a development environment is set up correctly.
{
  "promptRouter": {
    "invokedModelId": "arn:aws:bedrock:us-east-1:123412341234:inference-profile/us.meta.llama3-1-8b-instruct-v1:0"
  }
}

Uso del almacenamiento en caché de avisos con un SDK de AWS
Puede utilizar el almacenamiento en caché de avisos con la API de Amazon Bedrock Converse. Cuando etiqueta contenido para almacenarlo en caché y lo envía al modelo por primera vez, el modelo procesa la entrada y guarda los resultados intermedios en un caché. Para solicitudes posteriores que contienen el mismo contenido, el modelo carga los resultados preprocesados ​​desde la memoria caché, lo que reduce significativamente tanto los costos como la latencia.

Puede implementar el almacenamiento en caché rápido en sus aplicaciones con unos pocos pasos:

  1. Identifique las partes de sus indicaciones que se reutilizan con frecuencia.
  2. Etiquete estas secciones para almacenarlas en caché en la lista de mensajes usando el nuevo cachePoint bloquear.
  3. Supervise el uso de la caché y las mejoras de latencia en los metadatos de respuesta usage sección.

A continuación se muestra un ejemplo de implementación del almacenamiento en caché rápido cuando se trabaja con documentos.

Primero, descargo tres guías de decisiones en formato PDF del sitio web de AWS. Estas guías le ayudarán a elegir los servicios de AWS que se ajusten a su caso de uso.

Luego, utilizo un script de Python para hacer tres preguntas sobre los documentos. En el código, creo un converse() función para manejar la conversación con el modelo. La primera vez que llamo a la función, incluyo una lista de documentos y una bandera para agregar un cachePoint bloquear.

import json

import boto3

MODEL_ID = "us.anthropic.claude-3-5-sonnet-20241022-v2:0"
AWS_REGION = "us-west-2"

bedrock_runtime = boto3.client(
    "bedrock-runtime",
    region_name=AWS_REGION,
)

DOCS = [
    "bedrock-or-sagemaker.pdf",
    "generative-ai-on-aws-how-to-choose.pdf",
    "machine-learning-on-aws-how-to-choose.pdf",
]

messages = []


def converse(new_message, docs=[], cache=False):

    if len(messages) == 0 or messages[-1]["role"] != "user":
        messages.append({"role": "user", "content": []})

    for doc in docs:
        print(f"Adding document: {doc}")
        name, format = doc.rsplit('.', maxsplit=1)
        with open(doc, "rb") as f:
            bytes = f.read()
        messages[-1]["content"].append({
            "document": {
                "name": name,
                "format": format,
                "source": {"bytes": bytes},
            }
        })

    messages[-1]["content"].append({"text": new_message})

    if cache:
        messages[-1]["content"].append({"cachePoint": {"type": "default"}})

    response = bedrock_runtime.converse(
        modelId=MODEL_ID,
        messages=messages,
    )

    output_message = response["output"]["message"]
    response_text = output_message["content"][0]["text"]

    print("Response text:")
    print(response_text)

    print("Usage:")
    print(json.dumps(response["usage"], indent=2))

    messages.append(output_message)


converse("Compare AWS Trainium and AWS Inferentia in 20 words or less.", docs=DOCS, cache=True)
converse("Compare Amazon Textract and Amazon Transcribe in 20 words or less.")
converse("Compare Amazon Q Business and Amazon Q Developer in 20 words or less.")

Para cada invocación, el script imprime la respuesta y el usage contadores.

Adding document: bedrock-or-sagemaker.pdf
Adding document: generative-ai-on-aws-how-to-choose.pdf
Adding document: machine-learning-on-aws-how-to-choose.pdf
Response text:
AWS Trainium is optimized for machine learning training, while AWS Inferentia is designed for low-cost, high-performance machine learning inference.
Usage:
{
  "inputTokens": 4,
  "outputTokens": 34,
  "totalTokens": 29879,
  "cacheReadInputTokenCount": 0,
  "cacheWriteInputTokenCount": 29841
}
Response text:
Amazon Textract extracts text and data from documents, while Amazon Transcribe converts speech to text from audio or video files.
Usage:
{
  "inputTokens": 59,
  "outputTokens": 30,
  "totalTokens": 29930,
  "cacheReadInputTokenCount": 29841,
  "cacheWriteInputTokenCount": 0
}
Response text:
Amazon Q Business answers questions using enterprise data, while Amazon Q Developer assists with building and operating AWS applications and services.
Usage:
{
  "inputTokens": 108,
  "outputTokens": 26,
  "totalTokens": 29975,
  "cacheReadInputTokenCount": 29841,
  "cacheWriteInputTokenCount": 0
}

El usage La sección de la respuesta contiene dos nuevos contadores: cacheReadInputTokenCount y cacheWriteInputTokenCount. El número total de tokens para una invocación es la suma de los tokens de entrada y salida más los tokens leídos y escritos en la memoria caché.

Cada invocación procesa una lista de mensajes. Los mensajes de la primera invocación contienen los documentos, la primera pregunta y el punto de caché. Debido a que los mensajes que preceden al punto de caché no están actualmente en el caché, se escriben en el caché. Según el usage Contadores, se han escrito 29.841 tokens en la caché.

"cacheWriteInputTokenCount": 29841

Para las siguientes invocaciones, la respuesta anterior y la nueva pregunta se agregan a la lista de mensajes. Los mensajes ante el cachePoint no se modifican y se encuentran en el caché.

Como era de esperar, podemos decir por el usage contadores que ahora se lee del caché la misma cantidad de tokens escritos anteriormente.

"cacheReadInputTokenCount": 29841

En mis pruebas, las siguientes invocaciones tardan un 55 por ciento menos en completarse en comparación con la primera. Dependiendo de su caso de uso (por ejemplo, con más contenido almacenado en caché), el almacenamiento en caché rápido puede mejorar la latencia hasta en un 85 por ciento.

Según el modelo, puede configurar más de un punto de caché en una lista de mensajes. Para encontrar los puntos de caché adecuados para su caso de uso, pruebe diferentes configuraciones y observe el efecto en el uso informado.

Cosas que debes saber
Amazon Bedrock Intelligent Prompt Routing está disponible en versión preliminar hoy en las regiones de AWS Este de EE. UU. (Norte de Virginia) y Oeste de EE. UU. (Oregón). Durante la vista previa, puede utilizar los enrutadores de aviso predeterminados y no hay ningún costo adicional por usar un enrutador de aviso. Pagas el costo del modelo seleccionado. Puede utilizar enrutadores rápidos con otras capacidades de Amazon Bedrock, como realizar evaluaciones, utilizar bases de conocimientos y configurar agentes.

Debido a que el modelo interno utilizado por los enrutadores de avisos necesita comprender la complejidad de un aviso, el enrutamiento de avisos inteligente actualmente solo admite avisos en inglés.

El soporte de Amazon Bedrock para el almacenamiento en caché rápido está disponible en versión preliminar en el oeste de EE. UU. (Oregón) para Claude 3.5 Sonnet V2 y Claude 3.5 Haiku de Anthropic. El almacenamiento en caché rápido también está disponible en el este de EE. UU. (Norte de Virginia) para Amazon Nova Micro, Amazon Nova Lite y Amazon Nova Pro.

Con el almacenamiento en caché rápido, las lecturas de caché reciben un descuento del 90 por ciento en comparación con los tokens de entrada no almacenados en caché. No hay cargos de infraestructura adicionales para el almacenamiento en caché. Cuando utilizas modelos Anthropic, pagas un costo adicional por los tokens escritos en el caché. No hay costos adicionales por las escrituras en caché con los modelos de Amazon Nova. Para obtener más información, consulte Precios de Amazon Bedrock.

Cuando se utiliza el almacenamiento en caché de avisos, el contenido se almacena en caché por hasta 5 minutos, y cada acceso al caché restablece esta cuenta regresiva. Se ha implementado el almacenamiento en caché rápido para admitir de forma transparente la inferencia entre regiones. De esta manera, sus aplicaciones pueden obtener la optimización de costos y el beneficio de latencia del almacenamiento en caché rápido con la flexibilidad de la inferencia entre regiones.

Estas nuevas capacidades facilitan la creación de aplicaciones de IA generativa rentables y de alto rendimiento. Al enrutar solicitudes de manera inteligente y almacenar en caché el contenido utilizado con frecuencia, puede reducir significativamente sus costos mientras mantiene e incluso mejora el rendimiento de las aplicaciones.

Para obtener más información y comenzar a utilizar estas nuevas capacidades hoy, visite la documentación de Amazon Bedrock y envíe sus comentarios a AWS re: Publicación para Amazon Bedrock. Puede encontrar contenido técnico detallado y descubrir cómo nuestras comunidades de constructores utilizan Amazon Bedrock en comunidad.aws.

Danilo



Fuente

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

GIPHY App Key not set. Please check settings

En un momento, las fuerzas rusas invadieron la ciudad radiactiva en la que se desarrolla la serie Stalker.

Por qué otro retraso de Stalker 2 nunca fue una opción para su desarrollador ucraniano

Fortnite agrega carteles de "Prohibido bailar" con consecuencias mortales para quienes infringen las reglas

Fortnite agrega carteles de «Prohibido bailar» con consecuencias mortales para quienes infringen las reglas