Acerca de
Lambda-Instructor es un despliegue experimental del modelo de instructor-Lambda de Instructor de Modelo de Embedido de texto en AWS Lambda.
Instructor-Large es un modelo construido por el grupo NLP de la Universidad de Hong Kong bajo la licencia Apache-2.0 y funciona bien en las tareas de recuperación (es decir, encontrar documentos relacionados para una oración dada). A partir de junio de 2023, parece estar en un nivel con el texto de OpenAi-Embeding-ADA-002 en numerosos puntos de referencia en la tabla de recolección de cara abrazada.
Casos de uso potenciales:
- Combina con inferencia local: genere una gran cantidad de embebidos con instructor-larga en tu máquina local por adelantado (frente a pagar API comerciales como OpenAI, incluso para las pruebas).
- Residencia de datos: implementa la función Lambda en regiones globales de AWS, incluidas Europa y los Estados Unidos.
- Escalabilidad: AWS Lambda escala prácticamente ilimitado, sin la sobrecarga de los servidores de gestión.
- Inferencia de producción de bajo costo: con el precio por solicitud de AWS Lambda frente a ejecutar un servidor 24/7.
- Use con bases de datos vectoriales: como ChromAdB o Pinecone.
Rendimiento, costo y limitaciones:
- Inicio en frío: la función Lambda tiene un inicio en frío de aproximadamente 150 segundos (con la base del instructor de unos 50 años).
- Inferencia: la solicitud consecutiva se procesa en aproximadamente 6 segundos por solicitud (con la base del instructor aproximadamente 3 segundos).
- Max. Tokens: el instructor-Large parece estar limitado a una longitud de secuencia de 512 tokens (ca. 380 palabras), mientras que el texto de OpenAI incrustación-ADA-002 admite hasta 8191 tokens (ca. 6000 palabras).
- Costo: El costo de lambda de AWS se puede estimar en:
- Configuración:
- Región: UE-Central-1 (Europa, Frankfurt)
- Precio del brazo: $ 0.0000133334 por cada GB-Second
- Solicitudes: $ 0.20 por 1 m solicitudes
- Tamaño de la memoria: 10240 MB
- Cálculo:
- Duración: $ 0.0000133334 * 10,24 GB * 6 segundos = 0.000819204096 / solicitud
- Solicitudes: $ 0.20 / 1M solicitudes = 0.0000002 / solicitudes
- Total = $ 0.0008194 / solicitud
- A partir de junio de 2023, eso es más caro que el ADA V2 de Openai con tokens de $ 0.0001/1k después de su reducción de precios del 75%.
Mejoras adicionales: el costo y el inicio en frío podrían mejorarse aún más con la concurrencia aprovisionada por Lambda de AWS y los planes de ahorro de calculación de AWS. También consulte la calculadora de AWS a 1M solicitudes por mes para este proyecto.
Despliegue
Requisitos previos
- El conocimiento general de AWS es útil.
- Debe tener Docker y GIT-LFS instalados localmente.
- Debe tener AWS-SAM instalado localmente y configurado con su cuenta AWS.
- Se recomienda un entorno local basado en ARM (Mac M1/M2). Si se encuentra con problemas, intente implementar a través de una máquina EC2 a base de brazo (guía a continuación).
Configuración
Descargaremos el modelo de instructor localmente, empaquetaremos la aplicación en un contenedor Docker e implementaremos en una función Lambda basada en brazos. Estamos usando el brazo, ya que es de menor costo con AWS y resultó ser más rápido.
- Clonar el repositorio
git clone https://github.com/maxsagt/lambda-instructor.git
- Clon el modelo del instructor-Large a la carpeta ./app/model (ver https://huggingface.co/hkunlp/instructor-large?clone=true)
git lfs install ./app/model
git clone https://huggingface.co/hkunlp/instructor-large ./app/model
- Construya el contenedor Docker con AWS-SAM
sam build --cached --parallel
- Pruebe localmente con la carga útil de la muestra en event.json.
sam local invoke -e event.json
- Desplegar en AWS. Tenga en cuenta que su usuario de AWS o de roles necesita permisos de IAM (temporales) para AWS CloudFormation, Elastic Container Registry, S3, Lambda e IAM.
- Hecho. Encontrará una función Lambda en AWS que está lista para una mayor configuración. Por ejemplo:
- Pruebe la función Lambda en la consola Lambda.
- Configure una URL de la función Lambda para usar directamente la función Lambda a través de una URL.
- Agregue una puerta de enlace API para funcionalidades de API más avanzadas.
Opcional: implementa a través de una máquina EC2 a base de brazo.
Si no tiene una máquina de brazo a mano, o desea implementar dentro de AWS para una carga más rápida del contenedor Docker.
- Crea una instancia de AWS:
- Probado en Ubuntu Server 22.04 LTS (HVM), Tipo de volumen SSD, AMI-0329D3839379BFD15, Arquitectura: 64 bits (ARM), Tipo de instancia: T4G.Medium, Almacenamiento: 20GIB GP3.
- Asegúrese de que su VPC sea público.
- Inicie la instancia.
- Haga clic en la instancia y agregue un rol de IAM a través de acciones -> Seguridad. El rol de IAM necesita IAM, S3, ECR, CloudFormation y Lambda Access.
- Subir repositorio a una instancia remota de AWS:
git clone https://github.com/maxsagt/lambda-instructor.git
cd lambda-instructor
zip -r deployment.zip . -x ' ./app/model/* '
PUBLIC_IPv4_DNS=ec2-x-xx-xxx-xxx.eu-central-1.compute.amazonaws.com
scp -o StrictHostKeyChecking=no -i " ../my_key.pem " ./deployment.zip ubuntu@ $PUBLIC_IPv4_DNS :deployment.zip
- Inicie sesión en su instancia y ejecute el script de implementación de muestra.
ssh -o StrictHostKeyChecking=no -i " ../my_key.pem " ubuntu@ $PUBLIC_IPv4_DNS
sudo apt install unzip
unzip -o deployment.zip
chmod +x sample_deployment.sh
sudo bash -x sample_deployment.sh
- Construir e implementar según lo anterior. Si no se reconoce el comando SAM, lea la documentación SAM aquí.
- No olvide terminar la instancia después de su uso.
Comentario
¡Los comentarios y las contribuciones son bienvenidos!