À propos
Lambda-Instructeur est un déploiement expérimental du modèle de modèle de texte-instructeur sur AWS Lambda.
Instructor-Garg est un modèle construit par le groupe NLP de l'Université de Hong Kong sous la licence Apache-2.0 et fonctionne bien sur les tâches de récupération (c'est-à-dire trouver des documents connexes pour une phrase donnée). En juin-2023, il semble être à un niveau avec le texton d'Openai-Ada-002 à travers de nombreux repères dans le classement des étreintes.
Cas d'utilisation potentiels:
- Associez à l'inférence locale: générez un grand nombre d'incorporation avec l'instructeur-grand sur votre machine locale à l'avance (vs payer pour les API commerciales telles que les ouverts, même pour les tests).
- Résidence des données: déploiez la fonction lambda dans les régions mondiales AWS, notamment l'Europe et les États-Unis.
- Évolutivité: AWS Lambda échelle pratiquement illimitée, sans la surcharge de la gestion des serveurs.
- Inférence de production à faible coût: avec les prix par la demande par AWS Lambda par rapport à l'exécution d'un serveur 24/7.
- Utiliser avec des bases de données vectorielles: telles que ChromAdb ou Pinecone.
Performance, coût et limitations:
- Début à froid: La fonction Lambda a un début à froid d'environ 150 secondes (avec une base d'instructeurs environ 50s).
- Inférence: la demande consécutive est traitée en environ 6 secondes par demande (avec une base d'instructeurs environ 3 secondes).
- Max. Tokens: Instructor-Garg semble être plafonné à une longueur de séquence de 512 jetons (environ 380 mots), tandis que le texte d'Openai-Embedding-ADA-002 prend en charge jusqu'à 8191 jetons (environ 6000 mots).
- Coût: Le coût AWS Lambda peut être estimé à:
- Configuration:
- Région: UE-Central-1 (Europe, Francfort)
- Prix du bras: 0,0000133334 pour chaque GB-seconde
- Demandes: 0,20 $ pour 1 M demandes
- Taille de la mémoire: 10240 Mb
- Calcul:
- Durée: 0,0000133334 * 10,24 Go * 6 secondes = 0,000819204096 / Demande
- Demandes: 0,20 $ / 1 M demandes = 0,0000002 / Demandes
- Total = 0,0008194 $ / Demande
- En juin 2023, c'est plus cher que ADA V2 d'Openai à 0,0001 $ / 1k de jetons après leur réduction de prix de 75%.
Améliorations supplémentaires: le coût et le démarrage à froid pourraient être encore améliorés avec AWS Lambda Provisioned Heckricy et AWS Calculer les plans d'épargne. Consultez également la calculatrice AWS à 1M demandes par mois pour ce projet.
Déploiement
Condition préalable
- Les connaissances générales AWS sont utiles.
- Vous devez installer Docker et Git-LFS localement.
- Vous devez avoir AWS-SAM installé localement et configuré avec votre compte AWS.
- Un environnement local basé sur un bras est recommandé (Mac M1 / M2). Si vous rencontrez des problèmes, essayez de déployer via une machine EC2 basée sur ARM (Guide ci-dessous).
Installation
Nous téléchargerons localement le modèle d'instructeur, emballer l'application dans un conteneur Docker et le déployer sur une fonction Lambda basée sur ARM. Nous utilisons le bras car il est à moindre coût avec AWS et s'est avéré être plus rapide.
- Cloner le référentiel
git clone https://github.com/maxsagt/lambda-instructor.git
- Clone le modèle Instructor-Large dans le dossier ./app/Model (voir https://huggingface.co/hkunlp/instructeur-large?clone=true)
git lfs install ./app/model
git clone https://huggingface.co/hkunlp/instructor-large ./app/model
- Construisez le conteneur Docker avec AWS-SAM
sam build --cached --parallel
- Testez localement avec l'échantillon de charge utile dans event.json.
sam local invoke -e event.json
- Déploier sur AWS. Notez que votre utilisateur ou votre rôle AWS nécessite des autorisations (temporaires) IAM pour AWS Cloudformation, Elastic Container Registry, S3, Lambda et IAM.
- Fait. Vous trouverez une fonction lambda dans AWS qui est prête pour une configuration supplémentaire. Par exemple:
- Testez la fonction lambda dans la console lambda.
- Configurez une URL de fonction lambda pour utiliser directement la fonction lambda via une URL.
- Ajoutez une passerelle API pour les fonctionnalités API plus avancées.
Facultatif: Déploiement via une machine EC2 basée sur ARM.
Si vous n'avez pas de machine ARM à portée de main ou si vous souhaitez déployer dans AWS pour le téléchargement plus rapide du conteneur Docker.
- Créer une instance AWS:
- Testé sur Ubuntu Server 22.04 LTS (HVM), type de volume SSD, AMI-0329D3839379BFD15, architecture: 64 bits (ARM), type d'instance: T4G.Medium, stockage: 20gib GP3.
- Assurez-vous que votre VPC est public.
- Démarrez l'instance.
- Cliquez sur l'instance et ajoutez un rôle IAM via des actions -> Sécurité. Le rôle IAM a besoin d'accès IAM, S3, ECR, Cloudformation et Lambda.
- Télécharger le référentiel sur instance AWS distante:
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
- Connectez-vous à votre instance et exécutez l'exemple de script de déploiement.
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
- Construire et déployer comme ci-dessus. Si la commande SAM n'est pas reconnue, lisez la documentation SAM ici.
- N'oubliez pas de terminer l'instance après utilisation.
Retour
Les commentaires et les contributions sont les bienvenus!