pandas-lambda-layerを公開しました。
pythonのデータ分析用ライブラリpandasをAWS lambda上で動かすためのlayerです。
なんで作ったのか?
最近、仕事でAWS上で機械学習を動かす機会があってSageMakerを使っています。
学習や推論やそれらに必要な前処理を手軽にやってくれるいい感じのやつなのですが、時間的にも料金的にもコストが嵩むことがまぁまぁあります。イメージとしては、専用のEC2インスタンスを自動で起動してその中でコンテナを動かすといった感じなので、どうしてもインスタンスの起動コストがやっかいです。4~5分はかかります。(sagemakerを知ってる人へ => もちろん推論のエンドポイントを使う場合はその限りではありません。)
学習や推論対象のデータが十分に大きければその程度の起動コストは比較的問題にならないかもしれませんが、もっと小さいデータを扱うユースケースでは地味にストレスになります。
ということで、処理が軽いならlambdaで済ませちゃえばいいじゃんということで、とりあえずpandasだけ動くlayerを作りました。前処理などは案外pandasだけあれば済むと思います。推論や学習はお好みのライブラリを使いましょう。
使い方
リポジトリをcloneして make build
make zip
とすれば layer.zip
ファイルが出来上がります。AWS WEBコンソールでLambda Layerの画面を開いてアップロードするなり、一旦S3にアップロードしてLambda Layerに入れるなりその辺りはお好みでどうぞ。
世の中にはAWSにアップロード(?)したLayer自体を公開してる方もいらっしゃるようですが、他人が公開したレイヤーをそのまま使うのは不安があると思うのでlayer自体の公開はやめました。(あと、他人が公開してるレイヤーの中身をどうやって確認するのか分かってない)
また、世の中にはAWSにアップロードするところまでServerless frameworkなどを使ってフォローしてるレポジトリもあるようですが、私がServerless frameworkを使ったことがないのと、layer.zipをアップロードする方法は流派によって各種あると思うので今回は特に対応しませんでした。私はAWS CLIでS3にあげてcloudformationで管理する派です。
どうやってlayerを作っているか
AWS Lambdaはその実行環境のコンテナイメージが世の中に公開されています。
また、Lambda環境の中で動かすLayerや実行バイナリをビルドするためのコンテナイメージも上記のリポジトリで公開されています。なので、これを使ってpandasをインストールして対象のディレクトリをzipで固めれば基本的にそれだけで良いです。自分が公開してるリポジトリを見ていただくと分かりますが、本当にそれだけしかしてないです。
ただ、pandasはそれだけでいけますが、共有ライブラリ(soファイル)とかの兼ね合いでそれだけだと動かないものも世の中にはあります。その場合は、libディレクトリを作ってそこにsoファイルをコピーしてzipにする必要があったりします。
pandasのレイヤーは他にもあるよ?
いや〜、一通りLayer作ってからこのリポジトリの存在に気づいたんですよね。あと、前述したとおり他人がつくったLayerを(中身を確認せずに)そのまま使うのはどうかな〜というのがあります。私が公開してるやつは中身が簡単で必要になれば読んで改変もできるし、layer.zipも自分でuploadする形なのでこっちのほうがeasyかなぁと思った次第です。