Acelere la inferencia de IA generativa con microservicios NVIDIA NIM en Amazon SageMaker

Esta publicación está coescrita con Eliuth Triana, Abhishek Sawarkar, Jiahong Liu, Kshitiz Gupta, JR Morgan y Deepika Padmanabhan de NVIDIA.

En la conferencia NVIDIA GTC de 2024, anunciamos el soporte para Microservicios de inferencia de NVIDIA NIM en Inferencia de Amazon SageMakerEsta integración le permite implementar modelos de lenguaje grandes (LLM) líderes en la industria en SageMaker y optimizar su rendimiento y costo. Los contenedores preconstruidos optimizados permiten la implementación de LLM de última generación en minutos en lugar de días, lo que facilita su integración perfecta en aplicaciones de IA de nivel empresarial.

NIM se basa en tecnologías como NVIDIA Tensor RT, NVIDIA TensorRT-LLMy Máster en DerechoNIM está diseñado para permitir una inferencia de IA sencilla, segura y de alto rendimiento en instancias aceleradas por GPU NVIDIA alojadas por SageMaker. Esto permite a los desarrolladores aprovechar la potencia de estos modelos avanzados mediante las API de SageMaker y solo unas pocas líneas de código, lo que acelera la implementación de capacidades de IA de vanguardia dentro de sus aplicaciones.

NIM, parte de la NVIDIA AI para empresas Plataforma de software listada en Mercado de AWSes un conjunto de microservicios de inferencia que incorporan el poder de los LLM de última generación a sus aplicaciones, brindando capacidades de comprensión y procesamiento del lenguaje natural (PLN), ya sea que esté desarrollando chatbots, resumiendo documentos o implementando otras aplicaciones impulsadas por PNL. Puede usar contenedores NVIDIA prediseñados para alojar LLM populares que están optimizados para GPU NVIDIA específicas para una implementación rápida. Empresas como Amgen, Biografía de A-Alpha, Agilenty IA hipocrática se encuentran entre quienes utilizan NVIDIA AI en AWS para acelerar la biología computacional, el análisis genómico y la IA conversacional.

En esta publicación, ofrecemos una guía sobre cómo los clientes pueden usar modelos de inteligencia artificial (IA) generativa y LLM mediante la integración de NVIDIA NIM con SageMaker. Demostramos cómo funciona esta integración y cómo se pueden implementar estos modelos de última generación en SageMaker, optimizando su rendimiento y costo.

Puede utilizar los contenedores NIM preconstruidos y optimizados para implementar LLM e integrarlos en sus aplicaciones de IA de nivel empresarial creadas con SageMaker en minutos, en lugar de días. También compartimos un cuaderno de muestra que puede utilizar para comenzar, mostrando las API simples y algunas líneas de código necesarias para aprovechar las capacidades de estos modelos avanzados.

Descripción general de la solución

Comenzar a usar NIM es muy sencillo. Dentro del Catálogo de API de NVIDIALos desarrolladores tienen acceso a una amplia gama de modelos de IA optimizados para NIM que pueden usar para crear e implementar sus propias aplicaciones de IA. Puede comenzar a crear prototipos directamente en el catálogo mediante la GUI (como se muestra en la siguiente captura de pantalla) o interactuar directamente con la API de forma gratuita.

Para implementar NIM en SageMaker, debe descargar NIM y luego implementarlo. Puede iniciar este proceso eligiendo Corre en cualquier lugar con NIM para el modelo de su elección, como se muestra en la siguiente captura de pantalla.

Puede registrarse para obtener la licencia de evaluación gratuita de 90 días en el Catálogo de API registrándose con la dirección de correo electrónico de su organización. Esto le otorgará una clave API de NGC personal para extraer los activos de NGC y ejecutarlos en SageMaker. Para obtener detalles sobre los precios de SageMaker, consulte Precios de Amazon SageMaker.

Prerrequisitos

Como requisito previo, configure un Estudio Amazon SageMaker ambiente:

  1. Asegúrese de que el dominio de SageMaker existente tenga habilitado el acceso a Docker. De lo contrario, ejecute el siguiente comando para actualizar el dominio:
# update domain
aws --region region \
    sagemaker update-domain --domain-id domain-id \
    --domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'

  1. Una vez habilitado el acceso a Docker para el dominio, cree un perfil de usuario ejecutando el siguiente comando:
aws --region region sagemaker create-user-profile \
    --domain-id domain-id \
    --user-profile-name user-profile-name

  1. Crea un espacio JupyterLab para el perfil de usuario que creaste.
  2. Después de crear el espacio JupyterLab, ejecute lo siguiente secuencia de comandos bash para instalar la CLI de Docker.

Configurar el entorno de cuaderno Jupyter

Para esta serie de pasos, utilizamos un notebook JupyterLab de SageMaker Studio. También debe adjuntar un Tienda de bloques elásticos de Amazon (Amazon EBS) de al menos 300 MB de tamaño, lo que puede hacer en la configuración del dominio de SageMaker Studio. En este ejemplo, usamos una instancia ml.g5.4xlarge, impulsada por una GPU NVIDIA A10G.

