はじめに
これは機械学習ツールを掘り下げる by 日経 xTECH ビジネスAI③ Advent Calendar 2019の1日目の記事です。
12/20に記事を書こうと思っていたのですが1日目が埋まっていなかったので突貫工事で記事を書きました。
私はAWS Lambdaが大好きなので、Lambdaで機械学習するノウハウを書いていこうと思います。
本記事ではLambda関数でPandasなどの外部ライブラリを使う方法をまとめておきます。1
これまでのAWS Lambda
これまでのAWS Lambdaでは、外部ライブラリを用いる場合2
- Lambda関数のソースコード
- ライブラリのソースコード
これらをZipファイル(デプロイパッケージ)にまとめてアップロードする必要がありました。
その結果、関数の呼び出しは出来るがコンソール上で編集が出来ないという何とも不便な状況でした。
これを解決するのがAWS Lambda レイヤーです。
AWS Lambda Layersとは
追加のコードとコンテンツをレイヤーの形式で取り込むように Lambda 関数を設定することができます。レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。デプロイパッケージに含める必要はありません。
直訳日本語が難しいので端的にまとめると。**”外部ライブラリや自作モジュールなどをレイヤー形式で取り込むことが出来る機能”**のことです。
ライブラリの使い回しやコンソール上での編集が可能になります。
Getting Started
- Cloud9の設定
- Python環境構築
- ZIPアーカイブの作成
- Layerの作成
Cloud9のセッティング
ここではLambdaLayersの開発環境としてCloud9を使います。
コードを記述、実行、デバッグできるクラウドベースの統合開発環境 (IDE)
AWS Cloud9(Cloud IDE でコードを記述、実行、デバッグ)| AWS
環境構築はデフォルト設定のままで大丈夫です。
①環境名と説明書きを入力
②インスタンスタイプやOSなどの設定
③あとは作成するだけ
うまくいけば下記のようなIDEが使えるようになります。
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
を使うこと!
完成したlayer_pandas.zipをダウンロードもしくはS3にアップロードしておきます。
Layerの作成
Lambdaのコンソール画面の左のカラムの最下部にLayerという項目があるので、下記のように設定&アップロード。
しばらく待つとレイヤーが作成されます。
実験
少しわかりにくいですが、画面中央のLayersの部分をクリックすると設定可能です。
PandasはNumpy同梱なのでnp.xxxxx
も使えるようになります。
まとめ
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などの機械学習フレームワークが動かせるか検証したいと思います。
現場からは以上です。