[Update 1] bazelとPython 3.6を使用してソースコードからWindows用のTensorFlow GPU / CPUをビルドしてインストールする方法

これは前のストーリーの更新です。ここでの新機能:
- TensorFlow v1.11
- CUDA v10.0
- cuDNN v7.3
公式サイトにガイドがあります。それは非常に包括的なものではありませんが、時には有用です。
概要
- Git for Windowsをインストールする
- Bazelをインストールする
- MSYS2 x64およびコマンドラインツールをインストールする
- Visual Studio 2015ビルドツールを含むVisual Studio 2017ビルドツールをインストールする
- Python 3.6 64ビットをインストールする
- NVIDIA CUDA 10.0およびcuDNN 7.3をインストールします(GPUアクセラレーション用)
- ビルド環境を構成する
- TensorFlow v1.11ソースコードを複製し、必須パッチを適用する
- ビルドパラメーターを構成する
- ソースからTensorFlowを構築する
- Python 3.6用のTensorFlowホイールファイルを作成する
- Python 3.6用のTensorFlowホイールファイルをインストールし、結果を確認する
ステップ1:Git for Windowsをインストールする
Git for Windowsをダウンロードしてインストールします。ここに持って行きます。 git.exeへのパスが%PATH%環境変数に追加されていることを確認してください。 Gitをインストールします
C:\ Bin \ Git
このチュートリアルのフォルダー。
ステップ2:MSYS2 x64およびコマンドラインツールをインストールする
ここから64ビットディストリビューションをダウンロードしてインストールします。 Bazelはgrep、パッチ、unzip、およびUnixツールの他のポートを使用してソースをビルドします。それぞれのスタンドアロンバイナリを見つけることができますが、MSYS2バンドルを使用することをお勧めします。にインストールします
C:\ Bin \ msys64
このチュートリアルのフォルダー。ツールを含むフォルダーを%PATH%環境変数に追加する必要があります。私の場合は「C:\ Bin \ msys64 \ usr \ bin」です。
[スタート]メニューから[MSYS2 MinGW 64-bit]ショートカットを起動します。次のコマンドを実行して更新します(要求された場合、「MSYS2 MinGW 64-bit」を再起動します)。
パックマン-シュー
次に実行します:
パックマン-Su
ビルドにはインストールツールが必要です。
pacman -Sパッチの解凍
「exit」コマンドで「MSYS2 MinGW 64-bit」シェルを閉じます。もう必要ありません。
ステップ3:Visual Studio 2015ビルドツールを含むVisual Studio 2017ビルドツールをインストールする
TensorFlow v1.11をビルドするには、Visual Studio 2017ビルドツールから「VC ++ 2015.3 v14.00(v140)デスクトップ用ツールセット」をインストールする必要があります。

ステップ4:Bazelをインストールする
ここから最新のバーゼルをダウンロードしてください。 bazel-
bashの場所にBAZEL_SHグローバル環境変数を追加します。私の道は
C:\ Bin \ msys64 \ usr \ bin \ bash.exe
「デスクトップ用のVC ++ 2015.3 v14.00(v140)ツールセット」ツールチェーンの場所にBAZEL_VCグローバル環境変数を追加します。
C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC
ステップ5:Python 3.6 64ビットをインストールする
TensorFlowはPython 3.7をサポートしていないため、3.6バージョンをインストールする必要があります。
TensorFlow v1.11はAnaconda / Minicondaのビルドをサポートしていないようです—奇妙なエラーが発生します。そのため、ビルドにPython仮想環境を使用しています。
Python 3.6はここからダウンロードできます。それをインストールし、python.exeの場所を%PATH%変数に追加します。
ステップ6:NVIDIA CUDA 10.0およびcuDNN 7.3をインストールします(GPUアクセラレーション用)
このセクションは、CUDAをサポートするNVIDIAグラフィックカードを使用している場合に実際のものです。それ以外の場合は、このセクションをスキップしてください。
ヘルプが必要な場合は、こちらからCUDAのインストール手順をご覧ください。そのガイドをコピーして貼り付けますが、いくつかの詳細をカットします。
https://developer.nvidia.com/cuda-downloadsにアクセスし、CUDA 10.0 Installer for Windows [ご使用のバージョン]をダウンロードします。私の場合、バージョンはWindows 10です。
デフォルト設定でデフォルトの場所にインストールしますが、VisualStudio統合オプションのチェックを外します。必要に応じてGPUドライバーを更新し、再起動します。
実行に移動(Win + R)cmdと入力
次のコマンドは、nvccバージョンをチェックし、パス環境変数に設定されていることを確認します。
nvcc-バージョン
次に、https://developer.nvidia.com/cudnnに移動します(メンバーシップが必要です)。
ログイン後、次をダウンロードします。
Windows用cuDNN v7.3.1ライブラリ[ご使用のバージョン] Windows10。ダウンロードしたフォルダーに移動して、zipファイルを解凍します。
抽出されたフォルダー内に移動し、すべてのファイルとフォルダーをcudaフォルダー(bin、include、libなど)からコピーし、「C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0」に貼り付けます。
ここでの最後の手順は、「C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64」を%PATH%環境変数に追加することです。
ステップ7:ビルド環境を構成する
[スタート]メニューからx64用VC ++ 2015シェル(「VS2015 x64ネイティブツールコマンドプロンプト」ショートカット)を起動します。
次に、Python環境を作成、アクティブ化、構成する必要があります。以下の「VS2015 x64 Native Toolsコマンドプロンプト」シェルコマンド内で実行します(場所に応じた正しいパス)。
pip3 install -U virtualenv
virtualenv --system-site-packages C:\ Users \ amsokol \ tensorflow-v1.11
C:\ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat
コマンドを適用すると、シェルは次のようになります。

必須のPythonパッケージをインストールします。
pip3は6つのnumpyホイールをインストールします
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps
「pip3リスト」を実行して、必須パッケージがインストールされていることを確認します。

それは今のところすべてです。シェルを閉じないでください。
ステップ8:TensorFlowソースコードのクローンを作成し、必須パッチを適用する
まず、TensorFlowソースコードを複製するフォルダーを選択する必要があります。私の場合は「C:\ Users \ amsokol \ Development \ tensorflow-build」です。シェルに戻って実行します:
cd C:\ Users \ amsokol \ Development \ tensorflow-build
ソースコードのクローン:
git clone https://github.com/tensorflow/tensorflow
1.11バージョンの最新のチェックアウト:
cdテンソルフロー
git checkout v1.11.0
これでソースができました。
固有のサードパーティライブラリにバグがあります。ビルドする前に修正する必要があります。
- ここからパッチをダウンロードし、eigen_half.patchというファイル名でthird_partyフォルダーに保存します
- patch_file = clean_dep(“ // third_party:eigen_half.patch”)、eigen_archiveセクションの行をtensorflow / workspace.bzlファイルに追加します。
tensorflow / workspace.bzlファイルの結果は次のようになります。
... tf_http_archive( name = "eigen_archive"、 urls = [ 「https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz」、 「https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz」、 ]、 sha256 = "d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9"、 strip_prefix = "eigen-eigen-fd6845384b86"、 build_file = clean_dep( "// third_party:eigen.BUILD")、 patch_file = clean_dep( "// third_party:eigen_half.patch")、 ) ...
できた
ステップ9:ビルドパラメーターを構成する
ソースコードのルートフォルダーにいることを確認します。
cd C:\ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
コンフィギュレーターを実行します。
python ./configure.py
まず、Pythonの場所を尋ねます。 Enterキーを押してデフォルト値のままにします。
... bazel 0.17.2がインストールされています。
pythonの場所を指定してください。 [デフォルトはC:\ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:
次に、Pythonライブラリパスの場所を尋ねます。 Enterキーを押してデフォルト値のままにします。
トレースバック(最後の最後の呼び出し): ファイル「」、1行目、 AttributeError:モジュール 'site'には属性 'getsitepackages'がありません 考えられるPythonライブラリパスが見つかりました: C:\ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages 使用するPythonライブラリパスを入力してください。デフォルトは[C:\ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]です
次に、nGraphサポートについて尋ねます。必要ありません。 「n」を押します。
nGraphをサポートしたTensorFlowを構築しますか? [y / N]:n TGraphFlowではnGraphサポートは有効になりません。
次に、CUDAサポートについて尋ねます:
CUDAをサポートするTensorFlowを構築しますか? [y / N]:
GPUアクセラレーションを使用する場合は「y」と答えます。それ以外の場合は、「n」を押します。
はいの場合、CUDA configuratorは追加の質問をします:
CUDA SDKバージョンとして10.0に回答します。
使用するCUDA SDKバージョンを指定してください。 [空のままにしてデフォルトでCUDA 9.0に設定]:10.0
Enterキーを押して、デフォルトのCUDAツールキットの場所を残します。
CUDA 10.0ツールキットがインストールされている場所を指定してください。詳細については、README.mdを参照してください。 [デフォルトはC:/ Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
cuDNNバージョンとして7.3.1に回答します。
使用するcuDNNバージョンを指定してください。 [空のままにしてデフォルトでcuDNN 7.0に設定]:7.3.1
Enterキーを押して、デフォルトのcuDNNライブラリの場所を残します。
cuDNN 7ライブラリがインストールされている場所を指定してください。詳細については、README.mdを参照してください。 [デフォルトはC:/ Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
次の質問は、構築に使用するCUDA計算機能についてです。デバイスのコンピューティング機能については、https://developer.nvidia.com/cuda-gpusをご覧ください。 GTX 1070を持っているので、6.1に答えます。
構築するコンマ区切りのCuda計算機能のリストを指定してください。 デバイスのコンピューティング機能については、https://developer.nvidia.com/cuda-gpusをご覧ください。 計算機能を追加するたびに、ビルド時間とバイナリサイズが大幅に増加することに注意してください。 [デフォルト:3.5,7.0]:6.1
次の質問は、最適化フラグを設定することです。私は/ arch:AVX2と答える理由は第6世代Intel CPUです
bazelオプション "--config = opt"が指定されている場合、コンパイル時に使用する最適化フラグを指定してください[デフォルトは/ arch:AVX]:/ arch:AVX2
最後の質問は固有値についてです。 「y」と答えます。コンパイル時間が大幅に短縮されます。
コンパイル時間を短縮するために、一部のC ++コンパイルでeigen strong inlineをオーバーライドしますか? [Y / n]:y 固有の強力なインラインオーバーライド。
設定が完了しました。構築しましょう。
ステップ10:ソースからTensorFlowをビルドする
ソースコードのルートフォルダーにいることを確認します。
cd C:\ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
ビルドには時間がかかります。 Windows Defender Antivirusリアルタイム保護を含むウイルス対策ソフトウェアを無効にすることを強くお勧めします。
ビルドを実行:
bazel build --config = opt // tensorflow / tools / pip_package:build_pip_package
しばらく座ってリラックスしてください。
ステップ11:Python 3.6用のTensorFlowホイールファイルを作成する
コマンドを実行してPythonホイールファイルを作成します。
mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
失敗します:

既知の問題があります。 「bazel-bin \ tensorflow \ tools \ pip_package」フォルダーを見てください。長さゼロの「simple_console_for_windows.zip」ファイルが含まれています。これが問題です。 Bazelには、ファイルが2GBを超えると失敗する32ビットzipユーティリティが含まれています。詳細と回避策については、リンクを参照してください。
- https://github.com/tensorflow/tensorflow/issues/20332
- https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co
問題を修正する手順があります。
cd。\ bazel-bin \ tensorflow \ tools \ pip_package
「simple_console_for_windows.zip-0.params」ファイルを開き、「mnist.zip」を含む行を削除します。
...
runfiles / org_tensorflow / tensorflow / contrib / eager / python / examples / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / eager / python / examples / gan / mnist.zip
...
それはわたしを助ける。 zipファイルを使用して他の行を削除するのに役立たない場合(詳細はこちらを参照)。このアクティビティの目的は、「simple_console_for_windows.zip」の長さを2GB未満にすることです。
空の「simple_console_for_windows.zip」ファイルを削除します。
次に、ホームフォルダーを確認します。 「_bazel_
cd C:\ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow
「simple_console_for_windows.zip」ファイルを手動で作成します。
external \ bazel_tools \ tools \ zip \ zipper \ zipper.exe vcC bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip-0.params
コマンドを実行してPythonホイールファイルを作成します。
cd C:\ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
「.. \ out」フォルダーにtensorflow-1.11.0-cp36-cp36m-win_amd64.whlファイルを作成します。
ステップ12:Python 3.6用のTensorFlowホイールファイルをインストールし、結果を確認する
コマンドを実行してPythonホイールファイルをインストールします。
pip3 install .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl
「tensorflow」ディレクトリを離れます(Tensoflowソースコードフォルダー内でPythonスクリプトを実行するとエラーが発生することがあります。理由はわかりません)。
cd ..
ここでダウンロードスクリプトを確認するか、コピーして貼り付けて実行するには:
tensorflowをtfとしてインポート hello = tf.constant( 'Hello、TensorFlow!') セッション= tf.Session() print(session.run(hello))
システムが次を出力する場合、すべてはうまくあります:
こんにちは、TensorFlow!
私の出力:

これで、TensorFlowがWindowsマシンに正常にインストールされました。
それがあなたのために働いたならば、私に下のコメントで知らせてください。または、エラーが発生した場合。ありがとう!