search
LoginSignup
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

AWSLambdaでPyTorch【EFS編】

はじめに

本記事はAWSのLambda上でPyTorchを動かして見ようという試みについてのまとめです。DeepLearningタグをつけていますが、学習については触れません。ゴールはLambda上で何かしらの推論を動かしてみるというところまでです。

ざっくりまとめ

  1. EFS使ってみる
  2. LambdaでPyTorch
  3. slackからも呼ぶ

の三本立てです。

背景

AWS Lambdaは非常に構築が楽で便利なのですが、様々な制限があります。機械学習をするときにとくに問題になりそうなのが、デプロイパッケージサイズと/tmp領域サイズです。

デプロイパッケージサイズと/tmp領域サイズ
デプロイパッケージサイズ
50 MB (zip 圧縮済み、直接アップロード)
250 MB (解凍、レイヤーを含む)
3 MB (コンソールエディタ)

/tmp ディレクトリのストレージ
512 MB

TensorFlow, PyTorchなどのライブラリも益々巨大化していきますしモデルファイルも大きくなってきています。Lambdaに搭載したいが容量オーバーで諦めるということが往々にしてあります。

2020年6月のアップデートでLambdaがAmazon Elastic File System(EFS)をマウントすることができるようになりました。
これにより以下のような恩恵があります。

  • /tmpで使用可能な容量(512MB)より大きいデータを処理またはロードする。
  • 頻繁に変更されるファイルの最新バージョンをロードする。
  • モデルやその他の依存関係をロードするためにストレージ容量を必要とするデータサイエンスパッケージを使用する。
  • 呼び出し間で関数の状態を保存する(一意のファイル名またはファイルシステムロックを使用)。
  • 大量の参照データへのアクセスを必要とするアプリケーションの構築。
  • レガシーアプリケーションをサーバーレスアーキテクチャに移行する。
  • ファイルシステムアクセス用に設計されたデータ集約型ワークロードとの相互作用。
  • ファイルを部分的に更新する(同時アクセス用のファイルシステムロックを使用)。
  • アトミック操作でファイルシステム内のディレクトリとそのすべてのコンテンツを移動する。

特に今回の場合は、モデルやその他の依存関係をロードするためにストレージ容量を必要とするデータサイエンスパッケージを使用する。が該当するでしょうか。

EFSを用意

EFSの準備は、先行事例を大いに参考にさせてもらいます。

EFSの作成とアクセスポイントの準備

PyTorch用のEC2を準備

Python3.7を使用するつもりなので、AmazonLinuxを指定します。(Python3.8ならAmazonLinux2を利用しましょう。)
Python2系しか入っていないのでPython3.7をインストールします。この記事はPython3.8用ですがPython3.7に読み替えておきます。

EFSをEC2にマウント

EFSのマウントにEFSマウントヘルパーが必要なので、

$ sudo yum install -y amazon-efs-utils

で入れておきます。

EFSのセキュリティーグループにEC2のセキュリティグループを追加しておきます。
インバウンドルールにタイプをNFSとプロトコルにTCP、ポート範囲2049を指定してソースにEC2インスタンスのセキュリティグループを指定しておきます。

EC2にログインして以下のコマンドを叩きましょう。

$ sudo mount -t efs [ファイルシステムID]:/ /mnt

EC2で必要なライブラリをインストール

必要なライブラリをインストールします。

$ sudo pip3 install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html

これでEFSにPyTorchがインストールできたので、次回Lambdaから読み込みます。(Lambdaでimport編)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3
Help us understand the problem. What are the problem?