tensorflow, bazel, MSVC, python의 version을 호환이 가능한 버젼으로 설치해야한다.
아래의 주소에서 CPU/GPU 테스트 된 빌드 구성 확인
Windows10, CPU 기준으로 아래의 version으로 설치
bazel build를 할 때 cc파일에서 complie error가 발생 → pip version issue일 가능성이 높음
pip install --upgrade pip //해당 명령어로 pip version issue 해결
(위 이미지에서 설정한 환경 변수)
- BAZEL_SH
- BAZEL_VC
- BAZEL_WINSDK_FULL_VERSION
- BAZEL_SH: bazel shell창의 경로
- BAZEL_VC: bazel build할 때 필요한 MSVC-2019 Community VC 경로 (build tools의 경로에 해당)
- BAZEL_WINSDK_FULL_VERSION: bazel build할 때 사용하는 VC의 SDK 정보
(위 이미지에서 설정한 환경 변수)
- PATH: bazel이라는 명령어를 shell창에서 사용하기 위해 bazel.exe가 있는 디렉토리 경로
bazel build를 하기 위한 도구로 아래 링크에 접속하여 msys2-x86_64-20221216.exe 설치
MSYS2 x86_64의 bin폴더를 환경 변수 PATH 에 추가한다.
- 아래 명령어를 통해 MYSYS2가 잘 설치 되었는지 확인한다.
```powershell
pacman -S git patch unzip
```
Tensorflow와 호환을 위해 python latest version이 아닌 python-3.8.9를 설치한다.
아래 링크에서 python-3.8.9 windows installer(64bit) 를 찾아서 다운로드 한다.
Python을 사용하기 위해 환경 변수 PATH에 python의 경로를 추가한다.
Python shell 창 경로 추가
C:\Users\INNO-C-535\AppData\Local\Programs\Python\Python38\Scripts
Python application 경로 추가
C:\Users\INNO-C-535\AppData\Local\Programs\Python\Python38
Python library 경로 추가
C:\Users\INNO-C-535\AppData\Local\Programs\Python\Python38\Lib\site-packages
bazel --version //bazel이 올바르게 설치되었다면 version을 확인할 수 있다.
아래 명령어를 통해서 tensorflow에 필요한 six와 keras_preprocessing을 설치한다.
pip install -U six numpy wheel packaging
pip install -U keras_preprocessing --no-deps
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout r2.7
bazel build //tensorflow/tools/pip_package:build_pip_package
build 내역을 지운다.
bazel build --expunge
python 구성 환경을 재설정 한다.
python ./configure.py
다시 bazel로 build한다.
bazel build //tensorflow/tools/pip_package:build_pip_package
cl.exe failed: error executing command error의 ****발생 원인 중 하나가 cl.exe의 경로가 환경 변수에 등록되지 않아서 cl.exe에 접근할 수 없는 것이다.
위 error를 해결하기 위해 아래의 경로를 PATH의 환경 변수에 추가한다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.24.28314\bin\Hostx64\x64
cmd 관리자 모드 창에서 tensorflow를 build하려면 msbuild.exe가 있는 폴더의 경로를 환경 변수로 추가해야 한다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
위의 경로를 시스템 환경 변수 PATH에 추가한다.
C:\Windows\Microsoft.NET\Framework\v4.0.30319
간혹 위의 경로를 추가하라고 설명한 블로그나 글들이 있는데 최근에 release되는 Visual Studio의 msbuild.exe의 경로는 저 위의 경로에 해당하는 것으로 보인다.
pip install --upgrade pip
: MSVC의 MSBUILD toolkit path로 BAZEL_VC의 값을 수정하였다. 이전의 BAZEL_VC는
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC
위와 같은 경로로 되어있었고 이를 아래의 경로로 수정하였다.
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild
out_stream
<< "Your TFLite model has '" << subgraphs->Length()
<< "' subgraph(s). In the subgraph description below, T# represents the "
"Tensor numbers. ";
원래 "Your TFLite model has '"와 "' subgraph(s). In the subgraph description below, T# represents the "에서 ‘ ‘가 특수 기호
와 비슷한 모양으로 되어있었고 이를 ' '로 수정하고 build 한다. -->
를 상수에 줄 바꿈 문자로 인식한다(?)cannot open source file “%%%” (ex. cannot open source file "absl/strings/str_join.h”)
: VSCode에 특정 일부 파일만 열려있고 해당 파일이 참조하고 있는 *.h 파일은 프로젝트 목록에 없어서 발생하는 문제이다. 그러므로 프로젝트 전체를 open하면 해결 된다.
Executing genrule //tensorflow/python/keras/api:keras_python_api_gen_compat_v1 failed (Exit 1): bash.exe failed:
: keras-preprocessing이 install 되지 않았을 때 발생하는 error 라 되어있고
pip install -U --user keras_applications --no-deps
실제로 위 keras_application이 install 되어있지 않았다.
—> 동일한 error가 그대로 발생한다.
: 아래 명령어로 build를 진행
bazel build //tensorflow/tools/pip_package:build_pip_package --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" --noincompatible_do_not_split_linking_cmdline
https://github.com/tensorflow/tensorflow/issues/35770
:환경 변수에 “PYTHON_BIN_PATH”와 “PYTHON_LIB_PATH”라는 별도의 환경 변수를 만들어서 경로를 지정한다. (build 중) → error message와 tensorflow:configure 파일 분석을 통해 내린 결론
—> 동일한 error가 그대로 발생한다.
: 이때 해당 오류가 발생하는 bazel ouput directory의 api_gen_compat_v1이 생기는 폴더 내의 BUILD 파일을 보면 configure.py를 의존하고 있음을 알 수 있고 configure.py의 import를 보면 future 라는 라이브러리가 있는데 이는 python39/Lib/site-package에 없고 python39/Lib 내에 있는 파일이므로 PYTHON_LIB_PATH를 python39/Lib로 수정해야 한다.
: + python의 부분에서 오류가 지속적으로 발생하고 있고 현재 내가 python이 필요한 것이 아니라 C++을 이용하여 ViSQOL을 진행할 것이기 때문에 python에 해당하는 부분은 build에 제외한다.
bazel build tensorflow:tensorflow.dll
위 명령어를 이용하여 오로지 C++ 버전으로 TensorFlow를 build하여 .dll 파일을 만든다. 이 .dll 파일은 아래의 경로에 해당하는 directory 내부에 존재한다.
💡 C:/users/이름/_bazel_이름/xv6zejvsx/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/[tensorflow.dll](https://eehoeskrap.tistory.com/tensorflow.dll)
아래는 build한 결과에 대한 사진이다.
그리고 .dll 파일을 build하여 .lib 파일로 만든다.
bazel build tensorflow:tensorflow.lib
위 명령어를 이용하여 만들어진 *.lib 파일은 아래의 경로에 해당하는 directory 내부에 존재한다.
💡 C:/users/이름/_bazel_이름/xv6zejvsx/execroot/org_tensorflow/bazel-out/x64_windows-opt/bin/tensorflow/[tensorflow](https://eehoeskrap.tistory.com/tensorflow.dll).lib
아래는 build한 결과에 대한 사진이다.
→ 참고 자료
[[TensorFlow] Windows 환경에서 TensorFlow 1.14 버전 Bazel 빌드하기 with C++](https://eehoeskrap.tistory.com/376)
아래 링크를 참고하여 setting 한다.
Visual Studio C++ 2019의 build tools를 설치해야 하는데 이는 이전에 설치를 진행하였으므로 생략한다.
Miniconda Windows Installer를 다운로드한다.
conda 환경을 구축한다. 그래서 cmd를 관리자 모드로 킨 다음 아래의 명령어를 입력한다.
conda create --name tf python=3.9
위 명령어를 통해서 python 3.9 version을 이용하는 tf라는 tensorflow 환경이 구성된다.
pip를 통해서 tensorflow를 설치할 것이므로 pip version을 upgrade한다.
pip install --upgrade pip
pip를 이용해서 tensorflow를 설치한다. 다만, windows WSL이 아닌 Native에서는 tensorflow-2.10 version 까지만 제공이 되고 이 tensorflow는 이전에 만들어두었던 conda 환경인 tf 내에 설치해야한다.
# Anything above 2.10 is not supported on the GPU on Windows Native
pip install "tensorflow<2.11"
아래 명령어를 입력하였을 때 tensor가 반환 되면 tensorflow가 올바르게 설치된 것이다.
python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
먼저 visqol의 github에서 visqol의 code를 git clone 한다.
https://github.com/google/visqol
그리고 아래 명령어를 통해서 visqol을 사용할 수 있도록 build 한다.
bazel build :visqol -c opt
아래의 이미지가 visqol을 build한 결과이다.
bazel-bin\visqol.exe --reference_file "./WAV/PESQ/MOS000001.wav" --degraded_file "./WAV/PESQ/New_Korean_WB_6s_1_1_1_1.wav" --verbose
위 명령어를 통해서 두 .wav 파일 간의 음성 similarity를 0~5 사이의 값으로 표현할 수 있다.
하.. 컴파일이 미치도록 안된다 했더니.. bazel 구버전(5.0이하) 에선 bazel 이슈, 그 이상에선 bazel의 관리자 권한? 이 바뀌어서 관리자 cmd에 권한을 켜줘야 하는데, 켜줘도 여전히 권한 오류.. 결론은 bazel 및 python 속성->관리자 권한으로 실행 체크하고, 다시 cmd 에 관리자 권한으로(쫄려서 파워쉘로 가동) 돌리니.. 이제야 컴파일.. 꼬박 하루 밤새고.. 이제 컴파일 절반정도 되었는데 제발 오류 안뜨길 ㅠㅠ