ホームページ > バックエンド開発 > Python チュートリアル > teps でハグ顔モデルを AWS Lambda にデプロイする

teps でハグ顔モデルを AWS Lambda にデプロイする

Linda Hamilton
リリース: 2024-11-29 21:24:11
オリジナル
742 人が閲覧しました

Hugging Face モデルを AWS Lambda にデプロイしたいと考えていましたが、コンテナのビルド、コールド スタート、モデルのキャッシュで行き詰まったことはありませんか? Scaffoldly を使用して 5 分以内にこれを行う方法を次に示します。

TL;DR

  1. AWS で .cache という名前の EFS ファイルシステムを作成します:

    • AWS EFS コンソールに移動します
    • 「ファイルシステムの作成」をクリックします
    • .cache という名前を付けます
    • 任意の VPC を選択します (残りは Scaffoldly が処理します!)
  2. python-huggingface ブランチからアプリを作成します。

     npx scaffoldly create app --template python-huggingface
    
    ログイン後にコピー
    ログイン後にコピー
  3. デプロイします:

     cd my-app && npx scaffoldly deploy
    
    ログイン後にコピー
    ログイン後にコピー

それだけです! Lambda 上で実行される Hugging Face モデル (例として openai-community/gpt2 を使用) を取得し、適切なキャッシュとコンテナーのデプロイメントを完了します。

プロのヒント: EFS セットアップの場合、バースタブル モードの単一 AZ までカスタマイズしてさらにコストを節約できます。 Scaffoldly は、Lambda 関数を EFS の VPC、サブネット、セキュリティ グループと照合します。

✨ ライブデモとサンプルコードをチェックしてください!

問題

ML モデルを AWS Lambda にデプロイするには、従来は次のことが必要です。

  • Docker コンテナの構築と管理
  • モデルのキャッシュとストレージを理解する
  • Lambda のサイズ制限への対処
  • コールドスタートの管理
  • API エンドポイントのセットアップ

モデルを提供したいだけの場合、多くのインフラストラクチャ作業が必要です!

解決策

Scaffoldly は、この複雑さをすべて単純な構成ファイルで処理します。これは、Hugging Face モデルを提供する完全なアプリケーションです (例として openai-community/gpt2 を使用):

# app.py
from flask import Flask
from transformers import pipeline
app = Flask(__name__)
generator = pipeline('text-generation', model='openai-community/gpt2')
@app.route("/")
def hello_world():
    output = generator("Hello, world,")
    return output[0]['generated_text']
ログイン後にコピー
ログイン後にコピー
// requirements.txt
Flask ~= 3.0
gunicorn ~= 23.0
torch ~= 2.5
numpy ~= 2.1
transformers ~= 4.46
huggingface_hub[cli] ~= 0.26
ログイン後にコピー
ログイン後にコピー
// scaffoldly.json
{
  "name": "python-huggingface",
  "runtime": "python:3.12",
  "handler": "localhost:8000",
  "files": ["app.py"],
  "packages": ["pip:requirements.txt"],
  "resources": ["arn::elasticfilesystem:::file-system/.cache"],
  "schedules": {
    "@immediately": "huggingface-cli download openai-community/gpt2"
  },
  "scripts": {
    "start": "gunicorn app:app"
  },
  "memorySize": 1024
}
ログイン後にコピー
ログイン後にコピー

仕組み

Scaffoldly は舞台裏でいくつかの賢いことを行います:

  1. スマートコンテナビルディング:

    • Lambda に最適化された Docker コンテナを自動的に作成します
    • PyTorch を含むすべての Python 依存関係を処理します
    • Docker コマンドを作成しなくても ECR にプッシュされます
  2. 効率的なモデル処理:

    • Amazon EFS を使用してモデル ファイルをキャッシュします
    • 展開後にモデルを事前ダウンロードしてコールド スタートを高速化します
    • Lambda にキャッシュを自動的にマウントします
  3. Lambda 対応セットアップ:

    • 適切な WSGI サーバー (gunicorn) を起動します
    • パブリック Lambda 関数 URL を作成します
    • gunicorn へのプロキシ関数 URL リクエスト
    • IAM の役割と権限を管理します

