Comment déployer une application d'IA (avec de grands déploiements) sur AWS Lambda

DDD
Libérer: 2024-10-10 06:12:30
original
870 Les gens l'ont consulté

How to Deploy an AI App (w/ Large Deps) to AWS Lambda

J'ai récemment passé deux heures à exécuter une simple application LlamaIndex sur AWS Lambda. Bien que la fonction elle-même ne comporte que quelques lignes de code Python (comme indiqué ci-dessous), la gestion des dépendances et du déploiement peut être délicate.

import json
from llama_index.llms.openai import OpenAI

llm=OpenAI(model="gpt-4o-mini")

def lambda_handler(event, context):
    response = llm.complete("What public transportation might be available in a city?")
    return {
        'statusCode': 200,
        'body': str(response),
    }

Copier après la connexion

Voici quelques conseils clés qui m'ont aidé :

Tout d’abord, installez les packages pour la bonne plate-forme. Il est important d'installer tous les packages pour la plateforme cible "manylinux2014_x86_64". Sinon, certains packages pourraient être incompatibles avec le runtime AWS Lambda. Pour garantir la compatibilité, installez les dépendances avec la commande suivante :

pip install -r requirements.txt --platform manylinux2014_x86_64 --target ./deps --only-binary=:all:
Copier après la connexion

Deuxièmement, Lambda a une limite de 250 Mo pour la taille totale du package de code, ce qui peut rapidement devenir un problème si vous utilisez LlamaIndex ou d'autres dépendances volumineuses. Si votre package dépasse cette limite, vérifiez les fichiers les plus volumineux dans votre dossier de dépendances :

du -h -d 2 | sort -hr | head -n20
Copier après la connexion

Dans mon cas, j'ai constaté que le répertoire pandas/tests occupait environ 35 Mo d'espace, ce qui n'était pas nécessaire pour ma fonction, je l'ai donc supprimé pour ramener la taille du package dans la limite.

rm -r deps/pandas/tests
Copier après la connexion

Ensuite, compressez le tout et téléchargez via S3. Après avoir supprimé les fichiers inutiles, créez une archive zip contenant à la fois votre code et vos dépendances. Étant donné que la console Web de Lambda a une limite de téléchargement de 50 Mo, vous devrez télécharger des fichiers zip plus volumineux dans un compartiment S3 et utiliser l'URI S3 pour déployer la fonction.

zip -r test_lambda.zip data/ lambda_function.py
cd deps/
zip -r ../test_lambda.zip .
Copier après la connexion

Enfin, ajustez vos paramètres Lambda avant le déploiement. Par défaut, les fonctions Lambda ne disposent que de 128 Mo de mémoire et d'un délai d'attente de 3 secondes, ce qui est insuffisant pour de nombreuses applications d'IA impliquant de grandes dépendances et appelant des LLM. J'augmenterais la mémoire à 512 Mo et prolongerais le délai d'attente à 30 secondes. De plus, n'oubliez pas de définir des variables d'environnement essentielles comme votre clé API OpenAI.

Il m'a fallu pas mal d'essais pour trouver la bonne façon d'installer les packages et de tout regrouper pour Lambda. AWS Lambda est convivial pour les scripts de base, mais une fois que vous ajoutez des dépendances plus importantes, les choses deviennent plus compliquées.

Voici la séquence finale des étapes :

# Install dependencies
pip install -r requirements.txt --platform manylinux2014_x86_64 --target ./deps --only-binary=:all:

# Create a zip file for code and data
zip -r test_lambda.zip data/ lambda_function.py

# Include dependencies in the zip file, while removing large unused files
cd deps/
rm -r pandas/tests
zip -r ../test_lambda.zip .
Copier après la connexion

ps, j'ai également essayé de déployer une fonction similaire sur DBOS Cloud, et cela n'a nécessité qu'une seule commande :

dbos-cloud app deploy
Copier après la connexion

Dans DBOS, la gestion des dépendances était gérée automatiquement via le fichier Requirements.txt et les variables d'environnement étaient définies dans dbos-config.yaml. Je suis peut-être partial, mais j'apprécie la simplicité du processus de déploiement de DBOS Cloud.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal