PyTorch 2.15の公式MPS文書では、MPSバックエンドはfloat64をサポートしていません。公式文書でこの制限を確認し、倍精度が必要な演算はCPUに置いてください。float32へ変えるのは、研究上の精度条件を満たすと検証できた場合に限ります。
この解説が役立つ方
Apple Silicon MacでPyTorchを実行し、doubleやfloat64のエラーに直面した大学院生・研究者の方。
MPSでモデルを動かしたい一方、精度要件や演算子の対応状況を確認したい開発者の方。
研究室の計算環境を整え、再現可能な受け入れ確認を行う技術担当者の方。
最終更新:2026年11月11日。PyTorch 2.15の公式リリース情報、MPSバックエンド文書、数値精度の説明を照合しています。
PyTorch 2.15のMPS倍精度エラーは、型の問題か環境の問題か
エラー文にfloat64やdoubleがあり、MPSへの転送時に失敗するなら、まずテンソルの型が原因かを調べます。torch.backends.mps.is_available()が真でも、MPSで対応していない型を使える意味にはなりません。
PyTorch 2.15のリリース情報にはApple Silicon向けのMPS更新が記されていますが、それだけで全データ型や演算子の対応が保証されるわけではありません。リリース情報と個々の機能制限を分けて確認してください。
| 症状・確認結果 | 問題の候補 | 次に行う確認 |
|---|---|---|
| MPSの利用可否チェックが偽 | OS、デバイス、ビルドなどの環境条件 | is_available()とis_built()を確認し、公式MPS文書の条件と照合 |
MPSは利用可能だが、float64の転送で失敗 |
データ型の非対応 | 対象テンソルのdtypeと転送箇所を調べ、倍精度が必要ならCPUに残す |
| 型を変えても特定の演算で止まる | 演算子または引数の対応範囲 | 問題の演算だけを切り出し、MPS対応状況を個別に確認 |
| 実行は完了するが結果が異なる | 数値誤差、処理経路、条件の不一致 | CPU基準と同じ入力・条件で比較し、研究上の判定基準を適用 |
MPSの利用可否を調べる例です。
import torch
print("MPS built:", torch.backends.mps.is_built())
print("MPS available:", torch.backends.mps.is_available())
利用できない場合はバックエンドや環境条件を調べます。利用できる場合でも、次にテンソルの型と演算子を確認します。この二つを混同すると、型の制限をインストールのやり直しで直そうとして時間を使うことになります。
CPUの倍精度とMPSの単精度を、要件に応じて分ける
CPUとMPSのどちらか一方へ処理を丸ごと寄せる必要はありません。研究上の精度要件がある箇所はCPUに置き、単精度で問題ないと確かめた処理だけMPSで試す方法が現実的です。
| 選択肢 | 向いている条件 | 注意点 |
|---|---|---|
CPUでfloat64を維持 |
倍精度が研究設計上必要、または結論への影響を排除できない | テンソル、モデルパラメーター、中間結果が意図せずMPSへ移らないよう確認 |
MPSでfloat32を試す |
単精度が許容され、対象演算子もMPSで実行できる | CPU基準との比較と、研究チームの受け入れ基準が必要 |
| CPUとMPSを処理単位で併用 | 一部の計算だけに倍精度が必要 | デバイス間転送の位置を明示し、型とdeviceを工程ごとに記録 |
MPSで未対応の演算子をCPUへ回す環境変数もありますが、これはfloat64そのものをMPSで利用可能にする設定ではありません。MPS環境変数の説明が示すフォールバックの範囲と、データ型の制限を分けて扱ってください。
float64を一括でfloat32へ変換するのは、動作確認には便利でも、精度を保証する修正ではありません。変換後の結果を研究目的に照らして評価できない場合は、倍精度をCPUに残してください。
最初の再現から判定までの手順
- 元のエラーを保存します。 発生した入力、実行条件、該当する演算、エラー全文を記録します。エラーを加工して貼り直すと、型変換やデバイス転送の手掛かりが消えることがあります。
- バックエンドの状態を確認します。
is_built()とis_available()を実行し、MPSが利用できる状態かを切り分けます。利用できないなら環境条件を先に調べ、利用できるなら次の型確認に進みます。 - 失敗するテンソルと演算を小さく再現します。
dtypeとdeviceを出力し、.to()でデバイスを移す箇所も特定します。.to()の公式説明を参照し、転送後の型が想定どおりか確認してください。 - 倍精度が必要な計算を特定します。 入力生成、モデルの一部、中間計算、統計処理などを工程ごとに見て、研究計画上の精度要件がある部分はCPUに残します。モデルやテンソル全体を機械的に移動させないでください。
- 単精度の試行経路を分けます。
float32へ変更する場合は、問題を再現する最小単位で試します。対応状況は演算子ごとに確認し、PyTorch 2.15で追加されたMPS機能から未確認の対応を推測しないでください。 - CPU基準と結果を照合します。 同じ入力と固定した実行条件でCPUとMPSの出力を比べます。誤差のほか、研究で重要な統計量や最終的な下流結論も確認します。
- 受け入れ条件と実行経路を記録します。 許容誤差は一律の値を当てはめず、研究計画やチームで定めた基準を使います。非有限値の検査には
torch.isfinite()も利用できます。
CPU基準との比較は、誤差だけで終わらせない
単精度への変更を採用するかは、出力の差が小さいかだけで決められません。たとえば分類や検定などの下流判断が変わるなら、平均誤差が許容範囲に見えても採用できない場合があります。どの統計量や結論を守る必要があるか、実行前に決めておきます。
CPUとMPSで乱数、入力前処理、モデルの状態などが異なると、比較結果から精度の影響を切り分けられません。条件をそろえたうえで、値の差、重要な集計量、下流の判定を順に記録します。数値演算には実行経路による差が生じ得るため、PyTorchの数値精度に関する説明も確認してください。
よくある疑問:型の変更とMPS実行をどう判断するか
MPSのチェックに通れば、モデル全体がGPUで動きますか?
いいえ。チェックが示すのはMPSバックエンドを利用できることです。個々のテンソルがどのdeviceにあるか、演算子がMPSで実行されるか、CPUへフォールバックしていないかは別に確認します。実行経路を必要に応じて記録し、処理全体がMPS上だと決めつけないでください。
倍精度が必要な処理は、どこまでCPUに置けばよいですか?
研究上の精度要件が及ぶ入力、演算、中間結果をCPUに残します。MPS上のモデル出力をCPUへ戻して後段だけ倍精度で計算する設計も考えられますが、境界での型変換と出力差を検証してください。処理全体を一度に移すより、必要な範囲を明示する方が追跡しやすくなります。
手元にMacがない場合は、実機で経路を確かめる
LinuxやWindowsの研究室サーバーだけでは、Apple Silicon上のmacOSとMPSの実行経路を直接確かめられません。一方、個人でMacを購入すると、検証が一時的な課題でも機器費用と管理が発生し、共有や機関の利用手続きも別途必要です。常時稼働する重い処理や物理インターフェースが必要な研究なら、自前の専用機や研究室設備が適する場合もあります。
短期間の再現確認や互換性の受け入れ試験であれば、リモートのmacOS環境を選択肢にできます。ただし、利用前に実際のシステム、チップ、接続方法、必要な操作権限を確認してください。環境が用意されても、倍精度の制限が変わるわけではなく、精度検証や機関の承認を置き換えるものでもありません。日本からの接続を検討する場合は、日本向けのMac環境案内で利用条件を確認し、必要なら環境の比較情報も参照してください。
PyTorch MPSの問題は、バックエンドが使えないケース、型が非対応のケース、演算子の範囲、結果の受け入れ判断に分けると、修正方針を誤りにくくなります。まず倍精度が必要な箇所をCPUに残し、単精度で成立する処理だけをCPU基準と照合してください。研究室にApple Silicon Macがなく、実機でのmacOS検証が必要な場合は、VpsHoldの環境情報と利用条件を確かめたうえで、短期の検証用途に合うか判断できます。
よくある質問
PyTorchのMPSでfloat64を使えないのはなぜですか?
PyTorchのMPSバックエンドはfloat64をサポートしていないためです。MPSが利用可能と判定されても、このデータ型の制限は解消されません。倍精度が必要な計算はCPUに置き、単精度へ変更する場合は研究上の許容基準を先に定めてください。
PyTorch 2.15でdouble tensorのエラーが出たら、まず何を確認しますか?
エラーにdouble、float64、またはMPSへのデバイス変換が含まれるかを確認し、問題を起こすテンソルのdtypeとdeviceを調べます。そのうえでMPS自体の利用可否を別に確認します。バックエンドが利用できてもfloat64は使えないため、インストールし直すだけでは解決しない場合があります。
科研計算では、どの処理をCPUの倍精度に残すべきですか?
研究計画で倍精度が必要と定めた演算や、float32にすると主要な統計量や結論が変わる処理はCPUに残します。モデル全体を一括で移すのではなく、入力、パラメーター、中間結果のdeviceを確認し、CPUとMPSの境界で意図しない型変換が起きていないかを小さな再現コードで確かめます。
PyTorchモデルをfloat32にした後、結果の信頼性をどう確かめますか?
同一入力と同一条件でCPUの基準結果とMPSの結果を比較し、誤差だけでなく研究で重視する統計量や下流の結論も確認します。許容誤差を一律の値で決めず、研究設計やチームが事前に定めた判定基準を使ってください。必要なら有限値の有無も検査します。
MPSの検証環境を、専有クラウドMacで整えませんか
VpsHoldの専有物理マシンなら、CPUとMPSでの実行を同じ環境で確かめられます。