Comenzamos abriendo el cuaderno de ejemplo provisto en nuestra instancia de JupyterLab, importamos los paquetes correspondientes y configuramos la sesión, el rol y la información de la cuenta de SageMaker:

import boto3, json, sagemaker, time
from sagemaker import get_execution_role
from pathlib import Path

sess = boto3.Session()
sm = sess.client("sagemaker")
client = boto3.client("sagemaker-runtime")
region = sess.region_name
sts_client = sess.client('sts')
account_id = sts_client.get_caller_identity()['Account']

Extraiga el contenedor NIM del contenedor público para enviarlo a su contenedor privado

El contenedor NIM que viene con la integración de SageMaker incorporada está disponible en Galería pública de Amazon ECRPara implementarlo en su propia cuenta de SageMaker de forma segura, puede extraer el contenedor Docker de la cuenta pública. Registro de contenedores elásticos de Amazon (Amazon ECR) contenedor mantenido por NVIDIA y vuelva a cargarlo en su propio contenedor privado:

%%bash --out nim_image
public_nim_image="public.ecr.aws/nvidia/nim:llama3-8b-instruct-1.0.0"
nim_model="nim-llama3-8b-instruct"
docker pull ${public_nim_image} 
account=$(aws sts get-caller-identity --query Account --output text)
region=${region:-us-east-1}
nim_image="${account}.dkr.ecr.${region}.amazonaws.com/${nim_model}"
# If the repository doesn't exist in ECR, create it.
aws ecr describe-repositories --repository-names "${nim_image}" --region "${region}" > /dev/null 2>&1
if [ $? -ne 0 ]
then
    aws ecr create-repository --repository-name "${nim_image}" --region "${region}" > /dev/null
fi
# Get the login command from ECR and execute it directly
aws ecr get-login-password --region "${region}" | docker login --username AWS --password-stdin "${account}".dkr.ecr."${region}".amazonaws.com
docker tag ${public_nim_image} ${nim_image}
docker push ${nim_image}
echo -n ${nim_image}
gi

Configurar la clave API de NVIDIA

Se puede acceder a los NIM mediante el catálogo de API de NVIDIA. Solo necesita registrarse para obtener una clave de API de NVIDIA desde el sitio web Catálogo NGC por elección Generar clave personal.

Al crear una clave API de NGC, elija al menos Catálogo NGC en el Servicios incluidos Menú desplegable. Puede incluir más servicios si planea reutilizar esta clave para otros fines.

Para los propósitos de esta publicación, lo almacenamos en una variable de entorno:

NGC_API_KEY = YOUR_KEY

Esta clave se utiliza para descargar pesos de modelos preoptimizados al ejecutar el NIM.

Cree su punto final de SageMaker

Ahora tenemos todos los recursos preparados para implementar en un punto de conexión de SageMaker. Si utiliza su notebook después de configurar su entorno de Boto3, primero debe asegurarse de hacer referencia al contenedor que envió a Amazon ECR en un paso anterior:

sm_model_name = "nim-llama3-8b-instruct"
container = {
    "Image": nim_image,
    "Environment": {"NGC_API_KEY": NGC_API_KEY}
}
create_model_response = sm.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

print("Model Arn: " + create_model_response["ModelArn"])

Una vez que la definición del modelo se configura correctamente, el siguiente paso es definir la configuración del punto final para la implementación. En este ejemplo, implementamos el NIM en una instancia ml.g5.4xlarge:

endpoint_config_name = sm_model_name

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": "ml.g5.4xlarge",
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
            "ContainerStartupHealthCheckTimeoutInSeconds": 850
        }
    ],
)

print("Endpoint Config Arn: " + create_endpoint_config_response["EndpointConfigArn"])

Por último, cree el punto final de SageMaker:

endpoint_name = sm_model_name

create_endpoint_response = sm.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)

print("Endpoint Arn: " + create_endpoint_response["EndpointArn"])

Ejecutar inferencia contra el punto final de SageMaker con NIM

Una vez que el punto final se haya implementado correctamente, puede ejecutar solicitudes contra el punto final de SageMaker con tecnología NIM utilizando la API REST para probar diferentes preguntas e indicaciones para interactuar con los modelos de IA generativos:

messages = [
    {"role": "user", "content": "Hello! How are you?"},
    {"role": "assistant", "content": "Hi! I am quite well, how can I help you today?"},
    {"role": "user", "content": "Write a short limerick about the wonders of GPU Computing."}
]
payload = {
  "model": "meta/llama3-8b-instruct",
  "messages": messages,
  "max_tokens": 100
}


response = client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/json", Body=json.dumps(payload)
)

output = json.loads(response["Body"].read().decode("utf8"))
print(json.dumps(output, indent=2))

¡Eso es todo! Ahora tienes un punto final en servicio que utiliza NIM en SageMaker.

