PR

Apple Silicon MacでPython環境を構築【VS Code/Pyenv/Poetry】

AI & CODE
この記事は約15分で読めます。

こんにちは、しょうたです。先日、ついに新しいMacを手に入れました。新しいMacを手に入れたら、次に考えるのは快適な開発環境の構築ですよね。
この記事では、私が先日購入したApple Silicon M1 Max MacBook Pro 16インチ(10コアCPU/32コアGPU、64GBユニファイドメモリ、SSD 1TB)の初期設定、そしてPython開発環境(VSCode, Pyenv, Poetry)の構築手順を備忘録としてまとめました。

スポンサーリンク

VS Codeのインストールと設定

Visual Studio Code(VSCode)は、Microsoftが開発した無料で利用できるコードエディターです。拡張機能が豊富で、ほぼすべてのプログラミング言語に対応しています。

MacのApple Silicon用のインストーラーをダウンロード、インストールします。

拡張機能をインストール

  • Japanese Language Pack for Visual Studio Code
  • GitHub Theme
  • Python(Python Debuggerが同時にインストールされます)
  • Jupyter(Jupyter Keymap、Jupyter Notebook Renderersなどが同時にインストールされます)
  • Markdown All in One
  • vscode-pdf

ターミナルからcodeコマンドで開く設定

Shift + Command + Pでコマンドパレットを開いて「Shell Command: Install ‘code’ command in PATH」を選択してインストールします。

ターミナルで code . (カレントディレクトリを開く) や code <ファイルパス> を実行することで、VSCodeを開くことができます。

自動保存の設定

VSCodeでファイルを編集した際に自動保存する設定にしておくと手動で保存する手間が省けて便利です。

  • 設定を開く
  • 検索バーで「auto save」と入力
  • 「Files: Auto Save」を「afterDelay」に設定

Homebrewの導入

Homebrewは、Macのパッケージマネージャーです。
Homebrewの公式ページを参考にコマンドでインストールできます。インストール中にパスワード入力やEnterキー入力が求められました。

Pathを通す

Homebrewのインストールが完了したらPathを通します。
以下のコマンドを実行し、.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"を追記して、変更を反映します。

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
source ~/.zprofile

Pyenvの導入

Pyenvは、Pythonのバージョンを管理するためのツールです。
複数のバージョンのPythonを1つのシステムに共存させ、プロジェクトごとに異なるバージョンを使い分けることが可能になります。

Homebrewでインストールします。

公式GitHubのREADMEを参考に以下のコマンドを実行しました。

brew update
brew install pyenv

PyenvでPythonをインストール

以下のコマンドでインストールできるPythonのバージョンが確認できます。

pyenv install --list

WebサイトにおけるPython3の使用統計は以下のサイトで確認できます。

Python3.12は2025年に入って利用者が顕著に増加しています。
今回は「3.12.11」をインストールしました。

pyenv install 3.12.11

_lzmaモジュールが見つからないというエラーが出たので以下コマンドでLZMAライブラリをインストールして、一度失敗したPythonのバージョンを削除し、再度インストールしました。

brew install xz
pyenv uninstall 3.12.11
pyenv install 3.12.11

以下のようにPyenvにPythonがインストールされましました。

shota@MacBookPro ~ % pyenv versions
* system (set by /Users/shota/.pyenv/version)
  3.12.11

以下のコマンドでpyenv globalまたはpyenv localで使うPythonのバージョンを指定します。

pyenv global 3.12.11

使用するPythonのバージョンを指定できました。しかしまだPythonが見つからないようです。

shota@MacBookPro ~ % pyenv versions      
  system
* 3.12.11 (set by /Users/shota/.pyenv/version)
shota@MacBookPro ~ % python --version
zsh: command not found: python

Pathを通す

公式GitHubのREADMEを参考に以下のコマンドを実行しました。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc

変更を反映するために以下コマンドを実行します。

source ~/.zshrc

これでPythonが使えるようになりました。

shota@MacBookPro ~ % python --version
Python 3.12.11
shota@MacBookPro ~ % which python
/Users/shota/.pyenv/shims/python

Poetryの導入

