Не удалось синхронизировать GPU для автоподборки инструкций свертки при использовании TensorFlow

Вопрос или проблема

Я пытаюсь реализовать этот репозиторий.
Я использую набор данных Kvasir-SEG.
Ошибка возникает на строке model.fit (81).

Эта ссылка близка к моей проблеме, но ни один из ответов не сработал. Поэтому я включил больше логов ошибок, чтобы помочь людям предоставить мне ответ.

При запуске python3 run.py он иногда выполняется без проблем, но в большинстве случаев я получаю следующую ошибку:

Эпоха 1/200
ПРЕДУПРЕЖДЕНИЕ: Все сообщения журнала, записанные до вызова absl::InitializeLog(), записываются в STDERR
I0000 00:00:1726636494.249767   16271 service.cc:146] Служба XLA 0x7f1f90001ce0 инициализирована для платформы CUDA (это не гарантирует, что XLA будет использоваться). Устройства:
I0000 00:00:1726636494.249802   16271 service.cc:154]   Устройство StreamExecutor (0): NVIDIA GeForce RTX 3070 Laptop GPU, Возможности вычислений 8.6
2024-09-18 10:44:54.852933: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:268] отключение воспроизведения краха MLIR, установите переменную окружения `MLIR_CRASH_REPRODUCER_DIRECTORY`, чтобы включить ее.
2024-09-18 10:44:56.370033: I external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:531] Загружена версия cuDNN 8907
2024-09-18 10:44:59.966977: E external/local_xla/xla/service/gpu/buffer_comparator.cc:153] Разница на 648122: 570.72, ожидалось 698.733
2024-09-18 10:44:59.967805: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:697] Несоответствие результатов между различными алгоритмами свертки. Это, вероятно, ошибка/неожиданная потеря точности в cudnn.
(f32[4,256,32,32]{3,2,1,0}, u8[0]{0}) custom-call(f32[4,256,32,32]{3,2,1,0}, f32[256,256,3,3]{3,2,1,0}, f32[256]{0}), окно={размер=3x3 pad=1_1x1_1}, dim_labels=bf01_oi01->bf01, custom_call_target="__cudnn$convBiasActivationForward", backend_config={"operation_queue_id":"0","wait_on_operation_queues":[],"cudnn_conv_backend_config":{"conv_result_scale":1,"activation_mode":"kNone","side_input_scale":0,"leakyrelu_alpha":0},"force_earliest_schedule":false} for eng26{k2=0,k13=2,k14=3,k18=0,k22=0,k23=0} vs eng11{k2=0,k3=0}
2024-09-18 10:44:59.967826: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:312] Устройство: NVIDIA GeForce RTX 3070 Laptop GPU
2024-09-18 10:44:59.967832: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:313] Платформа: Возможности вычислений 8.6
2024-09-18 10:44:59.967837: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:314] Драйвер: 12060 (INVALID_ARGUMENT: ожидается %d.%d, %d.%d.%d или %d.%d.%d.%d форма для версии драйвера; получено "1")
2024-09-18 10:44:59.967842: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:315] Время выполнения: <неопределено>
2024-09-18 10:44:59.967850: E external/local_xla/xla/service/gpu/conv_algorithm_picker.cc:320] версия cudnn: 8.9.7
2024-09-18 10:45:00.530038: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:1857] не удалось синхронизировать событие остановки: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти
E0000 00:00:1726636500.530095   16271 gpu_timer.cc:156] ВНУТРИШНЕЕ: Не удалось синхронизировать поток CUDA: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти
E0000 00:00:1726636500.530124   16271 gpu_timer.cc:162] ВНУТРИШНЕЕ: Ошибка уничтожения события CUDA: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти
E0000 00:00:1726636500.530136   16271 gpu_timer.cc:168] ВНУТРИШНЕЕ: Ошибка уничтожения события CUDA: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти
2024-09-18 10:45:00.530143: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:1652] ошибка освобождения хост-памяти по адресу 0x205200200: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти
2024-09-18 10:45:00.569431: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:1886] не удалось синхронизироваться в контексте CUDA: CUDA_ERROR_ILLEGAL_ADDRESS: обнаружен незаконный доступ к памяти ::
Не удалось определить лучший алгоритм свертки cudnn для:
%cudnn-conv-bias-activation.169 = (f32[4,64,256,256]{3,2,1,0}, u8[0]{0}) custom-call(f32[4,16,256,256]{3,2,1,0} %maximum.63, f32[64,16,3,3]{3,2,1,0} %transpose.577, f32[64]{0} %arg189.190), окно={размер=3x3 pad=1_1x1_1}, dim_labels=bf01_oi01->bf01, custom_call_target="__cudnn$convBiasActivationForward", metadata={op_type="Conv2D" op_name="functional_1/conv2d_29_1/convolution" source_file="/home/suhas/ResUNetPlusPlus/.venv/lib/python3.10/site-packages/tensorflow/python/framework/ops.py" source_line=1177}, backend_config={"operation_queue_id":"0","wait_on_operation_queues":[],"cudnn_conv_backend_config":{"conv_result_scale":1,"activation_mode":"kNone","side_input_scale":0,"leakyrelu_alpha":0},"force_earliest_schedule":false}

Исходная ошибка: ВНУТРИШНЕЕ: Не удалось синхронизировать GPU для автоматической настройки инструкции свертки

