本記事は筆者の仮想環境に対する理解が浅い時に書いたため、一部内容が不正確です。
具体的にはminiforge3
+conda
の仮想環境でなければpip install tensorflow-macos
等できないことを示唆するような書き方をしていますが、venv
による仮想環境でもtensorflowはインストールできることがわかりました。
ただし、2022/9/10現在、仮想環境でなければtensorflowでなければ入らず、scikit-learnも通常のpip install
では入らず、dev.verisonをビルドすることが必要となりますので、MacでPython動かすときは仮想環境の中で動かすことをお勧めします。
前回記事(React + FullCalendar)の進捗について書こうと考えていましたが、その前にタイトルの通りどハマりしたので、忘備録+これから機械学習を本格化していこうと考えている方向けに記事を書いておきます。
ちなみに前回記事はこちら
環境
macOS Monterey version 12.5
TensorFlowについて
世界的に有名な、Google社が開発した機械学習ライブラリです。
主にDNNの構築に用いられます。
一昔前はコードが非常に複雑で修得コストが高いという欠点があったようですが、バージョンアップに伴い、同様の機械学習ライブラリKeras
と統合されたことで使いやすくなったようです。演算処理にGPUも利用することで、高速な処理を実現しているそうです。
ちなみにJavaScript
で実行できる、TensorFlow.js
もあります。
Scikit-learnとの違い
こちらも有名な機械学習ライブラリです。
クラスタリング(K-Meansなど)や回帰のような分野で主に使われています。学習コストが低く、公式ドキュメントも豊富なので非常に使いやすいです。
PyTorchとの違い
使ったことないです。わかる人は教えてください!!
手順の詳細: ライブラリ入れるだけなのに
0. Pyenvでのバージョン管理をされている方向け)Pyenvのパスを切る
この記事の通り、~/.zshrc
の中にあるPyenvの設定をコメントアウトします
Pyenv経由でインストールしたPythonの削除など、実施した方が安全なのかも知れませんが、特に実施しなくとも問題は発生しませんでした。
ターミナルでwhich python
と打って、python not found
と出れば大丈夫です。
macOS 11以前は2系のPythonがデフォルトで入っていたため、user/bin/python
と出るかと思いますが、12以降デフォルトのPythonは入っていません。
さらにMac × Python の敷居が上がっていきますね
1. conda, Miniforge 仮想環境の構築
Apple Developer 公式記事
演算処理でGPUを使えるとのことですので、ここからインストールが望ましいと思います。
解説記事
1). 公式記事に従ってcondaの仮想環境を構築
M1 Macでない方はvenv
で仮想環境構築して問題ないと思いますので、以下を実行
python3 -m venv ~/tensorflow-metal
source ~/tensorflow-metal/bin/activate
python -m pip install -U pip
私はM1でないMacを所持していないので、venv環境へのtensorflowインストールは試していないです
公式サイトからConda env
をダウンロード
これをクリック
ターミナルで以下を実行
chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate
2). conda仮想環境の中に、実行する仮想環境を作成する
1). の手順がうまくいくと、condaの仮想環境が立ち上がるので、ターミナルが(base)~~
といった表記に変わると思います。この中で、TensorFlowを実行しても良いのですが、今後を想定して専用の実行環境を作り、その中にインストールしていきましょう
参考記事に従って、condaの中に作っていきます
conda create -n Py39 python=3.9 # Python version3.9で仮想環境を作成
conda activate Py39 # 作成した仮想環境に切り替え
成功していれば、写真のようにターミナルに()書きで仮想環境名が表示されます。
毎回Python39
って打つのめんどくさい。短くすればよかった
Py39
の部分は好きな名前(わかりやすいもの)でいいです。
python=
以下でバージョンを指定できます。TensorFlowの対応状況に応じて指定してください。
同様の手順で、local環境にTensorFlowを入れてみましたが、
Unable to convert function return value to a Pthon type! Ther signature was () -> handle
とのエラーメッセージが出て実行できませんでした。ですので、0.で実施したPyenvとのパスを切って仮想環境を構築することが必要となりました。
2.TensorFlowのインストール
1). 依存関係のあるライブラリのインストール
必要かはわかりませんが、念の為。ターミナルにて仮想環境がactivateされた状態で実行していください
conda install numpy
conda install six
conda install matplotlib
conda install opencv
今までPython
使っていた方でも、仮想環境にライブラリを入れ直す必要がありますので、このタイミンングで入れてしまいましょう。
私は、pandas, matplotlib, scikit-learn, sea-born, japanize-matplotlib
を入れなおしました。
2). TensorFlow 及び 依存関係のあるパッケージのインストール
ターミナル以下実行し、TensorFlowと依存関係のあるパッケージ状況を確認します。
conda search -c apple tensorflow-deps

2.9.0が最新のようです
ターミナルで以下を実行してTensorFlow
を、インストールします。
conda install -c apple tensorflow-deps==2.9.0
python -m pip install tensorflow-macos # macOSのTensorFlow
python -m pip install tensorflow-metal # TensorFlowでGPUを利用するための拡張機能
成功しているかを確認します。Pythonを起動してTensorFlowをimport
してバージョンを確認しましょう。
バージョン確認はimport tensorflow; print(tensorflow.__version__)

一番下の行のように表示されれば成功です。
タイプミスには気をつけましょう。記事書いてて焦りました
お疲れ様でした。😊
3.Jupyter
でConda
仮想環境の実行
機械学習する上では、やはり対話型インターフェイスが不可欠と思います。
- 前処理のところで、
pandas
を用いて対話型でデータを確認しながら整形していきたい - 整形したデータをそのままの環境で利用していきたい
- モデル構築する中でもハイパーパラメータの調整などで、逐次出力を確認したい
このような理由ですね。
以前からjupyter
を利用されていた方でも、仮想環境へのパスを通しておかないと、仮想環境のカーネルが使えず、せっかくインストールしたTensorFlowがjupyter上で使えませんので、以下の処理を実行していきましょう。
参考記事
conda activate Py39
で先ほどの仮想環境をアクティベートした上で、以下実行してください。
pip install ipykernel
pip install jupyter
pip install jupyterlab
python -m ipykernel install --user --name=Py39 # 先ほど追加した仮想環境の名前
jupyter lab
を実行して、以下のようにカーネルが選択できれば大丈夫です。
作業は以上です。お疲れ様でした。
感想
ボタン一つでダウンロードできるようにしてくれ
tips
仮想環境の切り替え
開始: (base)が立ち上がる
conda activate
指定した仮想環境の立ち上げ
conda activate 名前
仮想環境の終了
conda deactivate
ターミナルを立ち上げた時に仮想環境を自動で立ち上げたり、それをやめたり
condaを導入すると、ターミナルを開いた時に自動で仮想環境が立ち上がるようになります。
React
で開発しようとした時に仮想環境立ち上がっては面倒ですよね。
conda config --set auto_activate_base false
これで自動で立ち上がらなくなります。
逆に、trueにすれば自動で立ち上げられます。
その他、細々とした設定を見たいときは
conda config --show
で色々見られます。
conda
とpip
の違い
この記事がわかりやすかったです。