現行Tensorflowは2.6.2がリリースされている.

crYOLOを利用するには現状(2021.12) Tensorflow-1.15 が必要みたい. (crYOLO-1.8.0)
PyPIから得られる Tensorflow-1.15 は cuda-10.0 には対応しているが、cuda-11.0 には残念ながら未対応.
RTX 30x0、A4000、A5000らの Ampere 系は cuda-11.x が必要

幸い nvidia 様から cuda11 に対応した Tensorflow-1.15 がリリースされているが、こちらはubuntu-20.04 とかの GLIBC-2.29 以上向けで
RHEL7系なCentOS7(GLIBC-2.17)やRHEL8系な CentOS8、Rcoky8、AlmaLinux8らの GLIBC-2.28 には使えない

crYOLO様で回避策としてhttps://cryolo.readthedocs.io/en/latest/troubleshooting.html#cryolo-crashed-with-glibc-errorsをご提示頂いているが、、
どうもうまく動かない...

ここでは RHEL7/8系向けに cuda11 対応のtensorflow-1.15を作ってみた.
*CentOS7.9で作ってます

下拵え cuda/cudnn

cudaは 11.3.1 cudnnは 8.2.1.32 を入れます

cuda : cuda-repo-rhel7-11-3-local-11.3.1_465.19.01-1.x86_64.rpm
cudnn: libcudnn8-8.2.1.32-1.cuda11.3.x86_64.rpm
       libcudnn8-devel-8.2.1.32-1.cuda11.3.x86_64.rpm

下拵え bazel

tensorflowのコンパイルにはbazelが必要. 最新版は 4.2.1 である.

目的の Tensorflow-1.15 の時点では https://github.com/tensorflow/tensorflow/issues/30556 を参考に
どうも bazel-0.24.1 が必要みたい.

bazel-0.24.1は、下記URLから「bazel-0.24.1-installer-linux-x86_64.sh」をダウンロードできるようで、それを取得します
https://github.com/bazelbuild/bazel/releases/tag/0.24.1

取得した「bazel-0.24.1-installer-linux-x86_64.sh」を実行するとbazelが得られ /usr/local/bin にインストールされます

[root@s ~]# cd /apps/src/
[root@s src]# https://github.com/bazelbuild/bazel/releases/download/0.24.1/bazel-0.24.1-installer-linux-x86_64.sh
[root@s src]# bash ./bazel-0.24.1-installer-linux-x86_64.sh
Bazel installer
---------------
 
Bazel is bundled with software licensed under the GPLv2 with Classpath exception.
You can find the sources next to the installer on our release page:
   https://github.com/bazelbuild/bazel/releases
 
# Release 0.24.1 (2019-04-02)
 :
 :
Bazel is now installed!
 
Make sure you have "/usr/local/bin" in your path. You can also activate bash
completion by adding the following line to your ~/.bashrc:
  source /usr/local/lib/bazel/bin/bazel-complete.bash
 
See http://bazel.build/docs/getting-started.html to start a new project!
[root@s src]#
 
[root@s src]# ls -l /usr/local/bin/bazel
lrwxrwxrwx 1 root root 30 11月 30 01:29 /usr/local/bin/bazel -> /usr/local/lib/bazel/bin/bazel
[root@s src]#
[root@s src]# bazel version
Build label: 0.24.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Tue Apr 2 16:29:26 2019 (1554222566)
Build timestamp: 1554222566
Build timestamp as int: 1554222566
[root@s src]#

下拵え GIT

Tensorflowのコンパイル中に git を使ってファイルを外部から取得している様子. っでその際に git は古くてはダメな様子で最新版に変更します.

yum remove git                       <--- 既存のgitを削除
 
git clone https://github.com/git/git
cd git
git checkout v2.9.5
make prefix=/usr/local all
make prefix=/usr/local install
 
hash -r
git --version

CUDA11.X が有効な Tensorflow-1.15 を作る

まずは tensorflow のソースを取得するのだが、ubuntu20.04 向けの Tensorflow-1.15 をご提供された nvidia様 のソースを取得します

gitの操作で「r1.15.5+nv21.03」に移ります 最新の「r1.15.5+nv21.11」だとエラーが発生する...
*1.15.5なら「r1.15.5+nv21.03」までコンパイルできました. それ以降はすべてダメ. RHEL系はここまでかもしれない

