こんにちは。法人営業課の橋本です。 2017年1月12日(木)開催の「AWS Premier Night #3 in Tokyo」に登壇機会をいただきましたので、 こちらの記事で簡単に報告します。
Link: https://aws-premier-night.doorkeeper.jp/events/54131
概要
お話した内容はおよそ以下のような感じです。
タイトル:Serverless Machine Learning に手を染めた話
- Salesforce上のデータを使って未来の売上を予測してみようと思った
- せっかくだからLambdaに乗せてサーバーレスに動かしたい
- Python 2.7 + 数値計算系のライブラリで実装する
- Lambdaの実行環境に含まれないライブラリ(Pythonパッケージと 共有ライブラリ )がある
- 環境に含まれないライブラリはバンドルに含めてあげる必要がある。Pythonパッケージの方はAWS公式のやり方でOK
- 共有ライブラリにも依存関係があるので、必要な *.soもバンドルして、実行時にローディングするスタートアップ処理を書く
- 実行時にロードして使える状態に持っていく必要あり
- 最初のデプロイがちょっと面倒になる、でも動作するように作り込むことは可能
- スタートアップのローディング処理は実行時のオーバーヘッドになるが、今回の用途は並列化が狙いではないのでOKとする
- プロトタイプは作れたけどいくつか課題はある。分析ロジックの精度も追求含めて今後の研究テーマとする
PythonでLambdaの実行環境に含まれないパッケージ(と共有ライブラリ)をバンドルする方法については、 こちら の記事を大いに参考にしています。 是非こちらもご参照ください。
資料
こちら。
まとめ
最近のおいしそうなテーマをかじってみた、という感じの内容になってます。 実装がプロトタイプすぎるのでそのへんのアップデートはかけていきたいですね。
時系列分析の関係だとDatadogさんのAnomaly Detection が非常に興味深いなと思ってます。 今回の取り組みを応用して、こうしたサーバー監視の分野でもServerless MLを投入できればいいなと思います。 API化して監視サーバーからメトリクスを投げてもらい、サーバーレスに異常値検知を実装する。夢が広がりますね。
余談
以下、スライドにはあまり記載していない内容になりますが、個人的にやり残したなーと思っている内容について。
デプロイツールの利用
Serverless Framework などのデプロイツールは未導入です。 手作業を続けるはイヤなので、何かしらか検討したいとは思っています。
管理ツールを入れる狙いとしては主に2つで、
- バージョニング & ロールバック をツールの力で管理したい
- デプロイ、ビルドの省力化
この辺が解決されれば良いかなと。 今は管理規模も小さいので、Lamvery がマッチしそうかなと考えています。
現状、ビルド作業で面倒なのはsoファイルの処遇です。 必要なライブラリを自分で調べ上げる+お手製スクリプトでバンドルを作成しています。 使用するPythonパッケージに変更がない限りは共有ライブラリにも変更はありません。 そのため、動作環境(Pythonパッケージと共有ライブラリ)のみをzipした所謂「ベースバンドル」を作成し、 自分で開発したPythonスクリプトの部分を後からzipアーカイブに追加する作業を実施しています。 バンドルが結構なサイズになるため、動作環境の部分だけ先にアーカイブしてしまうことでビルド時間の短縮を行っています。
※アーカイブ後のサイズはLambdaの制約上50MBまでとなります。何も考えずにアーカイブすると容量が上限オーバーします。 詳しくはAWS公式ドキュメントの 「AWS Lambda デプロイメントの制限」を参照ください。
さらに余談
Lamvery作者である弊社の@marcy_teruiから情報提供いただきました。 Lamveryならsoファイルの収集〜バンドルまで面倒を見てくれるとのことです。 素晴らしいです。使うしかないですね。Lambda実行環境にないライブラリを使おうとしてお困りの方は、 Lamveryを使うと幸せになれそうです。
以上、法人営業課の橋本でした。