[설치]

1. docker 설치

curl -fsSL https://get.docker.com/ | sudo sh

2. nvidia-docker 설치

아래 사이트를 참고하여 설치

https://github.com/NVIDIA/nvidia-docker

 

3. [선택] sudo 명령 간소화

 

sudo usermod -aG docker $USER

위 명령어를 수행 후 재부팅

 

[Docker 기초 커맨드]

docker pull [NAME]: 도커 허브로부터 도커 이미지 다운로드

docker create [IMAGE]: 이미지로부터 컨테이너 생성

docker exec [CONTAINER] [COMMAND] : 특정 컨테이너를 대상으로 커맨드 수행

docker attach [CONTAINER]: 특정 컨테이너 접속

docker run [IMAGE]: docker pull/create/exec를 동시에 수행 (디폴트 커맨드: /bin/bash)

 - ex) docker run --gpus all --name pytorch -it --rm pytorch/pytorch /bin/bash

   => --gpus all: GPU 사용 선언 (nvidia-docker 전용, 선언하지 않으면 cuda 사용 불가)

   => --name pytorch: 컨테이너 이름(사용자 지정, 중복불가)

   => -it: tty로 도커 컨테이너를 사용하도록 함 (자세한건 참조 페이지 1 확인)

   => --rm: 도커 컨테이너가 종료되면 컨테이너를 자동 제거

   => pytorch/pytorch: 도커 이름 (레포지토리+태그)

   => /bin/bash: 수행할 커맨드 (nvidia-smi 등의 명령어를 의미)

 

docker rm (--force) [CONTAINER_ID]: 생성한 컨테이너 제거

  - ID의 풀네임 대신 앞글자 일부만 입력 가능 (단, 중복되는 ID가 없어야함)

  - ex) container_id: 37b81722dadc => docker rm 3 or 37 or 37b ...

docker rmi [IMAGE_ID]: 이미지 제거

docker ps -a : 컨테이너 상태 확인

docker images : 이미지 확인

 

 

참조 페이지

1. https://www.popit.kr/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%B2%98%EC%9D%8C-docker-%EC%A0%91%ED%95%A0%EB%95%8C-%EC%98%A4%EB%8A%94-%EB%A9%98%EB%B6%95-%EB%AA%87%EA%B0%80%EC%A7%80/

2. https://velog.io/@lazysoul/Docker-Basic-Usage

 

'실습 > Ubuntu' 카테고리의 다른 글

terminal에서 google drive 파일 받기  (0) 2019.12.02
requirements.txt 생성  (0) 2019.02.05
Ubuntu 설치 시 nouveau 오류, 빈화면 문제  (0) 2018.10.31
우분투에서 폴더 삭제하기  (0) 2018.07.10
ppa 추가 및 제거  (0) 2018.05.10

ssh_config 파일을 만들고,

 

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 30

 

라고 적어 넣는다.

 

 

그리고

ssh 커맨드에 "-F ssh_config" 옵션을 추가하면 됨.

ex) ssh -F ssh_config name@host -p 7777

 

FILEID: 다운로드 링크 주소에 id={???}에 해당되는 값

 

* 일반 크기의 파일

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME

 

* 큰 크기의 파일 ("파일이 너무 커서 Google에서 바이러스를 검사할 수 없습니다. 그래도 파일을 다운로드하시겠습니까?" 라고 뜨는 파일들)

curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=FILEID" > /dev/null
curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=FILEID" -o FILDNAME

 

 

'실습 > Ubuntu' 카테고리의 다른 글

docker (nvidia-docker) 기본 사용  (0) 2020.02.12
requirements.txt 생성  (0) 2019.02.05
Ubuntu 설치 시 nouveau 오류, 빈화면 문제  (0) 2018.10.31
우분투에서 폴더 삭제하기  (0) 2018.07.10
ppa 추가 및 제거  (0) 2018.05.10

