LoginSignup
9
10

More than 3 years have passed since last update.

【サーバレス機械学習入門】AWS Lambda レイヤーの使い方

Posted at

はじめに

これは機械学習ツールを掘り下げる by 日経 xTECH ビジネスAI③ Advent Calendar 2019の1日目の記事です。

12/20に記事を書こうと思っていたのですが1日目が埋まっていなかったので突貫工事で記事を書きました。

私はAWS Lambdaが大好きなので、Lambdaで機械学習するノウハウを書いていこうと思います。

本記事ではLambda関数でPandasなどの外部ライブラリを使う方法をまとめておきます。1

これまでのAWS Lambda

これまでのAWS Lambdaでは、外部ライブラリを用いる場合2

  • Lambda関数のソースコード
  • ライブラリのソースコード

これらをZipファイル(デプロイパッケージ)にまとめてアップロードする必要がありました。

その結果、関数の呼び出しは出来るがコンソール上で編集が出来ないという何とも不便な状況でした。

Screenshot_2019-12-03 Lambda Management Console.png

これを解決するのがAWS Lambda レイヤーです。

AWS Lambda Layersとは

追加のコードとコンテンツをレイヤーの形式で取り込むように Lambda 関数を設定することができます。レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。デプロイパッケージに含める必要はありません。

直訳日本語が難しいので端的にまとめると。”外部ライブラリや自作モジュールなどをレイヤー形式で取り込むことが出来る機能”のことです。

ライブラリの使い回しやコンソール上での編集が可能になります。

FireShot Capture 015 - Lambda Management Console - console.aws.amazon.com.png

Getting Started

  • Cloud9の設定
  • Python環境構築
  • ZIPアーカイブの作成
  • Layerの作成

Cloud9のセッティング

ここではLambdaLayersの開発環境としてCloud9を使います。

コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)
AWS Cloud9(Cloud IDE でコードを記述、実行、デバッグ)| AWS

Screenshot_2019-12-03 Welcome to AWS Cloud9.png

環境構築はデフォルト設定のままで大丈夫です。

①環境名と説明書きを入力
Screenshot_2019-12-03 Create a new environment.png
②インスタンスタイプやOSなどの設定
あScreenshot_2019-12-03 Create a new environment.png
③あとは作成するだけ
iScreenshot_2019-12-03 Create a new environment.png
うまくいけば下記のようなIDEが使えるようになります。
FireShot Capture 005 - lambda-development - AWS Cloud9 - ap-northeast-1.console.aws.amazon.com.png

Python環境構築

ここでは複数バージョンのPythonを扱えるようにしたいのでpyenvのインストールとPython3.8のインストールを行います。

[Python] pyenvを使ってPythonの複数のバージョンを使い分ける - YoheiM .NET

# pyenvのインストール
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
# 環境変数の設定
vi ~/.bashrc

.bashrcのファイルの末尾に下記を追記する

export PATH="/home/ec2-user/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

.bashrcを再読み込み

source ~/.bash_profile

pythonのバージョン変更

ここでは3.8.0に変更してみます。

# python3.8をインストール
pyenv install 3.8.0
# python3.8を設定
pyenv global 3.8.0

インストールされているか確認します。

# pyenvでインストール済みのバージョン確認
pyenv versions

# 現在のpythonバージョン
python3 -V

python -Vで確認すると3.6.8になっているので注意。

Zipアーカイブ作成

mkdir layer_pandas && cd $_
mkdir python && cd $_
pip3 install -t ./ pandas
cd ../
zip -r layer_pandas.zip python/

pip installではなくpip3 installを使うこと!

FireShot Capture 006 - lambda-development - AWS Cloud9 - ap-northeast-1.console.aws.amazon.com.png

完成したlayer_pandas.zipをダウンロードもしくはS3にアップロードしておきます。

Layerの作成

Lambdaのコンソール画面の左のカラムの最下部にLayerという項目があるので、下記のように設定&アップロード。

FireShot Capture 008 - Lambda Management Console - console.aws.amazon.com.png

しばらく待つとレイヤーが作成されます。

FireShot Capture 009 - Lambda Management Console - console.aws.amazon.com.png

実験

少しわかりにくいですが、画面中央のLayersの部分をクリックすると設定可能です。
FireShot Capture 010 - Lambda Management Console - console.aws.amazon.com.png

PandasはNumpy同梱なのでnp.xxxxxも使えるようになります。

FireShot Capture 014 - Lambda Management Console - console.aws.amazon.com.png

まとめ

LambdaLayersを使えばLambda開発がぐっとラクになります。

特にwebデータの収集用のレイヤーを用意すると使い回しが効くのでオススメです。

mkdir layer_scraping && cd $_
mkdir python && cd $_
pip3 install -t ./ beautifulsoup4
pip3 install -t ./ requests
pip3 install -t ./ pandas
cd ../
zip -r layer_scraping.zip python/

おわりに

とりあえず、Getting Startedな内容ですがLambdaで機械学習する準備が整いました。次はLightGBMやTensorflowなどの機械学習フレームワークが動かせるか検証したいと思います。

現場からは以上です。


  1. 1日目がこんなんでいいのか…? 

  2. 組み込み関数ならそのままimport可能 

9
10
0

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
  3. You can use dark theme
What you can do with signing up
9
10