メモ > サーバ > サービス: AWS > 機械学習用の環境構築について調査
■機械学習用の環境構築について調査
■調査した環境
Amazon Linux 2 で調査
Python2.7 と Python3.7 がデフォルトでインストールされていた
今回はこの Python3.7 を使うものとする
$ python --version
Python 2.7.18
$ pip --version
-bash: pip: command not found
$ python3 --version
Python 3.7.10
$ pip3 --version
pip 20.2.2 from /usr/lib/python3.7/site-packages/pip (python 3.7)
■MeCab
yumでインストールできないので、ソースコードを取得してインストールする
Amazon Linux 2 で MeCab + NEologd - Qiita
https://qiita.com/hoto17296/items/7add794de677112566bc
※この手順だと、NEologdは t2.medium でなければインストールできなかった(small でも駄目だった)
※最後に掲載されているプログラム、「import mecab」は恐らく「import MeCab」 の間違い
そのままだと「No module named 'mecab'」のエラーになる
※とは言え、全体的に参考になった
$ sudo yum update -y
$ sudo yum groupinstall -y "Development Tools"
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
https://taku910.github.io/mecab/
「ダウンロード → MeCab 本体 → Source」の「mecab-0.996.tar.gz:ダウンロード」からダウンロードURLを確認できる
$ wget 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE' -O mecab-0.996.tar.gz
$ tar xzf mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure
$ make
$ make check
$ sudo make install
$ cd ..
$ rm -rf mecab-0.996*
さらに以下で辞書を導入
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n -p /var/lib/mecab/dic/mecab-ipadic-neologd
$ cd ..
t2.small 環境でインストールできた
(t2.micro 環境では以下のエラーになった。メモリ不足で処理が中断されている)
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
/home/ec2-user/mecab-ipadic-neologd/bin/../libexec/make-mecab-ipadic-neologd.sh: line 525: 27555 Aborted ${MECAB_LIBEXEC_DIR}/mecab-dict-index -f UTF8 -t UTF8
以下で動作確認できる
$ echo メイが恋ダンスを踊っている。 | mecab -d /var/lib/mecab/dic/mecab-ipadic-neologd
メイ 名詞,固有名詞,人名,一般,*,*,M.A.Y,メイ,メイ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
恋ダンス 名詞,固有名詞,一般,*,*,*,恋ダンス,コイダンス,コイダンス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
踊っ 動詞,自立,*,*,五段・ラ行,連用タ接続,踊る,オドッ,オドッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
EOS
以下でPythonから使用できる
$ pip3 install mecab-python3
$ python3
Python 3.7.10 (default, Jun 3 2021, 00:02:01)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>> mecab = MeCab.Tagger("-d /var/lib/mecab/dic/mecab-ipadic-neologd")
>>> print(mecab.parse("メイが恋ダンスを踊っている。"))
メイ 名詞,固有名詞,人名,一般,*,*,M.A.Y,メイ,メイ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
恋ダンス 名詞,固有名詞,一般,*,*,*,恋ダンス,コイダンス,コイダンス
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
踊っ 動詞,自立,*,*,五段・ラ行,連用タ接続,踊る,オドッ,オドッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル
。 記号,句点,*,*,*,*,。,。,。
EOS
>>> exit()
実行できた
インストール後、上記プログラムは t2.micro でも実行できた
以降、特に断りが無ければ t2.micro で実行している
■sklearn
問題なくインストールできた
$ sudo pip3 install sklearn
$ python3
Python 3.7.10 (default, Jun 3 2021, 00:02:01)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-13)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sklearn.svm import LinearSVC
>>> from sklearn.metrics import accuracy_score
>>> exit()
■scikit-learnでスパムメールを判定
Python.txt の「scikit-learn(機械学習)でスパムメールを判定」をもとに作業した
以下、部分的な作業メモ
test_spamcheck.py と makedb_spamcheck.py で以下を調整した
(今回の環境に合わせて、辞書ファイルの場所を指定した)
#tagger = MeCab.Tagger()
tagger = MeCab.Tagger("-d /var/lib/mecab/dic/mecab-ipadic-neologd")
以下のように実行できた
$ python3 makedb_spamcheck.py
単語頻出データベース作成完了
$ python3 train_spamcheck.py
0.9777777777777777
1.0
0.9777777777777777
1.0
0.9777777777777777
〜略〜
1.0
1.0
1.0
----
平均= 0.9919999999999994
$ python3 test_spamcheck.py
テキスト1
結果= OK
テキスト2
結果= SPAM
最初「テキスト1」「テキスト2」ともスパム判定されたが、
「テキスト1」を以下の文章にするとスパム判定されなかった
お世話になっています。山田太郎です。
昨日はありがとうございました。
また、実際の仕事メールと実際のスパムメールを張り付けてテストして、それぞれ正しく判定してくれた
■TensorFlow
以下などを試したがインストールできず
# pip3 install tensorflow
実行すると「MemoryError」と表示された
試した環境は t2.micro なので、単純にスペック不足だと思われる
t2.small で試してみる
Successfully installed absl-py-0.13.0 astunparse-1.6.3 cached-property-1.5.2 cachetools-4.2.2 certifi-2021.5.30 charset-normalizer-2.0.3 flatbuffers-1.12 gast-0.4.0 google-auth-1.33.1 google-auth-oauthlib-0.4.4 google-pasta-0.2.0 grpcio-1.34.1 h5py-3.1.0 idna-3.2 importlib-metadata-4.6.1 keras-nightly-2.5.0.dev2021032900 keras-preprocessing-1.1.2 markdown-3.3.4 numpy-1.19.5 oauthlib-3.1.1 opt-einsum-3.3.0 protobuf-3.17.3 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.26.0 requests-oauthlib-1.3.0 rsa-4.7.2 six-1.15.0 tensorboard-2.5.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.0 tensorflow-2.5.0 tensorflow-estimator-2.5.0 termcolor-1.1.0 typing-extensions-3.7.4.3 urllib3-1.26.6 werkzeug-2.0.1 wheel-0.36.2 wrapt-1.12.1 zipp-3.5.0
と表示されてインストールできた
$ python3
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2021-07-21 20:13:01.552836: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-07-21 20:13:01.552963: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
実行しようとすると、ライブラリが無いと言われてエラーになる
AWSでも動作しないわけではなさそうだが、一筋縄ではいかないみたい
TensorFlowではGPU環境が必要だが、AWSでCentOS系で無料インストールできるもので…となるとAMIが無いみたい
TensorFlow-GPUの環境構築(Amazon Linux) : シェルスクリプトとかperlとか
http://blog.livedoor.jp/s06280hk/archives/1915199.html
AWSインスタンス上にTensorFlow:GPGPU環境を作成する - 技術情報 | テクノスデータサイエンス・エンジニアリング株式会社
https://www.tdse.jp/tec_info/588/
AmazonLinux2にTensorFlow環境を構築する - Qiita
https://qiita.com/ground0state/items/928e3a5dea02f1f44685
TensorFlow-GPUの環境構築(Amazon Linux) : シェルスクリプトとかperlとか
http://blog.livedoor.jp/s06280hk/archives/1915199.html
なお Raspberry Pi 環境にすんなりインストールできるのは、標準でGPUが搭載されているからみたい
ラズパイ4の新GPUをハックしてディープラーニング推論を高速化、一体なぜ開発できた? | 日経Robotics(日経ロボティクス)
https://xtech.nikkei.com/atcl/nxt/mag/rob/18/012600001/00062/