728x90

sh 파일을 이용해서 학습 및 평가를 돌리는 경우가 많은데,

 

이 sh 파일에 띄어쓰기 혹은 줄 바뀜 등, 에러에 의하여

 

shell script error expecting "do" 에러가 뜨는 경우가 있다  

 

이는 해결하기 상당히 귀찮은 문제인데, 인터넷에 자꾸 찾아보다가 매번 까먹어서 여기에다가 올려둔다

 

파일명이 train.sh 일 때

 

cat train.sh | tr -d '\r' >> new_train.sh

 

 

이렇게 하면 동일한 파일 구조내에 new_train.sh 를 얻게되고, 

 

이를 원래 파일에 덮어 씌우면 된다

728x90
728x90

폴더 내의 여러 tar 파일 압축 해제 명령어

 

.tar 확장자

find . -name '*.tar' -exec tar -xvf {} \;

 

.tar.gz 확장자

find . -name '*.tar.gz' -exec tar zxvf {} \;

 

find 명령어로 여러 응용 가능함

728x90
728x90

이전 포스팅에서 pytorch DDP 사용시 conda 문제로 축약되어 게시한 글이 있었다. 해당 글에서는 conda를 최신으로 업데이트하여 문제 해결을 하라고 하였으나, 직접 돌려보니 conda version 문제는 아닌 듯 하다.

 

그러던 도중 다른 연구자들에 따르면, python 3.8에서 이러한 문제들이 자주 생긴다고 주장되었고, 이에 대한 해결책이 python 3.7로 degrading 하여 사용하라는 것이었다.

 

이에 따라 나는 conda latest version에 python 3.7로 세팅하여 실행해보았지만, 같은 문제가 생겼음을 확인하였다.

 

이 와중에 ram memory 문제라는 것이 제기되었다. data loader를 너무 급격히 돌리다보면 system memory가 부족하여 생기는 문제라고 한다.

 

현재 사용중인 서버 환경은 ubuntu 18.04, memory 251G, Swp 30G, RTX 24GB x 8EA이다. 통상적으로 메모리가 512는 되어야 한다고 주장하는 것 같다.

 

반면에, 다른 서버 환경인 memory 126GB, Swp 30.4GB, RTX 24GB x 4EA 에서는 해당 문제가 발생하지 않았다. 즉 parallel DDP를 사용하기 위해서는 memory 혹은 Swp memory 가 더 필요한 것처럼 보일 수 있다.

 

혹은 사용하는 data가 커서 생기는 문제일 수도 있다.

 

현재 사용하는 데이터는 wav 음성을 입력으로 사용하여 pre-trained 된 feature model로 부터 약 3~5MB의 768, T 만큼의 feature를 얻고, 이것을 npy로 저장하고 있다. 이렇듯, 데이터가 커서 생긴 문제일 수도 있을 것 같다.

 

또한, 약 5개의 서버에서 NAS로 묶어서 sharing을 하였는데, 모든 곳에서 같은 data를 read 하다가 부하가 생긴 문제는 아닐까? 라는 생각이 들었다.

 

하지만 추측하건대, system memory를 늘리면 해결가능한 문제인 것으로 보인다.

 

요약

 

1. pytorch DDP 문제 발생

2. conda update 시도 하여 문제 해결 --> 실패

3. python 3.7 버전으로 degrading 하여 문제 해결 --> 실패

4. 결론: system memory 추가 필요

728x90
728x90

Pytorch에서 DDP로 multi-GPU training을 신나게 돌리다가, 종종 에러가 발생한다.

 

 

구글링 결과, anaconda 관련 문제인 것 같았다.

 

main.py 및 DDP loading 과 관련된 문젱는 아니었다.

 

상당히 비슷한 문제가 아래의 링크에 포함되어 있는데,

 

https://github.com/conda/conda/issues/9589

 

Warning about leaked semaphore under Python 3.8 · Issue #9589 · conda/conda

Current Behavior Under Python 3.8, there is a warning printed when running most conda commands: ~/miniconda3/lib/python3.8/multiprocessing/resource_tracker.py:216: UserWarning: resource_tracker: Th...

github.com

 

이들은 모두 conda의 version, 그리고 python version 문제라고 하였다.

 

그래서 나는 우선 conda를 최신으로 업데이트 하였다.

 

conda update --all

 

위의 명령어를 통해서 업데이트 이후, deactivate, 다시 activate 하였다.

 

우선은 다시 돌리고 있는 중인데, 만약 이와 같은 문제가 또 생겼을 경우 python 버전을 3.7로 낮춰서 해봐야 할 것 같다.

728x90
728x90

우분투에서 Anaconda를 설치하는 것은 생각보다 간단한데, initialization 할 때 귀찮은 문제가 종종 생기곤 한다.

 

우선 본인 환경에 맞는 anaconda를 설치한다.

 

https://docs.anaconda.com/anaconda/install/hashes/lin-3-64/

 

