Tensorflow 2.2 запускается долго

Я пытаюсь запустить тензорный поток в Windows 10 со следующей настройкой:

  • Anaconda3 с

  • Python 3.8

  • тензорный поток 2.2.0

  • Графический процессор: RTX3090

  • cuda_10.1.243

  • cudnn-v7.6.5.32 для windows10-x64

Выполнение следующего кода занимает от 5 до 10 минут для печати вывода.

import tensorflow as tf
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Я сразу получаю следующий результат, но затем он зависает на несколько минут, прежде чем продолжить.

1-17 04:03:00.039069: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-11-17 04:03:00.042677: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2020-11-17 04:03:00.045041: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2020-11-17 04:03:00.045775: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2020-11-17 04:03:00.049246: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2020-11-17 04:03:00.050633: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2020-11-17 04:03:00.056731: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2020-11-17 04:03:00.056821: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1703] Adding visible gpu devices: 0

Запуск кода smae на colab занимает всего секунду.

Какие-либо предложения? Спасибо


person Mfif7    schedule 17.11.2020    source источник


Ответы (3)


RTX3090 имеет архитектуру Amper, для которой требуется Cuda 11+. Ознакомьтесь с этим руководством: https://medium.com/@dun.chwong/the-simple-guide-deep-learning-with-rtx-3090-cuda-cudnn-tensorflow-keras-pytorch-e88a2a8249bc

person Mux    schedule 18.11.2020

Я не понимаю, почему ответ Мукса отвергается, поскольку он прав. Nvidia Ampere не может работать оптимально на версиях CUDA ‹11.1, поскольку потоковый мультипроцессор Ampere (SM_86) поддерживается только на CUDA 11.1, см. https://forums.developer.nvidia.com/t/can-rtx-3080-support-cuda-10-1/155849/2

Однако прямого решения вашей проблемы без обновления CUDA можно достичь, увеличив размер кэша JIT по умолчанию с помощью «export CUDA_CACHE_MAXSIZE = 2147483648», установив для этой переменной среды значение 2147483648 (4 ГБ). Вам все равно придется долго ждать при первом запуске, см. https://www.tensorflow.org/install/gpu#hardware_requirements

person Dan Pavlov    schedule 23.12.2020

Причина в том, как говорит Мукс.

Фон:

См. https://developer.nvidia.com/blog/cuda-pro-tip-understand-fat-binaries-jit-caching/ для полного объяснения.

Первый этап компилирует исходный код устройства в виртуальную сборку PTX, а второй этап компилирует PTX в двоичный код для целевой архитектуры. Драйвер CUDA может выполнять второй этап компиляции во время выполнения, компилируя виртуальную сборку PTX «точно вовремя» для ее запуска.

Таким образом, для пакета программного обеспечения старой версии с новым оборудованием, то есть двоичный код для целевой архитектуры не компилируется предварительно, он выполняет откат к виртуальной сборке PTX и запускает JIT-компиляцию времени выполнения для новой целевой архитектуры . Это означает, что ядра CUDNN и CUBLAS, а также встроенные ядра тензорного потока компилируются JIT при запуске, что в вашем случае требует времени запуска loooooog.

Вот почему Дэн Павлов предлагает включить JIT-кеширование, то есть JIT-компиляция выполняется только один раз, а не JIT-компиляция время от времени при запуске.

person Cloud    schedule 11.01.2021