[root@s ~]# cd /apps/src
[root@s src]# git clone https://github.com/NVIDIA/tensorflow
[root@s src]# cd tensorflow
[root@s tensorflow]# git branch --all
* r1.15.5+nv21.11
  remotes/origin/HEAD -> origin/r1.15.5+nv21.11
  remotes/origin/r1.15
  remotes/origin/r1.15.2+nv20.06
  remotes/origin/r1.15.3+nv20.07
  remotes/origin/r1.15.3+nv20.08
  remotes/origin/r1.15.3+nv20.09
  remotes/origin/r1.15.4+nv20.10
  remotes/origin/r1.15.4+nv20.11
  remotes/origin/r1.15.4+nv20.12
  remotes/origin/r1.15.5+nv21.02
  remotes/origin/r1.15.5+nv21.03
  remotes/origin/r1.15.5+nv21.04
  remotes/origin/r1.15.5+nv21.05
  remotes/origin/r1.15.5+nv21.06
  remotes/origin/r1.15.5+nv21.07
  remotes/origin/r1.15.5+nv21.08
  remotes/origin/r1.15.5+nv21.09
  remotes/origin/r1.15.5+nv21.10
  remotes/origin/r1.15.5+nv21.11
[root@s tensorflow]# git checkout remotes/origin/r1.15.5+nv21.03
[root@s tensorflow]# git branch
* (HEAD detached at origin/r1.15.5+nv21.03)
  r1.15.5+nv21.11
[root@s tensorflow]#

次にコンパイル環境を用意します
crYOLO-1.8.0は python3.8 環境で動作しますので conda で python3.8 の環境を整備します
https://www.tensorflow.org/install/source?hl=ja

export PYENV_ROOT=/apps/pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init - --no-rehash)"
export PATH=$PYENV_ROOT/versions/anaconda3-5.3.1/bin/:$PATH
 
conda create -n py3.8 python=3.8
source activate py3.8
 
conda install 'numpy<1.19.0' astor
pip install keras_preprocessing --no-deps

このpython3.8環境に移って、GCCをOS提供のGCC-4.8.5からsclを使ってGCC-7に変更します

(py3.8) [root@s tensorflow]# bazel clean --expunge
(py3.8) [root@s tensorflow]# rm -rf ~/.cache/bazel
 
(py3.8) [root@s tensorflow]# source scl_source enable devtoolset-7
(py3.8) [root@s tensorflow]# gcc --version
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
(py3.8) [root@s tensorflow]#

tensorflowと同じ位置に「cudnn-frontend」を配置させます

(py3.8) [root@s tensorflow]# cd ..
(py3.8) [root@s src]# git clone https://github.com/NVIDIA/cudnn-frontend    <-- tensorflow と同じディレクトリ配置に「cudnn-frontend」を置く
(py3.8) [root@s src]# cd tensorflow                                         <-- tensordlow に戻る
 
(py3.8) [root@s tensorflow]#

tensorflowの「configure」を進める. ここでCUDAのみを「Y」とします

(py3.8) [root@s tensorflow]# ./configure                                           <-- いろいろオプションが聞かれますが、CUDAのみYで

あとは、「bazel build ..」でコンパイルなのですが、scl由来の devtoolset-7 を使ったのでincludeファイルらが読めるように調整を加えます
参照先http://fancyerii.github.io/2020/11/16/centos-build-tf-en/

diff --git a/third_party/gpus/crosstool/BUILD.tpl b/third_party/gpus/crosstool/BUILD.tpl
index 9fe46bb..4da6b21 100644
--- a/third_party/gpus/crosstool/BUILD.tpl
+++ b/third_party/gpus/crosstool/BUILD.tpl
@@ -57,7 +57,7 @@ cc_toolchain(
 cc_toolchain_config(
     name = "cc-compiler-local-config",
     cpu = "local",
-    builtin_include_directories = [%{cxx_builtin_include_directories}],
+    builtin_include_directories = [%{cxx_builtin_include_directories},"/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/include","/opt/rh/devtoolset-7/root/usr/include"],
     extra_no_canonical_prefixes_flags = [%{extra_no_canonical_prefixes_flags}],
     host_compiler_path = "%{host_compiler_path}",
     host_compiler_prefix = "%{host_compiler_prefix}",

この調整が終わったらbuildします

(py3.8) [root@s tensorflow]# bazel build --config=cuda --config=v1 --verbose_failures //tensorflow/tools/pip_package:build_pip_package
 コンパイルに3時間くらいかかります. お買い物に行けます.
 
(py3.8) [root@s tensorflow]# bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
 
(py3.8) [root@s tensorflow]# ls -l /tmp/tensorflow_pkg/
total 670800
-rw-r--r-- 1 root root 170418988 Dec  4 22:53 tensorflow-1.15.5+nv-cp38-cp38-linux_x86_64.whl
(py3.8) [root@s tensorflow]#

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-12-29 (水) 23:31:18 (23d)