Ruby에서 GPU를 계산할 수있는 Cumo/NArray를 사용해 보았습니다.

Ruby에서 GPU를 사용하여 행렬 계산을 할 수 있는 Cumo/NArray를 사용해 보았으므로 소개합니다.

Cumo/NArray 정보



Cumo/NArray는 Numo/NArray와 같은 쓰기 방식으로 GPU에서 행렬 계산을 할 수 있는 라이브러리입니다.
(Numo/NArray는 Ruby에서 행렬 계산을 제공하는 numpy와 같은 라이브러리입니다)
htps : // 기주 b. 코 m / 그 ts / 거미

설치



공식 거리에 설치합니다.gem install cumo 하지만 설치할 수 없지는 않지만, cuda와 관련된 문제가 발생할 때를 대비하여 설명서 설치가 좋을 것 같습니다.

리포지토리 다운로드
git clone https://github.com/sonots/cumo

CUDA의 설치 상황에 따라 환경 변수를 설정합니다.
export CUDA_PATH="/usr/local/cuda"
export CPATH="$CUDA_PATH/include:$CPATH"
export LD_LIBRARY_PATH="$CUDA_PATH/lib64:$CUDA_PATH/lib:$LD_LIBRARY_PATH"
export PATH="$CUDA_PATH/bin:$PATH"
export LIBRARY_PATH="$CUDA_PATH/lib64:$CUDA_PATH/lib:$LIBRARY_PATH"

처음부터 rake install 라고 해도 좋지만, 일단 rake compile 를 실행하면 에러 메세지의 상황을 확인하기 쉬워집니다.
bundle install
bundle exec rake compile
# マルチコア
# bundle exec env MAKEFLAG=-j8 rake compile
bundle exec rake build
bundle exec rake install

올바르게 설치되었는지 확인하기 위해 테스트를 실행합니다.
bundle exec rake test

GPU의 사용률이 상승하고 있는지 watch -n 1 nvidia-smi 등으로 확인해 보세요.

참조 등


  • Yard
  • cumo
  • numo-narray

  • Numpy와 Numo/Narray의 대응표
  • Numo vs numpy
  • Numo vs ndarray

  • 공식 RubyKaigi 2018 슬라이드
  • Fast Numerical Computing and Deep Learning in Ruby with Cumo


  • Numo/NArray의 대응 상황



    Numo/NArray의 기능에 어디까지 대응하고 있는지는 Github의 issue에서 공개되어 있습니다.
  • Progress of CUDA kernelize (File Point of View)
  • Progress of CUDA kernelize (Feature point of View)

  • 쉬운 사용법



    배열 생성


    
    require 'cumo'
    
    a = Cumo::SFloat.new(3,3).seq
    b = Cumo::SFloat.new(3,3).seq + 1
    
    p a
    p b
    

    실행 결과
    Cumo::SFloat#shape=[3,3]
    [[0, 1, 2], 
     [3, 4, 5], 
     [6, 7, 8]]
    
    Cumo::SFloat#shape=[3,3]
    [[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]
    

    행렬의 합·곱


    p a + b
    p a * b
    

    실행 결과
    Cumo::SFloat#shape=[3,3]
    [[1, 3, 5], 
     [7, 9, 11], 
     [13, 15, 17]]
    
    Cumo::SFloat#shape=[3,3]
    [[0, 2, 6], 
     [12, 20, 30], 
     [42, 56, 72]]
    

    거의 Numo::NArray와 같은 사용감입니다.

    간단한 벤치마크



    사칙 연산에 대해 간단한 벤치마크를 해 보았습니다.
    덧붙여 Benchmark의 제대로 한 방법은 모르고, 여러가지 이상할지도 모르기 때문에, 참고 정도로 생각해 주세요. 1
    htps : // st. 기주 b. 코m/코지x2/9d22후 cf8c7c5f304c2311f005b7엣 c1
  • Cumo/NArray
  • Numo/NArray
  • Ruby 표준 Matrix 라이브러리

  • (1000,1000) 행렬의 사칙 연산을 비교합니다. 환경은 다음과 같습니다.
  • OS Ubuntu 18.10
  • CPU Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
  • GPU GeForce GTX 1070

  • 결과입니다. 어쨌든 Ruby의 Matrix가 느린 것을 알 수 있습니다.
    오른쪽 가장자리 Ruby의 Matrix의 곱셈과 나눗셈의 결과가 없는 것은, 빠르기보다는, 시간이 너무 걸리기 때문에 도중에 실행을 취소했기 때문입니다. 최저라도 그래프에 표시되고 있는 합·차의 한층 더 10배 이상의 시간이 걸리는 것 같습니다.



    Ruby Matrix를 제거한 결과는 이런 느낌입니다.



    우선, UInt8의 연산이나, 합산에 관해서는, Cumo/NArray 는 폭속이라고 생각합니다.
    Array의 크기를 변경하면 또 다른 결과가 나올지도 모릅니다.



    Cumo의 공식 벤치 마크가 있습니다. htps : // 기주 b. 이 m/그 ts/거미/bぉb/마s r/벤 ch/거미_벤 ch. rb

    좋은 웹페이지 즐겨찾기