본문 바로가기

R 사용자를 위한 Colab

R Programming/Basic by Mandarim_ 2023. 10. 15.

Python을 사용할 일이 있어서 오랜만에 Colab을 켰는데, Colab에서 R을 지원해준다는 것을 알게 됐다.

Colab은 Google Colaboratory를 줄여서 부르는 말로, Google Server에서 작동되는 Jupyter Notebook 기반의 웹용 Python 환경을 제공한다.

찾아보니 엄청 옛날부터 제공했던 것 같은데.. 이제 알았다.. 아무튼 R에서 Colab이 사용 가능하단다.

 

물론 Python 사용자라면 Colab에 이미 친숙할 거고 매우 잘 사용해왔겠지만,

R 사용자들은 잘 모를거기 때문에 관련 내용에 대해 작성하고자 한다.

 

Colab은 아래와 같은 장점들이 있다.

  • 무료 구글 서버 사용 가능 (제한적이지만)
  • 대부분의 Library / Package 가 이미 설치됨
    • 특히 파이썬으로 ML을 처음 사용할 때 큰 장점이었나, 설치되지 않은 패키지의 경우 매 런타임마다 새로 설치해야 한다.
  • 구글 드라이브와 연동 가능
    • R환경에선 구글 마운팅 불가능함. - 우회적인 방법은 존재.
  • 작업 공유의 원활함.

특히, 요즘 시뮬레이션 결과가 너무 느리게 나와서 많이 스트레스받고 있던 참인데 정말 다행이다.

사실 무엇보다 학생이기 때문에 제한적인 CPU, 그래픽카드, .., Server 환경을 갖고 있었기에

프로그램을 돌릴 수 있는 환경이 구글 계정마다 생긴다는 것만으로도 약간 행복했다..

하지만, 구글 드라이브 마운팅이 안되는게 생각보다 많이 불편하다.


1. Google Drive 에서 Colab 파일 생성하기.

만약, 완전 처음으로 Google Colaboratory를 사용한다면, [ + 연결할 앱 더보기] >> "Google Worspaces Marketplaces" >> "Colaboratory" 검색 후 설치의 과정이 필요하다.

 

이후, Google Drive에서 새로 만들기 / 오른쪽 마우스 키를 누르면 다음과 같이 Google Colaboratory 파일이 생성 가능하다.

 

Colab 설치Colab 처음 시작할 때
Google Colaboratory 설치후 파일 생성하기.

파일을 생성하면 아래와 같은 빈 페이지 (Untitled.ipynb)가 생성된다.

Colab의 디폴트 확장자는 ipynb 파일이므로, 환경을 R로 바꿔줘야 한다.

 

colab 빈페이지
Colab 처음 생성했을 때 나오는 빈 페이지

[런타임] >> [런타임 유형 변경] >> (빨강 네모) 런타임 유형:R로 설정한다.

무료 Colab의 경우 CPU, T4 GPU, TPU 만 사용 가능하다.

 

런타임 유형 변경Rcolab 런타임환경설정
런타임 유형 변경을 통해 R을 사용할 수 있다.

 

그럼 가장 아래에 R Google Compute Engine 백엔드 연결중 에서 연결됨이 되면 R을 사용할 수 있다.

Colab은 대화형 이기 때문에, R에서는 R Markdown과 비슷하다고 보면 된다.

오늘 날짜 기준으로 R.version은 4.3.1을 제공한다.

 

R코드 실행
R 코드 실행


2. Google Drive 연동

[왼쪽의 풀더]  >> [드라이브 마운팅] 기능을 통해 연동 가능해야 하는데, 클릭하면 아래와 같은 메시지를 제공한다.

즉, R에선 Python처럼 연결이 가능하진 않는단다...

우회적인 방법이 있다고 해도 직접 해보니 이게 정말 불편하다.

Google Drive 마운트는 호스팅 된 Python 런타임에서만 지원됩니다.

 

드라이브마운팅 시도
드라이브 마운트.. Python은 되는데 R은 안되는.. 그 기능

 

아래 깃허브 링크를 참고하였는데, 구체적인 설명을 덧붙이겠다.

https://github.com/katewall/medium_tutorials/blob/main/210630_Medium_ColabwithR.ipynb

 

먼저, 아래와 같은 코드를 그냥 복사/붙여넣기 하여 실행한다.

아래의 메시지와 함께 URL 링크가 출력되는데, 링크 클릭 후 로그인하여 Authorization Code를 입력하면 된다.

Please point your browser to the following url: 
install.packages("googledrive")
library("googledrive")

