2024년 11월 27일 수요일

그래픽 드라이버, CUDA, cudnn 설치 혹은 업데이트


0. 먼저 현재 드라이버 버전과 CUDA버전 확인하기
그래픽 드라이버 버전 확인
>> nvidia-smi
우측 상단에 Driver Version과 CUDA Version 확인 (이건 현재 드라이버로 설치가능한 최대 버전)

cuda버전 확인 가능 (현재 설치된 버전)
nvcc --version

에러를 내면

/usr/local/cuda/bin/nvcc를 실행하면 됨



pytorch binary를 사용한다면 이미 CUDA내장(9.1버전 이상)이므로,
print(torch.version.cuda)으로 버전 확인 가능

<https://medium.com/@dun.chwong/the-simple-guide-deep-learning-with-rtx-3090-cuda-cudnn-tensorflow-keras-pytorch-e88a2a8249bc>


1. 설치/업데이트 하려는 CUDA와 graphic driver버전 확인하기

<https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver>

<https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html>

CUDA 11.7 Update 1

>=515.48.07

>=516.31

CUDA 11.7 GA

>=515.43.04

>=516.01

CUDA ToolkitLinux x86_64 Minimum Required Driver VersionWindows Minimum Required Driver Version
CUDA 12.x>=525.60.13>=527.41
CUDA 11.x>= 450.80.02*>=452.39*
CUDA Toolkit Linux x86_64 Driver Version
CUDA 10.2 (10.2.89) >= 440.33
CUDA 10.1 (10.1.105) >= 418.39
CUDA 10.0 (10.0.130) >= 410.48
CUDA 9.2 (9.2.88) >= 396.26
CUDA 9.1 (9.1.85) >= 390.46
CUDA 9.0 (9.0.76) >= 384.81
CUDA 8.0 (8.0.61 GA2) >= 375.26
CUDA 8.0 (8.0.44) >= 367.48
CUDA 7.5 (7.5.16) >= 352.31
CUDA 7.0 (7.0.28) >= 346.46

2. 저장소 업데이트(안하면 나중에 의존성 문제 발생할 수 있음)
시스템설정->소프트웨어&업데이트->업데이트->다음에서 업데이트 설치에서 중요, 추천, Backport다 체크(실제로 업데이트가 진행되지는 않고, 저장소만 수정)


3. graphic driver 삭제 및 설치
<https://devyurim.github.io/development%20environment/ubuntu/2018/05/28/ubuntu-3.html>
<https://pstudio411.tistory.com/entry/Ubuntu-2004-Nvidia%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0> 
삭제
sudo apt-get remove --purge nvidia-*

설치 (NVIDIA사이트에서 별도로 다운로드 받아서 설치하기보다는 apt-get형태로 설치하기를 추천함)
apt search nvidia-driver
apt-cache search nvidia-driver
ubuntu-drivers devices (로도 확인 가능)

ex) nvidia-driver-510-server - Transtional packge for  nvidia-drier-515-server

sudo apt-get install nvidia-driver-*** [***에 원하는 버전]
sudo reboot

