에일리언웨어(Alienware) 노트북에서 GPU를 이용, 텐서플로우(TensorFlow) 실행하기



알파고 때문에 어디선가 누군가 나와 같은 삽질을 하고 있을지도 모르겠다. 누구에게라도, 다만 한 삽이라도, 도움이 되기를 바래본다.

+ 우분투 16.04 설치:
  - USB로 우분투 설치후 부팅 => WiFi 안잡힘
  - alienware WiFi 활성화
    . $ sudo service network-manager restart 실행
    . $ cd /lib/firmware/ath10k/QCA6174/hw3.0/ && sudo wget https://github.com/kvalo/ath10k-firmware/raw/master/QCA6174/hw3.0/board-2.bin
    ...리부트...
    . WiFi AP 설정
    * 참고 :  http://askubuntu.com/questions/765838/cannot-enable-wifi-of-alienware-r2-on-ubuntu-16-04-lts
  - gpu 존재 확인
    $ lspci
   
+ NVIDIA driver & CUDA 설치
  ! CMOS 설정에서 Secure Boot 해제 (즉, disable로 설정) ==> 정말 중요!!!
  - Install the NVidia 367.35 Driver
    $] sudo add-apt-repository ppa:graphics-drivers/ppa
    $] sudo apt-get update
    $] sudo apt-get install nvidia-367
    ...리부트...
  - Download the CUDA SDK from NVidia
    . https://developer.nvidia.com/cuda-toolkit
    . cuda_8.0.61_375.26_linux.run 파일 다운로드
  - Install the CUDA SDK
    $] cd ~/Downloads
    $] sudo chmod +x cuda_8.0.27*
    $] sudo ./cuda_8.0.61_375.26_linux.run --override
    $] cd /usr/local/cuda/samples
    $] sudo make
    $] 1_Utilities/deviceQuery/deviceQuery
    $] cd ~ 
  * 참고 : https://github.com/ftlml/user-guides/wiki/Installing-TensorFlow-w-GPU-Support-on-Ubuntu-16.04-for-Pascal-architecture

+ TensorFlow 설치
  ! Python 2.7 또는 Python 3.3+ 필요 (2.7 기준으로 요약)
  - pip 설치
    $ sudo apt-get install python-pip python-dev
  - TensorFlow 설치
    $ pip install tensorflow-gpu
  - TensorFlow 설치 검증
    $ python
    >>> import tensorflow as tf
    >>> hello = tf.constant('Hello, TensorFlow!')
    >>> sess = tf.Session()
    >>> print(sess.run(hello))
    ..."Hello, TensorFlow!" 메시지가 출력되는지 확인...
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingNativePip

+ (옵션) TensorFlow with docker 설치
  - docker 설치: https://docs.docker.com/engine/installation/
  - nvidia-docker 설치: https://github.com/NVIDIA/nvidia-docker
  - TensorFlow 컨테이너 실행 (1)
    $ sudo nvidia-docker run nvidia/cuda nvidia-smi
  - TensorFlow 컨테이너 실행 (2)
    $ sudo nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash
  * 참고: https://www.tensorflow.org/install/install_linux#InstallingDocker


+ 결과 확인: nvidia GPU driver 동작 잘함

acc@acc-Alienware-17-R3:~$ nvidia-smi
Wed Mar 22 16:07:10 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980M    Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P8     7W /  N/A |    335MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      1236    G   /usr/lib/xorg/Xorg                             159MiB |
|    0      2160    G   compiz                                         114MiB |
|    0      7885    C   python2                                         58MiB |
+-----------------------------------------------------------------------------+


+ 결과 확인: TensorFlow에서 GPU 인식 잘함

acc@acc-Alienware-17-R3:~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
>>> tf.Session().run()
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 980M
major: 5 minor: 2 memoryClockRate (GHz) 1.1265
pciBusID 0000:01:00.0
Total memory: 3.94GiB
Free memory: 3.56GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 980M, pci bus id: 0000:01:00.0)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: run() takes at least 2 arguments (1 given)
>>> 

(이상)

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

YouTube 동영상


2016년 9월22일에 업로드된 동영상이다. C++ 랭귀지를 만든 Bjarne Stroustrup(베야네 스트로스트룹)이 C++의 과거와 미래에 대해 설명한다. 한번 들으면 좋은데 너무 길다 (1시간43분). 내용을 간단히 요약한다.


- C++ 성공은 운이 아니다. C++ 성공에는 분명한 이유가 있다.
+ 랭귀지 저자가 생각하는 C++
  - 하드웨어를 직접 다루는
  - 오버헤드가 전혀 없는
  - 산업계 현장에서 사용하는
  - 좋은 프로그래머에게 더욱 유용한 랭귀지

- 랭귀지는 조그만 변해도 짐스럽다(구현, 도구제작, 학습이 필요). 변화 방향을 신중하게 결정해야 한다.
+ C++ 변화 방향
  - zero-overhead
  - 메모리 leak 등이 없는 안전한 코드를 만들게 할 것이다
  - 가비지컬렉션 등으로 인한 성능저하는 없을 것이다 (피할 것이다)

+ C++17 출시 임박
  - 아직도 C++98에 머물고 있다면 C++11, C++14로 업그레이드하라.
  - 적어도 현재에 머물러 미래를 준비하라
+ 깃허브에 C++ core guideline 문서가 존재한다
  - 한국어 번역에 참여한 사람들에게 감사한다
- 우리가 매일 사용하는 SW를 보존하기 위해서라도 C++은 계속 발전해야 한다



(이상)

저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG C++만세

댓글을 달아 주세요

CppCon 2014, C++ 개발자대회 요약

  • 구글을 비롯 많은 회사들이 C++ 코드에서 exception을 사용하지 않고 있음. exception은 아직 "solved problem"이 아님.
  • 페북, 0.4% 속도 개선을 위한 cheating도 불사. 대규모 서버 프로그램에서는 중요한 이슈. 0.4% 성능개선을 통해 수 $million에 달하는 비용(전기요금)을 절감할 수 있음.
  • std::vector<>는 CPU의 명령어 캐시 관련 문제로부터 안전. 다른 std::container<> 류는 안전을 장담 못함.
  • 전세계적으로 기술서적 판매는 3% 줄었지만 C++ 서적 판매는 4% 증가. C++ 개발자 저변이 넓다는 증거.
  • Bjarne이 "A Tour Of C++" (2013년 9월)을 출간했으며, 책에 대해 진심으로 자랑스러워 하고 있음.
  • C++ 언어 표준화는 현재 진행형. parallel/concurrent 처리에 대해 논의하고 있음. 많은 참여 바람.
  • 올해가 첫 컨퍼런스로 600 여명 참여. 매해 개최 예정.
저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG C++만세

댓글을 달아 주세요

GPS 원리 요약

궁시렁 2010.06.27 14:58

GPS 시스템의 구성
우주부분, 제어부분, 사용자부분으로 구성된다.

우주부분
GPS 위성들은 현재 시각과 위성의 궤도 정보(ephemeris)를 50bps 속도로 지속적으로 방송한다.

제어부분
GPS 위성을 관리하는 본부에서 GSP 위성들의 시각을 동기화 하고 궤도정보(ephermeris)를 조정한다. GPS 위성들은 아주 정밀한 시계를 갖고 있으며 같은 시간을 공유한다.

사용자부분
GPS 수신기의 시계를 이용해서 수신기의 현재 시간과 위성이 발송한 시간과의 차이를 구하면 위성과 사용자의 거리를 파악할 수 있다. 위성과 수신기 사이의 거리는 우주적인 거리다. 전파가 빛의 속도로 위성을 떠나 수신기 까지 도달할 때까지 유의미한 시간이 소요된다. 위성과 수신기는 같은 시계를 공유하고 있기 때문에 전파가 도착할 때까지 소요된 시간을 측정하면 위성과 수신기 사이의 거리를 구할 수 있다 (거리 = 시간 * 속도).
3개 이상의 위성과 수신기 사이의 거리를 파악하면 3각측량법을 이용해서 사용자의 위치를 판단할 수 있다.