Poetyは、Pythonの依存関係と仮想環境をシンプルかつ確実に管理するツールです。pyproject.tomlで設定し、poetry.lockで環境を再現できます。プロジェクト管理の手間を減らし、開発を効率化するために使用されます。

以下の公式ドキュメントを参考にインストールしました。

curl -sSL https://install.python-poetry.org | python3 -

Pathを通す

以下のコマンドを実行し、.zshrcexport PATH="$HOME/.local/bin:$PATH"を追記して、変更を反映します。

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc 

プロジェクトフォルダ内に仮想環境を作成する設定

poetry config virtualenvs.in-project true

M1 MaxのGPUを活用したPyTorch環境の構築

Apple Silicon M1 Max chip (https://www.apple.com/)

さて、Python開発環境が整ったところで、次はM1 Maxの強力なGPU(Metal Performance Shaders, MPS)を最大限に活用するためのPyTorch環境を構築していきましょう。これにより、機械学習モデルのトレーニングを高速化できます。

Poetryで新しいプロジェクトを作成

まず、PyTorch関連のファイルを管理するための新しいプロジェクトディレクトリを作成し、Poetryでプロジェクトを初期化します。

# プロジェクトディレクトリを作成し、移動
mkdir my-ml-project
cd my-ml-project

# Poetryプロジェクトを初期化
poetry init

poetry init」を実行すると、プロジェクトの基本情報を設定するためのいくつかの質問が表示されます。ここで入力した内容は、後から生成されるpyproject.tomlファイルに書き込まれます。

特にこだわりがなければ、以下の内容を参考に進めてみてください。

# 1. プロジェクト名
# そのまま[my-ml-project]でEnter。
Package name [my-ml-project]:

# 2. バージョン
# そのままEnter。
Version [0.1.0]:

# 3. 説明
# プロジェクトの簡単な説明。後から編集も可能。
Description []: A machine learning project using PyTorch on Apple Silicon

# 4. 作者(Author)
# nを入力してEnter。
Author [None, n to skip]:: n

# 5. ライセンス
# そのままEnter。
License []: 

# 6. 互換性のあるPythonバージョン
# PyenvでインストールしたPythonバージョンを指定する。
# 例: ~3.12.0 (Python 3.12.x系ならどれでもOKという意味)
Compatible Python versions [~3.12.0]:

# 7. 依存関係のインタラクティブな定義
# 現時点では追加しないので、"no" [n] でEnter
Would you like to define your main dependencies interactively? (yes/no) [yes]: n

# 8. 開発依存関係のインタラクティブな定義
# 同様に、現時点では追加しないので、"no" [n] でEnter
Would you like to define your development dependencies interactively? (yes/no) [yes]: n

# 9. pyproject.toml の内容確認
# 設定内容が表示されるので、問題なければ "yes" [y] でEnter
Do you confirm generation? (yes/no) [yes]: y

PyTorchおよび主要ライブラリのインストール

M1 MaxのGPU(MPS)をサポートするPyTorchをインストールします。Apple Siliconに最適化されたtorch、torchvision、torchaudioが含まれています。また、データ分析や機械学習に不可欠なライブラリも同時に導入します。

# 1. PyTorch (Apple Silicon最適化版) をインストール
poetry add torch torchvision torchaudio

# 2. 基本的な数値計算・データ操作ライブラリをインストール
poetry add numpy pandas

# 3. 主要な機械学習ライブラリをインストール
poetry add scikit-learn lightgbm

# 4. 可視化・開発環境ライブラリをインストール
poetry add matplotlib seaborn jupyter

# 5. 画像処理ライブラリをインストール
poetry add Pillow opencv-python

Metal Performance Shaders (MPS) の利用可能性を確認

PyTorchがM1 MaxのGPU(MPS)を正しく認識しているかを確認しましょう。これにより、PyTorchがどのデバイスを使用しようとしているかを確認できます。

# check_mps.py
import torch

# MPS (Metal Performance Shaders) が利用可能か確認
print(f"MPS available: {torch.backends.mps.is_available()}")
print(f"MPS built: {torch.backends.mps.is_built()}")

# デバイスの設定
if torch.backends.mps.is_available():
    device = torch.device("mps")
    print("Using MPS (Apple GPU)")
elif torch.cuda.is_available(): # M1 Maxでは通常利用できませんが、念のため記載
    device = torch.device("cuda")
    print("Using CUDA")
else:
    device = torch.device("cpu")
    print("Using CPU")

簡単なGPU動作テスト

実際にGPU(MPS)を使用して簡単なテンソル計算を行い、そのパフォーマンスを確認してみましょう。これにより、環境が正しくセットアップされ、GPUが計算に利用されていることを確認できます。

# gpu_test.py
import torch
import time

# 行列のサイズ
matrix_size = 1000

# デバイス設定
device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")

# テンソル作成とGPU転送
x = torch.randn(matrix_size, matrix_size).to(device)
y = torch.randn(matrix_size, matrix_size).to(device)

# ウォームアップ
_ = torch.mm(x, y)
if device.type == 'mps':
    torch.mps.synchronize()

# 計算時間測定
start_time = time.time()
z = torch.mm(x, y)
if device.type == 'mps':
    torch.mps.synchronize()
end_time = time.time()

print(f"Device: {device}")
print(f"Computation time: {end_time - start_time:.4f} seconds")
print(f"Result shape: {z.shape}")

比較としてCPUで同じテンソル計算を行い、パフォーマンスを確認してみましょう。

# cpu_test.py
import torch
import time

# 行列のサイズ
matrix_size = 10000

# デバイス設定 (CPU固定)
device = torch.device("cpu")

# テンソル作成とCPU転送
x = torch.randn(matrix_size, matrix_size).to(device)
y = torch.randn(matrix_size, matrix_size).to(device)

# ウォームアップ
_ = torch.mm(x, y)

# 計算時間測定
start_time = time.time()
z = torch.mm(x, y)
end_time = time.time()

print(f"Device: {device}")
print(f"Computation time: {end_time - start_time:.4f} seconds")
print(f"Result shape: {z.shape}")

GPU(MPS) vs. CPU 計算速度を比較

今回は、先ほど作成したgpu_test.pyとcpu_test.pyという2つのスクリプトを使用し、20000×20000の行列積の計算時間を計測しました。

デバイス計算時間 (秒)
GPU (MPS)4.4859
CPU8.1779

この計算では、M1 MaxのGPU(MPS)がCPUに比べて約1.82倍高速であることが分かります。
実際の性能差はタスクの種類、行列サイズ、システム構成により大きく変動します。

これで、Apple Silicon MacでPython開発環境が整い、さらにM1 MaxのGPUを活用したPyTorchでの機械学習開発を始める準備ができました。快適な開発ライフを楽しんでくださいね!

まとめ

この記事では、私が新しく手に入れたApple Silicon M1 Max MacBook Pro 16インチを対象に、快適なPython開発環境の構築手順をまとめました。

具体的には、以下のステップで環境を構築しました。

  1. VS Codeのインストールと設定: 高機能なコードエディタであるVS Codeを導入し、日本語パックやPython、Jupyterなどの拡張機能、codeコマンドや自動保存などの設定を行いました。
  2. Homebrewの導入: MacのパッケージマネージャーであるHomebrewをインストールし、PATHを設定しました。
  3. Pyenvの導入: Pythonのバージョン管理ツールPyenvをインストールし、Python 3.12.11を導入してPATHを通しました。これにより、複数のPythonバージョンを柔軟に管理できるようになります。
  4. Poetryの導入: Pythonの依存関係と仮想環境を管理するPoetryをインストールし、プロジェクトフォルダ内に仮想環境を作成する設定を行いました。

そして、最後にM1 MaxのGPU(Metal Performance Shaders, MPS)を最大限に活用するためのPyTorch環境の構築手順を解説しました。Poetryでプロジェクトを作成し、Apple Siliconに最適化されたPyTorchをインストール後、MPSが正しく認識されているか、そしてGPUが計算に利用されているかを簡単なテストスクリプトで確認しました。

この手順を通じて、Apple Silicon Macで効率的なPython開発と、GPUを活用したPyTorchによる機械学習開発が可能になります。ぜひ快適な開発環境を構築してみてください。

コメント

タイトルとURLをコピーしました