nvidia-smi로 확인(CUDA, 그래픽드라이버의 버전 모두 확인 가능


4. CUDA와 cudnn다운로드

4.1. 먼저 이전에 설치된 cuda삭제

sudo apt-get --purge remove 'cuda*'
sudo apt-get autoremove --purge 'cuda*'

sudo rm -rf /usr/local/cuda*
sudo rm -rf /usr/local/cuda

4.2. 새 버전 설치
https://developer.nvidia.com/cuda-toolkit-archive
에서 원하는 파일 선택 후, 설치 명령어 복사/입력

다음은 설치 예(CUDA 10.0, ubuntu16.04기준)
기본파일
sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda

업데이트파일
sudo dpkg -i cuda-repo-ubuntu1604-10-0-local-nvjpeg-update-1_1.0-1_amd64.deb
sudo apt-get update
sudo apt-get upgrade cuda

CUDNN복사
먼저 cudnn 다운로드 후, 압축 풀어야 함.
(https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html 참고)
sudo mv cuda/include/* /usr/local/cuda/include
sudo mv cuda/lib64/* /usr/local/cuda/lib64

만약 설치시 에러가 난다면,
sudo apt clean
sudo apt update
sudo apt purge nvidia-* 
sudo apt autoremove
sudo apt install -y cuda
(https://askubuntu.com/questions/1280205/problem-while-installing-cuda-toolkit-in-ubuntu-18-04)


5. 설치 확인->0번 방법


혹시 여기서 nvcc를 모르겠다는 에러가 생긴다면,
vi ~/.profile
맨 아랫줄에 다음을 추가
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
닫은 후, source ~/.profile 실행

만약 특정 사용자가 아닌 모든 사용자에게 적용을 원한다면
위 작업을 /etc/profile에 해주면 됨.

사실 cat /usr/local/cuda/version.txt 로도 가능하지만 경로 설정을 위해서 위와 같이 함.



2024년 10월 16일 수요일

github in vscode

(참고: https://velog.io/@ahnsanghyeon/VSCode%EC%97%90%EC%84%9C-Git-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0)

1. vscode에서 git 연동 

a. 처음 code를 짠 경우

- 좌측 3번째 git버튼 클릭 > Publish to Github

- 없으면 설치 후, reload


b. 이미 github에 code가 있고 가져오며 연동하고픈 경우

- F1 > git clone 입력 > url선택 


2. code 수정 후 commit

- 좌측 3번째 버튼에 숫자 확인 (변경 내역)

- staged changes(확인 및 확정 변경 내용)와 change(변경된 내용) 확인

- staged changes에서 제외하고프면 -버튼(unstage) 클릭

- changes에서 포함하고프면 +버튼(staged) 클릭

- Message에 변경 내용 입력 후 commit 클릭

- 만약 처음이라면 id와 email입력해야 함

 -- terminal 창 열고 (+옆 버튼 git bash)

 -- git config user.name (github 이름)

 -- git config user.email (github 이메일)


3. git에서 관리하다가, 특정 폴더 파일을 공유 중지할 경우

- github에서는 삭제 & local에서는 유지

- VSCode의 Terminal창 열기

- .gitignore에 폴더명/ 추가 -> 더이상 동기화 안됨

- git add .gitignore 후 git commit -m "폴더 a를 gitignore에 추가"

- git rm -r --cached 폴더명/ -> git에서는 트래킹은 삭제되지만 폴더는 유지

- git commit -m "폴더 삭제"

- git push origin main -> git 변경내용을 remote에 반영

2024년 9월 4일 수요일

새로운 원격 코딩 환경 구성 (remote ssh, termius)

기존

xrdp + vscode로 작업함

장점: 서버의 많은 기능들을 GUI형태로 사용가능

단점: GUI활용을 위해 트래픽을 많이 사용


새롭게

필요 프로그램:

- vscode w/ remote ssh: local에서 코드 작성

- termius: local/서버간 파일 이동 및 콘솔 실행

설치 vscode w/ remote ssh:

1. vscode w/ remote ssh

 1.1. local pc (windows) 에 vscode 설치

 1.2. remote server (linux)에 ssh 설치 확인: ssh -V

   1.2.1. 없으면 설치: sudo apt-get install openssh-client

   1.2.1. 없으면 설치: sudo apt-get install openssh-server

 1.3. local pc의 vscode의 왼쪽 remote explorer > SSH > +눌러 ID@ip입력 or IP만 입력

 1.4. id, pw입력하여 접속 (기본 포트는 -p 22)

   1.4.1 connection refused: 

        a. 리눅스 서버 ssh 서비스 실행: sudo service ssh start

        b. ssh 서비스 동작 확인: service ssh status

 1.5. vscode의 OpenFolder로 프로젝트 폴더 열기


2. termius

2.1. 홈피에서 받고 설치하면 됨. ssh기반으로 동작하기에 1번 먼저 해야됨

2.2. SFTP로 파일이동, Vaults (혹은 +탭)으로 ssh 콘솔 사용


3. git

git은 서버의 repository를 사용함. 만약, 이미 서버에서 쓰고 있었다면 그대로 사용 가능.


4. byobu (혹은 Tmux)

- ssh로 접속해서 작업하면, ssh가 접속중이어야지만 작업이 진행된다. (돌렸는데 ssh가 끊기면 작업이 끊긴다)

- 따라서 작업 환경을 유지해줄 프로그램 병풍(byobu)이 필요하다.

- 모든 작업은 서버 콘솔 (termius ssh 활용)에서 실행한다.

1. 설치: sudo apt install byobu

2. 실행: byobu 

이렇게 하면, 이제 그냥 console이 뜨는데 여기서 한 작업은 기록도 되고, ssh이 닫혀도 돌아간다.

3. 단축키:

F2 - 새로운 스크린 + 새로운 세션

Shift/Ctrl+F2 - 윈도우 상하/좌우 분할 + 하단/우측에 새로운 세션

F3/F4 - 이전/다음 윈도우로 이동 (새로운 모니터로 간다고 보면 됨)

Shift+F3/F4 - 이전/다음 스크린으로 이동 (잘라놓은 스크린 사이를 이동)

F6 - 세션유지하고, byobu 나오기

Ctrl+D - 세션종료하고, byobu로 나오기


2023년 10월 15일 일요일

ros2 설치 및 활용

https://www.robotstory.co.kr/king/?board_page=4&vid=874 참고하여 요약함


1. 설치 (humble 기준)

ROS2 Ardent == Ubuntu 16.04

ROS2 Dashing == Ubuntu 16.04, 18.04

ROS2 Foxy == Ubuntu 20.04

ROS2 Rolling / Humble / Iron /  == Ubuntu 22.04


아래 따라하기

https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html

https://docs.ros.org/en/humble/Installation.html


2. 활용 (humble 기준)

2.1 환경 설정 (새로운 terminal 열면 해야 함)

# source the setup files
source /opt/ros/humble/setup.bash

# check env. var. (ROS_DISTRO, ROS_DOMAIN_ID, ROS_VERSION 확인가능)
printenv | grep -i ROS

 

# set ROS_DOMAIN_ID (default 0)
같은 DOMAIN상의 노드들끼리만 잘 보이고, 메시지 전송이 가능함
export ROS_DOMAIN_ID=<your_domain_id>

# limit to localhost only (cannot communicate w/ other coms)
export ROS_LOCALHOST_ONLY=1
 

(option. 다음 설정을 하면 매번 안해도 됨)

# All setups in bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc

 

2.2 이해 (node, topic, service, action)

# node: 단일 기능 객체 (ex: 바퀴제어, 이미지센서수집), 다른 노드와 데이터를 topics, services, action, param 형태로 주고 받을 수 있음

ros2 node list
ros2 node info
# topic: publisher-subscriber 형태 (Youtube/뉴스처럼 한명이 올리고, 다수가 받아보는 형태)의 메시지 전달 방법
ros2 topic list
ros2 topic list -t (w/ type)
ros2 interface show <msg> (see msg type)
ros2 topic echo <topic_name> (see topic contents)
ros2 topic pub <topic_name> <msg_type> '<args>' (실제 topic을 cmd로 뿌리기)

# call-and-respose 형태의 메시지 전달 방법 (client의 요청이 있을 때만 답함)
ros2 service list -t (w/ type)
ros2 service type <service_name>
ros2 service find <type_name>
ros2 interface show <type_name>.srv
ros2 service call <service_name> <service_type> <arguments>

# params: node setting argument
ros2 param list
ros2 param get <node_name> <parameter_name>
ros2 param set <node_name> <parameter_name> <value>
ros2 param dump <node_name> (params to file <node_name>.yaml)
ros2 param load <node_name> <parameter_file>

# action은 긴 시간동안 동작하도록 설계된 communication type
# goal, feedback, result로 구성됨
# goal 설정, 결과는 service형태로, feedback은 topic형태로 구성
# 기본적으로 동작은 client-server형태
ros2 action list
ros2 action info /turtle1/rotate_absolute
ros2 interface show turtlesim/action/RotateAbsolute
ros2 action send_goal <action_name> <action_type> <values>

# messages: topic의 실질적 정의된 형태 (A topic은 A msg현태로, B topic은 B msg 형태로)

# to view logs
rqt_console

# install turtlebot and rqt
sudo apt update
sudo apt install ros-foxy-turtlesim
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

sudo apt install ~nros-foxy-rqt*
rqt
rqt_graph

# topic을 선택해서 기록할 수 있음
ros2 bag record <topic_name> <topic_name2> ...
ros2 bag play subset

######################################################
2.3 colcon: package 구현 툴
sudo apt install python3-colcon-common-extensions

underlay: ROS2설치 및 셋업에서 설정됨
overlay: 내가 목적을 가지고 짜는 프로그램

source /opt/ros/humble/setup.bash
colcon build --symlink-install
# if meet error
conda install -c conda-forge catkin_pkg empy lark
# if meet error again
delete cpp src in src code

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export _colcon_cd_root=/opt/ros/humble/" >> ~/.bashrc
colcon_cd  (pkg간 폴더이동)

tab으로 완성하기
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc


#######################################
2.4 workspace 만들기 (프로젝트 같은)
source /opt/ros/humble/setup.bash

ros2_ws가 workspace이름임.

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

# copy from github for sample code
git clone https://github.com/ros/ros_tutorials.git -b humble

# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro humble -y

colcon build

open new terminal
# <underlay>
source /opt/ros/humble/setup.bash
# <overlay>
cd ~/ros2_<ws_name>
source install/local_setup.bash

#############################
2.5 package 만들기  (모듈 같은)
구성
package.xml (패키지 메타 정보)
resource/<pkg_name>
setup.cfg (실행파일일 경우 필요, ros2 run <>)
setup.py (설치파일)
<pkg_name> (ros2용 검색 폴더)


cd ~/ros2_ws/src

ros2 pkg create --build-type ament_python <package_name>
ros2 pkg create --build-type ament_python --node-name my_node my_package

cd ~/ros2_ws
colcon build
colcon build --packages-select my_package

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release # Relese모드로 빌드

source install/local_setup.bash

ros2 run my_package my_node

# fill the TODO information in package.xml and setup.py


######################################################
2.6 node for publisher and subscriber

2.6.1 create package
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python py_pubsub

2.6.2 make node by getting toy python code
cd ros2_ws/src/py_pubsub/py_pubsub
wget https://raw.githubusercontent.com/ros2/examples/humble/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py

2.6.3 add dependency at package.xml
<exec_depend>rclpy</exec_depend>
<exec_depend>std_msgs</exec_depend>

2.6.4 add entry point at setup.py
entry_points={
        'console_scripts': [
                'talker = py_pubsub.publisher_member_function:main',
        ],
},

2.6.5 install related dependency
rosdep install -i --from-path src --rosdistro humble -y
# build
colcon build --packages-select py_pubsub

2.6.7 run
source /opt/ros/humble/setup.bash    # source underlay  (bash에 있음 안해도 됨)

source install/setup.bash        # source overlay

ros2 run py_pubsub talker

ros2 run py_pubsub listener
 

 
####################################################
2.7 cv_bridge 설치 (opencv - ros image 컨버터)

sudo apt-get install ros-(ROS version name)-cv-bridge

sudo apt-get install ros-(ROS version name)-vision-opencv

해보고 안되면 아래도 설치
sudo apt install python3-numpy
sudo apt install libboost-python-dev

 
cd <YOUR_ROS2_WORKSPACE>/src
git clone https://github.com/ros-perception/vision_opencv.git -b humble
cd ..
colcon build --symlink-install

sudo apt install python3-opencv

source <YOUR_ROS2_WORKSPACE>/install/local_setup.bash
colcon test

 

2023년 2월 15일 수요일

accuracy, f1 score, roc auc, pr auc

 

https://neptune.ai/blog/f1-score-accuracy-roc-auc-pr-auc


accuracy: 

- predicted class로 계산됨

- 문제가 well-balanced class 인 경우, 모든 class가 중요한 경우

f1 score: 

- predicted class로 계산됨

- positive class가 좀 더 중요한 binary class 문제

roc auc:

- predicted score로 계산됨

- score가 확률보다는 rank에 가까울 때

- heavily imbalanced class에서는 사용하면 안됨

- 모든 class가 중요한 경우

pr auc:

- predicted score로 계산됨

- heavily imbalanced class인 경우

- pos가 neg보다 중요한 경우

2022년 1월 6일 목요일

xrdp 설치

<참조: https://jangjy.tistory.com/293>

1. xrdp 설치 

(option)sudo apt-get update

sudo apt-get install xrdp

<option> sudo apt-get install xorgxrdp
sudo apt-get update
sudo apt-get install mate-core mate-desktop-environment mate-notification-daemon
sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n mate-session \n' /etc/xrdp/startwm.sh

이제 윈도우즈 원격접속으로 접속 가능해짐.


2. 로그인 후, 검은 화면이 보인다면

gnome 대신 xfce를 띄우면 됨


2. 세션에 접속시 다르게 접속된다면

sudo gedit /etc/xrdp/xrdp.ini

[xrdp1]에서 마지막 줄 port=-1을

port=ask5910 

으로 수정 후, 서비스 재시작.

sudo service xrdp restart

재접속 시, port번호 입력장이 보임.

-1, 5910등 여러개를 입력하다보면 과거에 접속한 세션이 보임.

맨 처음 세션 생성시 -1을 입력하면 5910을 사용함. 이후, 5910을 계속 사용하면 됨.

2021년 10월 7일 목요일

이미지를 비디오로, 코덱을 바꾸고

이미지 시퀀스를 비디오로 바꾸는 경우,

 1. 알씨의 동영상 만들기 X: 1장당 재생시간이 1초 미만으로 내려가지 않음.

 2. python코드를 직접짜서 활용함

import cv2
import os

image_folder = 'path_to_images'
video_name = 'path_to_videos/output.wmv'
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
images = sorted(images)
num_total_images = len(images)
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

fourcc = cv2.VideoWriter_fourcc(*'MP4V') # if mp4 codec is applied
fps = 5
frameSize = (width, height)
video = cv2.VideoWriter(video_name, fourcc, fps, frameSize)

for ith, image in enumerate(images):
video.write(cv2.imread(os.path.join(image_folder, image)))
print('%d / %d' % (ith, num_total_images))

cv2.destroyAllWindows()
video.release()


wmv를 압축 및 변환하자

 1. http://convert-video-online.com 활용


간단한 편집

 뱁믹스 활용

 - 개인용/상업용 모두 공짜

 - 일부 리소스는 유료



2021년 2월 1일 월요일

IEEE 제출 논문과 인터넷 공개 허용 정도

 <https://journals.ieeeauthorcenter.ieee.org/become-an-ieee-journal-author/publishing-ethics/guidelines-and-policies/post-publication-policies/>

 

IEEE에서는 논문의 진행상태에 따라 4가지 형태로 나누고 각 형태에 따라 공개가능 범위를 달리하고 있음.

 

논문은 진행 단계에 따라 다음과 같이 정의

- Preprint: IEEE 제출전 논문을 작성한 상태

- Author-submitted article: 처음 논문을 제출한 버전

- Accepted article: 리뷰/리바이즈 후, accept받은 버전

- Final published article: 최종 출판된 버전


저자가 공개가능한 범위

- Preprint: 저자의 개인 웹사이트, 소속 회사 웹사이트, arXiv, TechRxiv등 비영리 preprint서버 (단 accept도니 후에는 accepted버전으로 바꿔야 함)

- Author-submitted article: 저자의 개인 웹사이트, 소속 회사 웹사이트, 저자의 수업, SCNs

- Accepted article: 저자 개인 웹사이트, 소속 회사 웹사이트, arXiv, TechRxiv, Funder repository

(IEEE에 출판되면 위를 제외한 다른 모든 곳에서는 지워야 함)

- Final published article: 

  -- open access가 아닌 논문: 온라인에 올릴 수 없음. 단 개인적으로 주고받거나, IEEE허가하에 자신의 수업에 활용하거나, 학위 논문으로 사용은 가능함.

  -- open access license (CC BY)로 출판한 논문: 저자와 Funder는 공개, 공유, 사용을 상업용도를 포함하여 허락없이 사용가능함. 또한 저자가 저작권을 독자는 재사용권을 가짐 

  -- open access license (CCBY-NC-ND)로 출판한 논문: CC BY에서 상업용도를 제외하고 동일함.

2020년 8월 23일 일요일

Tyan서버 개발환경 설치

목록
- 1. Ubuntu server 설치 
- 2. xrdp를 이용한 win->linux 원격접속 연결
- 3. 그래픽드라이버 설치(NVIDIA) 384
- 4. CUDA, cudnn설치
- 5. pycharm, anaconda설치

1. Ubuntu server
1. ubuntu 사이트(https://ubuntu.com/download/server)에 서버버전 iso파일 다운로드하여 DVD에 굽기(16.04.3-server amd64 bit 사용함)
2. BIOS화면에서 F2/Del을 눌러 BIOS진입 -> 부팅순서를 DVD로 변경 후, 재부팅
3. ubuntu설치하기
  a. 언어는 English.
  b. network의 경우, enp13s0f0과 0f1이 있었는데, 0f0은 부팅용이라서 0f1을 LAN 케이블에 물리고 작업함.

  c. Hostname은 컴퓨터의 이름, User name은 사용자 이름이므로 주의해서 입력.
  d. Partition disk는 디스크를 지우고, auto로 할당함.
  e. 자동업데이트는 No automatic updates선택
  f. Server유형은 OpenSSH만 추가설치 (총 2개가 선택됨)
  g. 나머지는 모두 default값 사용함.
4. network 설정하기
  a. ifconfig -a로 네트워크 이름 확인(우리의 경우는 3.b.의 것 2개)
  b. sudo vi /etc/network/interfaces를 열고
    auto <네트워크이름>
    iface <네트워크이름> inet static
    address <IP주소입력>
    netmask <서브넷마스크>
    gateway <게이트웨이>
    dns-nameservers <DNS, 두개 이상은 공백으로, 주로 168.126.63.1 168.126.63.2 8.8.8.8 씀>
  c. /etc/init.d/networking restart 입력 후, 네트워크 적용안되면 reboot입력하여 재부팅
  d. ping 8.8.8.8로 동작확인
5. 프로그램 설치
  sudo apt-get update
  sudo apt-get install openssh-server

6. 원격접속용 컴퓨터에 putty설치(https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 후, IP넣고 접속.

2. xrdp를 이용하여 windows --> linux 원격접속 설치하기
 <참조: https://jangjy.tistory.com/293>

 <참조: https://yochin47.blogspot.com/2022/01/xrdp.html>


3. 그래픽드라이버 설치(NVIDIA) 384
<참고: https://hiseon.me/linux/ubuntu/install_nvidia_driver/>
1. 기존 NVIDIA 드라이버 삭제
 sudo apt-get purge nvidia*
2. 최신 그래픽 드라이버  버전 확인
 https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
 위 사이트에서 nvidia-graphics-drivers-*** 의 숫자 확인 (ctrl+f활용)
 http://www.nvidia.com/object/unix.html 에서 소유한 GPU가 위 버전 지원하는지 확인(해당버전 클릭 후, Supported Product tab누르면 됨.
  ex) TITAN Xp는 390가능. but 384사용
3. repository update
apt-get update && apt-get install -y dialog language-pack-en
export LANGUAGE=en_US
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
update-locale

sudo vi /etc/default/locale에
LANG="en_US.UTF-8"
LANGUAGE="en_US"
LC_ALL="en_US.UTF-8"

release="ubuntu"$(lsb_release -sr | sed -e "s/\.//g")
echo $release

sudo apt install sudo gnupg
sudo apt-key adv --fetch-keys "http://developer.download.nvidia.com/compute/cuda/repos/"$release"/x86_64/7fa2af80.pub"
sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-cuda.list'
sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/machine-learning/repos/'$release'/x86_64 /" > /etc/apt/sources.list.d/nvidia-machine-learning.list'
sudo apt update

4. 그래픽카드 다운로드 및 설치
sudo apt-get install nvidia-384

Errors were encountered while processing:
 nvidia-384
 libcuda1-384
 nvidia-opencl-icd-384
E: Sub-process /usr/bin/dpkg returned an error code (1)

sudo mkdir /usr/lib/nvidia

sudo apt-get install dkms nvidia-modprobe

BIOS에러시
Secure Boot옵션 해제, Above 4G Decoding은 Enable

5. reboot 후, 버전 확인
  reboot 혹은 sudo reboot(putty로 원격 접속한 경우)
  lsmod | grep nvidia 혹은 lsmod | grep nouveau
  위 명령어로 뭐라도 뜨면 됨.
6. 그래픽 드라이버 자동 업데이트 방지
  sudo apt-mark hold nvidia-390



4. CUDA, CUDNN설치하기
https://www.blogger.com/blogger.g?blogID=8710166278779940585#editor/target=post;postID=3406118003326989536;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=2;src=postname
 CUDA Toolkit 8.0 GA1 사용함.




4. firefox, pycharm, anaconda설치하기
 sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa
 sudo apt-get install firefox

 anaconda 사이트에서 다운로드(2.7다운)
 chmod 744 파일명(Anaconda~~.sh)
 ./Anaconda~~.sh

  pycharm사이트에서 다운로드(Community버전)
  적당한 위치로 옮겨서 압축 출기
  sudo ln -s pycharm.sh /usr/bin  (symbolic link걸어서 아무데서 실행되도록)

5. conda 환경 복사
  conda activate ENV_NAME
  conda env export > ENV_NAME.yml
  conda env create -f ENV_NAME.yml

6. 

pip install opencv-contrib-python // install the most recent opencv


2020년 8월 13일 목요일

linux 온도 기록하기

문제: linux 구동시 주기적으로 시스템의 온도를 기록하자.

<참고: https://unix.stackexchange.com/questions/269858/does-linux-typically-log-system-temperature-data>


해결:
CPU
sensord -> 시스템온도와 voltage를 system log에 기록

sudo apt-get install lm-sensors
sudo sensors-detect
sudo service module-init-tools start
sudo service module-init-tools restart
sensors


HDD
hddtemp -> hard drive의 온도를 기록

sudo apt-get install hddtemp
sudo hddtemp /dev/sda /dev/sdb

but 둘다 수동으로 타이핑한 뒤부터 기록함.

GPU
nvidia-smi -q -d temperature | grep GPU | perl -pe '/^GPU/ && s/\n//' | grep ^GPU


주기적으로 수행 후, 기록하기(CPU, GPU만)
1. shell script만들기
logging_temp.sh

#!/bin/sh
date
sensors
nvidia-smi -q -d temperature | grep GPU | perl -pe '/^GPU/ && s/\n//' | grep ^GPU
echo ""

2. crontab에 등록하며 로깅설정하기
crontab -e
맨아래에 추가 (***** 빼면 안됨)

* * * * * logging_temp.sh >> /home/yochin/Desktop/log_temp.log 2>&1

3. crontab -l 로 확인하기

4. 만약에 permission denied라면?

chmod 744 loggin_temp.sh로 sh의 권한변경

ps -ef | grep cron 으로 pid확인 후, sudo kill -9 pid로 죽임


2020년 8월 2일 일요일

ImportError: ~/libstdc++.so.6: version 'GLIBCXX_3.4.22' not found

strings ~/libstdc++.so.6 | grep GLIBC
==> GLIBC관련 버전이 쭉 보임

내것은 3.4.21까지만 있었음. 즉 버전업을 해야됨.
sudo apt-get install libstdc++6
아마 이미 설치되어있을듯

sudo apt-get dist-upgrade
먼저 시도, 안되면 아래 모두 시도

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

* update는 이용가능한 버전을 조사, upgrade는 실제로 버전을 올림.



2019년 9월 5일 목요일

ms word와 mendeley로 쉽게 논문쓰기 팁

 
Mendeley를 이용한 reference 논문 참조하기
 - https://guides.lib.umich.edu/c.php?g=283073&p=1888264
 - 참조->Insert Citation->논문제목/저자 입력

Reference list에 논문이 중복되는 경우
1. mendeley에서 중복되는 논문들을 정리
 - https://researchguides.library.tufts.edu/c.php?g=249269&p=4031723
 - 왼쪽 All Documents를 누르고, Tools->Check for Duplicates를 선택
 - 나타난 중복에 대해서 클릭하면 중복되는 문서(pdf)들이 각각 열림
 - 중복된 열(문서가 여러개 있는 아이콘)을 누르면, 우측에 정보가 뜸. 여기서 체크박스가 없는 것은 충돌난 정보, 있는 것은 일치하는 정보임. 이를 해결 한 후, Confirm Merge를 누름.

2. reference업데이트하기
 - word에서 reference부분을 삭제 후, 참조->Insert Bibliography클릭
 - mendeley의 자료를 정리했기 때문에 삭제된 ref가 발생함.
 -DialogBox의 왼편은 삭제한 docu의 정보를 사용시, 오른쪽은 정리된 docu의 정보를 사용시 클릭. (리스트를 row별로 보고, 문제없다면 오른쪽 것을 사용하면 됨)


Figure/Table을 참조하기. cross-reference활용하기
-  먼저 Figure에서 참조가능하도록 만들어야 됨.
- 참조->캡션삽입

- 본문에서 참조->상호참조 하면 in Figure 1이런식으로 만들어짐.

Mendeley 논문의 세부정보 업데이트하기

 - https://blog.mendeley.com/2011/03/31/easy-one-click-addition-of-papers-from-highwire-press-bmc-plos-arxiv-and-more/
 - mendeley에 논문을 추가하고, arxiv의 주소의 숫자부분(e.g. 1600.00001 or 1600.00002v2)를 우측 Catalog IDs의 ArXiv ID에 복사 후, 돋보기버튼을 누르면 알아서 관련 논문의 내용이 업데이트 됨.

Mendeley에서 ArXiv는?
Type: Journal Article, Journal name: arXiv preprint로 함.

Mendeley로 논문 가져오기
 - mendeley browser add-in을 설치 & login을 하고
 - 관련 arxiv 논문 사이트에서 add-in버튼을 클릭하면 정보 + 논문을 mendeley로 가져올 수 있음.

워드에서 문단(paragraph)이 이어지지 않는 경우
 - 워드에서 paragraph가 앞쪽의 내용에서 이어지지않고 다음 페이지 처음부터 시작하는 경우가 있음
 - 이 경우, 문단 사이 혹은 문단과 section제목 사이에 큰 공백이 존재함.
 - page break (ctrl + enter 혹은 Insert | Break: Page break) 혹은 section break 때문
 - 홈 -> Paragraph -> -><-버튼 클릭 ->page break/section break를 선택/삭제
 - 혹은 떨어진 문단 전체를 선택 -> -><- 버튼 클릭하여 break 삭제
 - 만약 그 문단을 drag했을 때, Figure Box가 같이 drag된다면, Figure Box의 위치를 옮길 경우 (cut & paste) 해결 될 수 도 있음.

two column 워드에서 two column에 걸치는 그림 넣기
<https://sec.tistory.com/entry/MS-word-%EB%8B%A4%EB%8B%A8-%EC%82%AC%EC%9D%B4%EC%97%90-%EA%B7%B8%EB%A6%BC-%EB%84%A3%EA%B8%B0>
1) 그림 넣을 부분에 커서 -> [레이아웃 -> 나누기 -> 이어서] -> [레이아웃 -> 단 -> 하나]
2) 그림 삽입 후 크기 조정
3) 그림 넣은 다음 줄 -> [레이아웃 -> 나누기 -> 이어서] -> [레이아웃 -> 단 -> 둘]



2019년 6월 13일 목요일

ubuntu에서 thunderbolt통해 NVIDIA eGPU연결하기

0. ubuntu 16.04, thunderbolt 3, eGPU Akitio, NVIDIA GTX TitanX로 준비함.

1. eGPU에 그래픽카드를 꼳고 thunderbolt를 연결한다.

2. ubuntu를 부팅하고 다음을 입력하여 nvidia driver가 잡히는지 확인한다.
>> lspci -v | grep -i nvidia
~~~nvidia~~~가 떠야함.

3. 만약 안뜬다면 Booting시 bios진입 -> config thnderbolt3하여
 -> BIOS Assist Mode: Enabled
 -> Security Level: No Security
로 수정한다.

4. 2번을 다시 확인한다. 된다면 보통 GPU설치하듯이 드라이버, CUDA, cudnn을 설치하면 된다.

만약 안된다면 ubuntu버전을 확인해보자. uname -r
https://askubuntu.com/questions/1014147/ubuntu-with-thunderbolt-3-port-for-dual-external-displays
thunderbolt는 4.13부터, TB3는 4.16.6부터 지원한다고 한다.(하지만 나의 경우, 4.15.0-51-generic임에도 된다)

 

* bbswitch: No discrete VGA device found

부팅시 위와 같은 에러가 생긴다면 


2019년 4월 14일 일요일

[공부]python의 decorator

https://jupiny.com/2016/09/25/decorator-function/

어떤 함수가 있다.
def plus(a, b):
    return a + b

if __name__ == '__main__':
    plus(1, 2)

그 함수가 일어날 때 마다 어떤 동작 (소요시간 체크, 결과값 확인)이 일어나게 하고 싶다.
def plus(a, b):
    return a + b

import time
def tictoc(func, a, b):
    start_t = time.time()
    ret = func(a, b)
    end_t = time.time()

    print(end_t - start_t)  # 소요시간
    print(ret)                 # 결과값
    return ret

if __name__ == '__main__':
    # plus(1, 2)    tictoc(plus, 1, 2)

tictoc함수에 함수 plus를 인자로 넣어줌으로써 해결하였지만, 문제점이 있다.
함수의 인자가 늘어나면 또 새로운 tictoc함수를 만들어줘야 한다. 

decorator를 사용하면 더 간단하게 해결가능하다.

import time
def tictoc_decorator(func):
    def wrapper(*args, **kwargs):
        start_t = time.time()
        ret = func(*args, **kwargs)
        end_t = time.time()

        print(end_t - start_t)
        print(ret)
        return ret
    return wrapper
@tictoc_decorator
def plus(a, b):
    return a + b

if __name__ == '__main__':
    plus(1, 2)

    help(plus)

그런데 이런 함수형 decorator는 지저분하기에 class형 decorator를 쓰는 것이 더 깔끔하다

class tictoc():
def __init__(self, func):
self.func = func

def __call__(self, *args, **kwargs):
start_t = time.time()
ret = self.func(*args, **kwargs)
end_t = time.time()

print(end_t - start_t)
print(ret)

return ret

   


2019년 1월 10일 목요일

tensorboard 사용법

0. 먼저 tensorflow가 깔려있어야 함.

ex)
conda create -n tb python=2.7
conda activate tb
conda install -c anaconda tensorflow
conda install tensorboardXdfdfdf

 

1. tensorboard를 그대로 활용하기(5분 사용법)

https://medium.com/@anthony_sarkis/tensorboard-quick-start-in-5-minutes-e3ec69f673af
위 링크에 잘 나와있다. 아래는 그것을 요약한 것이다.

a. 값을 알고 싶은 부분에 아래 코드를 삽입한다.
pred = tf.nn.softmax( ... )
tf.summary.histogram('pred', pred)

loss = ...
tf.summary.scalar('loss', loss)

b. tf.Session()에 writer를 정의하고, training loop에 merge 및 writing하는 코드를 삽입한다.
with tf.Session() as sess:
  train_writer = tf.summary.FileWriter('저장경로', sess.graph)

  for i in range(70000):
    merge = tf.summary.merge_all()
    summary, total_loss, ... = sess.run([merge, loss, ...], ...)
    train_writer.add_summary(summary, i)

c. 학습을 시작한 이후, terminal에 tensorboard --logdir 저장경로(혹은 그 상위 경로)에 입력 후,
주어지는 링크를 클릭하면 됨.

d. 이상하게 위의 코드를 사용하면 몇 iteration을 못 돌고, 시스템이 죽어(아마도 메모리문제로), 아래 코드를 대신 사용함.

2. tensorboardX를 활용하는 방법(3분)

https://github.com/lanpa/tensorboardX
tensorboardX는 tensorboard를 쉽게, 다른 framework에서도 사용하도록 만든 library로 위에 사용법이 나와있다. 아래는 그 사용법을 요약한 것이다.

a. pip install tensorboardX 로 다운받는다.

b. 아래 코드를 삽입한다(위의 코드에 대응하는 부분은 bold로 표시).
from tensorboardX import SummaryWriter
writer = SummaryWriter('저장경로디렉토리')
# '저장경로디렉토리' 대신 comment='태그'으로 하면 현재 날짜-태그 형식으로 저장함.

for i in range(70000):
  total_loss, ... = sess.run([loss, ...], ...)
  writer.add_histogram('pred', pred, i)
  writer.add_scalar('loss', total_loss, i)
  writer.add_image('img', img, i)


  ftr = ... [100, 784]
  writer.add_embedding(ftr, metadata=label, label_img=images.unsqueeze(1))

# scalar값은 아래와 같이 json파일로 저장도 가능.
writer.export_scalars_to_json(json파일경로)
writer.close()

c. 학습을 시작한 이후, terminal에 tensorboard --logdir 저장경로(혹은 그 상위 경로)에 입력 후,
주어지는 링크를 클릭하면 됨.

d. 이상하게 위의 코드를 사용하면 몇 iteration을 못 돌고, 시스템이 죽어(아마도 메모리문제로), 아래 코드를 대신 사용함.

자동 마우스 클릭 script

예전에 프로그램이 잠깐씩 멈춰있는 경우가 있었다. 이 때, 그 프로그램을 한번 클릭해주면 다시 동작했는데, 이걸 자동으로 주기적으로 해주는 script를 아래와 같이 만들었다.

# xdotool 설치
sudo apt-get install xdotool

#script파일 작성
In my_script.sh
===================================
#!/bin/bash
while sleep 600; do
  xdotool mousemove 742 222 click 1 &
  sleep 1
  xdotool key KP_Enter &
  sleep 1
done
===================================
위에서
sleep 600은 600초(=10분)동안 sleep시키는 명령어.
xdotool mousemove 742 222 click 1 &은 742, 222로 옮겨서 왼쪽 클릭하라는 의미
xdotool key KP_Enter &는 키보드 엔터키를 치라는 의미

2018년 12월 4일 화요일

linux에서 NAS(samba)서버 이용하기

https://www.cyberciti.biz/tips/how-to-mount-remote-windows-partition-windows-share-under-linux.html

linux서버에서
sudo mkdir -p /mnt/NAS서버포인트이름(linux에서 NAS서버 지칭할 이름)
sudo mount -t cifs //NAS_IP/접근원하는 디렉토리 -o username=아이디,password=암호 /mnt/NAS서버이름

cd /mnt/NAS서버이름 으로 접근가능.

만약 처음하건, mount: wrong fs type, bad option, ... 나오면 아래 입력.
sudo apt install cifs-utils
sudo mount -t cifs //IP/DIR /mnt/NAS서버포인트이름/ -o username=ID


mount: ~~~ is write-protected, mounting read-only
mount: cannot mount ~~~ read-only



2018년 11월 20일 화요일

[공부]python에서 class 상속

<참고: http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-oop-part-5-%EC%83%81%EC%86%8D%EA%B3%BC-%EC%84%9C%EB%B8%8C-%ED%81%B4%EB%9E%98%EC%8A%A4inheritance-and-subclass>

class와 inherit(상속)은 Dont' Repeat Yourself (불필요하게 같은 코드를 반복하는 것을 막자) 가 목적.

목적: 기본 클래스(예: Fruit)와 그 서브클래스(예: Apple, Banana)가 있는 경우는 기본 클래스(공통 속성)-서브클래스(개별 속성)로 가는 것이 유지/관리측면에서 좋음.

Fruit과 Apple을 만듬.
class Fruit(object):
    def __init__(self, color):
        self.name = self.__class__.__name__        self.color = color

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))

class Apple(Fruit):
    pass
if __name__ == '__main__':
    apple_1 = Apple('green')
    apple_1.show_status()
    help(Apple)
 # class Apple에서 __init__찾음. 없으니 부모 class인 Fruit에서 __init__찾아서 실행.
name: Apple
color: green

class Apple의 초기화 함수에 Size를 추가해보자.
바보같은 사용법
class Fruit(object):
    def __init__(self, color):
        self.name = self.__class__.__name__        self.color = color

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))

class Apple(Fruit):
    def __init__(self, color, size):
        self.name = self.__class__.__name__        self.color = color
        self.size = size

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))
        print('size: {}'.format(self.size))

if __name__ == '__main__':
    apple_1 = Apple('green', 30)
    apple_1.show_status()
    help(Apple)
목적은 달성했으나, Fruit에 있는 코드들(name, color)이 반복됨. 

멍청한 사용법
class Fruit(object):
    def __init__(self, color):
        self.name = self.__class__.__name__        self.color = color

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))

class Apple(Fruit):
    def __init__(self, color, size):
        Fruit.name = self.__class__.__name__        Fruit.color = color
        self.size = size

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))
        print('size: {}'.format(self.size))

if __name__ == '__main__':
    apple_1 = Apple('green', 30)
    apple_1.show_status()
    help(Apple)

    apple_2 = Apple('red', 10)
    apple_2.show_status()

    apple_1.show_status()
class의 instance가 아닌 class에 값을 대입함.
apple_1의 값 변경은 apple_2의 값도 바뀜. --> 의도하지 않은 결과.

이 경우는 super()함수를 이용하여 부모 클래스의 도움을 받아야 함.

올바른 사용법
class Fruit(object):
    def __init__(self, color):
        self.name = self.__class__.__name__        self.color = color

    def show_status(self):
        print('name: {}'.format(self.name))
        print('color: {}'.format(self.color))

class Apple(Fruit):
    def __init__(self, color, size):
        super(Apple, self).__init__(color)
        self.size = size

    def show_status(self):
        super(Apple, self).show_status()
        print('size: {}'.format(self.size))

if __name__ == '__main__':
    apple_1 = Apple('green', 30)
    apple_1.show_status()
    help(Apple)

위와 같이 사용하면 중복된 코드를 방지할 수 있다.

help(Apple) # Apple class가 이름을 찾는 순서를 보여줌(자기 클래스 namespace, 부모 클래스 namespace, 내장 object namespace).


2018년 11월 19일 월요일

python에서 Enum의 사용

<참고: https://docs.python.org/3/library/enum.html>

from enum import Enum

class Color(Enum):
  RED = 1
  GREEN = 2
  BLUE = 3

Color = Enum('Color', 'RED GREEN BLUE')

위 두가지 타입의 선언법은 동일함.

Enum 라이브러리(모듈)는 심볼릭 멤버에 unique하고 constant인 상수를 부여하여 관리하고, 추가적인 함수를 제공함.
- iteration: for color in Color로 사용가능.
- 비교가능: Color.RED is Color.BLUE -> False 나옴. (is, == 모두 가능)
- 크기비교 불가능

2018년 8월 28일 화요일

python delete variable and free memory

문제: python에서 명시적으로 변수와 그 메모리를 지우자.

답:
python은 기본적으로 garbage collector(gc)를 써서 사용자가 메모리 걱정없이 쓰게 해줌.
그럼에서 위의 것을 명시적으로 하고 싶다면...

del var
# var변수를 지움(그러나 메모리가 지워지지는 않을 수 있음, del은 reference count를 줄이는 일반하고 이게 0이 되어야 release되는 듯)

import gc
if gc.isenabled() is True:
    gc.collect()
# gc를 명시적으로 호출함. 그럼에도 os상황이나 thread상황에 따라 안되는 경우가 있다고 함.




2018년 7월 29일 일요일

윈도우즈, 리눅스, Synology NAS 특정시간 후 자동으로 끄기


특정시간에 자동으로 윈도우즈와 리눅스, Synology NAS를 종료시키는 방법

* 윈도우즈
윈도우즈 커맨드 창에서 (Windows키 + R -> cmd입력),

shutdown -s -t 3600

-t: 3600초 후에 종료(-s)됨.
--> 입력 후 언제 종료될지 알림으로 알려줌.

shutdown -a
취소시킴.

shutdown -help
도움말

shutdown -h
하이버네이션(최대절전모드)


* 리눅스
sudo shutdown -P +60
60분 후에 종료됨.
--> 입력 후 언제 종료될지 년/월/시/분/초로 알려줌.

sudo shutdown -P now
지금 종료됨.

sudo shutdown -c
취소(cancel)시킴.


* Synology NAS
웹브라우저로 log in
제어판->정보센터->(좌)하드웨어 및 전원->(상)전원예약->설정



<참고: https://unix.stackexchange.com/questions/120506/how-to-shutdown-linux-at-a-specific-datetime-from-terminal>
<참고: https://coding-factory.tistory.com/326>
<참고: https://mongri.net/entry/%EC%8B%9C%EB%86%80%EB%A1%9C%EC%A7%80-%EB%82%98%EC%8A%A4-%EC%9E%90%EB%8F%99-%EC%8B%9C%EC%9E%91-%EB%B0%8F-%EC%9E%90%EB%8F%99-%EC%A2%85%EB%A3%8C-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95>

2018년 4월 26일 목요일

conda environment managing

<ref: https://veranostech.github.io/docs-korean-conda-docs/docs/build/html/user-guide/tasks/manage-environments_ko.html>


1. conda 설치하기

Anaconda는 기업에서 사용하면 유료로 비추천. 그래서,

1.a. Miniconda + conda-forge

(안된다면 Miniforge로 설치)

윈도우즈는 https://github.com/conda/conda에서 다운로드

리눅스는 여기부터

mkdir -p ~/miniconda3

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh

bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3

rm -rf ~/miniconda3/miniconda.sh

~/miniconda3/bin/conda init bash

~/miniconda3/bin/conda init zsh

여기까지

 

설치 후 conda-forge channel 추가

conda config --add channels conda-forge

conda config --set channel_priority strict


설치 후 anaconda 채널 삭제 (defaults가 anaconda임)

conda config --remove channels defaults


설치 후 채널확인

conda config --show channels


channels:

    - conda-forge

라고 나와야 함.


** 설치했는데 에러가 나는데 잘 모르겠다면.

conda clean --all # 모든 cache삭제

conda update -n base -c defaults conda # conda 업데이트


2. 현재 env list 보여주기

conda info --envs 혹은
conda env list

0.1) env내 설치된 module보여주기
conda list -n [ENV_NAME]


3. create env / remove
() is option. 

설치
conda create --name [ENV_NAME] (python=3.6 scipy=0.15.0)


삭제
conda env remove --name myenv

3.1. 이름변경: 환경 복사 후 이전 환경 제거의 과정으로 이루어짐(clone->remove)
conda create --name new_name --clone old_name
conda env remove --name old_name -all

The result will be created in /envs/[Cray]

3.2. run env
conda activate [Cray]

3.2.2. pytorch 설치

# CUDA 11.4 

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge

3.3. install modules
In [Cray] env,

conda install auto [ModuleName]

https://pytorch.org/get-started/previous-versions/


pip [ModuleName]


4. copy the current env into new env
conda activate [Cray]

conda env export > envfile.yml


This include conda package and pip package.


5. create env from other env file (env.yml)
conda env create -f env.yml


If you want to create the Conda env on the specific path, use this below command.
conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

 

6) list and set env list in specific conda env

conda env config vars list

conda env config vars set my_var=value

conda env config vars unset my_var -n test-env 

 


2018년 3월 21일 수요일

linux에 realsense 설치하기

realsense로 SR300을 사용

<참조: https://pypi.python.org/pypi/pyrealsense/2.0>
<참조: https://pypi.org/project/pyrealsense/>

환경: ubuntu 16.04, SR300

1. windows에 realsense를 누른 후, Firmware update함.

2. 설치
* 현재 python wrapper는 pyrealsense 2.x를 지원하지 않음. pyrealsense 1.x만 지원함.
혹시 2.x가 설치되었다면 아래를 참고하여 삭제할 것.
2.1. 설치 (realsense 2.x)
<참조: https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md>
만약 compile을 통한 설치를 원한다면 다음을 참조.
https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md

echo 'deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main' | sudo tee /etc/apt/sources.list.d/realsense-public.list

sudo apt-key adv --keyserver keys.gnupg.net --recv-key 6F3EFCDE

sudo apt-get update

sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils

sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg

# g++ -std=c++11 filename.cpp -lrealsense2

modinfo uvcvideo | grep "version:"
입력시 realsense가 보이면 설치 성공

*. 삭제를 원한다면
dpkg -l | grep "realsense" | cut -d " " -f 3 | xargs sudo dpkg --purge

2.1. 설치 (librealsense 1.x)
https://github.com/IntelRealSense/librealsense/tree/v1.12.1
https://github.com/IntelRealSense/librealsense/blob/v1.12.1/doc/installation.mdsudo 
에서 download zip파일(우상단 다운로드 클릭)

관련 library설치
apt-get update && sudo apt-get upgrade
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev

if 망가진 의존성이 뜬다면(쓰지말 것, 의존성 회복시키면서 기존 것 망가뜨림)
sudo apt-get install aptitude
sudo aptitude -f install

librealsense 설치
cd librealsense-1.12.1
mkdir build
cd build
cmake ..
make && sudo make install

cd ..
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
./scripts/patch-uvcvideo-16.04.simple.sh

sudo modprobe uvcvideo

sudo dmesg | tail -n 50
을 통해서 새 usbcore: registered ~~~인지 확인

2.2. 설치 (pycparser, cython, numpy)
sudo apt-get update
sudo apt-get install python-pycparser
sudo apt-get install cython
sudo apt-get install python-numpy

sudo pip install pyrealsense

설치실패시 아래 사이트 참조.
https://github.com/toinsson/pyrealsense/issues/66 참조
pyrealsense는 librealsense2를 지원못함.
순서1을 통해 v1을 설치후 실행하면 됨.

3. 소스코드 사용
import pyrealsense as pyrs

serv = pyrs.Service()
serv.start()

'''pyrc.stream.color.depth.cad (color aligned on depth).dac (depth aligned on color)'''
cam = serv.Device(device_id=0, streams=[pyrs.stream.ColorStream(fps=60),
                                        pyrs.stream.DepthStream(fps=60)
                                        # pyrs.stream.CADStream(fps=60),                                        # pyrs.stream.DACStream(fps=60)                                        ])
scale = cam.depth_scale * 1000
while (True):
    cam.wait_for_frames()
    # print(cam.color)    current_color = cam.color[:, :, ::-1]
    current_depth = cam.depth * scale
    # current_cad = cam.cad[:, :, ::-1]    # current_dac = cam.dac * scale
    cv2.imshow('color', current_color)
    cv2.imshow('depth', current_depth / 1000)
    # cv2.imshow('CAD', current_cad)    # cv2.imshow('DAC', current_dac / 1000)
    cv2.waitKey(10)

2018년 3월 12일 월요일

Linux partition type

문제: Ubuntu에서 HDD의 Partition type을 보니, Filesystem ext4, extended, swap이렇게 있는데 이게 다 뭔가?

해결:
<참조: https://askubuntu.com/questions/40344/ext4-extended-linuxswap>

Linux의 partition은 3종류: primary, extended, logical

filesystem ext4는 primary, extended는 extended, swap은 extended내에 위치한 logical partition에 해당됨(그래서 swap과 extended의 용량이 동일).

swap은 가상메모리같이 hdd의 일부를 ram처럼 사용하기위해서 잡아놓은 공간으로 지우면 안됨.

2018년 3월 5일 월요일

python에서 현재시간으로 string만들기

<참조: https://stackoverflow.com/questions/3316882/how-do-i-get-a-string-format-of-the-current-date-time-in-python>

from datetime import datetime

def get_curtime_as_string():
    timestamp = '%d_%d_%d_%d_%d_%d_%d' % (
        datetime.now().year, 
        datetime.now().month, 
        datetime.now().day,
        datetime.now().hour,
        datetime.now().minute,
        datetime.now().second, 
        datetime.now().microsecond
    )
    
    return timestamp

2018년 2월 1일 목요일

Ubuntu 서버 활용하기 - client PC에서 서버로 파일전송, putty, pycharm-community사용하기

Ubuntu 서버 활용하기 - 파일전송
o 윈도우즈와 파일전송하기(winscp 사용)
1. https://winscp.net/eng/download.php 에서 다운로드 및 설치
2. Putty에서 정보가져오기(자동임)
3. 원격서버가 SSH가 설치되어있다면,
 - 파일프로토콜: SFTP
 - 호스트이름: IP
 - 포트번호: 22
 - 로그인 후, 이름/PW 입력.
 - 왼쪽이 local, 오른쪽이 remote server임. drag&drop으로 copy가능.

Ubuntu 서버 활용하기 - Xming + PuTTy 설치
<참고: http://blog.naver.com/PostView.nhn?blogId=oxcow119&logNo=60160622640>
Windows에서 GUI로 원격서버작업을 할 수 있단다.

** Server에서 **
cd /etc/ssh
sudo vi ssh_config

20번째 즈음
#  ForwardX11 no 를
ForwardX11 yes 로 수정 (#삭제, no->yes로 수정)

service sshd restart (서비스 재시작)


** Client on Windows에서 **
0. PuTTy 설치(windows는 홈피가서 다운로드)
1. https://sourceforge.net/projects/xming/ 에서 다운로드 및 설치(Full installation 선택 후, Don't install an SSH client클릭 - putty설치되어있으므로.)
2. XLaunch 실행 -> one window -> start no client -> Clipboard 체크 -> 마침
3. PuTTy실행 후, Session(기본화면)에서 IP, Port:22, SSH 입력.
4. Connection > SSH > X11에서 Enable X11 forwarding 체크, X display location에 localhost:0 입력
5. 세션모드에서 저장하면 편하게 사용가능.
6. 로그인 후, command & 치면 client PC의 화면에서 GUI사용가능.
 ex) firefox & --> firefox가 client에서 뜸.
 ex) gnome-session --> Xming에 Xwindow화면이 떠야하는데 안뜬다.

** Client on Linux에서 **
 linux는 sudo apt-get install putty으로 설치 후, 위 절차를 따라해도 되고 putty를 쓰지않고 ssh -X IP를 쳐도 됨.

Ubuntu 서버 활용하기 - Pycharm-community버전 쓰기
o gnome설치
 sudo apt-get install ubuntu-gnome-desktop
o pycharm-community버전 설치
 sudo add-apt-repository ppa:mystic-mirage/pycharm
 sudo apt-get update
 sudo apt-get install pycharm-community
o pycharm-community local에서 실행하기
 local에서 Xming클릭.
 server에서 pycharm-community입력.
client PC에서 pycharm을 쓸 수 있음.

Ubuntu 서버 활용하기 - docker container에서 pycharm사용하기
<참조: https://blog.jetbrains.com/pycharm/2017/09/pycharm-community-edition-and-professional-edition-explained-licenses-and-more/>
- pycharm community로는 불가능
- 이유는 remote control로 docker에 붙어야하는데, 이게 유료버전에만 존재함(위 링크 왜 Professional 버전을 써야하는지에 나와있음).

결국
WinSCP를 Ubuntu Explorer(?)처럼 pycharm을 개발환경으로, 실행은 command line으로 하는 이상한 구조가 되어버림.

2018년 1월 31일 수요일

Tyan server에 Ubuntu server 16.04.03 LTS설치, 그래픽드라이버, docker, deep learning 이미지 설치하기

목록
- 1. Ubuntu server 설치
- 2. 그래픽드라이버 설치(NVIDIA)

- 3. docker 설치
- 4. Nvidia docker 설치
- 5. Deep Learning용 image설치

1. Ubuntu server
1. ubuntu 사이트(https://ubuntu.com/download/server)에 서버버전 iso파일 다운로드하여 DVD에 굽기(16.04.3-server amd64 bit 사용함)
2. BIOS화면에서 F2/Del을 눌러 BIOS진입 -> 부팅순서를 DVD로 변경 후, 재부팅
3. ubuntu설치하기
  a. 언어는 English.
  b. network의 경우, enp13s0f0과 0f1이 있었는데, 0f0은 부팅용이라서 0f1을 LAN 케이블에 물리고 작업함.

  c. Hostname은 컴퓨터의 이름, User name은 사용자 이름이므로 주의해서 입력.
  d. Partition disk는 디스크를 지우고, auto로 할당함.
  e. 자동업데이트는 No automatic updates선택
  f. Server유형은 OpenSSH만 추가설치 (총 2개가 선택됨)
  g. 나머지는 모두 default값 사용함.
4. network 설정하기
  a. ifconfig -a로 네트워크 이름 확인(우리의 경우는 3.b.의 것 2개)
  b. sudo vi /etc/network/interfaces를 열고
    auto <네트워크이름>
    iface <네트워크이름> inet static
    address <IP주소입력>
    netmask <서브넷마스크>
    gateway <게이트웨이>
    dns-nameservers <DNS, 두개 이상은 공백으로, 주로 168.126.63.1 168.126.63.2 8.8.8.8 씀>
  c. /etc/init.d/networking restart 입력 후, 네트워크 적용안되면 reboot입력하여 재부팅
  d. ping 8.8.8.8로 동작확인
5. 프로그램 설치
  sudo apt-get update
  sudo apt-get install openssh-server

6. 원격접속용 컴퓨터에 putty설치(https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 후, IP넣고 접속.

2. 그래픽드라이버 설치(NVIDIA)
<참고: http://www.linuxandubuntu.com/home/how-to-install-latest-nvidia-drivers-in-linux>
1. 기존 NVIDIA 드라이버 삭제
 sudo apt-get purge nvidia*
2. 최신 그래픽 드라이버  버전 확인
 https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa
 위 사이트에서 nvidia-graphics-drivers-*** 의 숫자 확인 (ctrl+f활용)
 http://www.nvidia.com/object/unix.html 에서 소유한 GPU가 위 버전 지원하는지 확인(해당버전 클릭 후, Supported Product tab누르면 됨.
  ex) TITAN Xp는 390가능
3. repository update
  sudo add-apt-repository ppa:graphics-drivers (시간 오래 걸림, 약 10분)
  sudo apt-get update
4. 그래픽카드 다운로드 및 설치
  sudo apt-get install nvidia-390 (390대신 2에서 찾은 번호 입력, 시간 오래 걸림, 약 1시간)
  * 만약, Unable to locate package nvidia-390이 나온다면,https://hiseon.me/linux/ubuntu/install_nvidia_driver/의 방법을 따라함.
5. reboot 후, 버전 확인
  reboot 혹은 sudo reboot(putty로 원격 접속한 경우)
  lsmod | grep nvidia 혹은 lsmod | grep nouveau
  위 명령어로 뭐라도 뜨면 됨.
6. 그래픽 드라이버 자동 업데이트 방지
  sudo apt-mark hold nvidia-390

3. docker 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-3.html>
o docker 이해하기
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html>
- docker란 container가 동작하게끔 하는 가상화 플랫폼
- 가상화 방식
  -- OS가상화 - VMware나 VirtualBox; host OS위에 guest OS를 돌리기에 편하지만 느림.
  -- 프로세스 격리를 통한 가상화 - linux container; host OS위에 docker platform이 존재하고, 그 위에 library와 app이 개별적으로 돌아감. OS별도 설치는 불가능하지만 빠름.
- container: 이 안에서 실행하는 프로세스 들은 서로 영향을 주지 않고 동작. apt-get, yum등 자유롭게 설치가능. 설치시간도 매우 빠름(~10초).
- image: 특정 시점의 상태를 저장해놓은 변하지 않는 상태(가상CD의 image같은 것), image는 그것만으로 동작가능함(즉, 다운받아서 쓰면 돌아감)
- layer: image A에서 특정 lib B설치시 image C = A + B로 구성되어 효율적으로 동작하도록 만든 체계.
- client와 server(host): client에서 명령어 실행 -> docker daemon이 받아서 container에 toss -> 실행 결과 docker daemon에 toss -> client에 출력

o docker 다운로드 및 설치
<참고: https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html>
1. docker 설치 및 버전확인 - 너무 최신버전이면 nvidia-docker가 설치되지 않기에 다음을 추천
  <참고: https://docs.docker.com/install/linux/docker-ce/ubuntu/>
  a. 옛날꺼 지우기
  sudo apt-get remove docker docker-engine docker.io

  b. repository를 이용한 설치
  sudo apt-get update
  apt가 HTTPS사용토록 허락
  sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  c. docker GPG키 추가
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  d.
  sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  sudo apt-get update

  e. 그냥 최신버전을 설치하고프면(비추)
  sudo apt-get install docker-ce

  e. 만약 특정버전을 설치하고프다면
  sudo apt-get install docker-ce=17.12.0~ce-0~ubuntu
  apt-cache madison docker-ce
  으로 가능 버전 확인(nvidia-docker2는 docker 17.09.0까지만 지원)

  f. 버전확인
  sudo docker run hello-world
  docker version

  g. root아닌 user로 docker실행하기
  sudo usermod -aG docker 현재사용자ID

3. nvidia-docker설치
   <참고: https://github.com/NVIDIA/nvidia-docker>
    # 기존 nvidia-docker삭제
  docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
  sudo apt-get purge -y nvidia-docker

# repo설정
  curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
  curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
  sudo apt-get update

# 설치
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

** 만약 위에 것을 하다가 nvidia-docker2가 docker-ce 버전이 맞지않아 설치안된다고 나오면, docker와 nvidia-docker 버전이 서로 맞지않기에 이전 docker를 삭제, 재설치해야됨.
아래는 설치한 docker 삭제방법
<참고: https://stackoverflow.com/questions/31313497/how-to-remove-docker-installed-using-wget>
sudo apt-get purge -y docker-engine
sudo apt-get autoremove -y --purge docker-engine
sudo apt-get autoclean
sudo apt-get purge -y docker-engine docker docker.io docker-ce
sudo apt-get autoremove -y --purge docker-engine docker docker.io docker-ce

sudo rm -rf /var/lib/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo apt-get autoclean
** 잘되면 위의 것은 넘어가기

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

4. Deep Learning용 image설치
a. CUDA, cudnn, tensorflow, caffe, theano, pytorch, keras, opencv가 설치된 image
  https://github.com/ufoym/deepo << CUDA, cudnn, tf, caffe, theano, pytorch, keras, opencv

- image 다운로드
docker pull ufoym/deepo 혹은
docker pull ufoym/deepo:py27

- 동작테스트
nvidia-docker run --rm ufoym/deepo:py27 nvidia-smi
==> nvidia-smi결과인 GPU상태들이 나옴.
nvidia-docker run -it ufoym/deepo:py27 bash
python
import tensorflow
import keras
==> 문제없이 되면 사용하면 됨.

참고:
pyTorch의 경우 shared memory를 사용함. 이 경우 늘려줘야 됨.
nvidia-docker run -it --ipc=host ufoym/deepo:py27 bash

참고: 저장공간 share between host machine and container
nvidia-docker run -it -v /host/data:/data - /host/config:/config ufoym/deepo:py27 bash
container의 /data 에서 host의 /host/data가 보이게 됨.

참고:
python commandline에서 Ctrl+D <== exit from python commandline

참고:
--rm 옵션으로 container가 종료 후, 삭제됬음.
interactive하게 쓰는 건 다음과 같이 입력
nvidia-docker run -it ufoym/deepo:py27 bash

b. caffe, opencv만 설치하고싶다면
https://github.com/w102060018w/caffe-opencv-cuda8.0-docker 의 이미지 사용