Я пытался и пытался создать отладочную сборку для последней версии Tensorflow, используя официальные образы докера (latest-cuda-devel-py3 -> r1.12.0), но, похоже, ничего не работает. Кто-то недавно создал успешную отладочную сборку для Tensorflow (> = r1.11.0) и может поделиться своим подходом?
Это то, что я пробовал до сих пор.
Я в основном пытался следовать инструкциям на https://www.tensorflow.org/install/source,, но пытался изменить их для создания отладочной сборки. Ничто из того, что я пробовал, не привело к успешной сборке.
Хост-система - это компьютер Linux x86-64 с большим количеством оперативной памяти (например, 512 ГБ ОЗУ -> DGX-1). Версия CUDA в Docker-Image - CUDA-9.0. Последняя "последняя" версия Tensorflow, которая находится внутри образа док-станции: r1.12.0
Для работы cuda-build мне нужно было использовать "nvidia-docker", в противном случае я получаю ошибку компоновщика с "libcuda.so.1".
Я начал так:
nvidia-docker pull tensorflow/tensorflow:latest-devel-gpu-py3
nvidia-docker run --runtime=nvidia -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
tensorflow/tensorflow:latest-devel-gpu-py3 bash
Затем я попытался настроить проект, используя
cd /tensorflow
./configure
Я пробовал разные конфиги. Я пытался сохранить все значения по умолчанию. Я попытался включить только те части, которые мне нужны. Я пытался не работает ./configure вообще. Я указал на мою собственную установку cuda-9.0 и tennsrt. Но не работает ./configure вообще (в образе докера), кажется, дает лучшие результаты (например, я могу делать оптимизированные сборки успешно с наименьшими усилиями).
Если я собираю его, используя точные официальные инструкции по сборке, т. Е. Создавая оптимизированную / не отладочную сборку, все работает как положено. Таким образом, запуск следующего выглядит успешным.
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
То же самое, если я запускаю следующее, которое включает в себя информацию отладки, но не отключает оптимизацию (например, я не могу использовать это в целях отладки).
bazel build --config cuda --strip=never -c opt --copt="-ggdb" //tensorflow/tools/pip_package:build_pip_package
Но все, что отключает оптимизацию, похоже, не работает. Если я запускаю следующее (с или без флага --strip = never)
bazel build --config cuda --strip=never -c dbg
//tensorflow/tools/pip_package:build_pip_package
Я получаю следующую ошибку:
ИНФОРМАЦИЯ: из компиляции
tensorflow / вно / рамки / ядра / zero_initializer_op_gpu.cu.cc:
external / com_google_absl / absl / strings / string_view.h (496): ошибка:
Возвращение функции constexpr непостоянно
Что можно решить, определив -DNDEBUG (см. Ошибка nvcc: string_view.h: возврат функции constexpr не является константным ).
Но если я выполню следующее:
bazel build --config cuda --strip=never -c dbg --copt="-DNDEBUG" //tensorflow/tools/pip_package:build_pip_package
Я получаю следующие ошибки компоновки на последнем этапе сборки:
ОШИБКА:
/ Tensorflow / Python / Сложение: 3865: 1:
Связывание правила "//tensorflow/python:_pywrap_tensorflow_internal.so"
не удалось (выход 1)
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o: в
функция _init': (.init+0x7): relocation truncated to fit:
R_X86_64_REX_GOTPCRELX against undefined symbol
gmon_start '
/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o: в функции
deregister_tm_clones': crtstuff.c:(.text+0x3): relocation truncated
to fit: R_X86_64_PC32 against
.tm_clone_table»
crtstuff.c :(. text + 0xa): перемещение сокращено, чтобы соответствовать: R_X86_64_PC32
против символа __TMC_END__' defined in .nvFatBinSegment section in
bazel-out/k8-dbg/bin/tensorflow/python/_pywrap_tensorflow_internal.so
crtstuff.c:(.text+0x1e): relocation truncated to fit:
R_X86_64_REX_GOTPCRELX against undefined symbol
_ITM_deregisterTMCloneTable '
/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o: в функции
register_tm_clones': crtstuff.c:(.text+0x43): relocation truncated to
fit: R_X86_64_PC32 against
.tm_clone_table 'crtstuff.c :(. Text + 0x4a):
перемещение усечено до соответствия: R_X86_64_PC32 относительно символа
__TMC_END__' defined in .nvFatBinSegment section in
bazel-out/k8-dbg/bin/tensorflow/python/_pywrap_tensorflow_internal.so
crtstuff.c:(.text+0x6b): relocation truncated to fit:
R_X86_64_REX_GOTPCRELX against undefined symbol
_ITM_registerTMCloneTable»
/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o: в функции
__do_global_dtors_aux': crtstuff.c:(.text+0x92): relocation truncated
to fit: R_X86_64_PC32 against
.bss 'crtstuff.c :(. Text + 0x9c):
перемещение усечено до соответствия: R_X86_64_GOTPCREL против символа
__cxa_finalize@@GLIBC_2.2.5' defined in .text section in
/lib/x86_64-linux-gnu/libc.so.6 crtstuff.c:(.text+0xaa): relocation
truncated to fit: R_X86_64_PC32 against symbol
__dso_handle 'определено
в разделе .data.rel.local в
/usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o crtstuff.c :(. text + 0xbb):
дополнительные переполнения перемещения исключены из вывода
Базэл выход / K8-DBG / бен / tensorflow / питон / _pywrap_tensorflow_internal.so:
Относительное смещение с ПК в записи GOT PLT для
`_ZNK5Eigen10TensorBaseINS_9TensorMapINS_6TensorIKjLi1ELi1EiEELi16ENS_11MakePointerEEELi0EE9unaryExprINS_8internal11scalar_leftIjjN10tensorflow7functor14right_shift_opIjEEEEEEKNS_18TensorCwiseUnaryOpIT_KS6_EERKSH_»
collect2: error: ld вернул 1 состояние выхода Цель
// tenorflow / tools / pip_package: сборка build_pip_package не смогла собрать
Я надеялся, что смогу решить это, выполнив монолитную сборку. Поэтому я попробовал это, и получил по существу ту же ошибку.
bazel build --config cuda -c dbg --config=monolithic --copt="-DNDEBUG" //tensorflow/tools/pip_package:build_pip_package
Я также попробовал подходы из TensorFlow не строит с режимом отладки и несколькими другими вариантами, которые я нашел путем интенсивного поиска в Google. У меня заканчиваются варианты.
Я бы взял любую версию Tensorflow начиная с 1.11, включая (работающие) ночные сборки. Он просто должен работать с CUDA 9 в Linux x86, включать символы отладки и отключенные оптимизации.
Большое спасибо заранее.