[업데이트 1] bazel 및 Python 3.6을 사용하여 소스 코드에서 Windows 용 TensorFlow GPU / CPU를 빌드하고 설치하는 방법

이것은 이전 이야기에 대한 업데이트입니다. 새로운 기능 :

  • 텐서 플로우 v1.11
  • CUDA v10.0
  • cuDNN v7.3

공식 사이트에 가이드가 있습니다. 매우 포괄적이지는 않지만 때로는 유용합니다.

개요

  1. Windows 용 Git 설치
  2. Bazel 설치
  3. MSYS2 x64 및 명령 행 도구 설치
  4. Visual Studio 2015 빌드 도구를 포함한 Visual Studio 2017 빌드 도구 설치
  5. Python 3.6 64 비트 설치
  6. NVIDIA CUDA 10.0 및 cuDNN 7.3 설치 (GPU 가속 용)
  7. 빌드 환경 구성
  8. TensorFlow v1.11 소스 코드 복제 및 필수 패치 적용
  9. 빌드 매개 변수 구성
  10. 소스에서 TensorFlow 빌드
  11. Python 3.6 용 TensorFlow 휠 파일 생성
  12. Python 3.6 용 TensorFlow 휠 파일 설치 및 결과 확인

1 단계 : Windows 용 Git 설치

Git for Windows를 다운로드하여 설치하십시오. 내가 여기 가져가 git.exe에 대한 경로가 % PATH % 환경 변수에 추가되었는지 확인하십시오. 나는 Git을

C : \ Bin \ Git

이 튜토리얼의 폴더.

2 단계 : MSYS2 x64 및 명령 줄 도구 설치

여기에서 64 비트 배포판을 다운로드하여 설치하십시오. Bazel은 grep, patch, unzip 및 Unix-tools의 다른 포트를 사용하여 소스를 빌드합니다. 각각에 대해 독립 실행 형 바이너리를 찾을 수는 있지만 MSYS2 번들을 사용하는 것이 좋습니다. 나는 그것을 설치

C : \ Bin \ msys64

이 튜토리얼의 폴더. 도구가있는 폴더를 % PATH % 환경 변수에 추가해야합니다. 제 경우에는“C : \ Bin \ msys64 \ usr \ bin”입니다.

시작 메뉴에서 "MSYS2 MinGW 64 비트"바로 가기를 시작하십시오. 다음 명령을 실행하여 업데이트하십시오 (“MSYS2 MinGW 64 비트”가 다시 시작되면 다시 시작하십시오).

팩맨-수

그런 다음 다음을 실행하십시오.

팩맨-수

빌드 도구는 빌드에 필요합니다.

팩맨 -S 패치 압축 해제

“exit”명령으로“MSYS2 MinGW 64 비트”쉘을 닫습니다. 더 이상 필요 없습니다.

3 단계 : Visual Studio 2015 빌드 도구를 포함한 Visual Studio 2017 빌드 도구 설치

TensorFlow v1.11을 빌드하려면 Visual Studio 2017 빌드 도구에서“데스크탑 용 VC ++ 2015.3 v14.00 (v140) 툴셋”을 설치해야합니다.

4 단계 : Bazel 설치

최신 바젤을 다운로드하십시오. bazel- -windows-x86_64.exe 파일을 찾으십시오. 이 자습서를 bazel 0.17.2로 테스트했습니다. 이진의 이름을 bazel.exe로 바꾸고 % PATH %의 디렉토리로 옮기십시오. 따라서 모든 디렉토리에 bazel을 입력하여 Bazel을 실행할 수 있습니다. 문제가있는 경우 Windows x64 용 Bazel 설치 세부 사항을 참조하십시오.

bash 위치에 BAZEL_SH 글로벌 환경 변수를 추가하십시오. 내 길은

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

“데스크탑 용 VC ++ 2015.3 v14.00 (v140) 툴셋”툴 체인 위치에 BAZEL_VC 글로벌 환경 변수를 추가하십시오.

C : \ 프로그램 파일 (x86) \ Microsoft Visual Studio 14.0 \ VC

5 단계 : Python 3.6 64 비트 설치

TensorFlow는 Python 3.7을 지원하지 않으므로 3.6 버전을 설치해야합니다.
TensorFlow v1.11이 Anaconda / Miniconda를 더 이상 빌드하도록 지원하지 않는 것 같습니다. 이상한 오류가 발생합니다. 그래서 파이썬 가상 환경을 빌드에 사용합니다.

