Не удается выполнить компиляцию TensorFlow 2.4.1 (CPP) в Windows

#c #windows #tensorflow #bazel #cudnn

#c #Windows #tensorflow #базель #cudnn

Вопрос:

Я пытаюсь создать TensorFlow 2.4.1 C API в Windows 10, и у меня возникают проблемы.

Что я сделал до сих пор:

  1. Загрузите исходный код TensorFlow из официального репозитория https://github.com/tensorflow/tensorflow и переключился на официальный тег версии v2.4.1
  2. Загрузите и установите Python 3.6.8 x64
  3. Создан виртуальный env с помощью python 3.6.8
  4. Создан и установлен requirements.txt основываясь на приведенных здесь данных
  5. Загрузите и установите CUDA 11.0 и cuDNN v8.0.4.30 (для CUDA 11)
  6. Скачал и установил msys2 и установил его местоположение в PATH
  7. Загрузите и установите bazel (3.1.0), поскольку это самая последняя запись здесь

Затем я запускаю процесс настройки с python configure.py помощью I configure for C build (tensorflow_cc) с поддержкой GPU Здесь у меня возникла некоторая проблема, которая, по-видимому, во время процесса настройки обратные косые черты в стиле Windows принимаются в качестве допустимых входных данных, но затем, когда вы фактически запускаете компиляцию bazel, они вызывают проблемы, поэтому я повторно запускаю свою конфигурацию, чтобы предоставитьобратная косая черта в стиле Linux. Таким образом, CUDA и cuDNN были успешно обнаружены и началась компиляция.

Полное содержимое моего .tf_configure.bazelrc файла приведено ниже

 build --action_env PYTHON_BIN_PATH="D:/code/sdk/tensorflow/venv/Scripts/python.exe"
build --action_env PYTHON_LIB_PATH="D:/code/sdk/tensorflow/venv/lib/site-packages"
build --python_path="D:/code/sdk/tensorflow/venv/Scripts/python.exe"
build --config=xla
build --action_env TF_CUDA_VERSION="11.0"
build --action_env TF_CUDNN_VERSION="8.0.4"
build --action_env TF_CUDA_PATHS="C:/Program Files/NVIDIA GPU Computing 
Toolkit/CUDA/v11.0,D:/code/sdk/cudnn-11.0-windows-x64-v8.0.4.30/cuda"
build --action_env CUDA_TOOLKIT_PATH="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0"
build --action_env TF_CUDA_COMPUTE_CAPABILITIES="5.0"
build --config=cuda
build:opt --copt=/arch:AVX
build:opt --host_copt=/arch:AVX
build:opt --define with_default_optimizations=true
build --define=override_eigen_strong_inline=true
test --flaky_test_attempts=3
test --test_size_filters=small,medium
test:v1 --test_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-oss_serial
test:v1 --build_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu
test:v2 --test_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-oss_serial,- 
v1only
test:v2 --build_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-v1only
build --action_env TF_CONFIGURE_IOS="0"
 

Однако примерно через 20 минут компиляции произошел сбой со следующей ошибкой:

 ERROR: D:/code/sdk/tensorflow/tensorflow/stream_executor/cuda/BUILD:366:1: C   compilation of rule '//tensorflow/stream_executor/cuda:cudnn_stub' failed (Exit 2): python.exe failed: error executing command
 

И причина, по которой команда не выполняется, заключается в

 bazel-out/x64_windows-opt/bin/external/local_config_cuda/cuda/_virtual_includes/cudnn_headerthird_party/gpus/cudnn/cudnn.h(61): fatal error C1083: Cannot open include file: 'cudnn_ops_infer.h': No such file or directory
 

И здесь мне интересно, что происходит? Я уже указал путь к cuDNN, но, по-видимому, bazel на самом деле не знает об этом, хотя ранее он признал, что указанный мной путь правильный. Мне не хватает какой-либо переменной среды, которую мне нужно установить, чтобы указать, где находится cuDNN?
Кто-нибудь создавал TF C v2.4.1 в Windows? В Интернете так мало информации, даже на официальной странице ничего не говорится о сборках Windows. Это только Linux и Mac…

Ответ №1:

Поскольку у меня заканчивались идеи, я решил взглянуть на сценарии сборки Bazel для CUDA

В <REPO>tensorflowthird_partygpuscuda_configure.bzl я увидел, что путь cuDNN считывается из переменной env CUDNN_INSTALL_PATH , и если его нет, он будет по умолчанию /usr/local/include равен?

В любом случае, попробовал set CUDNN_INSTALL_PATH=D:/code/sdk/cudnn-11.0-windows-x64-v8.0.4.30/cuda , и он скомпилировался!

(Совет профессионала: установите переменную env без каких-либо кавычек и с косыми чертами в стиле Linux …)

Комментарии:

1. Пошаговая инструкция о том, как вы скомпилировали tf 2.4.1 для C , окажет большую помощь. Лучше, если вы можете указать шаги.