[Pembaruan 1] Cara membangun dan menginstal TensorFlow GPU / CPU untuk Windows dari kode sumber menggunakan bazel dan Python 3.6

Ini adalah pembaruan untuk cerita saya sebelumnya. Apa yang baru di sini:

  • TensorFlow v1.11
  • CUDA v10.0
  • cuDNN v7.3

Ada panduan di situs resmi. Ini tidak terlalu komprehensif tetapi terkadang bermanfaat.

Ringkasan

  1. Instal Git untuk Windows
  2. Instal Bazel
  3. Instal MSYS2 x64 dan alat-alat baris perintah
  4. Instal Visual Studio 2017 Build Tools termasuk Visual Studio 2015 Build Tools
  5. Instal Python 3.6 64-bit
  6. Instal NVIDIA CUDA 10.0 dan cuDNN 7.3 (untuk akselerasi GPU)
  7. Konfigurasikan lingkungan build
  8. Clone TensorFlow v1.11 kode sumber dan terapkan tambalan wajib
  9. Konfigurasikan parameter bangunan
  10. Bangun TensorFlow dari sumber
  11. Buat file roda TensorFlow untuk Python 3.6
  12. Instal file roda TensorFlow untuk Python 3.6 dan periksa hasilnya

Langkah 1: Instal Git untuk Windows

Unduh dan instal Git untuk Windows. Saya bawa di sini. Pastikan path ke git.exe ditambahkan ke% PATH% variabel lingkungan. Saya menginstal Git ke

C: \ Bin \ Git

folder untuk tutorial ini.

Langkah 2: Instal MSYS2 x64 dan alat-alat baris perintah

Unduh dan pasang distribusi 64-bit di sini. Bazel menggunakan grep, patch, unzip dan port lain dari Unix-tools untuk membangun sumber. Anda dapat mencoba untuk menemukan binari yang berdiri sendiri untuk masing-masing tetapi saya lebih suka menggunakan bundel MSYS2. Saya menginstalnya ke

C: \ Bin \ msys64

folder untuk tutorial ini. Anda harus menambahkan folder dengan alat ke% PATH% variabel lingkungan. Ini adalah "C: \ Bin \ msys64 \ usr \ bin" dalam kasus saya.

Mulai pintasan "MSYS2 MinGW 64-bit" dari Start Menu. Jalankan perintah berikut untuk memperbarui (mulai ulang "MSYS2 MinGW 64-bit" jika diminta):

pacman -Syu

Lalu lari:

pacman -Su

Diperlukan alat instal untuk membangun:

pacman -S patch unzip

Tutup "MSYS2 MinGW 64-bit" shell dengan perintah "exit". Kami tidak membutuhkannya lagi.

Langkah 3: Instal Visual Studio 2017 Build Tools termasuk Visual Studio 2015 Build Tools

Kita harus menginstal "VC ++ 2015.3 v14.00 (v140) toolset untuk desktop" dari Visual Studio 2017 Build Tools untuk membangun TensorFlow v1.11:

Langkah 4: Instal Bazel

Unduh Basel terbaru di sini. Cari file bazel- -windows-x86_64.exe. Saya telah menguji tutorial ini dengan bazel 0.17.2. Ganti nama biner menjadi bazel.exe dan pindahkan ke direktori di% PATH% Anda, sehingga Anda dapat menjalankan Bazel dengan mengetikkan bazel di direktori mana pun. Lihat detail instalasi Bazel untuk Windows x64 jika ada masalah.

Tambahkan variabel lingkungan global BAZEL_SH untuk lokasi bash. Jalanku adalah

C: \ Bin \ msys64 \ usr \ bin \ bash.exe

Tambahkan variabel lingkungan global BAZEL_VC untuk toolset “VC ++ 2015.3 v14.00 (v140) untuk desktop” lokasi rantai alat:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC

Langkah 5: Instal Python 3.6 64-bit

TensorFlow tidak mendukung Python 3.7 sehingga Anda harus menginstal versi 3.6.
Sepertinya TensorFlow v1.11 tidak mendukung Anaconda / Miniconda untuk membangun lagi - Saya mendapatkan kesalahan aneh. Itu sebabnya saya menggunakan lingkungan virtual Python untuk membangun.

Python 3.6 tersedia untuk diunduh di sini. Instal dan tambahkan lokasi ke python.exe ke variabel% PATH%.

Langkah 6: Instal NVIDIA CUDA 10.0 dan cuDNN 7.3 (untuk akselerasi GPU)

Bagian ini aktual jika Anda memiliki Kartu Grafis NVIDIA yang mendukung CUDA. Kalau tidak lewati bagian ini.
Lihat langkah demi langkah pemasangan CUDA di sini jika Anda memerlukan bantuan. Saya menyalin-tempel panduan itu tetapi memotong beberapa detail.

Pergi ke https://developer.nvidia.com/cuda-downloads dan unduh Installer CUDA 10.0 untuk Windows [versi Anda]. Bagi saya, versi adalah Windows 10.

