[อัปเดต 1] วิธีสร้างและติดตั้ง TensorFlow GPU / CPU สำหรับ Windows จากซอร์สโค้ดโดยใช้ bazel และ Python 3.6

นี่คือการอัปเดตสำหรับเรื่องราวก่อนหน้าของฉัน มีอะไรใหม่ที่นี่:
- TensorFlow v1.11
- CUDA v10.0
- cuDNN v7.3
มีคำแนะนำในเว็บไซต์อย่างเป็นทางการ มันไม่ครอบคลุมมาก แต่มีประโยชน์บางครั้ง
สรุป
- ติดตั้ง Git สำหรับ Windows
- ติดตั้ง Bazel
- ติดตั้ง MSYS2 x64 และเครื่องมือบรรทัดคำสั่ง
- ติดตั้งเครื่องมือสร้างของ Visual Studio 2017 รวมถึงเครื่องมือสร้างของ Visual Studio 2015
- ติดตั้ง Python 3.6 64-bits
- ติดตั้ง NVIDIA CUDA 10.0 และ cuDNN 7.3 (สำหรับการเร่งความเร็ว GPU)
- กำหนดค่าสภาพแวดล้อมการสร้าง
- Clone TensorFlow v1.11 ซอร์สโค้ดและใช้แพทช์บังคับ
- กำหนดค่าพารามิเตอร์บิลด์
- สร้าง TensorFlow จากแหล่งที่มา
- สร้างไฟล์ล้อ TensorFlow สำหรับ Python 3.6
- ติดตั้งไฟล์ล้อ TensorFlow สำหรับ Python 3.6 และตรวจสอบผลลัพธ์
ขั้นตอนที่ 1: ติดตั้ง Git สำหรับ Windows
ดาวน์โหลดและติดตั้ง Git สำหรับ Windows ฉันเอาที่นี่ ต้องแน่ใจว่าเพิ่มพา ธ ไปยัง git.exe ในตัวแปรสภาพแวดล้อม% PATH% ฉันติดตั้ง Git ให้กับ
C: \ Bin \ Git
โฟลเดอร์สำหรับบทช่วยสอนนี้
ขั้นตอนที่ 2: ติดตั้ง MSYS2 x64 และเครื่องมือบรรทัดคำสั่ง
ดาวน์โหลดและติดตั้งการกระจาย 64 บิตที่นี่ Bazel ใช้ grep, patch, unzipand และพอร์ตอื่น ๆ ของ Unix-tools เพื่อสร้างแหล่งข้อมูล คุณสามารถลองหาไบนารีแบบเอกเทศสำหรับแต่ละไฟล์ได้ แต่ฉันชอบใช้ MSYS2 มัด ฉันติดตั้งมันเพื่อ
C: \ Bin \ msys64
โฟลเดอร์สำหรับบทช่วยสอนนี้ คุณต้องเพิ่มโฟลเดอร์ที่มีเครื่องมือในตัวแปรสภาพแวดล้อม% PATH% มันคือ“ C: \ Bin \ msys64 \ usr \ bin” ในกรณีของฉัน
เริ่มทางลัด“ MSYS2 MinGW 64 บิต” จากเมนูเริ่ม เรียกใช้คำสั่งต่อไปนี้เพื่ออัปเดต (รีสตาร์ท“ MSYS2 MinGW 64-bit” หากถาม):
pacman -Syu
จากนั้นเรียกใช้:
pacman -Su
เครื่องมือติดตั้งมีความจำเป็นสำหรับการสร้าง:
pacman -S คลายซิปแพทช์
ปิด“ เชลล์ MSYS2 MinGW 64 บิต” โดยคำสั่ง“ exit” เราไม่ต้องการมันอีกแล้ว
ขั้นตอนที่ 3: ติดตั้งเครื่องมือสร้าง Visual Studio 2017 รวมถึงเครื่องมือสร้าง Visual Studio 2015
เราต้องติดตั้งชุดเครื่องมือ“ VC ++ 2015.3 v14.00 (v140) สำหรับเดสก์ท็อป” จากเครื่องมือสร้าง Visual Studio 2017 เพื่อสร้าง TensorFlow v1.11:

ขั้นตอนที่ 4: ติดตั้ง Bazel
ดาวน์โหลดบาเซิลล่าสุดได้ที่นี่ ค้นหา bazel- ไฟล์
เพิ่มตัวแปรสภาวะแวดล้อมส่วนกลาง BAZEL_SH สำหรับตำแหน่ง bash เส้นทางของฉันคือ
C: \ Bin \ msys64 \ usr \ bin \ bash.exe
เพิ่มตัวแปรสภาพแวดล้อมโกลบอล BAZEL_VC สำหรับ“ VC ++ 2015.3 v14.00 (v140) ชุดเครื่องมือสำหรับเดสก์ท็อป” ที่ตั้งเครือข่ายเครื่องมือ:
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)
ส่วนนี้เป็นจริงหากคุณมีการ์ดแสดงผล NVIDIA ที่รองรับ CUDA มิฉะนั้นข้ามส่วนนี้
ดูการติดตั้ง CUDA แบบเป็นขั้นตอนที่นี่หากคุณต้องการความช่วยเหลือ ฉันคัดลอกวางคำแนะนำนั้น แต่ตัดรายละเอียดบางอย่าง
ไปที่ https://developer.nvidia.com/cuda-downloads และดาวน์โหลดตัวติดตั้ง CUDA 10.0 สำหรับ Windows [รุ่นของคุณ] สำหรับฉันรุ่นคือ Windows 10
ติดตั้งในตำแหน่งเริ่มต้นด้วยการตั้งค่าเริ่มต้น แต่ไม่เลือกตัวเลือกการรวม VisualStudio มันจะอัปเดตไดรเวอร์ GPU ของคุณหากต้องการและรีบูต
ไปที่ Run (Win + R) พิมพ์ cmd
คำสั่งต่อไปนี้จะตรวจสอบเวอร์ชัน nvcc และประกันว่ามันถูกตั้งค่าในตัวแปรสภาพแวดล้อมของเส้นทาง
nvcc - รุ่น
goto ถัดไป https://developer.nvidia.com/cudnn (จำเป็นต้องมีสมาชิก)
หลังจากเข้าสู่ระบบดาวน์โหลดต่อไปนี้:
cuDNN v7.3.1 ไลบรารี่สำหรับ Windows [เวอร์ชั่นของคุณ] สำหรับฉัน Windows 10. ไปที่โฟลเดอร์ดาวน์โหลดแล้วและแตกไฟล์ 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 \ พิเศษ \ CUPTI \ libx64” ไปยังตัวแปรสภาพแวดล้อม% PATH%
ขั้นตอนที่ 7: กำหนดค่าสภาพแวดล้อมการสร้าง
เริ่มต้นเชลล์ VC ++ 2015 สำหรับทางลัด x64 (“ VS2015 x64 เครื่องมือพร้อมรับคำสั่งเครื่องมือพื้นเมือง”) จากเมนูเริ่ม
ต่อไปคุณต้องสร้างเปิดใช้งานและกำหนดค่าสภาพแวดล้อม Python ทำงานภายในคำสั่งเชลล์พร้อมรับคำสั่งเครื่องมือ“ VS2015 x64 Native Command Command” ด้านล่าง (พา ธ ที่ถูกต้องตามตำแหน่งของคุณ)
pip3 ติดตั้ง -U virtualenv
virtualenv --system-site-packages C: \ Users \ amsokol \ tensorflow-v1.11
C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat
เชลล์ของคุณควรมีลักษณะเช่นนั้นหลังจากใช้คำสั่งแล้ว:

ติดตั้งแพ็คเกจ Python ที่จำเป็น:
pip3 ติดตั้งหกล้อ numpy
pip3 ติดตั้ง keras_applications == 1.0.5 - ไม่มีการติดตั้ง
pip3 ติดตั้ง keras_preprocessing == 1.0.3 - ไม่ลบ
เรียกใช้“ รายการ pip3” เพื่อให้แน่ใจว่ามีการติดตั้งแพ็คเกจบังคับ:

