AWS で ARMのインスタンスを使ってみた。


AWSでARMを使ってみる

はじめに

偶々AdventCalenderを見ていたら12/5の分が余っていたためエントリして急いで作りました。
会議中ですが、爆速で執筆します。

2018年11月にAWSでARMが使えるインスタンスの発表がありました。
https://aws.amazon.com/jp/blogs/news/new-ec2-instances-a1-powered-by-arm-based-aws-graviton-processors/

こういう機能のようです。
https://aws.amazon.com/jp/ec2/instance-types/a1/

ARMって耳にはしますが使ったことがないなー。ということでとりあえず使ってみます。

料金

オハイオの料金はこんな感じ。

a1.medium   1   該当なし    2 GiB   EBS のみ  0.0255USD/時間
a1.large    2   該当なし    4 GiB   EBS のみ  0.051USD/時間
a1.xlarge   4   該当なし    8 GiB   EBS のみ  0.102USD/時間
a1.2xlarge  8   該当なし    16 GiB  EBS のみ  0.204USD/時間
a1.4xlarge  16  該当なし    32 GiB  EBS のみ  0.408USD/時間
a1.metal    16  該当なし    32 GiB  EBS のみ  0.408USD/時間

t3と比較をしてみましたが、そんな高くない気がしました。
medium同士で比較をするとArmのほうが安いですね。
メモリの量で比較すると、Armのほうが若干高いようです。

t3.nano     2   変数  0.5 GiB EBS のみ  0.0052USD/時間
t3.micro    2   変数  1 GiB   EBS のみ  0.0104USD/時間
t3.small    2   変数  2 GiB   EBS のみ  0.0208USD/時間
t3.medium   2   変数  4 GiB   EBS のみ  0.0416USD/時間

配備をしてみる

通常のEC2のAMIは使えないようです。

↓をみると、Arm 用のイメージが準備されているようでした。 ここからubuntu 18のイメージを選択し配備しました、

触ってみる

インスタンスを払い出すと通常のEC2インスタンスと同様に操作できるようです。
とりあえずログインしてみます。

Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1048-aws aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Dec  5 08:18:24 UTC 2019

  System load:  0.09               Processes:           124
  Usage of /:   0.2% of 484.35GB   Users logged in:     0
  Memory usage: 4%                 IP address for ens5: 10.10.242.100
  Swap usage:   0%

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

適当にpythonを動かしてみましたが動きました。

$ python3
Python 3.6.8 (default, Aug 20 2019, 17:12:48) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("watashi ha maloney")
watashi ha maloney
>>> quit()

docker入れてーと進めたいところですが、dockerのインストール手順などは色々投稿されていたようなので、うーんいったい何をすればいいだろう。とりあえずjupyter とよくあるやつをいきなり入れてみます。

$ sudo apt update
$ sudo apt install python3-dev
$ sudo apt install python3-pip
$ pip3 install jupyterlab

起動します。

$ jupyter lab --ip=0.0.0.0 --port 8081 --allow-root
~略~
http://xxxxxxxxxxx:8081/?token=879077bd96XXXXXXXXXXXXXXXXXXXXXXXXXX32

普通にjupyterlab が使えました。特に問題なく動きますね。 すごーい

matplotとか入れる。

matplotやnumpyなど適当に色々と入れてみようとしましたが
猛烈に時間がかかった後に失敗してしまいました。

謎の待ち時間

$ sudo pip3 install matplotlib --no-cache-dir 
Collecting matplotlib
  Downloading https://files.pythonhosted.org/packages/75/81/53ccadcb8cad0a9837f1487b57f2b46b21caa2b3f35f72bc1acb06b5825c/matplotlib-3.1.2.tar.gz (40.9MB)
    100% |████████████████████████████████| 40.9MB 39.3MB/s  

なぜかここで固まってしまいました。
ここに限らず jupyteryやnumpy のパッケージのインストール時に謎の硬直が度々発生しました。12/5の記事が雑すぎたので、12/6に再度やり直してみているのですが、
固まる箇所は毎回同じのようです。 これは気になりますね。

インストールに失敗? → 解決

かなり放置してみたところ、無事再開・・・と思ったらインストールに失敗してしまいました。

  aarch64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DFREETYPE_BUILD_TYPE=system -DPY_ARRAY_UNIQUE_SYMBOL=MPL_matplotlib_ft2font_ARRAY_API -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -D__STDC_FORMAT_MACROS=1 -Iextern/agg24-svn/include -I/tmp/pip-build-k0ro6ugl/matplotlib/.eggs/numpy-1.17.4-py3.6-linux-aarch64.egg/numpy/core/include -I/usr/include/python3.6m -c src/checkdep_freetype2.c -o build/temp.linux-aarch64-3.6/src/checkdep_freetype2.o
  src/checkdep_freetype2.c:1:10: fatal error: ft2build.h: No such file or directory
   #include <ft2build.h>
            ^~~~~~~~~~~~
  compilation terminated.
  error: command 'aarch64-linux-gnu-gcc' failed with exit status 1

ft2build.hがないそうなので、freetypeに関するパッケージなどを適当に入れてみます。

$ sudo apt install libpng-dev
$ sudo apt install libfreetype6-dev

やっつけでしたが無事matplotが入りました。
パッケージが不足して失敗するときは、異様なほどに時間がかかって、
結果失敗するというケースが多いように思います。

ARMでMatplotを使ってみた

再度jupyterlabを起動して適当にmatplotを使ったプログラムを書きます。

時間を見つけて、機械学習をARM上で動かしてみたいですね。
今日はこれまで。

※12/6 誤字などがあまりに多かったので、ちょっと?修正。