Чтобы игнорировать эту ошибку и попытаться использовать алгоритм обработки по умолчанию (который может иметь не оптимальную производительность), используйте XLA_FLAGS=--xla_gpu_strict_conv_algorithm_picker=false. Пожалуйста, также сообщите об ошибке, чтобы выяснить коренную причину сбоя автоматической настройки.
         [[{{node StatefulPartitionedCall}}]] [Op:__inference_one_step_on_iterator_45815]
2024-09-18 10:45:00.913684: W tensorflow/core/kernels/data/generator_dataset_op.cc:108] Произошла ошибка при завершении итератора GeneratorDataset: FAILED_PRECONDITION: Состояние интерпретатора Python не инициализировано. Процесс может быть завершен.
         [[{{node PyFunc}}]]

nvidia-smi для моей ноутбучной GPU 3070:

Пт, 20 сен 2024 10:15:02
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.35.03              Версия драйвера: 561.09         Версия CUDA: 12.6     |
|-----------------------------------------+------------------------+----------------------+
| Название GPU                  Постоянство-M | Bus-Id          Disp.A | Нестабильная некорр. ECC |
| Вентилятор  Температура  Производительность   Потребление/Макс |          Использование памяти | Использование GPU  Режим вычислений. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3070 ...    Включен  |   00000000:01:00.0 Отключен |                  N/A |
| N/A   64C    P0             33W /  130W |       4MiB /   8192MiB |      0%      По умолчанию |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Процессы:                                                                              |
|  GPU   GI   CI        PID   Тип   Имя процесса                              Использование памяти GPU |
|        ID   ID                                                               Использование      |
|=========================================================================================|
|  Запускающихся процессов не найдено                                                    |
+-----------------------------------------------------------------------------------------+

Я пытался перезагрузить свой ПК несколько раз, что позволяет мне запускать этот файл иногда.

Также пробовал rm -rf ~/.nv/, чтобы очистить кэш.

Моя конфигурация:
CUDA Toolkit 12.3
CuDNN 8.9.7
Python 3.10.12
Tensorflow 2.17.0
Работа в WSL2
Установил Tensorflow с помощью python3 -m pip install tensorflow[and-cuda]

Ответ или решение

Фраза "Не удалось синхронизировать GPU для автоподбора инструкции свертки" в TensorFlow может означать несколько проблем, связанных с аппаратным обеспечением, конфигурацией окружения или программным обеспечением. Давайте рассмотрим шаги, которые могут помочь решить проблему.

Шаги по решению проблемы:

  1. Проверка совместимости версий:
    Убедитесь, что версии вашего драйвера NVIDIA, CUDA и cuDNN совместимы с версией TensorFlow. На момент написания, следующая таблица совместимости может быть полезной:

    • TensorFlow 2.17.0:
      • Драйвер NVIDIA: 525.60 и выше
      • CUDA: 11.8 или 12.0 (поскольку у вас установлена версия 12.6, это может быть причиной)
      • cuDNN: 8.5 или выше
  2. Обновление драйверов и библиотек:
    Попробуйте обновить драйверы NVIDIA до самой последней стабильной версии, а также убедитесь, что библиотека CUDA и cuDNN соответствуют требованиям TensorFlow. Возможно, вам стоит рассмотреть возможность установки CUDA 11.8 и соответствующей версии cuDNN.

  3. Отключение XLA:
    Включение или отключение XLA (Accelerated Linear Algebra) может помочь. Попробуйте запустить скрипт с установленным флагом:

    XLA_FLAGS=--xla_gpu_strict_conv_algorithm_picker=false python3 run.py

    Это отключит строгую выборку алгоритмов свертки, что может помочь избежать ошибок. Однако это может привести к снижению производительности.

  4. Целостность CUDA и cuDNN:
    Убедитесь, что CUDA и cuDNN установлены правильно. Иногда банковская система может быть повреждена, и полная переустановка CUDA и cuDNN может помочь. Удалите существующие версии и выполните чистую установку.

  5. Переменные окружения:
    Проверьте, правильно ли установлены переменные окружения:

    export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
    export PATH=/usr/local/cuda/bin:$PATH

    Убедитесь, что они ссылаются на нужные версии CUDA и cuDNN.

  6. Настройки WSL2:
    Обратите внимание, что использование WSL2 может повлиять на производительность. Если возможно, попробуйте запустить код на нативной ОС Linux или Windows и проверьте, сохраняется ли ошибка.

  7. Проверьте использование GPU:
    Используйте nvidia-smi, чтобы убедиться, что ваш GPU не перегружен другими процессами. Если GPU занят, этоможет вызвать проблемы с синхронизацией.

  8. Тестовое приложение:
    Попробуйте запустить простой тестовый пример TensorFlow, чтобы изолировать проблему. Это позволит определить, проблема ли в конкретной реализации модели или более глобальная проблема на уровне окружения.

  9. Проблемы с памятью:
    Ошибка CUDA_ERROR_ILLEGAL_ADDRESS может возникать из-за неправильного доступа к памяти. Убедитесь, что ваша модель и данные (входные изображения, размеры и т.д.) находятся в допустимых пределах. Также проверьте, нет ли утечек памяти.

  10. Обратитесь в поддержку сообщества:
    Если ни одно из вышеуказанных решений не помогло, рассмотрите возможность обращения в сообщество TensorFlow или на GitHub репозиторий проекта, который вы используете, с предоставлением всех журналов и информации о вашей системе.

Таким образом, следуя перечисленным шагам, вы сможете диагностировать и, надеюсь, устранить проблему с синхронизацией GPU.

Оцените материал
Добавить комментарий

Капча загружается...