MacBook pro M1に乗り換えたのでゼロからDeep Learning実行環境構築してみた！

# 初めに
M1に乗り換えて色々調べながら環境構築を行ったのでここにメモとしてまとめてみます（この記事を書き始めて早いもので1ヶ月が経ちました。。。☜放置癖を治します）。さて、最速でDeep Learning実行環境を作成したい場合は、brewをインストールした後「**Deep Learning実行環境を最速で構築する**」に飛んでください！それではDeep Learning実行環境を構築して行きましょう！

今回は6本の章立てになっています！

+ 1, 基本機能の確認
+ 2, HomeBrew
+ 3, HomeBrewのアプリ管理
+ 4, Deep Learning実行環境を最速で構築する
+ 5, 最後に
+ 6, 参考文献

#1, 基本機能の確認
物理コア数の確認
`sysctl -n hw.physicalcpu_max`
-> 8

論理コア数の確認
`sysctl -n hw.logicalcpu_max`
-> 8

CPUの型番の確認
`sysctl machdep.cpu.brand_string`
-> machdep.cpu.brand_string: Apple M1 Pro

#2, HomeBrew
**次に環境構築を行なっていきます！**
[Homebrew](https://brew.sh/index_ja)(Macのためのパッケージ管理アプリ（M1対応）)はPythonにおけるpipに近いイメージだと思っています。[Homebrew](https://brew.sh/index_ja)からHomeBrewをダウンロードし、インストールします。

Install Homebrew（下記のコマンドを実行します）

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

Installation successful! と出たら成功です。

次にインストールが完了したらHomebrewのパスを追加する必要があります。追加コマンドはターミナルに赤字で記載されています。
Next steps:
Run these two commands in your terminal to add Homebrew to your PATH:

```
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/User name/.zprofile
```
eval "$(/opt/homebrew/bin/brew shellenv)"

Run brew help to get started
Further documentation : https://docs.brew.sh

インストールの確認を行います。

```
brew --version
```
-> Homebrew 3.3.7

#3, HomeBrewのアプリ管理
+ パッケージ管理アプリを使って複数のアプリをダウンロードすればアンインストールや更新がコマンド一つで実行可能になります。

```
Home-brew formulae(パッケージ名)
```
[ここで](https://formulae.brew.sh/formula/)インストールしたいアプリがダウンロード可能か検索できます。

## アプリインストール方法
**・GUIアプリのインストール**
`brew install --cask <app>`

**・コマンドで動作するアプリのインストール**
`brew install <app>`

**・アプリ一覧表示**
`brew list`

**・アプリのアンインストール**
`brew uninstall <app>`

## 私がインストールしたアプリの参考例

**・vscode install**
`brew install --cask visual-studio-code`

**・pycharm**
`brew install --cask pycharm`

**・Google Chrome install**
`brew install --cask google-chrome`

**・iTerm2 install**
`brew install --cask iterm2`

**・discord**
`brew install --cask discord`

**・Slack**
`brew install --cask slack`

**・Zoom**
`brew install --cask zoom`

**・Skype**
`brew install --cask skype`

**・Google Drive**
`brew install --cask google-drive`

**・Jupyter lab**
`brew install jupyterlab`
`brew install --cask jupyter-notebook-viewer`
`brew install --cask jupyter-notebook-ql`

**・app-engine-python**
`brew install app-engine-python`

**・notion**
`brew install --cask notion`

## formulaeの操作
**・Homebrew and Homebrewのformulaeの更新**
`brew update`
`brew upgrade` # 更新があるパッケージを再ビルドする

**・formulaeの情報を見る**
`brew info formulae`

**・更新のあるformulaeを確認**
`brew outdated`

**・古いバージョン(outdated)のformulaeを削除**
`brew cleanup`
`brew cleanup -v `# 削除されるアプリ一覧を表示

**・インストールしたアプリの更新**
`brew upgrade`

**・依存関係を確認する**
`brew deps formulae`

#4, Deep Learning実行環境を最速で構築する
さてやっと本題です！MacBook pro M1のDeep Learningの実行環境を構築していきます。基本的にはApple公式のDeveloper（1, [Getting Started with tensorflow-metal PluggableDevice](https://developer.apple.com/metal/tensorflow-plugin/)）を見ればできます！さて、[Download Miniforge3] (https://github.com/conda-forge/miniforge#download) から、 M1, M1 Pro, M1 MaxのためのmacOS arm64 chipsを選択してダウンロードします。
 
ダウンロード完了後、ホームディレクトリにMiniforge3をインストールします。次に「chmod -x FILE_NAME」というコマンドを実行します。これによりFILE_NAMEのモードを-executableに変更します。

```
chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
```
次にベース環境を有効化することで確認できます。

```
source ~/miniforge3/bin/activate
```
Thank you for installing Miniforge3!

一度ターミナルを再起動して次のセクションに向かいましょう。

## TensorFlowの環境を構築するためのディレクトリを作成
まず、deeplearning-testというディレクトリを作成します。今回は試しにDeepLearningをjupyter notebookで動かすところまで行うので、これから作成する環境を保存するディレクトリをdeeplearning-testとして作成しました。ターミナルの操作は[私の過去の記事](https://qiita.com/seiji1997/items/4e2c59ad10a0fe51c73c)にまとめてあります。

```
mkdir deeplearning-test
cd deeplearning-test
```

deeplearningディレクトリに入ったので、condaコマンドを使用して新たなconda環境を作成します。まず「conda create --prefix ./env」でこのパスのディレクトリに環境を作成するという意味です。

```
conda create --prefix ./env
```
「conda activate ./env」では作成した環境を起動します。

```
conda activate ./env
```
正しく起動されていればコマンドプロンプトがこのようになっているはずです。
`(/Users/Seffeine/deeplearning-test/env) Seffeine@M1 deeplearning-test %`

Condaの環境は整ったので、次に必要なソフトウェアのインストールを行います。[AppleがTensorFlowに必要なものをほとんど全て一行でインストールできるようにクイックコマンドを設定してくれているのでそれを使用します](https://developer.apple.com/metal/tensorflow-plugin/)（Apple大好き）。

```
conda install -c apple tensorflow-deps
```

[ここから](https://developer.apple.com/metal/tensorflow-plugin/)Step 2のInstall base TensorFlowを行います。Appleではこれをtensorflow-macosと呼んでいます。

```
python -m pip install tensorflow-macos
```

Apple's [tensorflow-metal](https://developer.apple.com/metal/)をインストールします。これは、MacでGPUを使用するためのフレームワークになります。M1、M1 Pro、M1 Maxのチップはかなり強力なGPUを搭載しているのでこちらをぜひ活用してください！

```
python -m pip install tensorflow-metal
```

tensorflow-metalでGPUのテストをするためにtensorflow-datasetsをダウンロードします。

```
python -m pip install tensorflow-datasets
```

conda installで機械学習に必要なライブラリをインストールします。

```
conda install jupyter pandas numpy matplotlib scikit-learn
```

jupyterlabを使用しているなら、以下のコマンドを実行してください。

```
conda install -c conda-forge jupyterlab
```

以下のコマンドをterminalで実行します。

```
jupyter lab
```

or 

```
jupyter notebook
```
以下のコマンドを実行して動作確認をします。

```python
import numpy as np
import pandas as pd
import sklearn
import tensorflow as tf
import matplotlib.pyplot as plt

# Check for TensorFlow GPU access
print(tf.config.list_physical_devices())

# See TensorFlow version
print(tf.__version__)
```

![スクリーンショット 2022-01-20 18.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896292/a68bf01f-455f-6015-b69f-f10d1046da47.png)

後は普段通りに機械学習を行います!

少しやってみましょう！

![スクリーンショット 2022-01-20 18.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/896292/3285607d-c42a-6113-a298-554e7d8766c4.png)

こんな感じで簡単に機械学習の環境構築ができました！

#5, 最後に
色々調べたんですが、とりあえず今回はこんな感じで端的に書いてみました！pipenv, venv, pyenvについても調べてまとめていたのですが、理解が甘いので来月くらいにまとめようと思っています！

皆さんも**楽しいDeep Learning life**を！！ではまた！

#6, 参考文献

1, [Getting Started with tensorflow-metal PluggableDevice](https://developer.apple.com/metal/tensorflow-plugin/)
2, [Conda](https://www.python.jp/install/anaconda/conda.html)
3, [Homebrew](https://brew.sh)
4, [Homebrew Documentation]( https://docs.brew.sh)
5, [miniforge](https://github.com/conda-forge/miniforge)
6, [Jupyter Project Documentation](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html)