저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG GPS

댓글을 달아 주세요

언젠가부터 티스토리 블로그의 검색 기능에 문제가 생겼다. 
블로그 페이지에 있는 검색창을 통해 검색어를 치면, 제목이 일치하는 글만 찾아 준다. 
검색어가 본문에 포함된 글은 찾아내지 못한다. 
블로그를 개인 컨텐츠 아카이브로 사용하려던 내 입장에서는 치명적인 장애다. 
다른 블로그 서비스로 이전할지. 티스토리 블로그를 유지할지... 고민이다.
그래도 꽤 정든 구석이 있기 때문이다.
저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

여기저기 웹서핑하고 다니다가,
내 블로그를 소개하면서 '웹킷 포팅 엔지니어가 정리한 웹킷 관련 블로그' 라고 소개한 표현을 봤다. 포팅 엔지니어라구? 이런... 쯧...

기분이 과히 좋지는 않다.
왜냐하면 '종합 예술인'이라는 홍서범의 싼티나는 표현의 표절이지만, 난 스스로를 '종합 개발인'이라고 표현하고 싶기 때문이다. 난 나의 영역을 '포팅'에 한정하고 싶지 않다.

비슷한 맥락에서 나는 '코더'라는 지칭을 극히 혐오한다.
'코딩'은 개발의 아주 미미한 부분이기 때문이다. S/W 개발자는 년차가 낮건 높건 '코더' 따위로 부르거나 불려서는 안된다. 개발은 분석, 설계, 구현, 테스트가 망라되는 종합 예술 분야다. 개발자는 그 모든 것을 책임져야 한다.


저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

  1. GuNboss, G.PaK 2009.11.20 11:59 신고  댓글주소  수정/삭제  댓글쓰기

    종합 예술인이 맞습니다..

    창작의 고통이란 분야를 가리지 않는다는 생각이 들기에...

    도는 어디에나 있다라는 말이 진리가 아닐까요?

    한마디의 멜로디를 쓰기 위해 밤을 지새우는 작곡가와
    한문단의 스토리를 쓰기 위해 밤을 지새우는 작가와
    한블럭의 로직을 만들기 위해 밤을 지새우는 Developer가
    그리 다르다고 생각되지 않네요.

  2. 재혁 2010.02.01 21:28 신고  댓글주소  수정/삭제  댓글쓰기

    문제는 거의 대다수 제조업 분위기를 가지고 있는 단말기쪽은 코더, 포팅맨이 맞죠... 윗분들 눈에 말입니다.

    IT news같은 것을 봐도, sw쪽은 언제나 이꼴일것이다라는 자조적인 분위기가 있죠...

    별수 없죠 최대한 IT인력이 안나오도록 이쪽 분야의 삽질들이 잘 공유 되었으면 합니다.

    • ingee 2010.02.01 22:05 신고  댓글주소  수정/삭제

      성공하는 SW 솔루션 회사들이 몇개만 나오기를 고대하고 있습니다. 20년전 대한민국에서 게임 SW를 개발하는 사람들은 살짝 미친 사람들이었습니다. 생계가 보장되지 않는 시장이었기 때문입니다. 지금 게임 SW 개발자는 꽤 그럴듯한 커리어로 인정받고 있습니다. 성공한 업체가 몇개 나왔기 때문이니다.
      앞으로도 IT맨들이 쏟아져 나오고 그들이 모두 대우 받는 환경이 만들어지기를 고대합니다. 내가 이미 IT맨이기 때문입니다.

개발 현장에서 항상 반복되는 대화가 있다.
'이번 일, 설계부터 탄탄히 해봅시다.' 라고 말 하면, 매번
'이번 일은 일정이 급하니 다음 일부터 그렇게 하면 좋겠습니다.' 라는 답변이 돌아온다.
항상 일의 규모가 설계하기에는 너무 간단하고,
항상 일의 일정이 설계하기에는 너무 다급하다고 한다.