Python 3.6은 여기에서 다운로드 할 수 있습니다. 설치하고 python.exe의 위치를 ​​% PATH % 변수에 추가하십시오.

6 단계 : NVIDIA CUDA 10.0 및 cuDNN 7.3 설치 (GPU 가속 용)

이 섹션은 CUDA를 지원하는 NVIDIA 그래픽 카드가있는 경우에 해당됩니다. 그렇지 않으면이 섹션을 건너 뛰십시오.
도움이 필요하면 CUDA의 단계별 설치를 참조하십시오. 해당 가이드를 복사하여 붙여 넣지 만 세부 정보를 잘라냅니다.

https://developer.nvidia.com/cuda-downloads로 이동하여 Windows 용 CUDA 10.0 설치 프로그램 [사용자 버전]을 다운로드하십시오. 나에게 버전은 Windows 10입니다.

기본 설정으로 기본 위치에 설치하지만 VisualStudio 통합 옵션을 선택 취소하십시오. 필요한 경우 GPU 드라이버를 업데이트하고 재부팅합니다.

실행 (Win + R) cmd로 이동하십시오.

다음 명령은 nvcc 버전을 확인하고 경로 환경 변수에 설정되어 있는지 확인합니다.

nvcc-버전

다음 https://developer.nvidia.com/cudnn으로 이동하십시오 (회원 자격 필요).

로그인 후 다음을 다운로드하십시오.

Windows 용 cuDNN v7.3.1 라이브러리 [사용자 버전] 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 \ extras \ CUPTI \ libx64"를 % PATH % 환경 변수에 추가하는 것입니다.

7 단계 : 빌드 환경 구성

시작 메뉴에서 x64 용 VC ++ 2015 셸 (“VS2015 x64 기본 도구 명령 프롬프트”바로 가기)을 시작합니다.

다음으로 Python 환경을 생성, 활성화 및 구성해야합니다. 아래의“VS2015 x64 기본 도구 명령 프롬프트”셸 명령 내에서 실행하십시오 (위치에 따라 올바른 경로).

pip3 설치 -U virtualenv
virtualenv-시스템 사이트 패키지 C : \ Users \ amsokol \ tensorflow-v1.11
C : \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ activate.bat

셸은 명령이 적용된 후 다음과 같아야합니다.

필수 Python 패키지를 설치하십시오.

pip3 여섯 numpy 휠 설치
pip3 설치 keras_applications == 1.0.5 --no-deps
pip3 설치 keras_preprocessing == 1.0.3 --no-deps

“pip3 list”를 실행하여 필수 패키지가 설치되었는지 확인하십시오.

지금은 여기까지입니다. 껍질을 닫지 마십시오.

8 단계 : TensorFlow 소스 코드 복제 및 필수 패치 적용

우선 TensorFlow 소스 코드를 복제 할 폴더를 선택해야합니다. 내 경우에는“C : \ Users \ amsokol \ Development \ tensorflow-build”입니다. 쉘로 돌아가서 다음을 실행하십시오.

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

복제 소스 코드 :

자식 클론 https://github.com/tensorflow/tensorflow

1.11 버전의 최신 체크 아웃 :

CD 텐서 플로우
자식 체크 아웃 v1.11.0

이제 소스가 있습니다.

고유 타사 라이브러리에 버그가 있습니다. 빌드하기 전에 수정해야합니다.
  • 여기에 패치를 다운로드하고 파일 이름 eigen_half.patch를 써드 파티 폴더에 저장하십시오.
  • patch_file = clean_dep (“// third_party : eigen_half.patch”)를 eigen_archive 섹션에 tensorflow / workspace.bzl 파일에 추가하십시오.

tensorflow / workspace.bzl 파일의 결과는 다음과 같아야합니다.

...
tf_http_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 = "고유-고유 -fd6845384b86",
  build_file = clean_dep ( "// third_party : eigen.BUILD"),
  patch_file = clean_dep ( "// third_party : eigen_half.patch"),
)
...

끝난.

9 단계 : 빌드 매개 변수 구성

소스 코드 루트 폴더에 있는지 확인하십시오.

cd C : \ 사용자 \ amsokol \ 개발 \ tensorflow-build \ tensorflow

구성자를 실행하십시오.

파이썬 ./configure.py

먼저 파이썬의 위치를 ​​묻습니다. 기본값을 유지하려면 Enter를 누르십시오.

