win7源碼編譯TensorFlow1.8.0

配置:win7SP1 + VS2015 + cuda 9.2.88 + cudnn-9.2-windows7-x64-v7.1

過程:

一、生成 vs2015 可用的解決方案,方法如下:

(一)

https://blog.csdn.net/jiugeshao/article/details/79144438

(二)自己的實踐

設置工作環境爲64位:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"

CMake存入環境變量,我的電腦這句沒啥用:
set PATH="%PATH%;D:\tool\tensorflow-build\cmake-3.11.1-win64-x64\bin\"

轉到建立文件夾(注意路徑中不要有空格)
cd /d \tensorflow\contrib\cmake\build

D:\tool\tensorflow-build\cmake-3.11.1-win64-x64\bin\cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE=D:\tool\tensorflow-build\swigwin-3.0.12\swig.exe ^
-DPYTHON_EXECUTABLE=C:/Users/%USERNAME%/AppData/Local/Programs\Python\Python36\python.exe ^
-DPYTHON_LIBRARIES=C:/Users/%USERNAME%/AppData/Local/Programs\Python\Python36\libs/python36.lib ^
-Dtensorflow_ENABLE_GPU=ON ^
-DCUDNN_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2" ^

本機不支持下面這句(我的電腦CPU不支持AVX):
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX

爲了使支持cuda9.2, 再增加 :
-Dtensorflow_CUDA_VERSION=9.2 ^

該選項涉及很多需要下載的東西,非常麻煩,建議關閉,貌似是分佈式使用的
-Dtensorflow_ENABLE_GRPC_SUPPORT=OFF ^

生成動態鏈接庫:
-Dtensorflow_BUILD_SHARED_LIB=ON

注:只能生成release和RelWithDebInfo版本,因爲debug版本需要python的debug動態庫

如果需要生成python的安裝包,則仍需要重新編譯tf_python_build_pip_package.vcxproj,方便起見,使用VS2015開發人員命令提示

轉到建立文件夾
cd /d \tensorflow\contrib\cmake\build

輸入如下命令:

MSBuild /p:Configuration=Release tf_python_build_pip_package.vcxproj

等待運行結束,如果沒有錯誤就代表編譯成功。在tf_python文件下生成tensorflow文件夾,表示安裝成功。

 

二、其他問題

(一)由於國內谷歌無法訪問,可能產生boringssl無法下載編譯的問題。

解決如下:

在..\tensorflow\contrib\cmake\external\boringssl.cmake中有一行如下:

set(boringssl_URL https://boringssl.googlesource.com/boringssl)

估計是給出了boringssl 的下載地址,我們可以更改爲:

set(boringssl_URL https://github.com/google/boringssl)

因爲雖然谷歌無法訪問,但是github卻是沒有問題的,

改完後重新生成一遍TensorFlow的解決方案。

之後,仍有七十多個文件生成失敗,只好挨個生成了。

(二)找不到snappy.h文件

問題描述:

Snappy 是一個 C++ 的用來壓縮和解壓縮的開發包。其目標不是最大限度壓縮或者兼容其他壓縮格式,而是旨在提供高速壓縮速度和合理的壓縮率。能夠在github中找到源代碼。

該問題在編譯tf_core_lib過程中出現的,雖然該工程下的頭文件中包含了snappy.h文件,但是並不是snappy工程的原版文件而是爲了移除Snappy而進行的一個更改。但是不知道爲什麼,在該工程的源文件snapfn.cc中,仍然使用了Snappy。由於該文件無法找到Snappy的定義所以會報錯。

解決如下:應該是網絡問題,多試幾次就好了,自己解決了。

 

(三)FileNotFoundError: [WinError 2] 系統找不到指定的文件。

問題描述:編譯tf_core_framework時出現的問題,不知道原因,也不知道在找什麼文件。該項目處理各種***.proto文件,產生與該文件相關的頭文件和源文件,例如:device_attributes.pb_text.h等。

解決方法:通過查看錯誤發現gen_git_source.py第165行有問題,懷疑與git無法執行有關。發現 git軟件的目錄不在環境變量中,添加即可。

(四)如圖:

原因:建立路徑中有空格,所以NVCC生成時會出問題…… 相應**.cmake文件中 --input-path 選項加雙引號就可以解決,找不到如何自動解決。

解決方法: 路徑加雙引號就可以解決,但是需要加的文件太多,只好重新生成了。

 

 (五)360安全衛士報木馬

描述:生成tf_cc_ops項目時,360會報告某個產生木馬程序,導致項目生成失敗;

原因不詳;

解決方法:關閉360。

 

(六)ModuleNotFoundError: No module named 'google','absl'

描述:生成tf_python_api時,出現的問題。

原因:應該是生成tf_python_api時,缺乏protobuf與 absl模塊

解決方法:pip install protobuf,至於absl 不能直接安裝,需要現在https://pypi.org/project/absl-py/0.1.9/#files中下載然後運行:pip install absl-py-0.1.9.tar.gz 即可。

 

(七)最新的tensorflow源碼contrib文件夾已經不提供某些C語言代碼了,需要從之前的版本中下載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章