최근 anomaly detection에 관심이 생겨 hugging face에 배포되어 있는 모델 하나를 가져와 사용하였다.
keras 기반의 deep learning 모델이었는데, 해당 모델을 사용하려면 keras 버전이 3.x 미만이어야 한다는 조건이 있었다. 당시 필자의 서버에 설치되어 있는 keras 버전은 3.0.5였길래 버전을 맞추고자 2.x 버전으로 재설치를 시도하였지만 여러가지 오류들이 발생하여 이를 해결하기 위해 몇 시간 고생했다. 그 내용을 정리해보려 한다.
- hugging face 모델 정보 :
https://huggingface.co/keras-io/timeseries-anomaly-detection
첫 번째 문제 상황
pip show keras/tensorflow 명령어를 입력해서 나오는 경로를 확인하면, 이 패키지들은 python3.8 폴더 안에 저장되어 있다. (아래 사진 참고)
그런데 왜 python --version을 입력해서 내가 현재 사용하고 있는 파이썬의 버전을 확인하니 3.9.18이라고 뜨는 걸까?
>> 작업 환경에 대한 인지가 필요한 문제였다. 현재 나는 conda 환경에서 작업하고 있기 때문에, 명령어는 pip가 아니라 conda로 해야한다.
그렇게 첫 번째 의문은 해결하고 두 번째 문제로 넘어갔다. 첫 번째 상황에서 배운 점을 그대로 써먹어서, pip install keras가 아닌 conda install을 사용해주었다. 참고로 conda 명령어를 사용하여 설치할 때는 채널명을 지정해서 명령어를 입력해주어야 한다. 자세한 내용은 아래 링크를 참고하길 바란다.
https://anaconda.org/conda-forge/keras
두 번째 문제 상황
conda install을 사용해서 keras 2.16 버전을 설치했는데 왜 버전을 확인해도 그대로인 것일까?
>> 이유는 간단했다. keras/tensorflow에서 2.16.0 버전을 지원하지 않기 때문이다. 사이트 찾아보고 현재 지원하고 있는 2.15.0 버전으로 설치하고 맞췄더니 버전 맞추는 건 done. 부디 다음 번에는 설치하고자 하는 패키지의 사이트에 들어가 지원하는 버전 정보를 정확히 알고 시도하길 바란다.
https://pypi.org/project/keras/2.15.0/#history
꿀팁 하나를 기록하자면, 이렇게 버전이 꼬이고 여러 오류들이 연쇄적으로 발생할 때는 계속 붙들고 있지 말고 가상환경을 새로 하나 만드는 걸 추천한다. 필자도 계속 vacation_dl 가상환경에서 사용하다가 'jsys'라는 가상환경을 만들어서 처음부터 다시 진행했더니 보다 수월하고 깔끔하게 이어나갈 수 있었다.
세 번째 문제 상황
새로운 가상환경(jsys)에 새로 설치한 패키지들의 버전까지 모두 성공적으로 맞춘 뒤, 다시 코드를 돌리러 jupyter notebook을 실행시켜 코드를 돌려보았는데 여전히 동일한 오류가 발생한다.
여기서 한참 헤맸는데, 이 문제상황의 해결 방법은 가상환경과 jupyter notebook을 연결해주는 것이었다.
쉽게 말해, 두 개의 섬나라를 오가기 위해서 다리가 필요하듯 내가 생성한 가상환경과 jupyter notebook 환경을 연결지어주는 무언가가 필요했던 것이다. 그게 바로 'kernel'이다.
커널을 지정해주는 방법은 아주아주 간단한다.
0. 우선 다음 과정은 가상환경을 생성했다는 가정 하에 진행된다.
가성환경 생성 방법이 궁금하다면 이 게시글을 참고하길 바란다. >> https://sunnybae1023.tistory.com/3
1. Terminal 창에서 다음 명령어를 통해 ipykernel 패키지를 설치한다.
pip install ipykernel
2. 다음 명령어로 커널을 추가하고 Jupyter notebook을 확인하면 "[커널명]"의 이름으로 새로운 가상환경이 생긴 것을 확인할 수 있다.
python -m ipykernel install --user --name [가상환경명] --display-name "[커널명]"
웬만하면 두 가지의 이름을 동일하게 맞춰주는 것이 나중에 덜 헷갈릴 것이다.
필자는 아래와 같은 입력어를 통해 'jsys'라는 가상환경과 jupyter notebook을 연결하는 kernel 'jsys'을 지정해주었다.
python -m ipykernel install --user --name jsys --display-name "jsys"
3. 이제 jupyter notebook을 실행시키기 전에 위의 'kernel' 탭에서 해당하는 커널을 설정해준 뒤 코드를 실행하면 해당 가상환경에서 정상적으로 작동할 것이다.
>> 정리하자면, 가상환경을 새로 만들었으면 무조건 kernel을 만들고 지정해야 한다. 그렇지 않으면 가상환경과 jupyter notebook 연결이 되지 않아서 가상환경 백 개를 만들어도 적용되지 않는다는 걸 명심하자!!
결론적으로 버전 다 맞추고 kernel을 생성하지 않아서 jupyter notebook에서 코드 실행했을 때 작동되지 않았던 것이었다. 앞으로 만약 버전이 충돌하는 상황이 발생하면, '새로운 가상환경 생성 >> 버전 맞추기 >> kernel 연결'
이 과정을 진행해보면 쉽게 해결할 수 있을 것이다.
'개발환경' 카테고리의 다른 글
[개발환경] 가상환경이란? / 아나콘다 가상환경 생성·삭제하기 (2) | 2024.01.30 |
---|