Rosettaも使う人のM1 Macの環境整備Step1


はじめに

M1 Macを買ったので最初にやった環境整備を書いていきます。
ObsPy等の地球物理系のモジュール、kerasやtensorflowを実行する環境を作っていきます。
現状Rosettaを使わないと仕事ができなさそうなので、両方を使える環境を構築していきます。
随時更新予定。

マシンスペック:
MacBook Pro (13-inch, M1, 2020)
チップ Apple M1
OS MacOs BigSur 11.1

参考にしたサイト:
1. https://oku.edu.mie-u.ac.jp/~okumura/macosx/m1.html
2. https://zenn.dev/osuzuki/articles/380be0f682d72d
3. https://zenn.dev/ik11235/scraps/17d44ec45ea8f7
4. https://www.usagi1975.com/202104172257/

arm64なのかx86_64なのか問題

M1 MacではARMベースのApple独自チップが搭載されていて、今までのIntel Macで実行できていたモジュールが実行できないという状況がままあります。そのような問題を解決してくれるのがrosettaなのですが、それを使うとIntel Macと同じような環境を構築することができます。そのまま使うとアーキテクチャとしてはarm64, Rosettaを使うとx86_64となります。armとRosettaの両方の環境に対してそれぞれ、miniforge3とmanbaforgeをインストールします。

miniforge3&mambaforgeの.shファイルをダウンロードします。
https://github.com/conda-forge/miniforge

arm64の環境で

bash Miniforge3-MacOSX-arm64.sh

x86_64の環境で

bash Mambaforge-MacOSX-x86_64.sh

そして、使用するアーキテクチャによって有効にするパス名を変更できるようにします。
プロンプトはarmの時にarm, x86_64の時にintelと表示されるようにしました。
今までbashで粘っていましたが、今回.zshに初挑戦です。これでターミナル起動時の警告が消えます。
.zshrcの中身は参考サイトを見ながら少し変えました。$hogeにはユーザーネームが入ります。

if [[ $ARCH == 'arm64' ]]; then
    PROMPT="[arm] %m:%~%# "
else
    PROMPT="[intel] %m:%~%# "
fi

#conda
if [[ $ARCH == 'arm64' ]]; then
   # arm64 => Miniforge3
   # >>> conda initialize >>>
   # !! Contents within this block are managed by 'conda init' !!
   __conda_setup="$('/Users/$hoge/miniforge3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
   if [ $? -eq 0 ]; then
      eval "$__conda_setup"
   else
      if [ -f "/Users/$hoge/miniforge3/etc/profile.d/conda.sh" ]; then
        . "/Users/$hoge/miniforge3/etc/profile.d/conda.sh"
      else
        export PATH="/Users/$hoge/miniforge3/bin:$PATH"
      fi
   fi
   unset __conda_setup
   # <<< conda initialize <<<

else

   # x86_64 => Mambaforge
   # >>> conda initialize >>>
   # !! Contents within this block are managed by 'conda init' !!
    __conda_setup="$('/Users/$hoge/mambaforge/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
    if [ $? -eq 0 ]; then
        eval "$__conda_setup"
    else
        if [ -f "/Users/$hoge/mambaforge/etc/profile.d/conda.sh" ]; then
            . "/Users/$hoge/mambaforge/etc/profile.d/conda.sh"
        else
            export PATH="/Users/$hoge/mambaforge/bin:$PATH"
        fi
    fi
    unset __conda_setup
    # <<< conda initialize <<<
fi

ターミナルの設定(Rossetaを使用できるようにする)

まず何もせずにターミナルを開いて

uname -m

とすると

amr64

と表示されます。一旦ターミナルを閉じて、ターミナルのアイコンを右クリックして情報を見るとRosettaを使用して開くという項目があるので、それにチェックを入れて起動するとインテルMacと同じように使うことができます。

もう一度

uname -m

すると今度は

x86_64

と表示されます。

アーキテクチャの切り替えは、一度x86_64を使ったあとだと、例えばx86_64からarm64だと、

arch -arm64 bash

とすれば大丈夫です。

Homebrewのインストール

arm64の場合

sudo mkdir /opt/homebrew
sudo chown -R $(whoami) /opt/homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C /opt/homebrew

x86_64の場合は通常通りHomebrewのページのコマンドを使えば良いです。

.zshrcにパスを追加します。

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
if [[ $ARCH == 'arm64' ]]; then
    PATH=/opt/homebrew/bin:/opt/homebrew/sbin:$PATH
fi

Step2ではObsPyをインストールします。