AWS

【AWS】LambdaのLayersでfastTextを使う

ネット上に情報がなく、色々試行錯誤したので後からまた同じことやる時のための備忘録。

 

fastTextをLambdaのLayersとして作成するためのポイントは、以下3つ。

  1. python2.7を使う
  2. Amazon Linux環境で行う
  3. pythonというフォルダに格納し、zip化する

 

まず1.について、Lambdaは以下のpythonしかサポートしていない。(2019年2月現在)

  • python2.7
  • python3.6
  • python3.7

一方、fastTextで使用可能なpythonは以下。

  • 〜python2.7
  • 〜python3.5

 

つまり、python2.7でレイヤー作成しなければならない。

 

2.について、Layer化するzipをAmazon Linux環境で作成するため、EC2を利用する。

なぜかというと、pipでインストールする際にバイナリファイルを生成するのだが、別環境でのバイナリ形式が異なるため「invalid ELF header」というエラーが発生してそのレイヤーは使えない。

必ずAmazon Linux環境でレイヤー作成する必要がある。

 

3.については、Lambdaの仕様になるのだが、ライブラリをレイヤー作成するとpythonフォルダ配下を見るようになっているので、必ずpythonフォルダを作成しその中へインストールする。

 

以上のことを踏まえると、fastTextのレイヤーは以下のように作成できる。

(EC2 Amazon Linux環境)

$ cd ~
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make
$ pip install Cython
$ mkdir ~/python
$ pip install --install-option="--prefix=~/python" fasttext
$ cd ..
$ zip -r fastText.zip python

 

 

参考サイト

機械学習で大量のテキストをカテゴリ別に分類してみよう!

[検証]LambdaのLayer機能を早速試してみた

Lambdaの「invalid ELF header」エラーを解消する – EC2からlambda-uploaderを使用してLambdaにデプロイする方法