xref: /aosp_15_r20/external/tensorflow/tools/tf_env_collect.sh (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1*b6fb3261SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*b6fb3261SAndroid Build Coastguard Worker# Copyright 2017 The TensorFlow Authors. All Rights Reserved.
3*b6fb3261SAndroid Build Coastguard Worker#
4*b6fb3261SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*b6fb3261SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*b6fb3261SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*b6fb3261SAndroid Build Coastguard Worker#
8*b6fb3261SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
9*b6fb3261SAndroid Build Coastguard Worker#
10*b6fb3261SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*b6fb3261SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*b6fb3261SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b6fb3261SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*b6fb3261SAndroid Build Coastguard Worker# limitations under the License.
15*b6fb3261SAndroid Build Coastguard Worker# ==============================================================================
16*b6fb3261SAndroid Build Coastguard Worker
17*b6fb3261SAndroid Build Coastguard Workerset -u  # Check for undefined variables
18*b6fb3261SAndroid Build Coastguard Worker
19*b6fb3261SAndroid Build Coastguard Workerdie() {
20*b6fb3261SAndroid Build Coastguard Worker  # Print a message and exit with code 1.
21*b6fb3261SAndroid Build Coastguard Worker  #
22*b6fb3261SAndroid Build Coastguard Worker  # Usage: die <error_message>
23*b6fb3261SAndroid Build Coastguard Worker  #   e.g., die "Something bad happened."
24*b6fb3261SAndroid Build Coastguard Worker
25*b6fb3261SAndroid Build Coastguard Worker  echo $@
26*b6fb3261SAndroid Build Coastguard Worker  exit 1
27*b6fb3261SAndroid Build Coastguard Worker}
28*b6fb3261SAndroid Build Coastguard Worker
29*b6fb3261SAndroid Build Coastguard Workerecho "Collecting system information..."
30*b6fb3261SAndroid Build Coastguard Worker
31*b6fb3261SAndroid Build Coastguard WorkerOUTPUT_FILE=tf_env.txt
32*b6fb3261SAndroid Build Coastguard Workerpython_bin_path=$(which python || which python3 || die "Cannot find Python binary")
33*b6fb3261SAndroid Build Coastguard Worker
34*b6fb3261SAndroid Build Coastguard Worker{
35*b6fb3261SAndroid Build Coastguard Workerecho
36*b6fb3261SAndroid Build Coastguard Workerecho '== check python ==================================================='
37*b6fb3261SAndroid Build Coastguard Worker} >> ${OUTPUT_FILE}
38*b6fb3261SAndroid Build Coastguard Worker
39*b6fb3261SAndroid Build Coastguard Workercat <<EOF > /tmp/check_python.py
40*b6fb3261SAndroid Build Coastguard Workerimport platform
41*b6fb3261SAndroid Build Coastguard Worker
42*b6fb3261SAndroid Build Coastguard Workerprint("""python version: %s
43*b6fb3261SAndroid Build Coastguard Workerpython branch: %s
44*b6fb3261SAndroid Build Coastguard Workerpython build version: %s
45*b6fb3261SAndroid Build Coastguard Workerpython compiler version: %s
46*b6fb3261SAndroid Build Coastguard Workerpython implementation: %s
47*b6fb3261SAndroid Build Coastguard Worker""" % (
48*b6fb3261SAndroid Build Coastguard Workerplatform.python_version(),
49*b6fb3261SAndroid Build Coastguard Workerplatform.python_branch(),
50*b6fb3261SAndroid Build Coastguard Workerplatform.python_build(),
51*b6fb3261SAndroid Build Coastguard Workerplatform.python_compiler(),
52*b6fb3261SAndroid Build Coastguard Workerplatform.python_implementation(),
53*b6fb3261SAndroid Build Coastguard Worker))
54*b6fb3261SAndroid Build Coastguard WorkerEOF
55*b6fb3261SAndroid Build Coastguard Worker${python_bin_path} /tmp/check_python.py 2>&1  >> ${OUTPUT_FILE}
56*b6fb3261SAndroid Build Coastguard Worker
57*b6fb3261SAndroid Build Coastguard Worker{
58*b6fb3261SAndroid Build Coastguard Workerecho
59*b6fb3261SAndroid Build Coastguard Workerecho '== check os platform ==============================================='
60*b6fb3261SAndroid Build Coastguard Worker} >> ${OUTPUT_FILE}
61*b6fb3261SAndroid Build Coastguard Worker
62*b6fb3261SAndroid Build Coastguard Workercat <<EOF > /tmp/check_os.py
63*b6fb3261SAndroid Build Coastguard Workerimport platform
64*b6fb3261SAndroid Build Coastguard Worker
65*b6fb3261SAndroid Build Coastguard Workerprint("""os: %s
66*b6fb3261SAndroid Build Coastguard Workeros kernel version: %s
67*b6fb3261SAndroid Build Coastguard Workeros release version: %s
68*b6fb3261SAndroid Build Coastguard Workeros platform: %s
69*b6fb3261SAndroid Build Coastguard Workerlinux distribution: %s
70*b6fb3261SAndroid Build Coastguard Workerlinux os distribution: %s
71*b6fb3261SAndroid Build Coastguard Workermac version: %s
72*b6fb3261SAndroid Build Coastguard Workeruname: %s
73*b6fb3261SAndroid Build Coastguard Workerarchitecture: %s
74*b6fb3261SAndroid Build Coastguard Workermachine: %s
75*b6fb3261SAndroid Build Coastguard Worker""" % (
76*b6fb3261SAndroid Build Coastguard Workerplatform.system(),
77*b6fb3261SAndroid Build Coastguard Workerplatform.version(),
78*b6fb3261SAndroid Build Coastguard Workerplatform.release(),
79*b6fb3261SAndroid Build Coastguard Workerplatform.platform(),
80*b6fb3261SAndroid Build Coastguard Workerplatform.linux_distribution(),
81*b6fb3261SAndroid Build Coastguard Workerplatform.dist(),
82*b6fb3261SAndroid Build Coastguard Workerplatform.mac_ver(),
83*b6fb3261SAndroid Build Coastguard Workerplatform.uname(),
84*b6fb3261SAndroid Build Coastguard Workerplatform.architecture(),
85*b6fb3261SAndroid Build Coastguard Workerplatform.machine(),
86*b6fb3261SAndroid Build Coastguard Worker))
87*b6fb3261SAndroid Build Coastguard WorkerEOF
88*b6fb3261SAndroid Build Coastguard Worker${python_bin_path} /tmp/check_os.py 2>&1  >> ${OUTPUT_FILE}
89*b6fb3261SAndroid Build Coastguard Worker
90*b6fb3261SAndroid Build Coastguard Worker{
91*b6fb3261SAndroid Build Coastguard Worker  echo
92*b6fb3261SAndroid Build Coastguard Worker  echo '== are we in docker ============================================='
93*b6fb3261SAndroid Build Coastguard Worker  num=`cat /proc/1/cgroup | grep docker | wc -l`;
94*b6fb3261SAndroid Build Coastguard Worker  if [ $num -ge 1 ]; then
95*b6fb3261SAndroid Build Coastguard Worker    echo "Yes"
96*b6fb3261SAndroid Build Coastguard Worker  else
97*b6fb3261SAndroid Build Coastguard Worker    echo "No"
98*b6fb3261SAndroid Build Coastguard Worker  fi
99*b6fb3261SAndroid Build Coastguard Worker
100*b6fb3261SAndroid Build Coastguard Worker  echo
101*b6fb3261SAndroid Build Coastguard Worker  echo '== compiler ====================================================='
102*b6fb3261SAndroid Build Coastguard Worker  c++ --version 2>&1
103*b6fb3261SAndroid Build Coastguard Worker
104*b6fb3261SAndroid Build Coastguard Worker  echo
105*b6fb3261SAndroid Build Coastguard Worker  echo '== check pips ==================================================='
106*b6fb3261SAndroid Build Coastguard Worker  pip list 2>&1 | grep "proto\|numpy\|tensorflow"
107*b6fb3261SAndroid Build Coastguard Worker
108*b6fb3261SAndroid Build Coastguard Worker
109*b6fb3261SAndroid Build Coastguard Worker  echo
110*b6fb3261SAndroid Build Coastguard Worker  echo '== check for virtualenv ========================================='
111*b6fb3261SAndroid Build Coastguard Worker  ${python_bin_path} -c "import sys;print(hasattr(sys, \"real_prefix\"))"
112*b6fb3261SAndroid Build Coastguard Worker
113*b6fb3261SAndroid Build Coastguard Worker  echo
114*b6fb3261SAndroid Build Coastguard Worker  echo '== tensorflow import ============================================'
115*b6fb3261SAndroid Build Coastguard Worker} >> ${OUTPUT_FILE}
116*b6fb3261SAndroid Build Coastguard Worker
117*b6fb3261SAndroid Build Coastguard Workercat <<EOF > /tmp/check_tf.py
118*b6fb3261SAndroid Build Coastguard Workerimport tensorflow as tf;
119*b6fb3261SAndroid Build Coastguard Workerprint("tf.version.VERSION = %s" % tf.version.VERSION)
120*b6fb3261SAndroid Build Coastguard Workerprint("tf.version.GIT_VERSION = %s" % tf.version.GIT_VERSION)
121*b6fb3261SAndroid Build Coastguard Workerprint("tf.version.COMPILER_VERSION = %s" % tf.version.COMPILER_VERSION)
122*b6fb3261SAndroid Build Coastguard Workerwith tf.Session() as sess:
123*b6fb3261SAndroid Build Coastguard Worker  print("Sanity check: %r" % sess.run(tf.constant([1,2,3])[:1]))
124*b6fb3261SAndroid Build Coastguard WorkerEOF
125*b6fb3261SAndroid Build Coastguard Worker${python_bin_path} /tmp/check_tf.py 2>&1  >> ${OUTPUT_FILE}
126*b6fb3261SAndroid Build Coastguard Worker
127*b6fb3261SAndroid Build Coastguard WorkerLD_DEBUG=libs ${python_bin_path} -c "import tensorflow"  2>>${OUTPUT_FILE} > /tmp/loadedlibs
128*b6fb3261SAndroid Build Coastguard Worker
129*b6fb3261SAndroid Build Coastguard Worker{
130*b6fb3261SAndroid Build Coastguard Worker  grep libcudnn.so /tmp/loadedlibs
131*b6fb3261SAndroid Build Coastguard Worker  echo
132*b6fb3261SAndroid Build Coastguard Worker  echo '== env =========================================================='
133*b6fb3261SAndroid Build Coastguard Worker  if [ -z ${LD_LIBRARY_PATH+x} ]; then
134*b6fb3261SAndroid Build Coastguard Worker    echo "LD_LIBRARY_PATH is unset";
135*b6fb3261SAndroid Build Coastguard Worker  else
136*b6fb3261SAndroid Build Coastguard Worker    echo LD_LIBRARY_PATH ${LD_LIBRARY_PATH} ;
137*b6fb3261SAndroid Build Coastguard Worker  fi
138*b6fb3261SAndroid Build Coastguard Worker  if [ -z ${DYLD_LIBRARY_PATH+x} ]; then
139*b6fb3261SAndroid Build Coastguard Worker    echo "DYLD_LIBRARY_PATH is unset";
140*b6fb3261SAndroid Build Coastguard Worker  else
141*b6fb3261SAndroid Build Coastguard Worker    echo DYLD_LIBRARY_PATH ${DYLD_LIBRARY_PATH} ;
142*b6fb3261SAndroid Build Coastguard Worker  fi
143*b6fb3261SAndroid Build Coastguard Worker
144*b6fb3261SAndroid Build Coastguard Worker
145*b6fb3261SAndroid Build Coastguard Worker  echo
146*b6fb3261SAndroid Build Coastguard Worker  echo '== nvidia-smi ==================================================='
147*b6fb3261SAndroid Build Coastguard Worker  nvidia-smi 2>&1
148*b6fb3261SAndroid Build Coastguard Worker
149*b6fb3261SAndroid Build Coastguard Worker  echo
150*b6fb3261SAndroid Build Coastguard Worker  echo '== cuda libs  ==================================================='
151*b6fb3261SAndroid Build Coastguard Worker} >> ${OUTPUT_FILE}
152*b6fb3261SAndroid Build Coastguard Worker
153*b6fb3261SAndroid Build Coastguard Workerfind /usr/local -type f -name 'libcudart*'  2>/dev/null | grep cuda |  grep -v "\\.cache" >> ${OUTPUT_FILE}
154*b6fb3261SAndroid Build Coastguard Workerfind /usr/local -type f -name 'libudnn*'  2>/dev/null | grep cuda |  grep -v "\\.cache" >> ${OUTPUT_FILE}
155*b6fb3261SAndroid Build Coastguard Worker
156*b6fb3261SAndroid Build Coastguard Worker{
157*b6fb3261SAndroid Build Coastguard Worker  echo
158*b6fb3261SAndroid Build Coastguard Worker  echo '== tensorflow installed from info =================='
159*b6fb3261SAndroid Build Coastguard Worker  pip show tensorflow
160*b6fb3261SAndroid Build Coastguard Worker
161*b6fb3261SAndroid Build Coastguard Worker  echo
162*b6fb3261SAndroid Build Coastguard Worker  echo '== python version  =============================================='
163*b6fb3261SAndroid Build Coastguard Worker  echo '(major, minor, micro, releaselevel, serial)'
164*b6fb3261SAndroid Build Coastguard Worker  python -c 'import sys; print(sys.version_info[:])'
165*b6fb3261SAndroid Build Coastguard Worker
166*b6fb3261SAndroid Build Coastguard Worker  echo
167*b6fb3261SAndroid Build Coastguard Worker  echo '== bazel version  ==============================================='
168*b6fb3261SAndroid Build Coastguard Worker  bazel version
169*b6fb3261SAndroid Build Coastguard Worker} >> ${OUTPUT_FILE}
170*b6fb3261SAndroid Build Coastguard Worker
171*b6fb3261SAndroid Build Coastguard Worker# Remove any words with google.
172*b6fb3261SAndroid Build Coastguard Workermv $OUTPUT_FILE old-$OUTPUT_FILE
173*b6fb3261SAndroid Build Coastguard Workergrep -v -i google old-${OUTPUT_FILE} > $OUTPUT_FILE
174*b6fb3261SAndroid Build Coastguard Worker
175*b6fb3261SAndroid Build Coastguard Workerecho "Wrote environment to ${OUTPUT_FILE}. You can review the contents of that file."
176*b6fb3261SAndroid Build Coastguard Workerecho "and use it to populate the fields in the github issue template."
177*b6fb3261SAndroid Build Coastguard Workerecho
178*b6fb3261SAndroid Build Coastguard Workerecho "cat ${OUTPUT_FILE}"
179*b6fb3261SAndroid Build Coastguard Workerecho
180*b6fb3261SAndroid Build Coastguard Worker
181