만약 진정으로 S/W 설계의 효용성에 대해 관심을 갖고 있다면,
한번 두눈 질끈 감고 설계를 제대로 하면서 작업해보라고 권하고 싶다.
설계하고 문서를 남기기에 너무 작은 규모는 없다.
설계하고 문서를 남기기에 너무 촉박한 일정도 없다.

두눈 질끈 감고 현재 맡겨진 일을 차근히 설계하고 차근히 문서를 남기며 작업해보라.
일이 잘못되는 최악의 경우, 현재 직장에서 짤리기 밖에 더하겠는가?
필자에게 얘기하라. 그래서 짤렸다면 기꺼이 모셔오겠다.

설계를 먼저하고,
필요한 문서를 먼저 만든 다음
(흔히 많은 사람들이 개발의 전부라고 오해하는) 코딩을 진행하면
생각보다 훨씬 수월하게, 더 빨리, 더구나 탄탄하게, 작업이 완료되는 것을 경험할 수 있을 것이다.

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

  1. GuNboss, G.PaK 2009.11.20 12:04 신고  댓글주소  수정/삭제  댓글쓰기

    code란 단지 생각을 풀어가는 하나의 방법이겠지요.

    전산학 개론에 문제해결단계를 이렇게 얘기한 부분이 있습니다.

    문제의 인식 - 알고리즘 - 구현 - 테스트

    개인적으로 "문제의 인식"만으로도 대부분의 것들이 해결 가능하다고 생각됩니다.

    WebKit 관련 자료를 찾다 여기까지 오게 되었는데, 공감가는 부분이 많은 것 같네요.

    • ingee 2009.11.25 10:46 신고  댓글주소  수정/삭제

      무엇을 해야 하는지 요구사항을 분석하고 협의하는 것이 s/w 개발의 반절 이상이라고 생각합니다. 개인적으론 분석보다 협의가 더 어렵습니다. 자주 들려주시고, 자주 의견 주세요.

힘들었던 용역 과제 하나가 정리단계에 들어섰다. 평일이고 주말이고 힘을 다해 매달렸던 일이라, 끝나고 나면 마냥 편하고 좋을 줄만 알았는데, 그렇지가 않다. 전투 후, 황량한 풍경만 남아있다. 게다가 이런... 계절마저 가을이다. 황량함의 제곱이다.

갑의 요구와 을의 입장을 조율하는 것, 개발진의 책임과 사기를 조율하는 것, 회사 업무와 가정의 평화를 조율하는 것, 어느 것 하나 만만한 일이 없다. 모두 도를 닦는 것만큼이나 어려운 일이다. 이땅에서 고생하는 모든 S/W 개발자들에게 행운 있기를...
저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

  1. ingee 2011.10.28 17:49 신고  댓글주소  수정/삭제  댓글쓰기

    2년이 흘렀다. 되짚어 생각해보니까, 용역 과제가 끝나고 과제를 위해 모였던 개발팀이 해산됐기 때문에 더 쓸쓸해 했던 것 같다. SW 개발후 남는 정말 중요한 산출물은 어떤 시스템이 아니다. 그건 그냥 눈에 보이는 부수적인 산출물일 뿐이다. 그 시스템에 손발을 적셔본 '사람'이 정말 중요한 산출물이다. 용역 과제만이 소프트웨어 산업의 전부라면 대한민국은 경험 깊은 '사람'을 축적할 수 없다. 어떤 분야에서 수십년 굴러먹은 쓸만한 '사람'을, 다시 말해 소프트웨어 산업의 진정한 경쟁력을 축적할 수 있는 환경이 되기 위해, 대한민국에서 솔루션 소프트웨어 산업이 성공하기를 깊이 바래본다.

  2. kleeck 2012.01.11 10:25 신고  댓글주소  수정/삭제  댓글쓰기

    수고하셨습니다.
    우리나라 IT문화가 초기에 잘못 정착이 되어진 것 같아 씁슬합니다.

    앞으로 더 좋은 날만을 기대하며~ @@ 화이팅~ 하세요 주인장님

설계하는 이유

궁시렁 2009.10.14 09:07