デプロイの様子

この例で実行した npx scaffoldlydeploy コマンドの出力は次のとおりです。

Deploy Hugging Face Models to AWS Lambda in teps

実際のパフォーマンスとコスト

コスト: AWS Lambda、ECR、および EFS の場合、1 日あたり ~$0.20

コールド スタート: 最初のリクエスト (モデルの読み込み) に約 20 秒

ウォーム リクエスト: 5 ~ 20 秒 (CPU ベースの推論)

このセットアップでは CPU 推論 (GPU よりも遅い) が使用されますが、ML モデルを試したり、低トラフィックのエンドポイントにサービスを提供したりするには、非常にコスト効率の高い方法です。

他モデル用のカスタマイズ

別のモデルを使用したいですか? 2 つのファイルを更新するだけです:

  1. app.py のモデルを変更します。
 npx scaffoldly create app --template python-huggingface
ログイン後にコピー
ログイン後にコピー
  1. scaffoldly.json のダウンロードを更新します。
 cd my-app && npx scaffoldly deploy
ログイン後にコピー
ログイン後にコピー

プライベート モデルまたはゲート モデルの使用

Scaffoldly は、HF_TOKEN 環境変数を介してプライベート モデルとゲート モデルをサポートします。ハグ顔トークンはいくつかの方法で追加できます:

  • ローカル開発: シェル プロファイル (.bashrc、.zprofile など) に追加します。
# app.py
from flask import Flask
from transformers import pipeline
app = Flask(__name__)
generator = pipeline('text-generation', model='openai-community/gpt2')
@app.route("/")
def hello_world():
    output = generator("Hello, world,")
    return output[0]['generated_text']
ログイン後にコピー
ログイン後にコピー
  • CI/CD: GitHub アクション シークレットとして追加:
// requirements.txt
Flask ~= 3.0
gunicorn ~= 23.0
torch ~= 2.5
numpy ~= 2.1
transformers ~= 4.46
huggingface_hub[cli] ~= 0.26
ログイン後にコピー
ログイン後にコピー

トークンは、プライベート モデルまたはゲート モデルのダウンロードとアクセスの両方に自動的に使用されます。

CI/CD ボーナス

Scaffoldly は自動デプロイメント用の GitHub アクションも生成します:

// scaffoldly.json
{
  "name": "python-huggingface",
  "runtime": "python:3.12",
  "handler": "localhost:8000",
  "files": ["app.py"],
  "packages": ["pip:requirements.txt"],
  "resources": ["arn::elasticfilesystem:::file-system/.cache"],
  "schedules": {
    "@immediately": "huggingface-cli download openai-community/gpt2"
  },
  "scripts": {
    "start": "gunicorn app:app"
  },
  "memorySize": 1024
}
ログイン後にコピー
ログイン後にコピー

自分で試してみる

完全な例は GitHub で入手できます:
scaffoldly/scaffoldly-examples#python-huggingface

次のコマンドを実行すると、この例の独自のコピーを作成できます。

generator = pipeline('text-generation', model='your-model-here')
ログイン後にコピー

ライブで実行されているのが確認できます (ただし、CPU 推論により応答が遅くなる可能性があります)。
ライブデモ

次は何ですか?

  • さまざまなハグフェイス モデルを展開してみる
  • Discord の Scaffoldly コミュニティに参加してください
  • 他の例をチェックしてください
  • これが役立つと思われた場合は、リポジトリにスターを付けてください!
    • Scaffoldly ツールチェーン
    • Scaffoldly サンプル リポジトリ

ライセンス

Scaffoldly はオープンソースであり、コミュニティからの貢献を歓迎します。

  • サンプルには Apache-2.0 ライセンスが付与されています。
  • scaffoldly ツールチェーンは FSL-1.1-Apache-2.0 ライセンスでライセンスされています。

AWS Lambda で実行したい他のモデルは何ですか?コメント欄でお知らせください!

以上がteps でハグ顔モデルを AWS Lambda にデプロイするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート