Torchfix - это инструмент статического анализа кода Python - Linter с возможностями AutoFix - для пользователей Pytorch. Его можно использовать для поиска и исправления таких проблем, как использование устаревших функций питорха и непубличных символов, а также для принятия лучших практик Pytorch в целом.
Torchfix построен на https://github.com/instagram/libcst - библиотека для манипулирования питоном бетонными синтаксисными деревьями. LIBCST позволяет «кодовые демоды» (автофиксы) в дополнение к вопросам отчетности.
TOCHFIX может использоваться в качестве плагина Flake8 (только лининг) или в качестве автономной программы (с AutoFix, доступным для подмножества нарушений ворса).
Предупреждение
В настоящее время Torchfix находится на стадии бета -версии , поэтому все еще много грубых краев, и многие вещи могут и изменится.
Чтобы установить последний код из GitHub, клон/скачать https://github.com/pytorch-labs/torchfix и запустить pip install . внутри каталога.
Чтобы установить версию выпуска от PYPI, запустите pip install torchfix .
После установки Torchfix будет доступен в виде плагина Flake8, поэтому запуск Flake8 обычно запускает Linter Torchfix.
Чтобы увидеть только предупреждения о Torchfix без остальных линтеров Flake8, вы можете запустить flake8 --isolated --select=TOR0,TOR1,TOR2
TOCHFIX также можно запустить в качестве отдельной программы: torchfix . Добавить --fix PARAMETER, чтобы попытаться автофиксировать некоторые проблемы (файлы будут перезаписаны!), Чтобы увидеть дополнительную информацию отладки, добавить параметр --show-stderr .
Осторожность
Пожалуйста, имейте в виду, что AutoFix является наиболее эффективным механизмом. Учитывая динамическую природу Python, и особенно статус бета -версии Torchfix, очень трудно иметь уверенность при внесении изменений в код, даже для, казалось бы, тривиальных исправлений.
Предупреждения о проблемах с кодами, начиная с TOR0, TOR1 и TOR2, включены по умолчанию. Предупреждения с другими кодами могут быть слишком шумными, поэтому не включены по умолчанию. Чтобы включить их, используйте стандартные параметры конфигурации Flake8 для режима плагина или используйте torchfix --select=ALL . Для автономного режима.
Если вы столкнетесь с ошибкой или какой-либо другой проблемой с Torchfix, пожалуйста, подайте проблему на https://github.com/pytorch-labs/torchfix/issues.
Новые коды правил назначаются постепенно по следующим категориям:
torch общего назначения.pytorch/pytorch Repo, другие пользователи не должны использовать их.TOR0, TOR1 и TOR2 включены по умолчанию.
Эта функция устарела со времен Pytorch версии 1.9 и теперь удалена.
torch.solve устанавливается в пользу torch.linalg.solve . torch.linalg.solve имеет свои аргументы, которые обращаются с собой и не возвращают факторизацию LU.
Чтобы получить факторизацию LU, см. torch.lu , который можно использовать с torch.lu_solve или torch.lu_unpack .
X = torch.solve(B, A).solution следует заменить на X = torch.linalg.solve(A, B) .
Эта функция устарела со времен Pytorch версии 1.9 и теперь удалена.
torch.symeig устарел в пользу torch.linalg.eigh .
Поведение по умолчанию изменилось с использования верхней треугольной части матрицы по умолчанию, чтобы использовать нижнюю треугольную часть.
L , _ = torch . symeig ( A , upper = upper )должно быть заменено на
L = torch . linalg . eigvalsh ( A , UPLO = 'U' if upper else 'L' )и
L , V = torch . symeig ( A , eigenvectors = True )должно быть заменено на
L , V = torch . linalg . eigh ( A , UPLO = 'U' if upper else 'L' )require_grad в назначении. Вы имели в виду requires_grad ?Это обычное неправильное написание, которое может привести к бесшумным проблемам производительности.
use_reentrant явно на checkpoint Значение по умолчанию параметра use_reentrant в torch.utils.checkpoint изменяется с True на False . В то же время, значение должно быть явно передано.
Смотрите этот пост на форуме для деталей.
Смотрите TOR001 .
Эта функция устарела. Используйте torch.nn.utils.parametrizations.weight_norm , который использует современный API параметризации. Новый weight_norm совместим с state_dict сгенерированным из Old weight_norm .
Руководство по миграции:
Величина ( weight_g ) и направление ( weight_v ) теперь выражаются как parametrizations.weight.original0 и parametrizations.weight.original1 соответственно.
Чтобы удалить репараметризацию нормализации веса, используйте torch.nn.utils.parametrize.remove_parametrizations .
Вес больше не перескашен один раз на модуле вперед; Вместо этого он будет перечислен на каждом доступе. Чтобы восстановить старое поведение, используйте torch.nn.utils.parametrize.cached , прежде чем призвать рассматриваемый модуль.
Эта функция устарела. Вместо этого используйте torch.nn.attention.sdpa_kernel Context Manager.
Руководство по миграции: Каждый логический входной параметр (дефолт на истину, если не указано) sdp_kernel соответствует SDPBackened . Если входной параметр верно, соответствующий бэкэнд должен быть добавлен в список ввода sdpa_kernel .
Эта функция устарела в пользу torch.linalg.multi_dot .
Руководство по миграции: multi_dot принимает список из двух или более тензоров, тогда как chain_matmul принял несколько тензоров в качестве входных аргументов. Для миграции преобразуйте множественные тензоры в аргументировании chain_matmul в список из двух или более тензоров для multi_dot .
Пример: замените torch.chain_matmul(a, b, c) на torch.linalg.multi_dot([a, b, c]) .
torch.cholesky() устарел в пользу torch.linalg.cholesky() .
Руководство по миграции:
L = torch.cholesky(A) должен быть заменен L = torch.linalg.cholesky(A) .L = torch.cholesky(A, upper=True) должен быть заменен L = torch.linalg.cholesky(A).mH torch.qr() устарел в пользу torch.linalg.qr() .
Руководство по миграции:
Q, R = torch.qr(A) должно быть заменено на Q, R = torch.linalg.qr(A) .some из torch.qr заменяется mode String PARAMATER в torch.linalg.qr . Соответствующее изменение использования происходит от Q, R = torch.qr(A, some=False) до Q, R = torch.linalg.qr(A, mode="complete") . Функциональный torch.range() устанавливается, поскольку его использование несовместимо с линейкой Python. Вместо этого используйте torch.arange() поскольку он дает значения в [start, end) .
Руководство по миграции:
torch.range(start, end) дает значения в диапазоне [start, end] . Но torch.arange(start, end) создает значения в [start, end) . Для размера шага 1, мигрируйте использование из torch.range(start, end, 1) в torch.arange(start, end+1, 1) .torch.load без weights_only Параметр небезопасен. Явно установите weights_only на false только в том случае, если вы доверяете данные, которые вы загружаете, и необходима функциональность полного раскола, в противном случае установите weights_only=True .
Смотрите TOR101 .
TOCHFIX является лицензией BSD, как найдено в файле лицензии.