Logotipo de Zephyrnet

Modelos de Inference Llama 2 con transmisión de respuesta en tiempo real usando Amazon SageMaker | Servicios web de Amazon

Fecha:

Con la rápida adopción de aplicaciones de IA generativa, es necesario que estas aplicaciones respondan a tiempo para reducir la latencia percibida con un mayor rendimiento. Los modelos básicos (FM) a menudo se entrenan previamente en vastos corpus de datos con parámetros que varían en escalas de millones a miles de millones y más. Los modelos de lenguaje grande (LLM) son un tipo de FM que generan texto como respuesta a la inferencia del usuario. Inferir estos modelos con diferentes configuraciones de parámetros de inferencia puede generar latencias inconsistentes. La inconsistencia podría deberse a la cantidad variable de tokens de respuesta que espera del modelo o al tipo de acelerador en el que se implementa el modelo.

En cualquier caso, en lugar de esperar la respuesta completa, puede adoptar el enfoque de transmisión de respuesta para sus inferencias, que envía fragmentos de información tan pronto como se generan. Esto crea una experiencia interactiva al permitirle ver respuestas parciales transmitidas en tiempo real en lugar de una respuesta completa retrasada.

Con el anuncio oficial de que La inferencia en tiempo real de Amazon SageMaker ahora admite la transmisión de respuestas, ahora puede transmitir continuamente respuestas de inferencia al cliente cuando usa Amazon SageMaker inferencia en tiempo real con transmisión de respuesta. Esta solución le ayudará a crear experiencias interactivas para diversas aplicaciones de IA generativa, como chatbots, asistentes virtuales y generadores de música. Esta publicación le muestra cómo lograr tiempos de respuesta más rápidos en forma de tiempo hasta el primer byte (TTFB) y reducir la latencia percibida general al inferir los modelos Llama 2.

Para implementar la solución, utilizamos SageMaker, un servicio totalmente administrado para preparar datos y crear, entrenar e implementar modelos de aprendizaje automático (ML) para cualquier caso de uso con infraestructura, herramientas y flujos de trabajo totalmente administrados. Para obtener más información sobre las diversas opciones de implementación que ofrece SageMaker, consulte Preguntas frecuentes sobre alojamiento de modelos de Amazon SageMaker. Entendamos cómo podemos abordar los problemas de latencia mediante inferencia en tiempo real con transmisión de respuesta.

Resumen de la solución

Debido a que queremos abordar las latencias antes mencionadas asociadas con la inferencia en tiempo real con LLM, primero comprendamos cómo podemos usar el soporte de transmisión de respuesta para la inferencia en tiempo real para Llama 2. Sin embargo, cualquier LLM puede aprovechar el soporte de transmisión de respuesta con datos reales. -inferencia del tiempo.

Llama 2 es una colección de modelos de texto generativo previamente entrenados y ajustados que varían en escala de 7 mil millones a 70 mil millones de parámetros. Los modelos Llama 2 son modelos autorregresivos con arquitectura solo decodificador. Cuando se les proporciona un mensaje y parámetros de inferencia, los modelos Llama 2 son capaces de generar respuestas de texto. Estos modelos se pueden utilizar para traducción, resúmenes, respuesta a preguntas y chat.

Para esta publicación, implementamos el modelo Llama 2 Chat. meta-llama/Llama-2-13b-chat-hf en SageMaker para inferencias en tiempo real con transmisión de respuestas.

Cuando se trata de implementar modelos en puntos finales de SageMaker, puede contener los modelos utilizando herramientas especializadas. Contenedor de aprendizaje profundo de AWS (DLC) imágenes disponibles para bibliotecas populares de código abierto. Los modelos Llama 2 son modelos de generación de texto; puedes usar el Contenedores de inferencia Hugging Face LLM en SageMaker impulsado por Hugging Face Inferencia de generación de texto (TGI) o DLC de AWS para Inferencia de modelo grande (LMI).

En esta publicación, implementamos el modelo Llama 2 13B Chat usando DLC en SageMaker Hosting para inferencia en tiempo real impulsada por instancias G5. Las instancias G5 son instancias basadas en GPU de alto rendimiento para aplicaciones con uso intensivo de gráficos e inferencia de aprendizaje automático. También puede utilizar los tipos de instancia admitidos p4d, p3, g5 y g4dn con los cambios apropiados según la configuración de la instancia.

