R 코딩을 하면서 때로는 수행 시간에 대한 벤치마킹이 필요한 경우가 생깁니다. 오늘은 이미 검증된 5가지 방법을 알려 드리도록 하겠습니다.

R 벤치마크에 대해서는 이미 rbenchmark, microbenchmarktictoc 등 최소 3 개의 R 패키지가 공개 되었습니다. 또한 기본 함수인 Sys.timesystem.time을 통해서도 실행 시간을 측정하는 방법을 제공합니다. 일단, 이미 테스트해본 총 5 가지 옵션에서 각각 사용하는 구문을 간략히 살펴보고 최종 결론을 내보도록 하겠습니다.

 

1. Sys.time 활용

아래와 같이 수행할 R 스크립트 앞.뒤에 Sys.time() 을 사용하여 시작과 종료 시간의 차이로 측정 할 수 있습니다. 가장 단순하면서도 유연한 방법 입니다.

 

2. tictoc 패키지 활용

함수 tic 및 toc는 방금 설명한 Sys.time()과 동일한 방식으로 벤치마킹에 사용됩니다. 하지만, tictoc 패키지는은 전반적으로 더 많은 편의를 제공합니다.

최신 버전의 tictoc은 다음과 같이 github에서 설치할 수 있습니다 :

아래와 같이 하나의 코드 덩어리에 대한 시간을 측정할 수 있습니다.

또는 여러 타이머를 중첩할 수 있습니다.

3. system.time 활용

system.time을 사용하여 R 표현식을 평가할 수 있습니다. 예를 들어, 다음과 같이 위에서 정의한 함수 sleep_for_a_minute 의 실행 시간을 측정 할 수 있습니다.

 

하지만 정확히 보고 된 시간 인 user),system 및 elapsed(경과 시간)은 무엇일까요?

분명히 elapsed(경과 된 시간)은sleep_for_a_minute 함수를 실행하는 데 걸리는 벽시계 시간과 그 주위의 벤치마킹 코드입니다 (이것은 추측 할 수있는 시간보다 약간 더 걸렸습니다).

사용자 및 시스템 시간과 관련하여 William Dunlap은 r-help 메일링 리스트에 다음과 같은 설명을 올렸습니다.

“사용자 CPU 시간”은 현재 프로세스 (즉, 현재 R 세션)이 소비 한 CPU 시간을 제공하고 “시스템 CPU 시간”은 현재 프로세스를 대신하여 커널 (운영 체제)이 소비 한 CPU 시간을 제공합니다. 운영 체제는 파일 열기, 입력 또는 출력, 다른 프로세스 시작, 시스템 클럭과 같은 작업에 사용됩니다. 많은 프로세스가 공유해야하는 리소스가 관련된 작업입니다. 다른 운영 체제는 운영 체제에 따라 다른 작업을 수행합니다.

 

4. rbenchmark 라이브러리

rbenchmark R 패키지의 함수 벤치 마크에 대한 문서는이를 “system.time을 위한 간단한 래퍼”라고 설명합니다. 그러나 system.time 호출에 비해 많은 편의를 추가합니다. 예를 들어, 여러 표현식의 여러 복제를 시간 지정하는 데 하나의 벤치 마크 호출 만 있으면됩니다. 또한 반환 된 결과는 데이터 프레임에 편리하게 구성됩니다.

github에서 rbenchmark 패키지의 development1 버전을 설치할 수 있습니다.

예를 들어, 3 가지 대체 계산 절차를 사용하여 선형회귀 계수를 계산하는 데 필요한 시간을 비교해 봅시다.

  1. lm,
  2. the Moore-Penrose pseudoinverse,
  3. the Moore-Penrose pseudoinverse but without explicit matrix inverses

여기서elapsed, user.self, 및  sys.self의 의미는system.time에 대한 절에서 설명한 것과 동일하며relative는 단순히 가장 빠른 테스트의 시간 비율입니다. 흥미롭게도 선형회귀는 여기에서 가장 느립니다.

5. microbenchmark 라이브러리

microbenchmark 라이브러리의 가장 최근 개발 버전은 github에서 설치할 수 있습니다.

rbenchmark 패키지의 벤치마크와 마찬가지로, 함수 microbenchmark는 여러 R 코드 뭉치의 실행 시간을 비교하는 데 사용할 수 있습니다. 이와 더불어 많은 편의와 추가 기능을 제공합니다.

필자는microbenchmark의 특징 중 하나가 벤치마킹 된 표현식의 결과를 사용자 지정 함수로 자동 확인하는 기능이라는 것을 알았습니다. 다음은 선형모델의 계수 벡터를 계산하는 세 가지 방법을 다시 비교 한 것입니다.

세 가지 방법으로 반환된 결과의 동일성 (최대 오류 1e-12까지)을 확인하기 위해 함수 인수 검사를 사용해봤습니다. 결과가 동일하지 않으면 마이크로 벤치 마크는 오류 메시지를 냅니다. 또 다른 중요한 특징은microbenchmark 결과를 플로팅하기위한 ggplot2와의 통합입니다.

 

Microbenchmark results plot

결론

주어진 다양한 벤치마킹 기능의 시연은 확실히 철저하진 않습니다. 그럼에도 불구하고 개인적인 벤치마킹 요구 사항에 대한 결론은 다음과 같습니다.

  • tictoc 패키지뿐만 아니라Sys.time 접근법은 복잡한 알고리즘의 단계 (잠재적으로 중첩 된) 단계에 사용될 수 있습니다. 그러나, tictoc은 더 편리하고 절대 안전합니다.
  • microbenchmark  는benchmark보다 다른 유형의 측정 값을 반환한다는 것을 알 수 있습니다. 대부분의 경우 에microbenchmark 측정 값이 실용적으로 더 중요하다고 생각합니다.
  • microbenchmark는 시각화가 내장 된 유일한 벤치마킹 패키지입니다.

 

이러한 이유 로microbenchmark 와 tictoc을 추천 합니다.


 

출처: 5 ways to measure running time of R code | R-bloggers