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