Instal di lokasi default dengan pengaturan default tetapi hapus centang opsi integrasi VisualStudio. Ini akan memperbarui driver GPU Anda jika diperlukan dan reboot.

Pergi untuk menjalankan (Win + R) ketik cmd

Perintah berikut akan memeriksa versi nvcc dan memastikan bahwa itu diatur dalam variabel lingkungan path.

nvcc --versi

Selanjutnya, https://developer.nvidia.com/cudnn (Diperlukan keanggotaan).

Setelah login unduh yang berikut:

cuDNN v7.3.1 Library untuk Windows [versi Anda] untuk saya Windows 10. Goto folder yang diunduh dan ekstrak file zip.

Masuk ke dalam folder yang diekstraksi dan salin semua file dan folder dari folder cuda (mis. Nampan, sertakan, lib) dan tempelkan ke "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0".

Langkah terakhir di sini adalah menambahkan "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" ke% variabel lingkungan PATH%.

Langkah 7: Konfigurasikan lingkungan build

Mulai shell VC ++ 2015 untuk x64 ("VS2015 x64 Native Tools Command Prompt") dari Start Menu.

Selanjutnya Anda harus membuat, mengaktifkan dan mengkonfigurasi lingkungan Python. Jalankan di dalam perintah shell "VS2015 x64 Native Tools Command Prompt" di bawah ini (jalur yang benar sesuai dengan lokasi Anda).

instal pip3 -U virtualenv
virtualenv --system-site-paket C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activ.bat

Shell Anda akan terlihat seperti itu setelah perintah diterapkan:

Instal paket-paket wajib Python:

pip3 pasang enam numpy wheel
pip3 instal keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

Jalankan "daftar pip3" untuk memastikan paket wajib diinstal:

Itu saja untuk saat ini. Jangan tutup shell.

Langkah 8: Mengkloning kode sumber TensorFlow dan menerapkan tambalan wajib

Pertama-tama Anda harus memilih folder tempat mengkloning kode sumber TensorFlow. Itu adalah "C: \ Users \ amsokol \ Development \ tensorflow-build" dalam kasus saya. Kembali ke shell dan jalankan:

cd C: \ Users \ amsokol \ Development \ tensorflow-build

Kode sumber klon:

git clone https://github.com/tensorflow/tensorflow

Checkout terbaru dari versi 1.11:

cd tensorflow
git checkout v1.11.0

Sekarang kami memiliki sumber.

Ada BUG di perpustakaan pihak ketiga eigen. Kita harus memperbaikinya sebelum membangun.
  • Unduh tambalan di sini dan simpan dengan nama file eigen_half.patch ke folder third_party
  • Tambahkan patch_file = clean_dep ("// third_party: eigen_half.patch"), baris ke bagian eigen_archive ke file tensorflow / workspace.bzl.

Hasil dalam file tensorflow / workspace.bzl harus seperti ini:

...
tf_http_archive (
  name = "eigen_archive",
  url = [
"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"),
)
...

Selesai

Langkah 9: Konfigurasikan parameter bangunan

Pastikan kita berada di folder root kode sumber:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow

Jalankan konfigurator:

python ./configure.py

Pertama menanyakan lokasi Python. Tekan Enter untuk meninggalkan nilai default:

...
Anda telah menginstal bazel 0.17.2.
Silakan tentukan lokasi python. [Defaultnya adalah C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Kemudian menanyakan lokasi jalur pustaka Python. Tekan Enter untuk meninggalkan nilai default:

Traceback (panggilan terakhir terakhir):
  File "", baris 1, dalam 
AttributeError: modul 'situs' tidak memiliki atribut 'mendapat paket'
Ditemukan kemungkinan jalur pustaka Python:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ situs-paket
Silakan masukkan jalur pustaka Python yang diinginkan untuk digunakan. Defaultnya adalah [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ situs-paket]

Kemudian ia bertanya tentang dukungan nGraph. Kami tidak membutuhkannya. Tekan "n":

Apakah Anda ingin membangun TensorFlow dengan dukungan nGraph? [y / T]: n
Tidak ada dukungan nGraph yang akan diaktifkan untuk TensorFlow.

Kemudian ia bertanya tentang dukungan CUDA:

Apakah Anda ingin membangun TensorFlow dengan dukungan CUDA? [y / T]:

Jawab "y" jika Anda akan menggunakan akselerasi GPU. Kalau tidak tekan “n”.

Dalam hal Ya untuk konfigurator CUDA mengajukan pertanyaan tambahan:
Jawab 10.0 sebagai versi CUDA SDK:
Silakan tentukan versi CUDA SDK yang ingin Anda gunakan. [Biarkan kosong ke default ke CUDA 9.0]: 10.0
Tekan Enter untuk meninggalkan lokasi CUDA toolkit default:
Silakan tentukan lokasi di mana toolkit CUDA 10.0 diinstal. Lihat README.md untuk lebih jelasnya. [Defaultnya adalah C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Jawab 7.3.1 sebagai versi cuDNN:
Silakan tentukan versi cuDNN yang ingin Anda gunakan. [Biarkan kosong ke default ke cuDNN 7.0]: 7.3.1
Tekan Enter untuk meninggalkan lokasi pustaka cuDNN default:
Silakan tentukan lokasi di mana perpustakaan cuDNN 7 diinstal. Lihat README.md untuk lebih jelasnya. [Defaultnya adalah C: / Program Files / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Pertanyaan selanjutnya adalah tentang kemampuan komputasi CUDA untuk membangun. Anda dapat menemukan kemampuan komputasi perangkat Anda di: https://developer.nvidia.com/cuda-gpus. Saya punya GTX 1070 itu sebabnya saya menjawab 6.1:
Silakan tentukan daftar kemampuan komputasi Cuda yang dipisahkan koma yang ingin Anda buat.
Anda dapat menemukan kemampuan komputasi perangkat Anda di: https://developer.nvidia.com/cuda-gpus.
Harap dicatat bahwa setiap kemampuan komputasi tambahan secara signifikan meningkatkan waktu build dan ukuran biner Anda. [Default adalah: 3.5,7.0]: 6.1

Pertanyaan selanjutnya adalah mengatur flag optimasi. Saya memiliki CPU Intel Generasi ke-6 karena itulah saya menjawab / melengkungkan: AVX2:

Silakan tentukan flag optimasi yang akan digunakan selama kompilasi ketika opsi bazel "--config = opt" ditentukan [Default adalah / arch: AVX]: / arch: AVX2

Pertanyaan terakhir adalah tentang eigen. Jawab "y". Ini mengurangi waktu kompilasi secara dramatis.

Apakah Anda ingin mengganti inigen kuat inline untuk beberapa kompilasi C ++ untuk mengurangi waktu kompilasi? [Y / n]: y
Eigen inline kuat yang ditimpa.

Konfigurasi selesai. Mari kita membangun.

Langkah 10: Bangun TensorFlow dari sumber

Pastikan kita berada di folder root kode sumber:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Membangun membutuhkan waktu lama. Saya sangat menyarankan untuk mematikan perangkat lunak antivirus termasuk perlindungan waktu nyata Windows Defender Antivirus.

Jalankan build:

bazel build --config = opt // tensorflow / tools / pip_package: build_pip_package

Duduk dan rileks sejenak.

Langkah 11: Buat file roda TensorFlow untuk Python 3.6

Jalankan perintah untuk membuat file roda Python:

mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out

Gagal:

Ada masalah yang diketahui. Lihatlah folder "bazel-bin \ tensorflow \ tools \ pip_package". Ini berisi file "simple_console_for_windows.zip" panjang nol. Ini masalahnya. Bazel berisi utilitas zip 32-bit yang gagal untuk file 2GB lebih besar. Lihat tautan untuk detail dan solusinya:

  • https://github.com/tensorflow/tensorflow/issues/20332
  • https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-result-in-0-byte-simple-co

Ada beberapa langkah untuk memperbaiki masalah:

cd. \ bazel-bin \ tensorflow \ tools \ pip_package

Buka file “simple_console_for_windows.zip-0.params” dan hapus baris yang berisi “mnist.zip”:

...
runfiles / org_tensorflow / tensorflow / contrib / eager / python / contoh / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / eager / python / contoh / gan / mnist.zip
...
Itu membantu saya. Dalam kasus itu tidak membantu Anda hanya menghapus baris lain dengan file zip (lihat detailnya di sini). Tujuan dari kegiatan ini adalah untuk membuat "simple_console_for_windows.zip" panjangnya kurang dari 2GB.

Hapus file “simple_console_for_windows.zip” kosong.

Selanjutnya lihat folder home Anda. Anda harus melihat folder dengan nama seperti "_bazel_ ". Ini adalah "_bazel_amsokol" dalam kasus saya. Ini berisi folder dengan file build. Ini adalah "lx6zoh4k" dalam kasus saya. Kembali ke shell menjalankan (benar sesuai dengan nama folder Anda):

cd C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow

Buat file “simple_console_for_windows.zip” secara manual:

eksternal \ 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

Jalankan perintah untuk membuat file roda Python:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out

Ini menciptakan tensorflow-1.11.0-cp36-cp36m-win_amd64.whl file di folder ".. \ out".

Langkah 12: Instal file roda TensorFlow untuk Python 3.6 dan periksa hasilnya

Jalankan perintah untuk menginstal file roda Python:

instal pip3 .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

Tinggalkan direktori “tensorflow” (kesalahan terkadang terjadi ketika saya menjalankan skrip Python di dalam folder kode sumber Tensoflow - saya tidak tahu alasannya):

cd ..

Untuk memeriksa skrip unduhan di sini atau salin dan tempel:

impor tensorflow sebagai tf
hello = tf.constant ('Halo, TensorFlow!')
session = tf.Session ()
print (session.run (hello))

Jika sistem menampilkan yang berikut, maka semuanya baik-baik saja:

Halo, TensorFlow!

Output saya:

Anda sekarang telah berhasil menginstal TensorFlow pada mesin Windows.

Beri tahu saya di komentar di bawah jika itu berhasil untuk Anda. Atau jika Anda mendapat kesalahan. Terima kasih!