가끔 모델 학습이나 테스트를 진행하다보면

난데없이 'killed'라는 문구만 뜨고 종료될 때가 있다.

 

상당히 당혹스러운데, 찾아보니

sudo dmesg

명령을 통해 로그를 확인할 수 있다.

 

그리고 이런 경우는 대부분 RAM(GPU RAM 아님) 문제라고한다. 

참고로 램 용량은

free 또는 free -m (MB단위) 로 확인할 수 있다.

오류 내용

---------------------------------------------------------------------

Collecting package metadata (current_repodata.json): failed

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.

If your current network has https://www.anaconda.com blocked, please file
a support request with your network engineering team.

SSLError(MaxRetryError('HTTPSConnectionPool(host=\'repo.anaconda.com\', port=443): Max retries exceeded with url: /pkgs/main/win-64/current_repodata.json (Caused by SSLError("Can\'t connect to HTTPS URL because the SSL module is not available."))'))

---------------------------------------------------------------------

 

해결 방법

1. "아나콘다경로/Library/bin/" 경로 열기

2. 다음 네 가지 파일들을 복사

libcrypto-1_1-x64.dll

libcrypto-1_1-x64.pdb

libssl-1_1-x64.dll

libssl-1_1-x64.pdb

3. "아나콘다경로/DLLs/" 경로에 붙여넣기

 

1. 시스템 환경변수 Path에 "아나콘다경로\Library\bin" 추가

 - 그래도 안되면 위에 적었던 해결방법 참조

 

-------

그 밖에

conda install openssl,

이전 버전의 아나콘다 설치,

 conda config --set ssl_verify false

등의 해결책들을 알게 되었지만 나에겐 아무것도 통하지 않았음.

결국 위에 써놓은 방법으로 해결함.

 

zipfile을 이용하면 zip 파일의 압축을 해제할 수 있다.

 

파일이 한글일 경우 깨짐 현상이 발생하는데,

구글링하면 이를 해결한 글을 찾을 수 있다.

http://www.hanbit.co.kr/media/channel/view.html?cms_code=CMS8947142043

 

파이썬을 사용해 한글 파일명을 포함한 ZIP 파일 압축 해제

ZIP 압축과 인터넷 인터넷을 사용하는 인구가 늘면서 많은 사람이 대용량의 파일을 주고 받기 시작했다. 인터넷 이전의 지역적인 통신망이었던 PC 통신에서도 여러 개의 파일을 주고 받기 위해 다양한 압축 유틸리티가 사용되었다. 많은...

www.hanbit.co.kr

 

그런데 python 2.x만 가능하고, python 3.x에는 적용되지 않는다.

python 3.x 관련글을 찾으려 했으나, 아무런 포스팅이 없다.

 

그래서 이래저래 찾아본 결과 해결책을 찾을 수 있었다.

결과적으로

기존 member.filename = member.filename.decode("euc-kr").encode("utf-8")를

member.filename.encode('cp437').decode('euc-kr')로 변경하면 된다.

 

풀 코드는 아래처럼 쓰면 된다.

(참고로 이전 글의 함수에서 dest_path 기능이 없길래 추가했다.)

def unzip(source_file, dest_path):
    with zipfile.ZipFile(source_file, 'r') as zf:
        zipInfo = zf.infolist()
        for member in zipInfo:
            try:
                print(member.filename.encode('cp437').decode('euc-kr', 'ignore'))
                member.filename = member.filename.encode('cp437').decode('euc-kr', 'ignore')
                zf.extract(member, dest_path)
            except:
                print(source_file)
                raise Exception('what?!')

 

하지만 euc-kr로 표현되지 않는 파일명은 여전히 깨지긴한다.

https://code.i-harness.com/ko-kr/q/567710

https://stackoverflow.com/questions/5666576/show-the-progress-of-a-python-multiprocessing-pool-map-call

pip freeze > requirements.txt