Requisitos previos

Para implementar esta solución, debe tener lo siguiente:

  • Una cuenta de AWS con un Gestión de identidades y accesos de AWS (IAM) con permisos para administrar los recursos creados como parte de la solución.
  • Si es la primera vez que trabaja con Estudio Amazon SageMaker, primero debe crear un Dominio de SageMaker.
  • Una cuenta de Hugging Face. Regístrate con su correo electrónico si aún no tiene una cuenta.
    • Para acceder sin problemas a los modelos disponibles en Hugging Face, especialmente a los modelos cerrados como Llama, para fines de ajuste e inferencia, debe tener una cuenta de Hugging Face para obtener un token de acceso de lectura. Después de registrarse para obtener su cuenta Hugging Face, iniciar sesión visitar https://huggingface.co/settings/tokens para crear un token de acceso de lectura.
  • Accede a Llama 2, utilizando el mismo ID de correo electrónico que utilizaste para registrarte en Hugging Face.
    • Los modelos Llama 2 disponibles a través de Hugging Face son modelos cerrados. El uso del modelo Llama se rige por la licencia Meta. Para descargar los pesos del modelo y el tokenizador, solicitar acceso a Llama y aceptar su licencia.
    • Una vez que se le haya concedido el acceso (normalmente en un par de días), recibirá una confirmación por correo electrónico. Para este ejemplo utilizamos el modelo Llama-2-13b-chat-hf, pero también deberías poder acceder a otras variantes.

Enfoque 1: Abrazar la cara TGI

En esta sección, le mostramos cómo implementar el meta-llama/Llama-2-13b-chat-hf modelo a un punto final en tiempo real de SageMaker con transmisión de respuesta usando Hugging Face TGI. La siguiente tabla describe las especificaciones para esta implementación.

Especificaciones Valor
Envase Abrazando la cara TGI
Nombre de Modelo meta-llama/Llama-2-13b-chat-hf
Instancia de aprendizaje automático ml.g5.12xgrande
Inferencia En tiempo real con transmisión de respuesta

Implementar el modelo

Primero, recupera la imagen base para que se implemente el LLM. Luego construye el modelo sobre la imagen base. Finalmente, implementa el modelo en la instancia de ML para SageMaker Hosting para realizar inferencias en tiempo real.

Observemos cómo lograr la implementación mediante programación. Para abreviar, en esta sección solo se analiza el código que ayuda con los pasos de implementación. El código fuente completo para la implementación está disponible en el cuaderno. llama-2-hf-tgi/llama-2-13b-chat-hf/1-deploy-llama-2-13b-chat-hf-tgi-sagemaker.ipynb.

Recupere el último DLC de Hugging Face LLM impulsado por TGI a través de archivos prediseñados Contenidos descargables de SageMaker. Esta imagen se utiliza para implementar el meta-llama/Llama-2-13b-chat-hf modelo en SageMaker. Vea el siguiente código:

from sagemaker.huggingface import get_huggingface_llm_image_uri

# retrieve the llm image uri
llm_image = get_huggingface_llm_image_uri(
  "huggingface",
  version="1.0.3"
)

Defina el entorno para el modelo con los parámetros de configuración definidos de la siguiente manera:

instance_type = "ml.g5.12xlarge"
number_of_gpu = 4
config = {
    'HF_MODEL_ID': "meta-llama/Llama-2-13b-chat-hf", # model_id from hf.co/models
    'SM_NUM_GPUS': json.dumps(number_of_gpu), # Number of GPU used per replica
    'MAX_INPUT_LENGTH': json.dumps(2048),  # Max length of input text
    'MAX_TOTAL_TOKENS': json.dumps(4096),  # Max length of the generation (including input text)
    'MAX_BATCH_TOTAL_TOKENS': json.dumps(8192),  # Limits the number of tokens that can be processed in parallel during the generation
    'HUGGING_FACE_HUB_TOKEN': "<YOUR_HUGGING_FACE_READ_ACCESS_TOKEN>"
}

Reemplaza <YOUR_HUGGING_FACE_READ_ACCESS_TOKEN> para el parámetro de configuración HUGGING_FACE_HUB_TOKEN con el valor del token obtenido de tu perfil de Hugging Face como se detalla en la sección de requisitos previos de esta publicación. En la configuración, usted define la cantidad de GPU utilizadas por réplica de un modelo como 4 para SM_NUM_GPUS. Entonces puedes implementar el meta-llama/Llama-2-13b-chat-hf modelo en una instancia ml.g5.12xlarge que viene con 4 GPU.

Ahora puedes construir la instancia de HuggingFaceModel con la configuración de entorno antes mencionada:

llm_model = HuggingFaceModel(
    role=role,
    image_uri=llm_image,
    env=config
)

Finalmente, implemente el modelo proporcionando argumentos para el método de implementación disponible en el modelo con varios valores de parámetros, como endpoint_name, initial_instance_county instance_type:

llm = llm_model.deploy(
    endpoint_name=endpoint_name,
    initial_instance_count=1,
    instance_type=instance_type,
    container_startup_health_check_timeout=health_check_timeout,
)

Realizar inferencia

El DLC Hugging Face TGI viene con la capacidad de transmitir respuestas sin personalizaciones ni cambios de código en el modelo. Puedes usar invoke_endpoint_with_response_stream si estás usando Boto3 o Invocar punto final con flujo de respuesta al programar con el SDK de SageMaker Python.

El InvokeEndpointWithResponseStream La API de SageMaker permite a los desarrolladores transmitir respuestas desde los modelos de SageMaker, lo que puede ayudar a mejorar la satisfacción del cliente al reducir la latencia percibida. Esto es especialmente importante para aplicaciones creadas con modelos de IA generativa, donde el procesamiento inmediato es más importante que esperar la respuesta completa.

Para este ejemplo, usamos Boto3 para inferir el modelo y usamos la API de SageMaker. invoke_endpoint_with_response_stream como sigue:

def get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload):
    response_stream = sagemaker_runtime.invoke_endpoint_with_response_stream(
        EndpointName=endpoint_name,
        Body=json.dumps(payload), 
        ContentType="application/json",
        CustomAttributes='accept_eula=false'
    )
    return response_stream

El argumento CustomAttributes se establece en el valor accept_eula=false. El accept_eula el parámetro debe establecerse en true para obtener con éxito la respuesta de los modelos Llama 2. Después de la invocación exitosa usando invoke_endpoint_with_response_stream, el método devolverá un flujo de respuesta de bytes.

El siguiente diagrama ilustra este flujo de trabajo.

Diagrama arquitectónico de transmisión HF TGI

Necesita un iterador que recorra el flujo de bytes y los analice en texto legible. El LineIterator La implementación se puede encontrar en llama-2-hf-tgi/llama-2-13b-chat-hf/utils/LineIterator.py. Ahora está listo para preparar el mensaje y las instrucciones para usarlos como carga útil mientras infiere el modelo.

Prepare un mensaje e instrucciones.

En este paso, preparará el mensaje y las instrucciones para su LLM. Para solicitar Llama 2, debe tener la siguiente plantilla de solicitud:

<s>[INST] <<SYS>>
{{ system_prompt }}
<</SYS>>

{{ user_message }} [/INST]

Usted construye la plantilla de solicitud definida mediante programación en el método. build_llama2_prompt, que se alinea con la plantilla de aviso antes mencionada. Luego, define las instrucciones según el caso de uso. En este caso, le estamos indicando al modelo que genere un correo electrónico para una campaña de marketing como se describe en el get_instructions método. El código para estos métodos está en el llama-2-hf-tgi/llama-2-13b-chat-hf/2-sagemaker-realtime-inference-llama-2-13b-chat-hf-tgi-streaming-response.ipynb computadora portátil. Construya la instrucción combinada con la tarea a realizar como se detalla en user_ask_1 como sigue:

user_ask_1 = f'''
AnyCompany recently announced new service launch named AnyCloud Internet Service.
Write a short email about the product launch with Call to action to Alice Smith, whose email is alice.smith@example.com
Mention the Coupon Code: EARLYB1RD to get 20% for 1st 3 months.
'''
instructions = get_instructions(user_ask_1)
prompt = build_llama2_prompt(instructions)

Pasamos las instrucciones para crear el mensaje según la plantilla de mensaje generada por build_llama2_prompt.

inference_params = {
        "do_sample": True,
        "top_p": 0.6,
        "temperature": 0.9,
        "top_k": 50,
        "max_new_tokens": 512,
        "repetition_penalty": 1.03,
        "stop": ["</s>"],
        "return_full_text": False
    }
payload = {
    "inputs":  prompt,
    "parameters": inference_params,
    "stream": True ## <-- to have response stream.
}

Agrupamos los parámetros de inferencia junto con el mensaje con la clave. stream con el valor True para formar una carga útil final. Enviar la carga útil a get_realtime_response_stream, que se utilizará para invocar un punto final con transmisión de respuesta:

resp = get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload)
print_response_stream(resp)

El texto generado por el LLM se transmitirá a la salida como se muestra en la siguiente animación.

Transmisión de respuesta de chat de Llama 2 13B - HF TGI

Enfoque 2: LMI con servicio DJL

En esta sección, demostramos cómo implementar el meta-llama/Llama-2-13b-chat-hf modelo a un punto final en tiempo real de SageMaker con transmisión de respuesta usando LMI con DJL Serving. La siguiente tabla describe las especificaciones para esta implementación.

Especificaciones Valor
Envase Imagen del contenedor LMI con DJL Serving
Nombre de Modelo meta-llama/Llama-2-13b-chat-hf
Instancia de aprendizaje automático ml.g5.12xgrande
Inferencia En tiempo real con transmisión de respuesta

Primero descarga el modelo y lo almacena en Servicio de almacenamiento simple de Amazon (Amazon S3). Luego, especifica el URI de S3 que indica el prefijo S3 del modelo en el serving.properties archivo. A continuación, recupera la imagen base para que se implemente el LLM. Luego construye el modelo sobre la imagen base. Finalmente, implementa el modelo en la instancia de ML para SageMaker Hosting para realizar inferencias en tiempo real.

Observemos cómo lograr los pasos de implementación antes mencionados mediante programación. Para abreviar, en esta sección solo se detalla el código que ayuda con los pasos de implementación. El código fuente completo para esta implementación está disponible en el cuaderno. llama-2-lmi/llama-2-13b-chat/1-deploy-llama-2-13b-chat-lmi-response-streaming.ipynb.

Descargue la instantánea del modelo de Hugging Face y cargue los artefactos del modelo en Amazon S3

Con los requisitos previos antes mencionados, descargue el modelo en la instancia del cuaderno de SageMaker y luego cárguelo en el depósito de S3 para su posterior implementación:

model_name = 'meta-llama/Llama-2-13b-chat-hf'
# Only download pytorch checkpoint files
allow_patterns = ["*.json", "*.txt", "*.model", "*.safetensors", "*.bin", "*.chk", "*.pth"]

# Download the model snapshot
model_download_path = snapshot_download(
    repo_id=model_name, 
    cache_dir=local_model_path, 
    allow_patterns=allow_patterns, 
    token='<YOUR_HUGGING_FACE_READ_ACCESS_TOKEN>'
)

Tenga en cuenta que aunque no proporcione un token de acceso válido, el modelo se descargará. Pero cuando se implementa un modelo de este tipo, el modelo que se sirve no tendrá éxito. Por lo tanto, se recomienda reemplazar <YOUR_HUGGING_FACE_READ_ACCESS_TOKEN> por el argumento token con el valor del token obtenido de su perfil de Hugging Face como se detalla en los requisitos previos. Para esta publicación, especificamos el nombre del modelo oficial de Llama 2 como se identifica en Hugging Face con el valor meta-llama/Llama-2-13b-chat-hf. El modelo sin comprimir se descargará a local_model_path como resultado de ejecutar el código antes mencionado.

Cargue los archivos en Amazon S3 y obtenga el URI, que luego se utilizará en serving.properties.

Estarás empaquetando el meta-llama/Llama-2-13b-chat-hf modelo en la imagen del contenedor LMI con DJL Serving usando la configuración especificada a través de serving.properties. Luego, implementa el modelo junto con los artefactos del modelo empaquetados en la imagen del contenedor en la instancia de SageMaker ML ml.g5.12xlarge. Luego, utilizará esta instancia de ML para SageMaker Hosting para realizar inferencias en tiempo real.

Preparar artefactos modelo para DJL Serving

Prepare los artefactos de su modelo creando un serving.properties archivo de configuración:

%%writefile chat_llama2_13b_hf/serving.properties
engine = MPI
option.entryPoint=djl_python.huggingface
option.tensor_parallel_degree=4
option.low_cpu_mem_usage=TRUE
option.rolling_batch=lmi-dist
option.max_rolling_batch_size=64
option.model_loading_timeout=900
option.model_id={{model_id}}
option.paged_attention=true

Usamos las siguientes configuraciones en este archivo de configuración:

  • motor – Esto especifica el motor de ejecución que utilizará DJL. Los valores posibles incluyen Python, DeepSpeed, FasterTransformery MPI. En este caso, lo configuramos en MPI. La paralelización e inferencia de modelos (MPI) facilita la partición del modelo en todas las GPU disponibles y, por lo tanto, acelera la inferencia.
  • opción.punto de entrada – Esta opción especifica qué controlador ofrecido por DJL Serving le gustaría utilizar. Los valores posibles son djl_python.huggingface, djl_python.deepspeedy djl_python.stable-diffusion. Usamos djl_python.huggingface para abrazar la cara Acelerar.
  • opción.tensor_parallel_degree – Esta opción especifica el número de particiones tensoriales paralelas realizadas en el modelo. Puede establecer la cantidad de dispositivos GPU sobre los cuales Accelerate necesita particionar el modelo. Este parámetro también controla la cantidad de trabajadores por modelo que se iniciarán cuando se ejecute el servicio DJL. Por ejemplo, si tenemos una máquina de 4 GPU y estamos creando cuatro particiones, entonces tendremos un trabajador por modelo para atender las solicitudes.
  • opción.low_cpu_mem_usage – Esto reduce el uso de memoria de la CPU al cargar modelos. Le recomendamos que establezca esto en TRUE.
  • opción.rolling_batch – Esto permite el procesamiento por lotes a nivel de iteración utilizando una de las estrategias admitidas. Los valores incluyen auto, schedulery lmi-dist. Usamos lmi-dist para activar el procesamiento por lotes continuo para Llama 2.
  • opción.max_rolling_batch_size – Esto limita el número de solicitudes simultáneas en el lote continuo. El valor predeterminado es 32.
  • opción.model_id – Deberías reemplazar {{model_id}} con el ID de modelo de un modelo previamente entrenado alojado dentro de un repositorio de modelos en Hugging Face o ruta S3 a los artefactos del modelo.

Se pueden encontrar más opciones de configuración en Configuraciones y ajustes.

Debido a que DJL Serving espera que los artefactos del modelo estén empaquetados y formateados en un archivo .tar, ejecute el siguiente fragmento de código para comprimir y cargar el archivo .tar en Amazon S3:

s3_code_prefix = f"{s3_prefix}/code" # folder within bucket where code artifact will go
s3_code_artifact = sess.upload_data("model.tar.gz", bucket, s3_code_prefix)

Recupere la última imagen del contenedor LMI con DJL Serving

A continuación, utiliza los DLC disponibles con SageMaker for LMI para implementar el modelo. Recupere el URI de la imagen de SageMaker para el djl-deepspeed contenedor mediante programación usando el siguiente código:

from sagemaker import image_uris
inference_image_uri = image_uris.retrieve(
    framework="djl-deepspeed", region=region, version="0.25.0"
)

Puede utilizar la imagen antes mencionada para implementar el meta-llama/Llama-2-13b-chat-hf modelo en SageMaker. Ahora puedes proceder a crear el modelo.

Crea el modelo

Puede crear el modelo cuyo contenedor se construye utilizando el inference_image_uri y el código de servicio del modelo ubicado en el URI de S3 indicado por s3_code_artifact:

from sagemaker.utils import name_from_base

model_name = name_from_base(f"Llama-2-13b-chat-lmi-streaming")

create_model_response = sm_client.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    PrimaryContainer={
        "Image": inference_image_uri,
        "ModelDataUrl": s3_code_artifact,
        "Environment": {"MODEL_LOADING_TIMEOUT": "3600"},
    },
)

Ahora puede crear la configuración del modelo con todos los detalles para la configuración del punto final.

Crear la configuración del modelo

Utilice el siguiente código para crear una configuración de modelo para el modelo identificado por model_name:

endpoint_config_name = f"{model_name}-config"

endpoint_name = name_from_base(model_name)

endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "VariantName": "variant1",
            "ModelName": model_name,
            "InstanceType": "ml.g5.12xlarge",
            "InitialInstanceCount": 1,
            "ModelDataDownloadTimeoutInSeconds": 3600,
            "ContainerStartupHealthCheckTimeoutInSeconds": 3600,
        },
    ],
)

La configuración del modelo está definida para el ProductionVariants parámetro InstanceType para la instancia de ML ml.g5.12xlarge. También proporcionas el ModelName utilizando el mismo nombre que utilizó para crear el modelo en el paso anterior, estableciendo así una relación entre el modelo y la configuración del punto final.

Ahora que ha definido el modelo y la configuración del modelo, puede crear el punto final de SageMaker.

Crear el punto final de SageMaker

Cree el punto final para implementar el modelo usando el siguiente fragmento de código:

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)

Puede ver el progreso de la implementación utilizando el siguiente fragmento de código:

resp = sm_client.describe_endpoint(EndpointName=endpoint_name)
status = resp["EndpointStatus"]

Una vez que la implementación sea exitosa, el estado del punto final será InService. Ahora que el punto final está listo, realicemos una inferencia con la transmisión de respuesta.

Inferencia en tiempo real con transmisión de respuesta

Como cubrimos en el enfoque anterior para Hugging Face TGI, puedes usar el mismo método get_realtime_response_stream para invocar la transmisión de respuesta desde el punto final de SageMaker. El código para inferir utilizando el enfoque LMI se encuentra en el llama-2-lmi/llama-2-13b-chat/2-inference-llama-2-13b-chat-lmi-response-streaming.ipynb computadora portátil. El LineIterator La implementación se encuentra en llama-2-lmi/utils/LineIterator.py. Tenga en cuenta que el LineIterator para el modelo Llama 2 Chat implementado en el contenedor LMI es diferente al LineIterator mencionado en la sección TGI de Hugging Face. El LineIterator recorre el flujo de bytes de los modelos Llama 2 Chat inferidos con el contenedor LMI con djl-deepspeed versión 0.25.0. La siguiente función auxiliar analizará el flujo de respuesta recibido de la solicitud de inferencia realizada a través del invoke_endpoint_with_response_stream API:

from utils.LineIterator import LineIterator

def print_response_stream(response_stream):
    event_stream = response_stream.get('Body')
    for line in LineIterator(event_stream):
        print(line, end='')

El método anterior imprime el flujo de datos leído por el LineIterator en un formato legible por humanos.

Exploremos cómo preparar el mensaje y las instrucciones para usarlos como carga útil mientras inferimos el modelo.

Debido a que está infiriendo el mismo modelo tanto en Hugging Face TGI como en LMI, el proceso de preparación del mensaje y las instrucciones es el mismo. Por lo tanto, puedes utilizar los métodos. get_instructions y build_llama2_prompt para inferir.

El get_instructions El método devuelve las instrucciones. Construya las instrucciones combinadas con la tarea a realizar como se detalla en user_ask_2 como sigue:

user_ask_2 = f'''
AnyCompany recently announced new service launch named AnyCloud Streaming Service.
Write a short email about the product launch with Call to action to Alice Smith, whose email is alice.smith@example.com
Mention the Coupon Code: STREAM2DREAM to get 15% for 1st 6 months.
'''

instructions = get_instructions(user_ask_2)
prompt = build_llama2_prompt(instructions)

Pase las instrucciones para crear el mensaje según la plantilla de mensaje generada por build_llama2_prompt:

inference_params = {
        "do_sample": True,
        "top_p": 0.6,
        "temperature": 0.9,
        "top_k": 50,
        "max_new_tokens": 512,
        "return_full_text": False,
    }

payload = {
    "inputs":  prompt,
    "parameters": inference_params
}

Combinamos los parámetros de inferencia junto con el mensaje para formar una carga útil final. Luego envías la carga útil a get_realtime_response_stream, que se utiliza para invocar un punto final con transmisión de respuesta:

resp = get_realtime_response_stream(sagemaker_runtime, endpoint_name, payload)
print_response_stream(resp)

El texto generado por el LLM se transmitirá a la salida como se muestra en la siguiente animación.

Transmisión de respuesta de chat de Llama 2 13B - LMI

Limpiar

