'CUDA'에 해당되는 글 3건

  1. 2016.10.06 tensorflow + anaconda2 + cuda 설치(노트북 사용)
  2. 2010.11.12 SGA using CUDA (2)
  3. 2009.12.04 CUDA Programming

예전에 tensorflow 를 처음 사용할 때, 리눅스 설치때문에 엄청나게 고생했었던 기억이 있다.


특히나 CUDA를 사용하는 부분에서, 노트북(GT 650M 사용)이 개발환경이다보니 일반적인 설치파일을 그냥 다운받는 것으로는 문제가 있어 많은 시간이 소모되었었는데,


얼마 전에 Ubuntu 16.04 버전으로 버전업하고, 그때의 과정을 되풀이 했는데, 너무나 쉽게 되었다.


1. Ubuntu 16.04 버전 설치


2. 그래픽카드 드라이버 설치

    sudo add-apt-repository ppa:graphics-drivers/ppa

    sudo apt-get install nvidia-370   

    설치 이후 재부팅하여, nvidia-settings 로 정상 설치 확인


3. CUDA 설치

    sudo apt-get install nvidia-cuda-toolkit

    example 이 필요하면, nvidia 사이트에서 다운


4. cuDNN 설치

    /usr/include, /usr/lib 에 설치함(기존에는 /usr/local/cuda ... 에 설치)

    CUDA v7.5 기준 v5 설치


5. anaconda2 설치

    https://www.continuum.io/downloads

 

6. tensorflow 설치 (설치시점에는 v0.11 사용함)

    http://tensorflow.org 참조


세상에... nouveau blacklist 따위도 필요 없고, 그냥 잘 된다.

진작 16.04 로 옮겨갈걸 그랬네...;;

Posted by SHHyun

댓글을 달아 주세요

이전에 간단하게 만들어두었던 SGA의 Fitness Evaluation 동작만을 CUDA 에서 실행하는 코드

난 지금까지 이걸 올렸다고 생각하고 있었는데, 다시보니 그게 아니었다.
이건 뭐 XX도 아니고...;;

(*) 일단 코드는 최적화는 전혀 되어 있지 않은 상태이며, 오히려 기본 GA보다도 Evaluation 성능이 떨어질 수 있다.

컴파일 환경은 쓰고싶은대로 아무거나 써도 이상이 없을 코드이며, 이전엔 Visual Studio 2008 에서 작업했었다.

CUDA에 대해서 가장 기본적인 코드라고 생각해도 될 코드이기때문에
혹시라도 이런 종류의 알고리즘을 다뤄보고 싶으신분은 살펴보면 좋을 것 같다.
Posted by SHHyun

댓글을 달아 주세요

  1. 별다섯개 2010.11.22 16:29  댓글주소  수정/삭제  댓글쓰기

    이뭐병?? ㅋㅋㅋ힘내시구료!!

병렬처리는 결국 필수 불가결한 요소가 될 것임에는 분명하다. 확실히 단일 코어 발전 대비 성능 비율이 언젠가부터 매우 낮아진다는 것을 확인할 수 있다. CPU 를 듀얼 혹은 쿼드로 쓰는 것도 꽤 매리트가 있지만, 알고리즘을 연구하는 사람으로써 그런 한 두개의 병렬을 가지고 큰 효과를 보기에는 그 한계가 명확하다.

결국 요래저래 살펴보다가 또다시 GPU 쪽으로 눈이 돌아가게 되었는데, 그 당시에는 그렇게 어렵게만 느껴지던 CUDA 라는 것이 그렇게 어려운 녀석이 아니었다.

일련의 흐름에 따라서 프로그래밍을 하면 되는데,

1. 디바이스의 초기화
2. GPU 상의 메모리 할당 ( cudaMalloc )
3. CPU 상에서 GPU 상으로 처리할 내용을 복사 ( cudaMemcpy )
4. 커널을 수행함으로써 원하는 연산 처리 ( function <<< blocks, threads, sharedmem >>> ( parameters ) )
5. GPU 상에서 처리된 내용을 CPU 상으로 재 이동 ( cudaMemcpy )
6. 할당했었던 메모리를 모두 해제 ( cudaFree )
7. 디바이스 종료

이러한 큰 흐름을 순서로 움직이면 된다.
얼마나 쉬운가?

마치 포인터를 처음 볼때의 그런 느낌이었다. 어라? 별거 아니네?
그런데 이놈도 포인터랑 똑같은 놈이더라. 결국 잘 쓰려고 하다보니 메모리 구조에 대한 것을 다시 확인해야 했다. CUDA 의 처리는 Block 단위의 다수의 스레드를 어떻게 관리하느냐, 그리고 이들이 처리될 때의 Shared Memory 를 잘 관리해 줘야 올바른 결과를 얻을 수 있고, 획기적인 병렬처리의 성능을 만끽할 수 있다는 것. 게다가 망할 포인터보다도 하나 더 많은 요소가 있었으니, Block 과 Thread 의 숫자를 결정해주는 것이다.

하지만 확실한 건 포인터와 마찬가지로 이놈도 쉽게 생각하면 될 것 같은 기분이 든다.
다음 번엔 SGA 에 Evaluation 과정을 CUDA 를 이용해 처리한 소스나 올려봐야 겠다. 아직 Thread 동기화에 문제가 있는지, 자꾸 마지막 변수값만 들어가는 현상이 발생하던데 요고만 해결하고 나서 하나씩 또 정리해봐야겠다.

Posted by SHHyun

댓글을 달아 주세요