Вопрос или проблема
Я пытаюсь реализовать этот репозиторий.
Я использую набор данных 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 может означать несколько проблем, связанных с аппаратным обеспечением, конфигурацией окружения или программным обеспечением. Давайте рассмотрим шаги, которые могут помочь решить проблему.
Шаги по решению проблемы:
-
Проверка совместимости версий:
Убедитесь, что версии вашего драйвера NVIDIA, CUDA и cuDNN совместимы с версией TensorFlow. На момент написания, следующая таблица совместимости может быть полезной:- TensorFlow 2.17.0:
- Драйвер NVIDIA: 525.60 и выше
- CUDA: 11.8 или 12.0 (поскольку у вас установлена версия 12.6, это может быть причиной)
- cuDNN: 8.5 или выше
- TensorFlow 2.17.0:
-
Обновление драйверов и библиотек:
Попробуйте обновить драйверы NVIDIA до самой последней стабильной версии, а также убедитесь, что библиотека CUDA и cuDNN соответствуют требованиям TensorFlow. Возможно, вам стоит рассмотреть возможность установки CUDA 11.8 и соответствующей версии cuDNN. -
Отключение XLA:
Включение или отключение XLA (Accelerated Linear Algebra) может помочь. Попробуйте запустить скрипт с установленным флагом:XLA_FLAGS=--xla_gpu_strict_conv_algorithm_picker=false python3 run.py
Это отключит строгую выборку алгоритмов свертки, что может помочь избежать ошибок. Однако это может привести к снижению производительности.
-
Целостность CUDA и cuDNN:
Убедитесь, что CUDA и cuDNN установлены правильно. Иногда банковская система может быть повреждена, и полная переустановка CUDA и cuDNN может помочь. Удалите существующие версии и выполните чистую установку. -
Переменные окружения:
Проверьте, правильно ли установлены переменные окружения:export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda/bin:$PATH
Убедитесь, что они ссылаются на нужные версии CUDA и cuDNN.
-
Настройки WSL2:
Обратите внимание, что использование WSL2 может повлиять на производительность. Если возможно, попробуйте запустить код на нативной ОС Linux или Windows и проверьте, сохраняется ли ошибка. -
Проверьте использование GPU:
Используйтеnvidia-smi
, чтобы убедиться, что ваш GPU не перегружен другими процессами. Если GPU занят, этоможет вызвать проблемы с синхронизацией. -
Тестовое приложение:
Попробуйте запустить простой тестовый пример TensorFlow, чтобы изолировать проблему. Это позволит определить, проблема ли в конкретной реализации модели или более глобальная проблема на уровне окружения. -
Проблемы с памятью:
ОшибкаCUDA_ERROR_ILLEGAL_ADDRESS
может возникать из-за неправильного доступа к памяти. Убедитесь, что ваша модель и данные (входные изображения, размеры и т.д.) находятся в допустимых пределах. Также проверьте, нет ли утечек памяти. - Обратитесь в поддержку сообщества:
Если ни одно из вышеуказанных решений не помогло, рассмотрите возможность обращения в сообщество TensorFlow или на GitHub репозиторий проекта, который вы используете, с предоставлением всех журналов и информации о вашей системе.
Таким образом, следуя перечисленным шагам, вы сможете диагностировать и, надеюсь, устранить проблему с синхронизацией GPU.