conda update conda

conda install nb_conda


몇몇 패키지들이 설치가 안되는 경우가 있다.

증상 : Solving environment: /  만 뜨다가 그냥 종료.


이는 Windows Defender 때문에 일어나는 문제이다.

Windows Defender에 들어가서

방화벽 및 네트워크 보호에 도메인/개인/공용 네트워크를 모두 비활성화 시키면 해결된다.

'실습 > 오류 해결' 카테고리의 다른 글

Ubuntu 'killed' 오류  (0) 2019.10.24
anaconda SSL 관련 오류 해결  (15) 2019.10.18
pyinstaller PyQt5 오류  (0) 2018.10.12
Pytorch out of memory 오류  (0) 2018.08.30
[mujoco] command 'gcc' failed with exit status 1` 오류 해결  (0) 2018.08.13

개념


자료형 : https://blog.colab.kr/2

언더스코어(_) 개념 : https://mingrammer.com/underscore-in-python/

getter/setter 필요성 : https://mygumi.tistory.com/161




기본 모듈/함수


파일 경로 : https://hashcode.co.kr/questions/197/python%EC%9C%BC%EB%A1%9C-%ED%98%84%EC%9E%AC-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EC%9C%84%EC%B9%98%EB%A5%BC-%EC%95%8C%EC%95%84%EB%82%B4%EB%8A%94-%EB%B0%A9%EB%B2%95

UUID : https://code.tutsplus.com/ko/tutorials/quick-tip-how-to-create-a-universally-unique-identifier-in-python--cms-25927



아래 커맨드 입력

conda upgrade conda

학습을 끝내고 성능 테스트 때 괜찮은 성능을 보였다.

그런 모델을 저장하고, 다른 코드에서 load_state_dict 으로 불러들여서 사용하려한다.


근데 모델을 저장하기 전 성능이 나오질 않는다.


이럴 땐 일부 레이어를 list 안에 넣어놨는 지 의심해야한다.

model 클래스는 다 nn.Module을 상속해서 정의하는데,

self의 속성으로 레이어를 직접 정의하지 않고,

self.layers = [nn.Linear, nn.Conv2D 등..] 식으로 저장하고 사용했다면

위와 같은 문제가 발생한다.


그 이유는 list로 저장해두면 모델 저장 시, 이 레이어들이 인식되지 않는다.

그래서 list안의 레이어들만 빼놓고 나머지 layer들의 weight만 저장된다.


이에 따라 다른 코드에서 load_state_dict 시, list 안의 layer는 학습되지 않은 날 레이어들이 된다.


이 문제는 nn.ModuleList로 해결 가능하다.

위의 self.layers를

self.layer_module = nn.ModuleList(self.layers)

과 같이 선언하고

self.layer_module을 list처럼 쓰면 말끔히 해결한다. (리스트 처럼 인덱싱 가능, +로 이어 붙이기도 가능)


이걸 몰라서 정말 많은 고생을 했다....

'실습 > pytorch' 카테고리의 다른 글

Pytorch eval 성능 문제  (0) 2018.11.08
PyTorch GPU check  (1) 2018.08.29
pytorch 메모  (0) 2018.03.11

eval 모드로 학습한 네트워크를 실험해보면

성능이 엄청나게 낮아지는 현상을 발견했다.


처음엔 그냥 학습이 안되서 그런건 줄 알았는데,

진짜 일주일 동안 별짓 다하다가 pytorch의 버그라는걸 알게됬다.


검색해보니 이미 유명한 버그다.

문제는 batchnorm 얘 때문이다.

eval 할 때 momentum 값이 제대로 초기화되지 않아서 발생하는 것 같다.

pytorch 1.0이 새로 나왔던데, 해결했는지는 모르겠다.

그 전의 최신버전은 0.4.1 버전도 이 문제를 갖고있다.

화남


그리고 이번에 여러 네트워크를 동시에 사용하려 했는데,

여러 네트워크를 정의해도 위처럼 성능이 저하되는 문제를 발견했다.

진짜 이건 이유를 모르겠다. 해결법도 모르겠어서 분석중이다..


'실습 > pytorch' 카테고리의 다른 글

load_state_dict 성능 문제, [nn.ModuleList]  (2) 2018.11.08
PyTorch GPU check  (1) 2018.08.29
pytorch 메모  (0) 2018.03.11

Ubuntu 설치 시 nouveau 오류를 볼 수 있는데,

이는 nvidia와 충돌되어 나타나는 오류라고한다.


그리고 우분투 설치 후, 부팅 시 보라색 화면만 뜨고,

아무것도 뜨지 않는 현상이 발생하는데

이는 내가 생각했을 때, 메인보드 세팅의 문제이다.



1. nouveau 오류

우분투 설치 시 install 메뉴에서

'e'를 누른다.

그러면 텍스트 창이 뜰텐데,

quiet splash 라고 쓰인 부분 뒤에 nomodeset 을 입력한다.

--- 가 있으면 이는 지우고 입력.

quiet splash --- => quiet splash nomodeset

그리고 F10을 눌러 설치를 진행한다.

그러면 noueau 오류는 사라져있다.


2. noueau 오류를 해결했는데, 부팅 시 빈 화면만 나오는 경우

시모스세팅창에서 boot 부분을 보면

fast boot라는 부분이 있을텐데, 이 부분을 비활성화한다.

그리고 windows UEFI 라고 적힌 부분이 있을 것이다.

이부분을 기타 OS로 변경한다.

그리고 부팅하면 선택창이 뜨는데, 이 때 그냥 우분투 실행하지 말고, e를 누르고

1번처럼 splash 부분을 찾아서 그 뒤에 nomodeset을 입력한다.

F10을 눌러 진행하면 정상적으로 부팅된 모습을 볼 수 있다.


3. nvidia 드라이버 설치

그냥 팁인데,

nvidia 사이트에서 직접 드라이버 파일을 받는 것보다

설정 - 소프트웨어/업데이트 을 눌러서

additional ??? 탭에 들어간다

그러면 아래 항목중에 nvidia 384.XXX 등으로 숫자가 써져있는 것들이 있을 것이다. [사전 인터넷 연결은 필수]

그걸 눌러서 change하고 재부팅하라고 뜨면 재부팅하면 된다.

매우 간편!


'실습 > Ubuntu' 카테고리의 다른 글

terminal에서 google drive 파일 받기  (0) 2019.12.02
requirements.txt 생성  (0) 2019.02.05
우분투에서 폴더 삭제하기  (0) 2018.07.10
ppa 추가 및 제거  (0) 2018.05.10
sh 파일에 권한 부여하기 (Permission denied error)  (0) 2018.03.05

cygwin를 통해 vim 등의 명령어 사용 가능


위키 설명

https://ko.wikipedia.org/wiki/%EC%8B%9C%EA%B7%B8%EC%9C%88


시그윈 사이트

http://www.cygwin.com/

VS Code와 Anaconda 환경이 설치되어있어야함.


Ctrl + Shift + P 로 커맨드 열기.

사용하고 싶은 Anaconda 환경 선택.


잘 됬는지 확인하고 싶으면, VS code내 터미널에서 확인하면됨

학교 과제할 때

한글(HWP) 파일 등으로 코드를 복사할 일이 많은데,

컨CV하면 형식도 안맞고, 모양도 별로인 경우가 많다.


이때 HTML로 복사하는 기능을 알면 상당히 깔끔하게 복사할 수 있다.


pycharm 뿐만 아니라 여러 에디터에서 이 기능을 지원하니, 잘 찾아보자

pycharm의 경우는

File - export to html 이라는 기능을 통해 할 수 있다.

저 버튼을 누르고, 옵션 확인후 export하면

html 파일이 만들어진다.


그리고 html 파일을 들어가서 복사한 뒤 한글에 붙여넣으면 된다.

매우 쉬움.

사실 pycharm가 번거로운 경우이고, 다른 에디터들은 바로 html 형식으로 클립보드에 복사할 수 있다.


아 그리고 한글에 붙여넣을 때는 '원본 형식 유지'로 붙여넣어야한다.

https://winterj.me/pyinstaller/

loss.backward() 시에 메모리 오류가났다

그래서 이에 관련하여 많은 정보들을 구글링함.

나한테 맞는 해결책은 1도 없었다..

결국 원인을 추적해서 해결함


구글링한 지식들이 아까워서 정리해보았다.

아래는 오류가 나는 상황들과 해결책이다.


1. for문 구조에 의한 data 중복

  python 기본 구조로 for문 사용 시, 이전 타임의 데이터를 가지고 있다고함

  그래서 어쩔수 없이 data = Data(input) 하면

  Data(input) 리턴 값에 해당하는 메모리가 순간적으로 2배가 사용된다는 의미임 (이전에 data 삽입된 값이 남아있어서)

  - 해결책 -

  del data

  코드를 넣어주면 이러한 현상을 막을 수 있음


2. output을 이용한 연산

  만약 loss += network.get_loss() 등과 같이, 이전에 텐서 연산 결과를 계속 이용하면

  loss 메모리가 계속 쌓이게됨

  - 해결책 -

  loss += network.get_loss().data[0] # or network.get_loss().data.cpu().numpy()[0]

  이러면 해결됨


3. test or validation 시 메모리 오류

  train 시에는 괜찮은데, test 시에 오류가 나는 경우

  test 시에는 기울기를 계산하지 않겠다는 선언을 해줘야함

  - 해결책 -

  Variable을 선언할 때 인자로 volatile=True를 넣어주면 됨

  ex) train code:      Variable(im_data.cuda())

       evaluate code: Variable(im_data.cuda(), volatile=True)


4. 나한테 발생했던 오류

 

class RoIPool(Module):
def __init__(self, pooled_height, pooled_width, spatial_scale):
super(RoIPool, self).__init__()

self.pooled_width = int(pooled_width)
self.pooled_height = int(pooled_height)
self.spatial_scale = float(spatial_scale)

def forward(self, features, rois):
return RoIPoolFunction(self.pooled_height, self.pooled_width, self.spatial_scale)(features, rois)

class RoIPool(Module):
def __init__(self, pooled_height, pooled_width, spatial_scale):
super(RoIPool, self).__init__()

self.pooled_width = int(pooled_width)
self.pooled_height = int(pooled_height)
self.spatial_scale = float(spatial_scale)
self.module = RoIPoolFunction(self.pooled_height, self.pooled_width, self.spatial_scale) ##

def forward(self, features, rois):
return self.module(features, rois)

로 수정함

내부적으로 forward하면서 class를 계속 생성하고 있었음.



그리고 이러한 증상을 발견할 수 있는 tip.

memory 오류 날때까지 기다리지 말고

명령창 하나 더 띄워서 nvidia-smi -l 1 입력

그러면 memory 오류 시, iter 마다 메모리 사용량이 증가하는 것을 볼 수 있음

어디서 메모리 증가가 일어나는지 보려면

중간에 return 넣어주면된다.

그럼 return 전까지 괜찮은지, 문제가 있는지 볼 수 있음

import torch


torch.cuda.is_available()

True

torch.cuda.current_device()

0

torch.cuda.get_device_name(0)

'GeForce TITAN X'

'실습 > pytorch' 카테고리의 다른 글

load_state_dict 성능 문제, [nn.ModuleList]  (2) 2018.11.08
Pytorch eval 성능 문제  (0) 2018.11.08
pytorch 메모  (0) 2018.03.11

+ Recent posts