Ruby에서 GPU를 계산할 수있는 Cumo/NArray를 사용해 보았습니다.
5856 단어 NArrayred-chainerscirubyCUDA루비
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
등으로 확인해 보세요.
참조 등
공식 거리에 설치합니다.
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
등으로 확인해 보세요.참조 등
Numo/NArray의 대응 상황
Numo/NArray의 기능에 어디까지 대응하고 있는지는 Github의 issue에서 공개되어 있습니다.
쉬운 사용법
배열 생성
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
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]]
사칙 연산에 대해 간단한 벤치마크를 해 보았습니다.
덧붙여 Benchmark의 제대로 한 방법은 모르고, 여러가지 이상할지도 모르기 때문에, 참고 정도로 생각해 주세요. 1
htps : // st. 기주 b. 코m/코지x2/9d22후 cf8c7c5f304c2311f005b7엣 c1
(1000,1000) 행렬의 사칙 연산을 비교합니다. 환경은 다음과 같습니다.
결과입니다. 어쨌든 Ruby의 Matrix가 느린 것을 알 수 있습니다.
오른쪽 가장자리 Ruby의 Matrix의 곱셈과 나눗셈의 결과가 없는 것은, 빠르기보다는, 시간이 너무 걸리기 때문에 도중에 실행을 취소했기 때문입니다. 최저라도 그래프에 표시되고 있는 합·차의 한층 더 10배 이상의 시간이 걸리는 것 같습니다.
Ruby Matrix를 제거한 결과는 이런 느낌입니다.
우선, UInt8의 연산이나, 합산에 관해서는, Cumo/NArray 는 폭속이라고 생각합니다.
Array의 크기를 변경하면 또 다른 결과가 나올지도 모릅니다.
Cumo의 공식 벤치 마크가 있습니다. htps : // 기주 b. 이 m/그 ts/거미/bぉb/마s r/벤 ch/거미_벤 ch. rb
Reference
이 문제에 관하여(Ruby에서 GPU를 계산할 수있는 Cumo/NArray를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kojix2/items/e3c7bf9a9072139776d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)