При запуске PyTorch на MPS появляется ошибка о double или float64, когда вы переносите тензор на устройство.
Быстрое решение: MPS не поддерживает float64; если расчёту действительно нужна двойная точность, выполняйте этот участок на CPU. Переводить данные в float32 стоит только после проверки точности и результатов для вашей задачи.
Эта статья для вас, если вы работаете с PyTorch на Apple Silicon Mac и разбираете ошибку в научном скрипте или модели. Она также пригодится разработчикам и администраторам лаборатории, которым нужно проверить доступность MPS и воспроизводимо сравнить результаты.
Проверено 11 ноября 2026 года: сведения о выпуске и ограничении сверены с официальной записью о PyTorch 2.15 и документацией MPS для этой версии.
PyTorch 2.15 MPS и ошибка двойной точности: что именно сломалось
Ошибка может указывать на неподдерживаемый тип данных, но похожее сообщение о невозможности использовать MPS бывает и при недоступном backend. Не начинайте с переустановки PyTorch: сначала определите, на каком этапе возникает ошибка и какой dtype у тензора.
В документации MPS указано, что backend не поддерживает float64 и complex128. Это ограничение относится к типам данных, а не само по себе к установке PyTorch. Выпуск PyTorch 2.15 от 28 октября 2026 года включает обновления для Apple Silicon и MPS, но факт выпуска новых возможностей не отменяет указанное ограничение типа. Сверяйте это с описанием выпуска и документацией соответствующей версии.
Обратите внимание на три разных места, где обычно возникает проблема:
- Тип данных. Исходный тензор или параметр имеет тип
float64либоcomplex128, а код передаёт его на MPS. - Переход между устройствами. Ошибка появляется при вызове
.to(device), при переносе модели или внутри функции, которая перемещает данные неявно. Поведение метода и допустимые параметры описаны в документацииTensor.to. - Операция или backend. MPS доступен, но конкретная комбинация операции и типа не работает на выбранном устройстве. Это не то же самое, что глобальная недоступность MPS.
Для первого разбора сохраните полный traceback, а не только последнюю строку ошибки. Найдите первый участок вашего кода, где задан device, выполняется перенос данных или меняется dtype. Затем проверьте типы входа, параметров модели и промежуточных тензоров непосредственно перед проблемной операцией.
Доступность MPS и поддержка типа — разные проверки
Проверка доступности отвечает на вопрос, может ли текущая среда использовать MPS, но не подтверждает, что каждый тип данных и каждый оператор будут работать на устройстве. Для такого вывода нужен тест именно той части программы, которая важна вашему проекту.
В официальном руководстве доступны проверки torch.backends.mps.is_built() и torch.backends.mps.is_available(). Первая сообщает, собран ли PyTorch с поддержкой MPS; вторая — доступен ли backend в текущей среде. Их интерпретацию и требования к системе сверяйте с руководством по MPS.
В отдельном диагностическом запуске вы можете проверить:
import torch
print(torch.backends.mps.is_built())
print(torch.backends.mps.is_available())
Если MPS собран, но недоступен, переходите к проверке системных условий и используемой сборки PyTorch по официальному руководству. Если backend доступен, а ошибка возникает только для тензора float64, диагностируйте dtype и путь его переноса, а не считайте произошедшее доказательством неисправной установки.
Полезно также проверить, не уводит ли код часть вычислений на другое устройство неожиданно для вас. В больших проектах device может задаваться в загрузчике данных, конструкторе модели, функции предобработки и отдельном модуле расчёта. Успешная проверка MPS не означает, что все эти участки согласованы между собой или что вся модель будет выполняться на GPU.
CPU с float64 или MPS с float32: выбор по требованиям проекта
Выбирайте не по принципу «GPU всегда лучше», а по допустимой точности и проверенной поддержке нужных операций. Сохраните CPU для расчётов, которым необходим float64; рассматривайте MPS с float32 только как отдельный эксперимент, результаты которого проходят ваши критерии проверки.
| Вариант | Когда выбирать | Ограничение, которое нужно учесть |
|---|---|---|
CPU и float64 |
Методика требует двойной точности либо переход на float32 меняет значимые результаты |
Проверьте, что весь критичный расчёт действительно остаётся на CPU |
MPS и float32 |
Для конкретного этапа допустима одинарная точность и используемые операции проверены на MPS | Сравните результат с CPU-ориентиром; не переносите модель целиком без проверки |
| Смешанный маршрут | Одни этапы допускают MPS, а другие требуют float64 |
Явно управляйте dtype и устройством на границах этапов; проверяйте промежуточные результаты |
На практике разумно начать с минимального воспроизведения: возьмите тот вход, на котором падает программа, создайте проблемный тензор, выполните только преобразование устройства и целевую операцию. Не меняйте одновременно тип, архитектуру модели и параметры запуска — иначе вы не сможете установить, какое изменение повлияло на ошибку.
Если двойная точность необходима только для части конвейера, не обязательно переводить всю работу на CPU. Можно оставить обязательный участок на CPU, а остальные этапы отдельно испытывать на MPS. Однако переходы должны быть явными: проверьте устройство и dtype каждого тензора до и после вычислительного блока. Издержки переноса данных между устройствами тоже следует учитывать; не предполагайте, что смешанный маршрут автоматически окажется быстрее или надёжнее.
Официальные материалы PyTorch отдельно разбирают численную точность: вычислительные операции могут давать отличающиеся результаты в зависимости от используемого пути и настроек. Перед оценкой расхождений прочитайте заметки о численной точности. Устанавливать единый порог ошибки для всех исследовательских задач нельзя: критерий должен вытекать из вашей методики, значимых статистик или заранее принятого командой правила.
Воспроизводимый разбор: от падающего вызова до проверенного результата
Чтобы выяснить, можно ли использовать MPS в вашей задаче, разделите диагностику на небольшие проверки. Так вы не перепутаете ограничение типа с доступностью устройства и не примете совпадение одного тестового значения за подтверждение корректности модели.
- Сохраните исходные условия. Зафиксируйте используемую версию PyTorch, конфигурацию запуска, входные данные и полный traceback. Для версии 2.15 сверяйте поведение с официальными заметками выпуска; сведения о поддержке MPS проверяйте в документации именно этой ветки.
- Проверьте backend отдельно от модели. Запустите проверки сборки и доступности MPS из короткого диагностического скрипта. Если MPS недоступен, сначала разберитесь с этим состоянием. Если доступен, но скрипт падает при переносе
float64, продолжайте проверку типа. - Найдите точку смены dtype и устройства. Просмотрите
.to(...), создание тензоров, загрузку параметров и пользовательские функции, которые могут менять dtype. Сопоставьте фактический тип перед проблемной операцией с тем, какой тип предусмотрен методикой. - Соберите минимальное воспроизведение. Уберите из примера необязательные этапы модели и оставьте создание входа, преобразование устройства и операцию, вызывающую ошибку. Отдельно проверьте тот же расчёт на CPU, сохраняя
float64, если именно его требует проект. - Оцените возможность теста на MPS. Если методика допускает
float32, сделайте отдельный запуск с этим типом. Не меняйте одновременно другие параметры, которые влияют на результат, и убедитесь, что целевые операции поддерживаются используемым путём. - Сравните результаты по критериям проекта. Подавайте CPU- и MPS-запускам одинаковые входные данные и сравнивайте не только выходной тензор, но также ключевые статистики и выводы. Для проверки неконечных значений можно использовать документированную функцию
torch.isfinite. Она помогает находитьNaNи бесконечности, но сама по себе не доказывает численную эквивалентность. - Запишите решение и границы проверки. Укажите, какой этап оставлен на CPU, какие этапы прошли испытание на MPS, какой критерий принят для результата и на каких входах он проверен. Если тестовый набор не отражает важные режимы вашей задачи, не распространяйте вывод на весь проект.
Сценарий из лабораторной работы
Представьте, что исследовательский скрипт загружает данные в float64, потому что так устроен исходный расчёт, а затем переносит всю модель на MPS одним вызовом. Ошибка появляется при переносе, и соблазнительно заменить тип для всех данных. Но такая правка меняет не только место исполнения — она может изменить значения, на которых основаны дальнейшие статистические выводы.
Более аккуратный вариант — оставить требующий двойной точности участок на CPU и выяснить, может ли следующий блок использовать MPS с float32. После этого сравнить итоговые величины, важные для данной работы. Если отличие меняет вывод или выходит за критерии, установленные исследовательской группой, MPS-путь не подходит для этого блока, даже если технически он запускается.
Где проходит граница безопасного перехода на float32
Переход на одинарную точность — не исправление совместимости, которое можно применять без анализа. Это изменение численного представления данных, и потому его нужно согласовать с научной задачей.
Перед тестовым запуском проверьте:
- допускает ли методика одинарную точность на конкретном этапе;
- важны ли для выводов малые различия в значениях, промежуточных результатах или агрегатах;
- совпадают ли входные данные и условия выполнения в CPU- и MPS-проверках;
- проверена ли поддержка операций, которые действительно использует ваш граф вычислений;
- согласован ли критерий приемлемого результата до того, как вы увидели сравнение.
Если методика не задаёт критерий для такого сравнения, обсудите его с руководителем или командой до того, как считать результат MPS пригодным. Не выбирайте порог постфактум только потому, что он позволяет объявить эксперимент успешным.
Факт доступности MPS также не равен доказательству, что модель полностью использует GPU. Некоторые блоки могут оставаться на CPU, отдельные операции могут иметь собственные ограничения, а переносы между устройствами — влиять на воспроизводимость и время выполнения. Проверяйте фактические устройства и типы по ключевым участкам кода. При необходимости сверяйтесь с описанием переменных среды MPS, но не используйте настройки диагностики как замену проверке результатов.
Частые вопросы о двойной точности и проверке MPS
Почему PyTorch MPS не принимает float64?
Документация MPS указывает, что этот backend не поддерживает float64 и complex128. Поэтому ошибка при переносе тензора двойной точности не обязательно означает, что установка повреждена. Проверьте тип до вызова .to(device). Если расчёту нужен float64, оставьте его на CPU; переход к float32 требует отдельной проверки научной приемлемости.
Как поступить с ошибкой double tensor в PyTorch 2.15?
Сначала отделите проблему типа от недоступности MPS. Если backend доступен, а сбой возникает на тензоре double, проследите за dtype входа, параметров модели и промежуточных значений. Двойную точность оставьте на CPU. Пробный запуск на MPS с float32 допустим только тогда, когда методика допускает такое изменение и есть CPU-результат для сравнения.
Какие научные вычисления лучше оставить на CPU с двойной точностью?
Оставляйте на CPU те этапы, для которых ваша методика явно требует float64 или где снижение точности может изменить значимые величины и итоговые выводы. Универсального списка задач нет: требования зависят от модели, данных и критериев исследования. Зафиксируйте правило для каждого критичного блока и проверьте, что его промежуточные тензоры не перемещаются на MPS.
Как проверить надёжность модели после перехода на float32?
Запустите CPU-ориентир и отдельный путь MPS на одинаковых входах. Сравните выходы, ключевые статистики и решения, которые принимает последующий анализ; дополнительно проверьте наличие неконечных значений. Порог допустимого отличия должен быть задан проектом или командой до принятия решения. Если сравнение проходит только на одном удобном примере, этого недостаточно для вывода о всей задаче.
Когда для проверки нужен отдельный Mac
Если в лаборатории нет Apple Silicon Mac, но проект должен пройти проверку именно на MPS, удалённая macOS-среда может помочь воспроизвести нужный маршрут. Однако сначала уточните фактические сведения о системе и чипе, доступный способ работы и возможность запускать ваши сценарии; сам факт удалённого доступа не подтверждает совместимость конкретной конфигурации с PyTorch.
До выбора среды определите, что именно вы должны подтвердить: доступность MPS, запуск целевых операторов, поведение модели на float32 или соответствие результатов вашему CPU-эталону. Для сравнения вариантов доступа можно посмотреть описание доступных решений, а перед тестом проверить опубликованные сведения о среде удалённого Mac. Не считайте аренду заменой проверке точности, одобрению руководителя или требованиям учреждения.
Если ваш текущий вариант — только лабораторный Linux/Windows-сервер или локальный CPU, у него есть реальные ограничения для этой задачи: он не воспроизводит запуск на macOS; на CPU не проверяет путь MPS; а покупка отдельного Mac может быть неоправданной, если доступ нужен лишь для разового приёмочного теста. Когда же вычисления стабильно нужны на протяжении всего проекта или требуются физические интерфейсы и постоянный локальный доступ, собственное оборудование может быть уместнее. Если вам нужна временная проверка на Apple Silicon macOS, аренда Mac у VpsHold может дать подходящую среду без покупки устройства — при условии, что до начала работы вы подтвердили реальные системные характеристики и доступность нужного сценария.
Часто задаваемые вопросы
Почему PyTorch MPS не принимает тензор float64?
MPS не поддерживает типы float64 и complex128. Поэтому попытка переместить такой тензор на устройство MPS может завершиться ошибкой, даже если backend доступен и другие операции на нём выполняются. Проверьте тип исходных данных и точное место вызова .to(device); если двойная точность нужна по требованиям расчёта, оставьте этот участок на CPU.
Как поступить с ошибкой double tensor в PyTorch 2.15?
Сначала выясните, действительно ли ошибка связана с типом double, а не с недоступностью MPS. Если воспроизводится проблема float64, перенесите требующий двойной точности расчёт на CPU и проверьте переходы устройства у модели, тензоров и промежуточных значений. Пробовать float32 на MPS следует только после подтверждения, что исследовательская задача допускает такую точность.
Какие научные вычисления лучше оставить на CPU с двойной точностью?
На CPU оставляют именно те этапы, для которых проект требует float64: например, расчёты, где точность промежуточных значений или итоговых статистик является частью исследовательского протокола. Универсального перечня подходящих задач нет. Зафиксируйте требования в методике, проверьте типы тензоров на каждом этапе и не переносите весь конвейер на MPS только ради ускорения.
Как проверить надёжность модели после перехода на float32?
Сравните CPU-эталон и тестовый запуск MPS на одинаковых входных данных и при одинаковых условиях проекта. Оцените не только расхождение выходных тензоров, но и ключевые статистики и выводы, на которых основана работа. Приемлемый порог задаёт ваша исследовательская методика или заранее согласованный критерий команды; общего процента, подходящего всем задачам, нет.
Проверьте PyTorch на удалённом Mac от VpsHold
Арендуйте отдельный физический Mac mini с M4 и воспроизводите ошибки MPS в среде macOS.