Licencias NIM

NIM es parte de la licencia empresarial de NVIDIA. NIM viene con una licencia de evaluación de 90 días para comenzar. Para usar NIM en SageMaker más allá de la licencia de 90 días, Conéctese con NVIDIA para obtener precios privados de AWS MarketplaceNIM también está disponible como una oferta paga como parte de la suscripción al software NVIDIA AI Enterprise. Disponible en AWS Marketplace

Conclusión

En esta publicación, le mostramos cómo comenzar a usar NIM en SageMaker para modelos prediseñados. No dude en probarlo siguiendo las instrucciones. ejemplo de cuaderno.

Le recomendamos explorar NIM para adoptarlo en beneficio de sus propios casos de uso y aplicaciones.


Acerca de los autores

Saurabh Trikande es gerente sénior de productos de Amazon SageMaker Inference. Le apasiona trabajar con los clientes y lo motiva el objetivo de democratizar el aprendizaje automático. Se centra en los desafíos principales relacionados con la implementación de aplicaciones de aprendizaje automático complejas, modelos de aprendizaje automático multiinquilino, optimizaciones de costos y hacer que la implementación de modelos de aprendizaje profundo sea más accesible. En su tiempo libre, a Saurabh le gusta hacer caminatas, aprender sobre tecnologías innovadoras, seguir TechCrunch y pasar tiempo con su familia.

Parque James es arquitecto de soluciones en Amazon Web Services. Trabaja con Amazon.com para diseñar, crear e implementar soluciones tecnológicas en AWS y tiene un interés particular en la IA y el aprendizaje automático. En su tiempo libre, disfruta de buscar nuevas culturas, nuevas experiencias y mantenerse al día con las últimas tendencias tecnológicas. Puedes encontrarlo en LinkedIn.

Qing Lan Qing es ingeniero de desarrollo de software en AWS. Ha trabajado en varios productos desafiantes en Amazon, incluidas soluciones de inferencia de ML de alto rendimiento y sistemas de registro de alto rendimiento. El equipo de Qing lanzó con éxito el primer modelo de mil millones de parámetros en Amazon Advertising con una latencia muy baja requerida. Qing tiene un profundo conocimiento sobre optimización de infraestructura y aceleración de aprendizaje profundo.

Raghu Ramesha es arquitecto sénior de soluciones GenAI/ML en el equipo de Amazon SageMaker Service. Se centra en ayudar a los clientes a crear, implementar y migrar cargas de trabajo de producción de ML a SageMaker a gran escala. Se especializa en los dominios de aprendizaje automático, IA y visión artificial, y tiene una maestría en informática de la Universidad de Texas en Dallas. En su tiempo libre, disfruta de viajar y la fotografía.

Eliuth Triana es gerente de relaciones con desarrolladores en NVIDIA y se encarga de capacitar a los MLOps, DevOps, científicos y expertos técnicos de AWS de Amazon en materia de inteligencia artificial para dominar la pila informática de NVIDIA con el fin de acelerar y optimizar los modelos de Generative AI Foundation, que abarcan desde la curación de datos, el entrenamiento de GPU, la inferencia de modelos y la implementación de producción en instancias de GPU de AWS. Además, Eliuth es un apasionado del ciclismo de montaña, el esquí, el tenis y el póquer.

Abhishek Sawarkar es gerente de producto del equipo NVIDIA AI Enterprise y trabaja en la integración del software NVIDIA AI en plataformas Cloud MLOps. Se centra en la integración de la pila NVIDIA AI de extremo a extremo dentro de las plataformas Cloud y en la mejora de la experiencia del usuario en computación acelerada.

Liu Jiahong es arquitecto de soluciones en el equipo de proveedores de servicios en la nube de NVIDIA. Ayuda a los clientes a adoptar soluciones de inteligencia artificial y aprendizaje automático que aprovechan la computación acelerada de NVIDIA para abordar sus desafíos de capacitación e inferencia. En su tiempo libre, disfruta del origami, los proyectos de bricolaje y jugar al baloncesto.

Kshitiz Gupta es arquitecto de soluciones en NVIDIA. Le gusta enseñar a los clientes de la nube las tecnologías de inteligencia artificial de GPU que NVIDIA tiene para ofrecer y ayudarlos a acelerar sus aplicaciones de aprendizaje automático y aprendizaje profundo. Fuera del trabajo, le gusta correr, hacer senderismo y observar la vida silvestre.

J.R. Morgan es gerente técnico principal de productos en el grupo de productos empresariales de NVIDIA y se destaca en la intersección de servicios para socios, API y código abierto. Después del trabajo, se lo puede encontrar en un Gixxer, en la playa o pasando tiempo con su maravillosa familia.

Deepika Padmanabhan es arquitecta de soluciones en NVIDIA. Disfruta creando e implementando soluciones de software de NVIDIA en la nube. Fuera del trabajo, disfruta resolviendo acertijos y jugando videojuegos como Age of Empires.