Traffine I/O

日本語

2022-08-02

LambdaでAIアプリケーションを開発する際の注意点

はじめに

人工知能の利用がますます増える中、開発者はAIパワードアプリケーションを展開するために、AWS Lambdaのようなサーバーレスアーキテクチャのパワーと柔軟性を求めています。

AWS Lambdaは、コスト効率や自動スケーリングなどの多くの利点を提供しますが、AIプロダクトを構築する際には独自の課題が存在します。

この記事では、パッケージサイズ、メモリ、実行時間、およびマルチプロセッシングサポートなど、これらの課題のいくつかを探求し、それらを克服するための戦略についても説明します。

大規模なライブラリのインポートができない

Lambdaは、50MB(圧縮時)および250MB(非圧縮時)のパッケージサイズ制限があります。TensorFlowやPyTorchなどのAIライブラリがこれらの制限を超える場合は、以下のような対策を検討する必要があります。

  • Lambda関数に対してコンテナイメージを使用し、より大きな依存関係を含める
  • カスタムランタイムを使用し、必要なコンポーネントのみを含めるように依存関係を最適化
  • 大規模なライブラリが必要な複雑なAIワークロードにはAmazon SageMakerを使用することを検討

10,240MB以上のメモリが必要

Lambda関数は最大で3008MBのメモリに制限されています。あなたのAIモデルによっては、メモリが不足する可能性があります。この場合は、以下のAWSサービスを検討してください。

  • Amazon SageMaker
    機械学習モデルを展開、トレーニング、実行するために設計された完全マネージドサービスです。

  • AWS Batch
    大規模なメモリ要件を処理できるバッチコンピューティングワークロードを実行するためのサービスです。

  • Amazon EC2 インスタンス
    必要なリソースを持つEC2インスタンスを起動して、AIモデルの要件を満たします。

実行時間に制限がある

Lambda関数の実行時間は最大で15分に制限されています。AIモデルのデータ処理に時間がかかる場合は、以下のような対策を検討する必要があります。

  • モデルを最適化し、処理時間を短縮
  • Lambdaの実行時間制限内で実行できるよう、タスクをより小さな並列処理ユニットに分割
  • 長時間のタスクにはAmazon EC2インスタンスまたはAWS Batchを使用することを検討

コールドスタートレイテンシー

Lambda関数は、最初に呼び出された場合または一定時間の非アクティブ期間後に、「コールドスタート」を経験することがあります。コールドスタートは、AWSが新しいコンテナをプロビジョニングして関数を実行するために時間がかかるため、追加のレイテンシーが導入されることが原因です。これは、リアルタイムの予測や推薦システムなどのレイテンシーに敏感なAIアプリケーションにとって特に問題です。コールドスタートレイテンシーを軽減するには、以下の戦略を検討してください。

  • Provisioned concurrency
    AWS LambdaはProvisioned concurrencyという機能を提供しており、指定された数の関数インスタンスを「ウォーム」状態で保持し、リクエストを処理するための準備ができた状態にしておくことができます。Provisioned concurrencyを構成することで、AIプロダクトのコールドスタートレイテンシーを減らすことができます。ただし、Provisioned concurrencyは、インスタンス数とウォーム状態の期間に基づいて追加のコストが発生します。

  • ウォームアップメカニズム
    Lambda関数を定期的に呼び出すカスタムの「ウォームアップ」メカニズムを実装します。この方法では、関数インスタンスを「ウォーム」状態に保ち、コールドスタートの発生頻度を低減することができます。ただし、この方法は関数呼び出しの数を増やす可能性があり、総合的なコストに影響を与える可能性があります。

  • 関数の初期化を最適化
    展開パッケージのサイズを最小限に抑え、初期化コードを最適化することで、Lambda関数の初期化時間を短縮することができます。例えば、まれに使用されるライブラリに対して遅延読み込みを使用したり、関数初期化時に計算負荷の高いタスクを回避することができます。

  • メモリ割り当ての増加
    メモリ割り当てが増加すると、Lambda関数のコールドスタートレイテンシーが低下する傾向があります。AWSは、メモリに比例してCPUパワーやネットワーク帯域幅をより多く割り当てるためです。AIプロダクトのパフォーマンスとコストのバランスを見つけるために、さまざまなメモリ構成で実験してみてください。

GPUサポート

Lambda関数はGPUベースの処理をサポートしていません。GPUリソースが必要なAIワークロードには、以下の方法を検討してください。

  • GPUサポートを持つAmazon EC2インスタンス
    PシリーズやGシリーズなど、GPUサポートを持つAmazon EC2インスタンスを使用します。

  • Amazon SageMaker
    機械学習モデルのトレーニングと展開にGPUサポートを提供するサービスです。

マルチプロセッシングに対する限定的なサポート

AWS Lambda関数は、コンカレンシに限定的なサポートを持つ単一スレッド環境で実行されます。Pythonのmultiprocessing.Poolを使用してLambda関数内のタスクを並列化できますが、以下の要素を考慮する必要があります。

  • コンカレンシの制限
    Lambda関数は、メモリの割り当てに比例してCPUリソースを割り当てます。Lambdaが単一スレッドであるため、multiprocessing.Poolを使用した場合、CPUバウンドタスクに対する利益は限られる可能性があります。

  • メモリ消費の増加
    multiprocessing.Poolを使用すると、各サブプロセスが追加のメモリを必要とするため、メモリ消費が増加する可能性があります。Lambda関数のメモリ割り当てが増加し、増加したメモリ使用量を処理できるようにする必要があります。

  • 潜在的なボトルネック
    複数のプロセスを生成すると、潜在的なボトルネックが発生する可能性があり、AIアプリケーションの他のコンポーネントのパフォーマンスに影響を与える可能性があります。multiprocessing.Poolの使用の影響を評価するために、Lambda関数をテストおよびプロファイルすることを検討してください。

  • マルチプロセッシングの代替手段
    単一のLambda関数内でmultiprocessing.Poolを使用する代わりに、複数のLambda関数間でタスクを並列化することを検討してください。複数のLambda呼び出しでワークロードを分散し、AWS Lambdaのビルトインのスケーリング機能を活用することができます。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!