Heim  >  Artikel  >  Backend-Entwicklung  >  So stellen Sie eine KI-App (mit großen Deps) in AWS Lambda bereit

So stellen Sie eine KI-App (mit großen Deps) in AWS Lambda bereit

DDD
DDDOriginal
2024-10-10 06:12:30859Durchsuche

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

Ich habe kürzlich zwei Stunden damit verbracht, eine einfache LlamaIndex-App für die Ausführung auf AWS Lambda zu entwickeln. Während die Funktion selbst nur aus wenigen Zeilen Python-Code besteht (wie unten gezeigt), kann die Verwaltung von Abhängigkeiten und die Bereitstellung schwierig sein.

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),
    }

Hier sind einige wichtige Tipps, die mir geholfen haben:

Installieren Sie zunächst Pakete für die richtige Plattform. Es ist wichtig, alle Pakete für die Zielplattform „manylinux2014_x86_64“ zu installieren. Andernfalls sind bestimmte Pakete möglicherweise nicht mit der AWS Lambda-Laufzeitumgebung kompatibel. Um die Kompatibilität sicherzustellen, installieren Sie Abhängigkeiten mit dem folgenden Befehl:

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

Zweitens hat Lambda ein Limit von 250 MB für die Gesamtgröße des Codepakets, was schnell zu einem Problem werden kann, wenn Sie LlamaIndex oder andere große Abhängigkeiten verwenden. Wenn Ihr Paket diese Grenze überschreitet, überprüfen Sie die größten Dateien in Ihrem Abhängigkeitsordner:

du -h -d 2 | sort -hr | head -n20

In meinem Fall stellte ich fest, dass das Verzeichnis pandas/tests etwa 35 MB Speicherplatz beanspruchte, was für meine Funktion unnötig war, also habe ich es entfernt, um die Paketgröße wieder innerhalb des Grenzwerts zu halten.

rm -r deps/pandas/tests

Dann alles komprimieren und über S3 hochladen. Nachdem Sie unnötige Dateien entfernt haben, erstellen Sie ein ZIP-Archiv, das sowohl Ihren Code als auch die Abhängigkeiten enthält. Da die Webkonsole von Lambda ein Upload-Limit von 50 MB hat, müssen Sie größere ZIP-Dateien in einen S3-Bucket hochladen und den S3-URI verwenden, um die Funktion bereitzustellen.

zip -r test_lambda.zip data/ lambda_function.py
cd deps/
zip -r ../test_lambda.zip .

Passen Sie abschließend Ihre Lambda-Einstellungen vor der Bereitstellung an. Standardmäßig werden Lambda-Funktionen nur 128 MB Speicher und ein Timeout von 3 Sekunden zugewiesen, was für viele KI-Anwendungen mit großen Abhängigkeiten und dem Aufruf von LLMs nicht ausreicht. Ich würde den Speicher auf 512 MB erhöhen und das Timeout auf 30 Sekunden verlängern. Vergessen Sie außerdem nicht, wichtige Umgebungsvariablen wie Ihren OpenAI-API-Schlüssel festzulegen.

Ich habe einige Versuche gebraucht, um herauszufinden, wie man Pakete richtig installiert und alles für Lambda bündelt. AWS Lambda ist für einfache Skripte benutzerfreundlich, aber sobald Sie größere Abhängigkeiten hinzufügen, werden die Dinge komplizierter.

Hier ist die letzte Schrittfolge:

# 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 .

P.s.: Ich habe auch versucht, eine ähnliche Funktion in der DBOS Cloud bereitzustellen, und es war nur ein einziger Befehl erforderlich:

dbos-cloud app deploy

In DBOS wurde die Abhängigkeitsverwaltung automatisch über die Datei „requirements.txt“ abgewickelt und Umgebungsvariablen wurden in dbos-config.yaml festgelegt. Ich bin vielleicht voreingenommen, aber mir gefällt die Einfachheit des Bereitstellungsprozesses von DBOS Cloud.

Das obige ist der detaillierte Inhalt vonSo stellen Sie eine KI-App (mit großen Deps) in AWS Lambda bereit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn