카테고리 보관물: 미분류

우분투에서 R 설치하기

2022년 최신판입니다.

늘 똑같은데 최근에 설치하는 방법이 좀 바뀌었군요.

우분투 리눅스에 R을 설치하는 법은 거의 바뀌지 않기 때문에 https://cloud.r-project.org/ 에 방문해서 코드를 복사한 후에 같은 방법을 쓰면 늘 되지만 가끔 방식이 바뀌므로 방문해서 바뀐 것을 확인해봐야 합니다.

빠른 설치 방법

설명을 생략한 코드 복붙이 필요하면 아래의 순서대로 하시면 됩니다.

sudo apt update -qq
sudo apt install --no-install-recommends software-properties-common dirmngr
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
sudo apt install --no-install-recommends r-base
R --version

한줄씩 따라가며 설치하기

복붙만 하다가는 바보가 됩니다. 어떤 순서로 설치하는지 알아둘 필요가 있습니다. 그래야 설치하다 문제가 생기면 어느 부분이 문제인지 알고 처리하는 법을 배울 수 있습니다.

시간이 없고 하기도 싫으면 굳이 지금 할 필요는 없습니다.

# 패키지 인덱스를 업데이트합니다.

sudo apt update -qq

# 헬퍼 패키지 2개를 설치합니다.

sudo apt install --no-install-recommends software-properties-common dirmngr

# 레파지토리 키를 설치합니다.

wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc

#  R 4.0 레파지토리를 등록합니다.

sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"

# 설치합니다.

sudo apt install --no-install-recommends r-base

# 버전을 확인합니다.

$ R --version
R version 4.1.3 (2022-03-10) -- "One Push-Up"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

현재 시점에서는 R 4.1.3이 최신 버전이고 곧 새버전이 출시된답니다.

관련 포스트

우분투 18.04에 R 설치하기 – Install R on Ubuntu 18.04

우분투 18.04에 자바11 설치하기 – Install Java 11 onto Ubuntu 18.04

우분투 18.04에 자바11 설치하는 방법입니다.

18.04가 이제는 구버전이기도 하고 Java가 너무 구버전이 설치되어 있어서 업그레이드가 필요할 때가 많습니다. 보통 Java로 만들어진 애플리케이션들이 비교적 최근 버전의 자바를 요구하는 경우입니다.

설치하기

오픈JDK구버전을 제거합니다.

sudo apt-get remove openjdk*

오라클JDK도 제거합니다.

sudo apt-get remove oracle*

깔끔하게 청소해줍니다.

sudo apt-get autoremove --purge
sudo apt-get autoclean

openjdk 설치해야 하는데 커스텀 레파지토리를 추가하고 설치합니다.

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt install openjdk-11-jdk

버전을 확인해서 11.x.xx 가 보여야 합니다.

java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)

파이썬으로 131072개 이상의 컬럼을 가진 CSV 읽기 – Python CSV – field large than field limit (131072) read csv

Pandas로 큰 CSV파일을 읽다보면 이런 에러가 나올 수 있습니다.
field larger than field limit (131072) read csv

즉 131072개의 컬럼까지만 읽을 수 있다는 것입니다. CSV의 컬럼이 131072개 이상이 있다는 것은 특이한 경우이긴 하지만 차원이 매우 높은 벡터 데이터가 있다거나 할 수 있기 때문에 실제로 이런 CSV파일이 없는 것도 아닙니다.

해결방법은 매우 간단합니다. csv.field_size_limit 함수로 시스템 최대치까지 늘려주시면 됩니다.

csv의 필드 크기 제한을 시스템 한계까지 늘려주면 해결할 수 있습니다.

import sys
import csv

csv.field_size_limit(sys.maxsize)

쉘스크립트 – 시작날짜와 끝날짜 사이의 모든 날짜출력

셀스크립트로 시작날짜부터 끝날짜까지 모든 날짜를 출력하는 코드입니다.

이런게 왜 필요할까 싶겠지만 생각보다 꽤 많이 필요하고 알아두면 편할 때가 많습니다.

보통 날짜별로 데이터를 프로세싱하거나 날짜별로 어떤 일을 처리하는 스크립트를 구간내의 모든 날짜에 대해서 실행하고 싶을 때 쓰거나 합니다.

예를 들면 일별로 배치프로세싱을 만들어서 집계를 하거나 예측이나 최적화 등을 처리하는 어떤 프로세스가 있다고 할때 이런 프로세스를 몇일분을 구간을 줘서 각각 일별로 처리하거나 할 때 말입니다. 이 코드를 알아두면 일별로 실행하는 배치프로세스를 수정하지 않고도 일별로 실행이 가능합니다.

쉘스크립트로 이런 것을 작성하기 어려운 편인데 사실 패턴을 알고 나면 그렇게 어렵지 않습니다.

핵심은 while 구문과 date 코맨드를 잘 사용하는 것입니다.

#!/bin/bash

begin_date="20220209"
end_date="20220410"

while ! [[ $begin_date > $end_date ]]; do
    echo $begin_date
    bash ./daily-batch-processing.sh $begin_date
    begin_date=$(date -d "$begin_date + 1 day" +%Y%m%d)
done

CUDA_ERROR_OUT_OF_MEMORY 에러

CUDA_ERROR_OUT_OF_MEMORY 에러

Tensorflow 작업을 하다보면 이런 에러가 보일 때가 있습니다.

보통 Jupyter notebook을 사용하는 서버 환경에 이런 에러가 보이는데

원인은 GPU를 사용하면서 GPU의 메모리를 할당받고 해제하지 않은 프로세스가 있거나 많기 때문입니다.

이 프로세스가 지금 실행하고 있고 중요한 것이 아니면서 Jupyter notebook으로 실행된 메모리 점유만 하고 사용하지 않는 것이라면 그냥 kill 하면 됩니다.

먼저 nvidia-smi로 GPU의 할당 내역을 보고 nvidia-smi –gpu-reset으로 해제를 시도합니다.

sudo nvidia-smi
sudo nvidia-smi --gpu-reset

하고 나서도 해제가 안된다면 킬 해줍니다.

sudo kill -09 24089

하고 나면 깔끔해진 것을 볼 수 있습니다.

이제 메모리 오류가 발생했던 코드를 다시 실행하면 더 이상 에러가 발생하지 않습니다.