[Kemas kini 1] Bagaimana untuk membina dan memasang TensorFlow GPU / CPU untuk Windows dari kod sumber menggunakan bazel dan Python 3.6

Ini adalah kemas kini untuk cerita terdahulu saya. Apa yang baru di sini:

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

Terdapat panduan di laman web rasmi. Ia tidak terlalu komprehensif tetapi kadang-kadang berguna.

Ringkasan

  1. Pasang Git untuk Windows
  2. Pasang Bazel
  3. Pasang MSYS2 x64 dan alat baris perintah
  4. Pasang Visual Studio 2017 Build Tools termasuk Visual Build Build Tools 2015
  5. Pasang Python 3.6 64-bit
  6. Pasang NVIDIA CUDA 10.0 dan cuDNN 7.3 (untuk pecutan GPU)
  7. Konfigurasi persekitaran bina
  8. Clone TensorFlow v1.11 kod sumber dan pakai patch wajib
  9. Konfigurasikan membina parameter
  10. Bina TensorFlow dari sumber
  11. Buat fail roda TensorFlow untuk Python 3.6
  12. Pasang fail roda TensorFlow untuk Python 3.6 dan semak keputusan

Langkah 1: Pasang Git untuk Windows

Muat turun dan pasang Git untuk Windows. Saya ambil di sini. Pastikan laluan ke git.exe ditambahkan kepada pembolehubah persekitaran% PATH%. Saya memasang Git ke

C: \ Bin \ Git

folder untuk tutorial ini.

Langkah 2: Pasang alat MSYS2 x64 dan alat arahan

Muat turun dan pasang pengedaran 64 bit di sini. Bazel menggunakan grep, patch, unzipand lain-lain pelabuhan alat Unix untuk membina sumber. Anda boleh cuba mencari binari yang berdiri sendiri bagi setiap daripada mereka tetapi saya lebih suka menggunakan pakej MSYS2. Saya memasangnya kepada

C: \ Bin \ msys64

folder untuk tutorial ini. Anda perlu menambah folder dengan alat untuk pembolehubah persekitaran% PATH%. Ia adalah "C: \ Bin \ msys64 \ usr \ bin" dalam kes saya.

Mulakan pintasan "MSYS2 MinGW 64-bit" dari Menu Mula. Jalankan arahan berikut untuk mengemas kini (mulakan semula "MSYS2 MinGW 64-bit" jika ia meminta):

pacman -Syu

Kemudian jalankan:

pacman -Su

Memasang alat diperlukan untuk membina:

pacman -S patch unzip

Tutup "shell MSYS2 MinGW 64-bit" dengan arahan "keluar". Kami tidak memerlukannya lagi.

Langkah 3: Pasang Alat Studio Visual Build 2017 termasuk Alat Bina Visual Studio 2015

Kami perlu memasang "VC ++ 2015.3 v14.00 (v140) toolset untuk desktop" dari Visual Studio 2017 Build Tools untuk membina TensorFlow v1.11:

Langkah 4: Pasang Bazel

Muat turun Basel terkini di sini. Cari fail bazel- -windows-x86_64.exe. Saya telah menguji tutorial ini dengan bazel 0.17.2. Namakan namanya binari ke bazel.exe dan pindahkannya ke direktori pada% PATH anda, supaya anda dapat menjalankan Bazel dengan menaip bazel dalam direktori apa pun. Lihat butiran pemasangan Bazel untuk Windows x64 dalam kes masalah.

Tambah BAZEL_SH pembolehubah persekitaran global untuk lokasi bash. Jalan saya adalah

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

Tambah pembolehubah persekitaran global BAZEL_VC untuk "lokasi rangkaian alat" VC ++ 2015.3 v14.00 (v140) toolset untuk desktop ":

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

Langkah 5: Pasang Python 3.6 64-bit

TensorFlow tidak menyokong Python 3.7 jadi anda perlu memasang versi 3.6.
Nampaknya TensorFlow v1.11 tidak menyokong Anaconda / Miniconda untuk membina lagi - Saya mendapat kesilapan yang aneh. Itulah sebabnya saya menggunakan persekitaran maya Python untuk membina.

Python 3.6 boleh dimuat turun di sini. Pasang dan tambah lokasi kepada python.exe kepada pemboleh ubah% PATH.

Langkah 6: Pasang NVIDIA CUDA 10.0 dan cuDNN 7.3 (untuk pecutan GPU)

Bahagian ini sebenarnya jika anda mempunyai Kad Grafik NVIDIA yang menyokong CUDA. Jika tidak, langkau bahagian ini.
Lihat langkah demi langkah pemasangan CUDA di sini jika anda memerlukan bantuan. Saya copy-paste panduan itu tetapi memotong beberapa butiran.

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

Pasangnya di lokasi lalai dengan tetapan lalai tetapi nyahtandakan pilihan integrasi VisualStudio. Ia akan mengemas kini pemandu GPU anda jika diperlukan dan but semula.

Pergi ke jenis cmd (Win + R)

Perintah berikut akan memeriksa versi nvcc dan memastikan bahawa ia ditetapkan dalam pembolehubah persekitaran laluan.

nvcc --versi

Goto seterusnya https://developer.nvidia.com/cudnn (Keahlian diperlukan).

Selepas log masuk muat turun yang berikut:

cuDNN v7.3.1 Perpustakaan untuk Windows [versi anda] untuk saya Windows 10. Goto folder dimuat turun dan ekstrak fail zip.

Pergi ke dalam folder yang diekstrak dan salin semua fail dan folder dari folder cuda (mis. Bin, termasuk, lib) dan tampal ke "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0".

Langkah terakhir di sini adalah untuk menambah "C: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64" kepada pembolehubah persekitaran% PATH%.

Langkah 7: Konfigurasi persekitaran membina

Cubalah VC ++ 2015 untuk x64 (pintasan "Promosi Alat Perkakas VS2015 x64") daripada Menu Mula.

Seterusnya anda perlu membuat, mengaktifkan dan konfigurasi persekitaran Python. Jalankan di dalam "perintah Prompt Alat Perkakas VS2015 x64" di bawah (laluan yang sesuai mengikut lokasi anda).

pip3 pasang -U virtualenv
virtualenv - sistem-tapak-pakej C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat

Cengkerang anda sepatutnya kelihatan seperti selepas arahan digunakan:

Pasang pakej Python mandatori:

pip3 memasang enam roda numpy
pip3 install keras_applications == 1.0.5 --no-deps
pip3 memasang keras_preprocessing == 1.0.3 --no-deps

Jalankan "senarai pip3" untuk memastikan pakej wajib dipasang:

Itu sahaja buat masa ini. Jangan menutup cangkerang.

Langkah 8: Clone TensorFlow source code dan pakai patch wajib

Pertama sekali anda perlu memilih folder untuk mengklon kod sumber TensorFlow. Ia adalah "C: \ Users \ amsokol \ Development \ tensorflow-build" dalam kes saya. Kembali ke shell dan jalankan:

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

Kod sumber klon:

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

Checkout terkini versi 1.11:

cd tensorflow
git checkout v1.11.0

Sekarang kita mempunyai sumber.

Terdapat BUG dalam perpustakaan pihak ketiga eigen. Kami perlu membetulkannya sebelum membina.
  • Muat turun patch di sini dan simpan dengan nama fail eigen_half.patch ke folder third_party
  • Tambah patch_file = clean_dep ("// third_party: eigen_half.patch"), baris ke bahagian eigen_archive untuk fail tensorflow / workspace.bzl.

Hasil fail tensorflow / workspace.bzl sepatutnya seperti ini:

...
tf_http_archive (
  nama = "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 membina parameter

Pastikan kami berada dalam folder root kod sumber:

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

Jalankan konfigurasi:

python ./configure.py

Pertama, ia meminta lokasi Python. Tekan Enter untuk meninggalkan nilai lalai:

...
Anda mempunyai bazel 0.17.2 dipasang.
Sila nyatakan lokasi python. [Lalai ialah C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

Kemudian ia meminta lokasi laluan perpustakaan Python. Tekan Enter untuk meninggalkan nilai lalai:

Traceback (panggilan terakhir terakhir):
  Fail "", baris 1, dalam 
AttributeError: 'site' modul tidak mempunyai 'getitepackages' attribut
Menemui jalan pustaka Python yang mungkin:
  C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages
Sila masukkan laluan pustaka Python yang dikehendaki untuk digunakan. Lalai adalah [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

Kemudian ia bertanya mengenai sokongan nGraph. Kita tidak memerlukannya. Tekan "n":

Adakah anda ingin membina TensorFlow dengan sokongan nGraph? [y / N]: n
Tiada sokongan nGraph akan diaktifkan untuk TensorFlow.

Kemudian ia bertanya tentang sokongan CUDA:

Adakah anda ingin membina TensorFlow dengan sokongan CUDA? [y / N]:

Jawab "y" jika anda akan menggunakan pecutan GPU. Jika tidak tekan "n".

Sekiranya pada Ya untuk konfigurasi CUDA meminta soalan tambahan:
Jawab 10.0 sebagai versi SDG CUDA:
Sila nyatakan versi SDG CUDA yang anda ingin gunakan. [Tinggalkan kosong ke lalai ke CUDA 9.0]: 10.0
Tekan Enter untuk meninggalkan lokasi toolkit lalai CUDA:
Sila nyatakan lokasi di mana toolkit CUDA 10.0 dipasang. Rujuk ke README.md untuk maklumat lanjut. [Lalai ialah C: / Fail Program / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Jawapan 7.3.1 sebagai versi cuDNN:
Sila nyatakan versi cuDNN yang anda ingin gunakan. [Tinggalkan kosong ke lalai ke cuDNN 7.0]: 7.3.1
Tekan Enter untuk meninggalkan lokasi perpustakaan cuDNN lalai:
Sila nyatakan lokasi di mana cuDNN 7 pustaka dipasang. Rujuk ke README.md untuk maklumat lanjut. [Lalai ialah C: / Fail Program / NVIDIA GPU Computing Toolkit / CUDA / v10.0]:
Persoalan seterusnya adalah tentang keupayaan mengira CUDA untuk membina dengan. Anda boleh mencari keupayaan mengira peranti anda di: https://developer.nvidia.com/cuda-gpus. Saya mempunyai GTX 1070 sebab itulah saya menjawab 6.1:
Sila tentukan senarai keupayaan mengira koma yang dipisahkan koma yang anda ingin bina dengan.
Anda boleh mencari keupayaan mengira peranti anda di: https://developer.nvidia.com/cuda-gpus.
Sila ambil perhatian bahawa setiap keupayaan pengiraan tambahan dengan ketara meningkatkan masa membina dan saiz binari anda. [Lalai ialah: 3.5,7.0]: 6.1

Persoalan seterusnya adalah untuk menetapkan bendera pengoptimuman. Saya mempunyai CPU Intel 6th keenam sebab itulah saya menjawab / gerbang: AVX2:

Sila nyatakan bendera pengoptimuman yang digunakan semasa penyusunan apabila pilihan bazel "--config = opt" ditentukan [Lalai adalah / gerbang: AVX]: / gerbang: AVX2

Soalan terakhir adalah tentang eigen. Jawab "y". Ia mengurangkan masa penyusunan secara dramatik.

Adakah anda ingin mengatasi eigen kuat dalam talian untuk beberapa kompilasi C ++ untuk mengurangkan masa penyusunan? [Y / n]: y
Inline kuat Eigen dilanjutkan.

Konfigurasi selesai. Mari bina.

Langkah 10: Bangun TensorFlow dari sumber

Pastikan kami berada dalam folder root kod sumber:

cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
Membina mengambil masa yang lama. Saya sangat mengesyorkan mematikan perisian antivirus termasuk perlindungan masa nyata Windows Defender Antivirus.

Jalankan bina:

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

Duduk dan rileks untuk beberapa waktu.

Langkah 11: Buat fail roda TensorFlow untuk Python 3.6

Jalankan arahan untuk membuat file roda Python:

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

Ia gagal:

Terdapat isu yang diketahui. Lihat folder "bazel-bin \ tensorflow \ tools \ pip_package". Ia mengandungi fail "simple_console_for_windows.zip" panjang sifar. Ini masalahnya. Bazel mengandungi 32-bit utiliti zip yang gagal untuk fail 2GB lebih besar. Lihat pautan untuk butiran dan penyelesaian:

  • 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

Terdapat beberapa langkah untuk membetulkan masalah:

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

Buka fail "simple_console_for_windows.zip-0.params" dan alih keluar baris mengandungi "mnist.zip":

...
runfiles / org_tensorflow / tensorflow / contrib / unwanted / python / examples / gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib / unwanted / python / examples / gan / mnist.zip
...
Ia membantu saya. Sekiranya ia tidak membantu anda hanya mengalih keluar baris lain dengan fail zip (lihat butiran di sini). Tujuan aktiviti ini adalah untuk membuat panjang "simple_console_for_windows.zip" kurang dari 2GB.

Padam fail "simple_console_for_windows.zip" kosong.

Lihat seterusnya di folder rumah anda. Anda perlu melihat folder dengan nama seperti "_bazel_ ". Ia adalah "_bazel_amsokol" dalam kes saya. Ia mengandungi folder dengan membina fail. Ia adalah "lx6zoh4k" dalam kes saya. Kembali ke shell satu run (betul mengikut nama folder anda):

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

Buat fail "simple_console_for_windows.zip" secara manual:

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 arahan untuk membuat file roda Python:

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

Ia mewujudkan fail tensorflow-1.11.0-cp36-cp36m-win_amd64.whl dalam folder ".. \ keluar".

Langkah 12: Pasang fail roda TensorFlow untuk Python 3.6 dan semak keputusan

Jalankan arahan untuk memasang fail roda Python:

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

Tinggalkan direktori "tensorflow" (ralat kadang-kadang berlaku apabila saya menjalankan skrip Python di dalam folder kod sumber Tensoflow - saya tidak tahu alasan):

cd ..

Untuk membuat semakan skrip muat turun di sini atau copy-paste dan jalankan:

import tensorflow sebagai tf
hello = tf.constant ('Hello, TensorFlow!')
sesi = tf.Session ()
cetak (session.run (hello))

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

Hello, TensorFlow!

Keluaran saya:

Anda kini telah berjaya memasang TensorFlow pada mesin Windows.

Tolong beritahu saya di komen di bawah jika ia bekerja untuk anda. Atau jika anda mendapat sebarang kesilapan. Terima kasih!