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.