설계하는 이유는 디버깅하지 않기 위해서다. 개발 현장에서는 디버깅 잘하는 사람에게 권력이 부여되곤 한다. 마감이 촉박한 시즌에 영웅이 되기 때문이다. 하지만 진정한 영웅은 설계를 통해 버그의 원인을 원천적으로 봉쇄하는 사람이다. 설계하는 이유는 디버깅 전쟁을 치르지 않고 평화롭게 개발을 마무리 하기 위해서다.

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

용역 사업은 돈을 주고 일을 시키는 측과 돈을 받고 일을 하는 측 사이에 간격이 있을 수 밖에 없다. 문제는 두 당사자가 일을 바라 보는 관점이 오로지 경제 논리 뿐인 경우다. 일을 시키는 측은 가능한 돈을 적게 주고 많은 일을 시키는 것을 최고선으로 여기고, 일을 하는 측은 정해진 계약 금액을 받으면서 가능한 적게 일하는 것을 최고선으로 삼는다. 그럴 경우 양질의 결과물은 누가 만들 수 있을까?

용역 사업을 통해 양질의 결과물이 나올 수 없는 이유가 하나 더 있다. 용역 사업이 시작될 때, 용역을 발주하는 "갑"이 자기가 바라는 결과물의 모습을 모른다는 것이다. 일을 시키는 "갑"과 일을 진행하는 "을"이 서로 다른 이미지를 머릿속에 넣고 일을 진행한다. 대개 과제 마감이 가까와서야 갑은 갑대로, 을은 을대로 결과물의 모습을 어렴풋이 그리기 시작한다. 그럴 경우 양질의 결과물은 언제 나올 수 있을까?

S/W 개발 방법론이란 분야는 10 년 넘게 결과물이 쌓여온 완성된 학문이다. 갑이든 을이든 RUP, XP, SCRUM 등등의 방법론을 한번쯤 공부하고 업무에 임하면 어떨까 생각해본다. 한국의 S/W 산업도 10 년 넘게 무르익은 산업인데 왜 맨날 이모양인가? 가끔 S/W 업계에 종사하는 사람들이 무식하다는 생각이 들 때가 있다. 지식이 없어 무식하다고 하는게 아니다. 자기가 모른다는 사실을 모르기에 무식하다고 하는 것이다. 모른다는 사실을 깨달아야 공부할 것 아닌가?

어째... 단상 시리즈를 이어나가면 내게 불이익이 닥칠 것 같은 소심한 걱정이 스친다. (3)을 이을지 말지 고민해봐야겠다.
저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요

  1. 써니 2009.07.10 18:28 신고  댓글주소  수정/삭제  댓글쓰기

    현실을 있는 그대로 이야기 한다는게,
    현장에서 실무를 담당하는 입장에서 좀 위험스러운 일이기는 하죠.

    작은 용기에 박수를 보내 드립니다.
    그런데, (3)를 이어가기는 좀 위태해 보이기는 하네요. ^^;

    저도 SI 10년 하다 그만두고, 작은 자리로 옮겼습니다만...
    업계 사람들과 만나도 현장 얘기는 잘 안합니다. T.T

    • ingee 2009.07.10 19:38 신고  댓글주소  수정/삭제

      그렇죠? 시간을 두고 생각이 좀 순화되면 순한 언어로 글을 올려야겠습니다.
      우리나라 S/W 생태계가 인류 전반에 기여할 수 있을만한 재밌고 창의적인 도전으로 가득 채워지기를 바랍니다. 그래야 경력 많고 비싼 개발자가 살아남을 수 있으니까요.

  2. ingee 2013.02.25 19:51 신고  댓글주소  수정/삭제  댓글쓰기

    몇년의 시간이 흐른뒤, 그렇게 욕하던 갑 회사에 들어왔습니다. 대기업 말단 사원에 불과한 개인이 대한민국 SW사업의 용역구조를 바꿀 수는 없을 것 같습니다. 다만 합리적인 사고를 통해 조금이라도 개발자 사회에 기여할 수 있는 역할을 찾을 수 있다면 좋겠습니다.