...
bazel 0.17.2가 설치되었습니다.
파이썬의 위치를 ​​지정하십시오. [기본값은 C : \ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe입니다.] :

그런 다음 Python 라이브러리 경로의 위치를 ​​묻습니다. 기본값을 유지하려면 Enter를 누르십시오.

역 추적 (가장 최근 통화) :
  <모듈>의 파일 "<문자열>", 1 행
AttributeError : 'site'모듈에 'getsitepackages'속성이 없습니다.
가능한 파이썬 라이브러리 경로를 찾았습니다.
  C : \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site- 패키지
사용할 Python 라이브러리 경로를 입력하십시오. 기본값은 [C : \ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]입니다.

그런 다음 nGraph 지원에 대해 묻습니다. 우리는 필요하지 않습니다. “n”을 누릅니다 :

nGraph를 지원하는 TensorFlow를 구축 하시겠습니까? [y / N] : n
TensorFlow에 대해 nGraph 지원이 활성화되지 않습니다.

그런 다음 CUDA 지원에 대해 묻습니다.

CUDA 지원으로 TensorFlow를 빌드 하시겠습니까? [y / N] :

GPU 가속을 사용하려면 "y"로 대답하십시오. 그렇지 않으면 "n"을 누르십시오.

CUDA 컨 피규 레이터에 대해 예인 경우 추가 질문을합니다.
CUDA SDK 버전으로 답변 10.0 :
사용하려는 CUDA SDK 버전을 지정하십시오. [CUDA 9.0을 기본값으로 비워 두십시오] : 10.0
기본 CUDA 툴킷 위치를 유지하려면 Enter를 누르십시오.
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
기본 cuDNN 라이브러리 위치를 유지하려면 Enter를 누르십시오.
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

다음 질문은 최적화 플래그를 설정하는 것입니다. 6 세대 Intel CPU가 있는데 / arch : AVX2에 응답합니다.

bazel 옵션 "--config = opt"가 지정된 경우 컴파일 중에 사용할 최적화 플래그를 지정하십시오. [기본값은 / arch : AVX] : / arch : AVX2

마지막 질문은 고유에 관한 것입니다. “y”라고 대답하십시오. 컴파일 시간이 크게 줄어 듭니다.

컴파일 시간을 줄이기 위해 일부 C ++ 컴파일에 대해 고유 한 강력한 인라인을 재정의 하시겠습니까? [Y / n] : y
고유의 강력한 인라인이 재정의되었습니다.

구성이 완료되었습니다. 구축 할 수 있습니다.

10 단계 : 소스에서 TensorFlow 빌드

소스 코드 루트 폴더에 있는지 확인하십시오.

cd C : \ 사용자 \ amsokol \ 개발 \ tensorflow-build \ tensorflow
빌드하는 데 시간이 오래 걸립니다. Windows Defender Antivirus 실시간 보호를 포함한 바이러스 백신 소프트웨어를 끄는 것이 좋습니다.

빌드를 실행하십시오.

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

앉아서 잠시 휴식을 취하십시오.

11 단계 : Python 3.6 용 TensorFlow 휠 파일 생성

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에는 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_ ”과 같은 이름의 폴더가 표시되어야합니다. 제 경우에는“_bazel_amsokol”입니다. 빌드 파일이있는 폴더를 포함합니다. 제 경우에는“lx6zoh4k”입니다. 런으로 돌아 가기 (폴더 이름에 따라 수정) :

cd C : \ 사용자 \ 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 wheel 파일을 작성하려면 명령을 실행하십시오.

cd C : \ 사용자 \ amsokol \ 개발 \ 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 wheel 파일을 설치하려면 명령을 실행하십시오.

pip3 설치 .. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

"tensorflow"디렉토리를 그대로 두십시오 (Tensoflow 소스 코드 폴더 내에서 Python 스크립트를 실행할 때 오류가 발생하는 경우가 있습니다. 이유를 모르겠습니다).

cd ..

다운로드 스크립트를 여기에서 확인하거나 복사하여 붙여 넣어 실행하려면 :

tensorflow를 tf로 가져 오기
hello = tf.constant ( '안녕하세요, 텐서 플로우!')
세션 = tf.Session ()
print (session.run (hello))

시스템이 다음을 출력하면 모든 것이 정상입니다.

안녕하세요, 텐서 플로우!

내 출력 :

이제 Windows 시스템에 TensorFlow를 성공적으로 설치했습니다.

그것이 효과가 있다면 아래 의견에 알려주십시오. 또는 오류가있는 경우 감사!