質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1531閲覧

M2チップ)pytorchでGPU(mps)処理をしたい

yamaguchi_ss

総合スコア0

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/04/26 00:26

編集2023/04/26 03:02

実現したいこと

M2チップ)pytorchでGPU(mps)処理をしたい

前提

pytorchでGPU(mps)にて計算するため下記のコードを実行しておりますが、エラーが出ます。

発生している問題・エラーメッセージ

RuntimeError Traceback (most recent call last)
Cell In[42], line 45
42 print(inputs.device)
43 device
---> 45 outputs = net(inputs)
46 print(outputs)

File ~/opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
1496 # If we don't have any hooks, we want to skip the rest of the logic in
1497 # this function, and just call forward.
1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1499 or _global_backward_pre_hooks or _global_backward_hooks
1500 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501 return forward_call(*args, **kwargs)
1502 # Do not call functions when jit is used
1503 full_backward_hooks, non_full_backward_hooks = [], []

Cell In[42], line 9, in Net.forward(self, x)
8 def forward(self, x):
----> 9 x1 = self.l1(x)
10 x2 = self.relu(x1)
11 x3 = self.l2(x2)

File ~/opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/module.py:1501, in Module._call_impl(self, *args, **kwargs)
1496 # If we don't have any hooks, we want to skip the rest of the logic in
1497 # this function, and just call forward.
1498 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1499 or _global_backward_pre_hooks or _global_backward_hooks
1500 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1501 return forward_call(*args, **kwargs)
1502 # Do not call functions when jit is used
1503 full_backward_hooks, non_full_backward_hooks = [], []

File ~/opt/anaconda3/lib/python3.9/site-packages/torch/nn/modules/linear.py:114, in Linear.forward(self, input)
113 def forward(self, input: Tensor) -> Tensor:
--> 114 return F.linear(input, self.weight, self.bias)

RuntimeError: Placeholder storage has not been allocated on MPS device!

該当のソースコード

"""python
!pip install japanize_matplotlib | tail -n 1
!pip install torchviz | tail -n 1
!pip install torchinfo | tail -n 1
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from IPython.display import display
import torch
import torch.nn as nn
import torch.optim as optim
from torchinfo import summary
from torchviz import make_dot
device = torch.device("mps")

import torchvision.datasets as datasets
data_root = "./data"

train_set0 = datasets.MNIST(
root = data_root,

train = True, download = True)

class Net(nn.Module):
def init(self, n_input, n_output, n_hidden):
super().init()
self.l1 = nn.Linear(n_input, n_hidden)
self.l2 = nn.Linear(n_hidden, n_output)
self.relu = nn.ReLU(inplace=True)

def forward(self, x): x1 = self.l1(x) x2 = self.relu(x1) x3 = self.l2(x2) return x3

device = torch.device("mps")

torch.manual_seed(123)
torch.mps.manual_seed(123)
net = Net(n_input, n_output, n_hidden)

net = net.to(device)

lr = 0.01
optimizer = torch.optim.SGD(net.parameters(), lr=lr)
criterion = nn.CrossEntropyLoss()

for parameter in net.named_parameters():
print(parameter)

print(net)

summary(net, (784,))

for images, labels in train_loader:
break

device = torch.device("mps" if torch.backends.mps.is_available() else "cpu")
inputs = images.to(device)
labels = labels.to(device)
print(inputs.device)
device

outputs = net(inputs)
print(outputs)
"""

試したこと

GPUをcudeではなく、mpsにした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2023/04/26 00:59

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
jbpb0

2023/04/26 01:04

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
jbpb0

2023/04/26 01:13

import torch print(torch.backends.mps.is_built()) print(torch.backends.mps.is_available()) を実行したら、何て表示されますでしょうか?
jbpb0

2023/04/26 12:00

device = torch.device("mps" if torch.backends.mps.is_available() else "cpu") ↓ 変更 device = torch.device("mps") としても、ダメでしょうか?
yamaguchi_ss

2023/04/27 09:05

Import分及び、parser = ArgumentParser() parser.add_argument('--device', type=str, default='mps', choices=['cpu', 'mps']) args = parser.parse_args() device = torch.device(args.device) main(device) を追加しましたが、エラーで動きません。よろしくお願いします
yamaguchi_ss

2023/04/27 21:16

そのまま実行した場合、下記のようなエラーとなりました usage: ipykernel_launcher.py [-h] [--device {cpu,mps}] ipykernel_launcher.py: error: unrecognized arguments: -f /Users/name/Library/Jupyter/runtime/kernel-b5b1fb13-24b6-43a3-a910-4bd16b260c0e.json An exception has occurred, use %tb to see the full traceback. SystemExit: 2 /Users/name/opt/anaconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3468: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1) --device mpsを指定して実行とは device = torch.device("mps") ということでしょうか
jbpb0

2023/04/27 22:45 編集

「--device mps」を指定して実行は、 https://zenn.dev/hidetoshi/articles/20220731_pytorch-m1-macbook-gpu の「実行結果」の、 「続いて,GPU(MPS)で実行してみます」 と書かれてるところのすぐ下に書かれてるように、(jupyterではなく)ターミナルで下記を実行する、という意味です (「python」は「python3」かも) python pythonコードのファイル名 --device mps 【追記】 コードを下記のように変更したら、たぶんjupyterで実行できると思います root = os.path.dirname(os.path.abspath(__file__)) ↓ 変更 from pathlib import Path root = Path().resolve() parser = ArgumentParser() parser.add_argument('--device', type=str, default='mps', choices=['cpu', 'mps']) args = parser.parse_args() device = torch.device(args.device) ↓ 変更 device = torch.device('mps')
jbpb0

2023/04/27 21:46

質問のコードの書き方ですが、現状 """python (pythonコード) """ となってますが、そうではなく ```python (pythonコード) ``` としてください キーボード入力するのではなく、上記からコピペしてみてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問