if (file.exists("/usr/local/lib/python3.6/dist-packages/google/colab_ipython.py")){
  install.packages("R.utils")
  library("R.utils")
  library("httr")
  my_check <- function() {return(TRUE)}
  reassignInPackage("is_interactive", pkgName = "httr", my_check)
  options(rlang_interactive=TRUE)
}

drive_auth(use_oob = TRUE, cache = TRUE)

그다음으로, 구글 드라이브에 업로드해둔 파일을 [오른쪽 마우스 클릭] >> [공유] >> [공유]를 누른다.

링크 복사하기 전, [일반 액세스] >> [링크가 있는 모든 사용자] 접근 가능하도록 설정 >> [링크 복사] 클릭한다.

만약, 파일을 수정까지 하고 싶다면 [뷰어] >> [편집자]로 수정하면 된다.

 

구글 드라이브 파일 공유
파일 접근을 위한 링크 생성하기

 

마지막으로, R Colab 환경에 돌아와서, 아래의 링크와 같이 실행한다.

이때 복사한 링크 주소와, 어떻게 저장할 것인지 옵션으로 설정해야 한다.

무조건 /content/ 폴더 안에 저장해야 한다.

! download.file('복사된 링크 주소','/content/A.cpp')

그럼 아래와 같이 이제 접근 가능하다.

사용하고자 하는 파일을 모두 복사하여야 하고, 모든 런타임 실행마다 파일을 다운로드받아야 하는 정말 귀찮은 단점이 있다.

사용하고자 하는 파일의 수가 적거나, 데이터를 다운로드하여야 할 필요가 없이 Export 만 해야 한다면 정말 편리하게 사용할 수 있을 것 같다.

 

content 풀더 안에 A.cpp 확인
파일의 content에서 다운받은 파일 확인 가능함.

관련 내용을 서치 했을 때, .csv 파일은 당연히 문제없이 접근이 가능한 것 같았고,

 

나의 경우엔 cpp 파일 또한 읽을 수 있는지가 가장 궁금해서 확인해 봤는데, Rtools 때문에 에러가 발생하므로 직접 안에서 정의해서 사용해야 한다.

혹시 몰라서 Rcpp.function 이 정의된 .Rdata를 가지고 와서 불러와봤는데, 뭔지 모를 에러가 또 발생한다...ㅎㅋ

많이 검색했을 때 Rtools 설치 관련한 내용을 다루는 글도 적고, 어떻게 해야 할지도 모르겠어서 포기했다.


3. 결과 Export

아래처럼 예시 파일을 생성하면, content 폴더 안에 저장하면 된다.

dt = data.frame("a"= c(1,2,3), "b"=c(4,5,6))
write.csv(dt, "/content/temp.csv")

그럼 아래와 같이 temp.csv 옆에 있는 점 세 개를 누르면 [다운로드] 버튼을 통해 PC로 다운로드할 수 있다.

 

export
temp.csv로 export 하기


4. 속도 비교

R의 microbenchmark 라이브러리의 함수를 사용하여 각 환경별 속도를 체크해 보겠다.

install.packages("optimParallel")
install.packages("microbenchmark")

library(optimParallel)
library(microbenchmark)

detectCores()

check_fun = function(x) {
  x^2 + 5*x + 3
}

check_speed <- microbenchmark(times=100, unit="s", check_fun(x=5))
print(check_speed)

물론 임시로 체크한 것이며, Colab은 당시의 접속자나 작동 중인 Session에 따라 성능이 조금씩 달라지므로 대략적인 참고치로만 사용하자.

평균 계산 속도는 여러 개의 코어를 사용하지 않고 1개의 코어로 작동했을 때이다.

 

고급 RAM 사용 (유료 서비스) 시 사용 가능한 코어의 수가 증가하므로 병렬 연산 시에 매우 빠르게 작업이 가능할 것 같다.

나는 GPU까지 쓸 일은 없어서 TPU 코어 40개를 사용할 것 같다.

 

무료/유료 하드웨어 가속기 고급 RAM 사용 사용 가능한 코어의 수 평균 계산 속도
무료 CPU 불가 2 2.988217e-05
무료 T4 GPU 불가 2 2.30925e-05
무료 TPU 불가 2 3.400961e-05
유료 CPU 사용 8 3.063279e-05
유료 T4 GPU 사용 8 2.303621e-05
유료 TPU 사용 40 2.857154e-05
유료 A100 GPU 사용 8 2.283774e-05
유료 V100 GPU 사용 8 2.460457e-05

 

 

반응형