นั่นคือทั้งหมดที่สำหรับตอนนี้. อย่าปิดเปลือก
ขั้นตอนที่ 8: Clone TensorFlow source code และใช้ patch ที่จำเป็น
ก่อนอื่นคุณต้องเลือกโฟลเดอร์ที่จะทำการโคลนซอร์สโค้ดของ TensorFlow มันคือ“ C: \ Users \ amsokol \ Development \ tensorflow-build” ในกรณีของฉัน กลับไปที่เชลล์และรัน:
cd C: \ Users \ amsokol \ Development \ tensorflow-build
รหัสที่มาโคลน:
git clone https://github.com/tensorflow/tensorflow
ชำระเงินล่าสุด 1.11 เวอร์ชัน:
ซีดีแรงดึง
git checkout v1.11.0
ตอนนี้เรามีแหล่งที่มา
มีข้อบกพร่องในห้องสมุดบุคคลที่สามของ eigen เราต้องแก้ไขก่อนสร้าง
- ดาวน์โหลดแพทช์ที่นี่และบันทึกด้วยชื่อไฟล์ 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", 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"), ) ...
เสร็จสิ้น
ขั้นตอนที่ 9: กำหนดค่าพารามิเตอร์บิลด์
ตรวจสอบให้แน่ใจว่าเราอยู่ในโฟลเดอร์รากของซอร์สโค้ด:
cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
เรียกใช้ตัวกำหนดค่า:
python ./configure.py
ก่อนอื่นจะถามตำแหน่งของ Python กด Enter เพื่อออกจากค่าเริ่มต้น:
... คุณติดตั้ง Bazel 0.17.2 แล้ว
โปรดระบุตำแหน่งของงูหลาม [ค่าเริ่มต้นคือ C: \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:
จากนั้นจะถามตำแหน่งของเส้นทางของไลบรารี Python กด Enter เพื่อออกจากค่าเริ่มต้น:
Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "" บรรทัดที่ 1 ใน <โมดูล> AttributeError: โมดูล 'เว็บไซต์' ไม่มีแอตทริบิวต์ 'getsitepackages' พบเส้นทางห้องสมุด Python ที่เป็นไปได้: C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ เว็บไซต์แพคเกจ โปรดป้อนเส้นทางของไลบรารี Python ที่ต้องการใช้ ค่าเริ่มต้นคือ [C: \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]
จากนั้นจะถามเกี่ยวกับการสนับสนุน nGraph เราไม่ต้องการมัน กด“ n”:
คุณต้องการสร้าง TensorFlow ด้วยการสนับสนุน nGraph หรือไม่? [y / N]: n จะไม่เปิดใช้งานการสนับสนุน nGraph สำหรับ TensorFlow
จากนั้นจะถามเกี่ยวกับการสนับสนุน CUDA:
คุณต้องการสร้าง TensorFlow ด้วยการสนับสนุน CUDA หรือไม่ [Y / N]:
ตอบ“ y” ถ้าคุณต้องการเร่งความเร็วด้วย GPU มิฉะนั้นกด“ n”
ในกรณีที่ใช่สำหรับตัวกำหนดค่า CUDA ถามคำถามเพิ่มเติม:
ตอบ 10.0 เป็นรุ่น CUDA SDK:
โปรดระบุรุ่น CUDA SDK ที่คุณต้องการใช้ [ปล่อยว่างไว้ที่ค่าตั้งต้นของ CUDA 9.0]: 10.0
กด Enter เพื่อออกจากตำแหน่งชุดเครื่องมือ CUDA เริ่มต้น:
โปรดระบุตำแหน่งที่ติดตั้งชุดเครื่องมือ CUDA 10.0 อ้างถึง README.md สำหรับรายละเอียดเพิ่มเติม [ค่าเริ่มต้นคือ C: / ไฟล์โปรแกรม / ชุดเครื่องมือคำนวณ GPU ของ NVIDIA / CUDA / v10.0]:
ตอบ 7.3.1 เป็นเวอร์ชัน cuDNN:
โปรดระบุรุ่น cuDNN ที่คุณต้องการใช้ [ปล่อยว่างไว้ที่ค่าเริ่มต้นเป็น cuDNN 7.0]: 7.3.1
กด Enter เพื่อออกจากตำแหน่งไลบรารี cuDNN เริ่มต้น:
โปรดระบุตำแหน่งที่ติดตั้งไลบรารี cuDNN 7 อ้างถึง README.md สำหรับรายละเอียดเพิ่มเติม [ค่าเริ่มต้นคือ C: / ไฟล์โปรแกรม / ชุดเครื่องมือคำนวณ GPU ของ NVIDIA / 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
คำถามถัดไปคือการตั้งค่าสถานะการปรับให้เหมาะสม ฉันมีซีพียูรุ่นที่ 6 ของ Intel นั่นเป็นเหตุผลที่ฉันตอบ / arch: AVX2:
โปรดระบุแฟล็กการปรับให้เหมาะสมที่จะใช้ระหว่างการรวบรวมเมื่อระบุตัวเลือก bazel "--config = opt" [ค่าเริ่มต้นคือ / arch: AVX]: / arch: AVX2
คำถามสุดท้ายเกี่ยวกับไอเกน ตอบ“ y” มันช่วยลดเวลารวบรวมอย่างมาก
คุณต้องการที่จะแทนที่ eigen ที่แข็งแกร่งแบบอินไลน์สำหรับการรวบรวม C ++ บางส่วนเพื่อลดเวลาในการรวบรวมหรือไม่? [Y / n]: y Eigen ถูกแทนที่แบบอินไลน์ที่แข็งแกร่ง
การกำหนดค่าเสร็จสมบูรณ์ ให้สร้าง
ขั้นตอนที่ 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: สร้างไฟล์ล้อ TensorFlow สำหรับ Python 3.6
เรียกใช้คำสั่งเพื่อสร้างไฟล์ Python wheel:
mkdir .. \ out
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
มันล้มเหลว:

มีปัญหาที่ทราบอยู่แล้ว ดูที่โฟลเดอร์“ bazel-bin \ tensorflow \ tools \ pip_package” มันมีไฟล์“ simple_console_for_windows.zip” ที่มีความยาวไม่เป็นศูนย์ ปัญหานี้เป็นปัญหา. Bazel มียูทิลิตี้ zip ขนาด 32 บิตที่ล้มเหลวในการเพิ่มขนาดไฟล์ 2GB ดูลิงก์สำหรับรายละเอียดและวิธีแก้ไข:
- 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 / กระตือรือร้น / หลาม / ตัวอย่าง / กัน / mnist.zip = Bazel ออก / x64_windows-opt / bin / tensorflow / contrib / กระตือรือร้น / หลาม / ตัวอย่าง / กัน / mnist.zip
...
มันช่วยฉัน ในกรณีที่ไม่ได้ช่วยให้คุณลบบรรทัดอื่น ๆ ด้วยไฟล์ zip (ดูรายละเอียดที่นี่) วัตถุประสงค์ของกิจกรรมนี้คือการทำให้“ simple_console_for_windows.zip” ความยาวน้อยกว่า 2GB
ลบไฟล์“ simple_console_for_windows.zip” ที่ว่างเปล่า
ดูที่โฟลเดอร์บ้านของคุณ คุณต้องดูโฟลเดอร์ที่มีชื่อเช่น“ _bazel_ <ชื่อผู้ใช้>” มันเป็น“ _bazel_amsokol” ในกรณีของฉัน มันมีโฟลเดอร์ที่มีไฟล์บิลด์ มันคือ "lx6zoh4k" ในกรณีของฉัน กลับไปที่เปลือกรัน (แก้ไขตามชื่อโฟลเดอร์ของคุณ):
cd C: \ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow
สร้างไฟล์“ simple_console_for_windows.zip” ด้วยตนเอง:
ภายนอก \ bazel_tools \ tools \ zip \ zipper \ zip.exe vcC bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tensorflow / เครื่องมือ / pip_package simple_console_for_windows.zip-0.params
เรียกใช้คำสั่งเพื่อสร้างไฟล์ Python wheel:
cd C: \ Users \ amsokol \ Development \ tensorflow-build \ tensorflow
bazel-bin \ tensorflow \ tools \ pip_package \ build_pip_package .. \ out
มันสร้างไฟล์ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl ในโฟลเดอร์“ .. \ out”
ขั้นตอนที่ 12: ติดตั้งไฟล์ล้อ TensorFlow สำหรับ Python 3.6 และตรวจสอบผลลัพธ์
เรียกใช้คำสั่งเพื่อติดตั้งไฟล์ Python wheel:
pip3 ติดตั้ง .. \ ออก \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl
ออกจากไดเรกทอรี“ tensorflow” (เกิดข้อผิดพลาดบางครั้งเมื่อฉันเรียกใช้สคริปต์ Python ภายในโฟลเดอร์ซอร์สโค้ด Tensoflow - ฉันไม่รู้เหตุผล):
ซีดี ..
หากต้องการตรวจสอบสคริปต์ดาวน์โหลดที่นี่หรือคัดลอกและวาง:
นำเข้า tensorflow เป็น TF hello = tf.constant ('สวัสดี TensorFlow!') เซสชัน = tf.Session () พิมพ์ (session.run (สวัสดี))
หากระบบแสดงผลลัพธ์ต่อไปนี้แสดงว่าทุกอย่างเรียบร้อยดี:
สวัสดี TensorFlow!
ผลลัพธ์ของฉัน:

คุณได้ติดตั้ง TensorFlow บนเครื่อง Windows สำเร็จแล้ว
โปรดแจ้งให้เราทราบในความคิดเห็นด้านล่างหากได้ผลสำหรับคุณ หรือถ้าคุณมีข้อผิดพลาด ขอบคุณ!