Para evitar incurrir en cargos innecesarios, utilice el Consola de administración de AWS para eliminar los puntos finales y sus recursos asociados que se crearon mientras se ejecutaban los enfoques mencionados en la publicación. Para ambos enfoques de implementación, realice la siguiente rutina de limpieza:

import boto3
sm_client = boto3.client('sagemaker')
endpoint_name="<SageMaker_Real-time_Endpoint_Name>"
endpoint = sm_client.describe_endpoint(EndpointName=endpoint_name)
endpoint_config_name = endpoint['EndpointConfigName']
endpoint_config = sm_client.describe_endpoint_config(EndpointConfigName=endpoint_config_name)
model_name = endpoint_config['ProductionVariants'][0]['ModelName']

print(f"""
About to delete the following sagemaker resources:
Endpoint: {endpoint_name}
Endpoint Config: {endpoint_config_name}
Model: {model_name}
""")

# delete endpoint
sm_client.delete_endpoint(EndpointName=endpoint_name)
# delete endpoint config
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
# delete model
sm_client.delete_model(ModelName=model_name)

Reemplaza <SageMaker_Real-time_Endpoint_Name> para variable endpoint_name con el punto final real.

Para el segundo enfoque, almacenamos el modelo y los artefactos de código en Amazon S3. Puede limpiar el depósito S3 usando el siguiente código:

s3 = boto3.resource('s3')
s3_bucket = s3.Bucket(bucket)
s3_bucket.objects.filter(Prefix=s3_prefix).delete()

Conclusión

En esta publicación, analizamos cómo una cantidad variable de tokens de respuesta o un conjunto diferente de parámetros de inferencia pueden afectar las latencias asociadas con los LLM. Mostramos cómo abordar el problema con la ayuda de la transmisión de respuestas. Luego identificamos dos enfoques para implementar e inferir modelos de Llama 2 Chat utilizando DLC de AWS: LMI y Hugging Face TGI.

Ahora debería comprender la importancia de la respuesta de transmisión y cómo puede reducir la latencia percibida. La transmisión de respuesta puede mejorar la experiencia del usuario, lo que de otro modo le haría esperar hasta que el LLM cree la respuesta completa. Además, implementar modelos de Llama 2 Chat con transmisión de respuesta mejora la experiencia del usuario y hace felices a sus clientes.

Puede consultar las muestras oficiales de AWS. recetas-de-transmisión-de-respuesta-de-amazon-sagemaker-llama2 que cubre el despliegue de otras variantes del modelo Llama 2.

Referencias


Acerca de los autores

Pavan Kumar Rao NavulePavan Kumar Rao Navule es arquitecto de soluciones en Amazon Web Services. Trabaja con ISV en India para ayudarlos a innovar en AWS. Es autor publicado del libro "Getting Started with V Programming". Obtuvo un Executive M.Tech en Ciencia de Datos del Instituto Indio de Tecnología (IIT), Hyderabad. También obtuvo un MBA Ejecutivo en especialización en TI de la Escuela India de Gestión y Administración de Empresas, y tiene una Licenciatura en Tecnología en Ingeniería Electrónica y Comunicaciones del Instituto Vaagdevi de Tecnología y Ciencia. Pavan es un arquitecto profesional de soluciones certificado por AWS y posee otras certificaciones como AWS Certified Machine Learning Specialty, Microsoft Certified Professional (MCP) y Microsoft Certified Technology Specialist (MCTS). También es un entusiasta del código abierto. En su tiempo libre le encanta escuchar las grandes voces mágicas de Sia y Rihanna.

Odio SudhanshuOdio Sudhanshu es el principal especialista en IA/ML de AWS y trabaja con clientes para asesorarlos sobre sus MLOps y su viaje hacia la IA generativa. En su puesto anterior en Amazon, conceptualizó, creó y dirigió equipos para construir plataformas de gamificación e inteligencia artificial basadas en código abierto, y las comercializó con éxito con más de 100 clientes. Sudhanshu tiene en su haber un par de patentes, ha escrito dos libros y varios artículos y blogs, y ha presentado sus puntos de vista en diversos foros técnicos. Ha sido un líder intelectual y orador, y ha estado en la industria durante casi 25 años. Ha trabajado con clientes de Fortune 1000 en todo el mundo y, más recientemente, con clientes nativos digitales en India.

punto_img

Información más reciente

punto_img