2025, Sep 22 21:01
Как починить импорт Transformers: конфликт CUDA между PyTorch и torchvision
После установки PyTorch с CUDA импорт Transformers падает из-за несовместимых версий torchvision/torchaudio. Узнайте, как согласовать пакеты и вернуть работу.
Когда рабочая установка Transformers внезапно начинает сбоить после инсталляции PyTorch с поддержкой CUDA, проблема чаще всего не в вашем коде модели. Дело в двоичной совместимости GPU‑пакетов. Ниже — краткое объяснение того, как проявляется сбой, почему он возникает и как быстро вернуть систему в чистое состояние.
Воспроизведение сбоя
Окружение было обновлено до сборки PyTorch под CUDA 11.8 с использованием официального индекса колёс. Команда установки выглядела так:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
После этого перестал работать даже базовый импорт в Transformers:
from transformers import pipeline
Импорт завершался ошибкой времени выполнения. Ключевая строка говорит обо всём:
RuntimeError: Обнаружено, что PyTorch и torchvision скомпилированы с разными основными версиями CUDA. У PyTorch CUDA Version=11.8, а у torchvision CUDA Version=12.1. Переустановите torchvision, соответствующий вашей установке PyTorch.
Что именно ломается и почему
Сбой возникает во время цепочки импортов, которая начинается с конвейера Transformers. Под капотом путь импорта доходит до утилит работы с изображениями, зависящих от torchvision. В этот момент torchvision проверяет совместимость CUDA и отказывается загружаться, если его мажорная версия CUDA отличается от версии в PyTorch. В данном случае PyTorch был собран для CUDA 11.8, а torchvision — для CUDA 12.1, что является жёсткой несовместимостью и приводит к падению импорта ещё до выполнения какого‑либо кода модели.
Исправление: согласуйте torchvision и torchaudio со сборкой PyTorch под CUDA
Решение — установить версии torchvision и torchaudio, которые соответствуют установленной у вас сборке PyTorch с CUDA. Сначала удалите несовместимые пакеты:
pip uninstall -y torchvision torchaudio
Затем поставьте подходящие сборки под CUDA 11.8:
pip install torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118
Если не уверены, какая сборка PyTorch установлена, проверьте напрямую:
python -c "import torch; print(torch.__version__)"
И после переустановки убедитесь, что вся тройка согласована:
python -c "import torch, torchvision, torchaudio; print(torch.__version__, torchvision.__version__, torchaudio.__version__)"
Если удобнее быстрый Python‑чек с явными именами, следующий вариант делает то же самое и не меняет поведение:
import torch as tc
import torchvision as tv
import torchaudio as ta
v_tc = tc.__version__
v_tv = tv.__version__
v_ta = ta.__version__
print(v_tc, v_tv, v_ta)
Когда версии совпадают, импорт снова проходит. Например:
from transformers import pipeline as hf_pipe
Почему это важно
GPU‑ускоряемый Python‑стек сочетает высокоуровневые пакеты с скомпилированными расширениями под CUDA. Несовпадение мажорной версии CUDA между PyTorch и torchvision уже достаточно, чтобы сломать импорт в точке, далёкой от вашего прикладного кода. Обращайте внимание, из какого индекса колёс вы устанавливаете пакеты, и следите, чтобы все связанные библиотеки были собраны под одну и ту же версию CUDA — это поможет избежать часов путаницы и падений импортов.
Подытожим
Если простой импорт из Transformers перестал работать сразу после апгрейда PyTorch с поддержкой CUDA, внимательно прочитайте текст ошибки и выровняйте экосистему. Переустановите torchvision и torchaudio под ту же CUDA‑сборку, что и PyTorch, одним взглядом проверьте версии и повторите импорт. Держите torch, torchvision и torchaudio в одном строю — с одинаковой целевой версией CUDA и из одного источника колёс — и вы быстрее вернётесь к стабильной среде, готовой к работе на GPU.
Статья основана на вопросе со StackOverflow от meysam и ответе Raka Surya Kusuma.