티스토리 뷰

Pointnet++을 compile하려는 와중에 여러가지 error를 만났다.

 

1. tensorflow/core/framework/op.h 를 include하지 못하는 문제

 

Not found error는 당연히 path 문제일 것이라고 생각해서 path를 확인해봤지만 path에는 문제가 없었다.

tensorflow를 왜 못찾을까... 생각을 해보니

 

'혹시 python3 가 아니라 python2 가 쓰이고 있는건 아닐까?' 하는 생각이 들었다.

 

아니나 다를까

shell script에 쓰여진 command는 python ~~~ 이었고 나의 default python은 python2이고, 내가 tensorflow를 install 해 놓은 것은 python3였기 때문에 안되는 것이었다..ㅇㅅㅇ

 

임시 해결: 모든 sh(3개의 sh)의 python을 python3 로 고쳐주니 잘 해결되었다.

(사실 default python을 python3로 바꾸는 작업을 해주는 게 맞다. 내가 모르는 어딘가에서 python2가 불리고 있을수도 있으니)

 

진정한 해결: default python을 tensorflow가 깔린 ver의 python으로 변경

 

변경방법

 sudo update-alternatives --config python

로 등록된 python 확인

 

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 0

위 명령어를 입력하여 3.6을 (python3.6이 설치된 path 입력해야함) 가장 우선시 등록

 

사실 여러개 등록해놓고

sudo update-alternatives --config python

을 입력하여 default python을 고르게 하는 것이 가장 바람직.

 

 

 

 

2. /usr/bin/ld: cannot find "-ltensorflow_framework" 

 

이번엔 compile option에 들어가있는 '-ltensorflow_framework' 가 말썽을 일으켰다.

이것은 실제로 내 tensorflow path에 libtensorflow_framework.so file이 없어서 생기는 문제였다.

대신 libtensorflow_framework.so.2 가 있었고 이를 softlink로 연결해주면 해결되는 문제였다.

 

해결방법: libtensorflow_framework.so 파일 이름 확인 후 softlink 생성

ls /usr/local/lib/python3.6/dist-packages/tensorflow

로 자신의 tensorflow_framework.so file의 이름을 확인해준다.

나같은 경우는 so.2로 되어있었다.

 

cd /usr/local/lib/python3.6/dist-packages/tensorflow
ln -s libtensorflow_framework.so.2 libtensorflow_framework.so

(cd를 한 이유는 그냥 코드 너무 길어져서 스크롤바 생겨서 했음.. 구냥 바로 해도 됨)

 

 

 

 

3. Version 때문에 생기는 자잘자잘한 친구들

 

1) print 문제 

이 코드는 python2를 기반으로 되어있어서 print 문이 괄호 없이 쓰여진다.

이를 고쳐야한다. print의 양이 많지 않아서 나는 그냥 내가 다 일일이 고쳤다.

 

그러나 python2에서 python3로 넘어가는 뭔가 자동화된 코드가 있지 않을까 해서 찾아보니

2to3 filename.py

를 입력하면 된다고 한다.(나도 해본건아님, 공식사이트 참조함)

https://docs.python.org/ko/3/library/2to3.html

 

2to3 - 파이썬 2에서 파이썬 3으로 자동 코드 변환 — Python 3.9.6 문서

2to3 - 파이썬 2에서 파이썬 3으로 자동 코드 변환 2to3는 파이썬 2.x 소스 코드를 유효한 파이썬 3.x 코드로 변환하기 위해 일련의 변환자(fixers)를 적용하는 프로그램입니다. 표준 라이브러리는 많은

docs.python.org

 

2) AttributeError: module 'tensorflow' has no attribute 'placeholder'

 

이도 역시 나는 tensorflow2.5를 쓰고 있고 이 코드는 tenesorflow1.4를 쓰고 있다.(2017년 코드를 2021년에 쓰니 이런 문제가 발생할 수 밖에)

 

이는 tensorflow version2 에는 placeholder라는 속성이 없기 때문에 생기는 문제이다.

해결: 아래 두줄의 코드 입력

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

그러나 공식 문서에 따르면, 이렇게 할 경우는 tensorflow2.0의 장점들을 이용할 수가 없다고 한다.

(아예 1 동작 방식대로 동작하게 만드는 방법인듯...)

 

이게 싫으면 아래 문서에 여러 방법이 나와있으니 참고해보면 된다.

https://www.tensorflow.org/guide/migrate

 

텐서플로 1 코드를 텐서플로 2로 바꾸기  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수

www.tensorflow.org

 

나는 1인지 2인지가 중요한게 아니라 그냥 pass

+) 저 코드를 써도 해결 안되는 애들이 있어서 그냥 그것들은 일일이 구글링해서 고쳤음. 이렇게 하는게 맞나?

 

 

 

4. Compile 중 WithRank 관련 warning

아니 이거 warining인 줄 알고 걍 무시했다가.. training 과정에서 segmentation fault 가 이 부분에서 떠서 고치고 넘어가야겠다 싶었다. github에 있는 이 문제 관련은 걍 버전을 맞춰라. CUDA, tensorflow-gpu 이런거 버전 다 맞춰라 이런 얘기 밖에 없었는데

결국은 g++ version을 낮춰주면 되는 문제였다. 쳇.. ㅇㅅㅇ

 

 

https://www.tensorflow.org/install/source#gpu

 

소스에서 빌드  |  TensorFlow

소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 명령어는 다른 시스템에도 적용될 수 있지만, Ubuntu 및 macOS용으로만 테스트되었으며 지원됩니다. 참고: 잘 테스트되고

www.tensorflow.org

Version Python version Compiler Build tools cuDNN CUDA
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 GCC 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 GCC 7.3.1 Bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7, 3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.15.0 2.7, 3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.14.0 2.7, 3.3-3.7 GCC 4.8 Bazel 0.24.1 7.4 10.0
tensorflow_gpu-1.13.1 2.7, 3.3-3.7 GCC 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.11.0 7 9
tensorflow_gpu-1.8.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.10.0 7 9
tensorflow_gpu-1.7.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.6.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.5.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.8.0 7 9
tensorflow_gpu-1.4.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.5.4 6 8
tensorflow_gpu-1.3.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5 6 8
tensorflow_gpu-1.2.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7, 3.3-3.6 GCC 4.8 Bazel 0.4.2 5.1 8

 

나는 tensorflow-gpu 1.14.0을 쓰고 있어서 

apt-get install g++-4.8

명령어로 g++ 4.8을 깔아주었다.

그리고 버전 확인하고 안맞으면 update-alternatives 로 version바꿔주었다.

 

그랬더니 깔끔히 빌드 끝!

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함