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は使えないようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214695/10d66f2d-543d-3cec-4093-dc9676bac2c4.png)

↓をみると、Arm 用のイメージが準備されているようでした。 ここからubuntu 18のイメージを選択し配備しました、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214695/bf1217b4-9881-1472-8ad8-531c0d77ab3a.png)



## 触ってみる

インスタンスを払い出すと通常の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 が使えました。特に問題なく動きますね。 すごーい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214695/f67bf4f1-aa4e-0860-83f4-98114dda7ff7.png)


## 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を使ったプログラムを書きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214695/91783a9a-076b-7e43-7ed0-c540c6ca8ff4.png)

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


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