Anaconda with Python 3 on 64-bit Linux — Anaconda documentation

 

docs.anaconda.com

 

이 사이트에서 받을 수 있고, 나 같은 경우는 Anaconda3-2021.05-Linux-x86_64.sh 를 사용한다. (2021, 06, 25 기준)

 

다운받아서 우분투로 옮기고,

 

sh ./Anaconda3-2021.05-Linux-x86_64.sh 

 

그 다음 yes

 

enter, 등등..

 

설치가 완료된 뒤, conda init 을 해줘야하는데, 이 때 command not find가 뜬다.

 

이때, 

 

vi ~/.bashrc

export PATH="/your_workspace/anaconda3/bin:$PATH"

(예시: export PATH="/workspace/kaen2891/anaconda3/bin:$PATH")

source ~/.bashrc

 

conda init

 

으로 해결할 수 있다.

 

 

728x90
728x90

우분투 환경에서, python을 사용하여 mp4 파일을 wav로 변환 하는 것에 대해 소개한다.

 

즉, 영상 파일을 음성으로 변경하는 것이다.

 

우선 ffmpeg이 설치되어 있어야 한다.

 

apt-get install ffmpeg 을 하면 되고, sudo 권한이 필요하다.

 

이후 

 

import subprocess


command = "ffmpeg -i {} -ab 160k -ac 2 -ar 44100 -vn {}".format(item, os.path.join(this_path, save_file_id))
    
subprocess.call(command, shell=True)

 

로 진행하면 되며, 이때 item은 mp4 파일, this_path, save_file_id 저장할 wav 파일이다.

 

728x90
728x90

우분투에서 python으로 외부 library를 설치해서 사용해야 될 경우가 많다.

 

특히 open source, github에서 보면 requirements.txt 라는 파일이 종종 보이는데,

 

이는 source code 원작자가 다른 이들이 본인의 것을 사용하기 위해 필요한 version을 명시한 것이다.

 

보통 pip3 을 이용하여 외부 library를 설치하는데, 본인이 설치한 python3 library 확인은 pip3 freeze 를 치면 된다.

 

python external library

 

위의 보이는 것들은 내가 사용하고 있는 library들이다. tensorflow, torch 등이 설치된 것을 볼 수 있다.

 

github에서 보이는 것처럼 내가 쓰고 있는 환경을 다른 서버의 계정, 혹은 남에게 공유하고 싶다면?

 

pip3 freeze > requirements.txt 를 입력하면 된다.

 

 

위의 requirements.txt를 이제 공유하기만 하면 된다.

 

이후 requirements.txt 내의 library들을 설치하고 싶으면,

 

pip3 install -r requirements.txt

 

를 입력하면 된다.

 

728x90
728x90

appropriate binary mode and that you have compiled unzip properly 과 같은 문제가 생겼을 시, 아래와 같은 방법으로 해결이 가능함

 

 

zip -FF my_zip --out my_zip_ver2.zip

 

unzip my_zip_ver2.zip

 

 

728x90
728x90

python의 library를 설치하기 위해 pip, python-pip3을 주로 설치하거나 get-pip.py file을 통하여 설치할 때가 많은데, 이 때 우분투 모듈과의 버전 문제 등 호환이 일어나지 않아서 생기는 문제로 간주된다.

 

이는 아래의 명령어를 통해 해결할 수 있고, 이를 통해 잘 작동함을 볼 수 있다.

 

apt-get install python3-distutils

 

설치 전 문제

No module named 'distutils.util'

관리자 계정 통하여 설치

apt-get install python3-distutils

 

관리자 계정으로 설치 이후 해결 모습

 

* sudo 권한 필요하니 server에서 사용할 경우 관리자에게 설치를 부탁하면 된다.

728x90
728x90

우분투로 apt-get install package, apt install package 를 실행하여도 반응이 없거나 시간이 오래걸릴 때가 있는데, 

 

인터넷에서 찾아본 결과

1) kr.archive.ubuntu.com 을 카카오로 변경하는 법

2) dns-server ip를 변경하는 법

 

이 있었다.

 

1)의 경우에는 apt-get 패키지 다운로드 서버를 변경하는 방법이다.

 

vi /etc/apt/sources.list 를 열고,

 

:%s/kr.archive.ubuntu.com/ftp.daumkakao.com

를 실행하면 된다.

 

이것을 해도 안될 경우 2)로 넘어간다.

 

2)의 경우에는,

 

vi /etc/network/interfaces 를 열고,

 

dns-nameservers 8.8.8.8 8.8.4.4

를 추가해준 뒤, :wq!를 한다.

 

그 후, vi /etc/resolv.conf 를 열고,

기존의 nameserver를 주석 처리 (#) 한 뒤,

nameserver 8.8.8.8

nameserver 8.8.4.4

를 추가해주면 된다.

 

참고로 pip install 도 안 될 경우, 이 방법을 통해서 해결 가능하다.

728x90

+ Recent posts