Oracle 이란?

  • Oracle은 블록체인 내부세계가 외부세계와 소통할 수 있게 중재하는 "Smart Contract"
    • 이더리움 Smart Contract는 원칙적으로 EVM 외부세계의 데이터를 참조할 수 없음 (EVM이 API를 제공하지 않음)
    • Smart Contract가 블록체인 외부세계와 연동하기 위해서는 Oracle이 필요
  • 예를 들어, 비행기 연착 보험을 Smart Contract로 구현할 경우, 비행기가 연착되었다는 정보를 외부세계(Web)로 부터 가져올 필요가 있음. 이때 Oracle이 필요함


Oraclize 란?

  • Oracle을 맨바닥부터 새로 만들 필요 없음
  • 이미 존재하는 Oracle 서비스를 이용할 수 있음. Oraclize는 그런 서비스들 중 하나 (Oralize ltd. 회사가 만듬)
  • Oraclize가 제공하는 외부세계 데이터 종류
    Datasource 설명
    URL
    임의의 URL을 HTTP Get 또는 HTTP Post 호출 (Web과 연동)
    WolframAlpha 울프럼알파 검색 엔진을 쿼리
    * 울프럼알파: http://www.wolframalpha.com/
    IPFS IPFS에 저장된 파일 내용을 쿼리
    * IPFS: Inter-Planet File System (행성간 분산 파일 시스템)
    random 추후 정리 (어느 용사가 한줄로 정리해서 알려주기를 희망...)
    computation 임의의 어플리케이션 실행 결과를 쿼리
    * 어플리케이션은 Dockerfile로 컨테이너화 되어야 함
    * 어플리케이션은 stdout에 실행결과를 출력해야 함

  • Oraclize는 정보를 Query할 때마다 수수료를 징수
    Datasource Base price Proof type
    None TLSNotary Android Ledger
    URL 0.01$ +0.0$ +0.04$ +0.04$ N/A
    WolframAlpha 0.03$ +0.0$ N/A N/A N/A
    IPFS 0.01$ +0.0$ N/A N/A N/A
    random 0.05$ +0.0$ N/A N/A +0.0$
    computation 0.50$ +0.0$ +0.04$ +0.04$ N/A


Ref


Posted by ingeeC
,

코인(Coin)과 토큰(Token)

  • 코인과 토큰은 모두 암호화폐
    • 계좌의 저장 단위 (a unit of account)
    • 가치의 저장소 (a store of value)
    • 거래의 수단 (a medium of exchange)
  • 코인은 독자적인 블록체인 네트워크를 소유
    • 비트코인 네트워크의 코인, "비트코인 (BTC)"
    • 이더리움 네트워크의 코인, "이더 (ETH)"
  • 토큰
    • 기존 블록체인 네트워크 위에서 특정 자산을 표현
    • 교환 가능한 모든 자산은 토큰으로 표현 가능
    • 토큰을 정의하는 일은 코인을 정의하는 일보다 쉬움 (기존 블록체인 네트워크를 활용하기 때문)

ERC-20 스펙

  • ERC-20 스펙이란?
    • Ethereum Request for Comment 20
    • 이더리움 위에서 발행되는 토큰의 표준
    • ERC-20 스펙에 맞게 토큰을 발행하면
      1. 이더(ETH)와 쉽게 교환할 수 있고
      2. 표준 이더리움 지갑 (MEW, Meta Mask, Mist 등)으로 자유롭게 저장/교환 가능
    • ERC-20 스펙 definition
      contract ERC20 {
          function totalSupply() constant returns (uint supply);
          function balanceOf( address who ) constant returns (uint value);
          function allowance( address owner, address spender ) constant returns (uint _allowance);
      
          function transfer( address to, uint value) returns (bool ok);
          function transferFrom( address from, address to, uint value) returns (bool ok);
          function approve( address spender, uint value ) returns (bool ok);
      
          event Transfer( address indexed from, address indexed to, uint value);
          event Approval( address indexed owner, address indexed spender, uint value);
      }
      

ref

Posted by ingeeC
,
이더리움 gas 개념에 대해 고민하던 중 유용한 글이 있어 요약함
https://ethereum.stackexchange.com/questions/3/what-is-meant-by-the-term-gas

Gas란?

  • Gas는 이더리움은 생태계에서 사용되는 특별한 "단위"
  • 이더리움 플랫폼 위에서 실행되는 모든 작업은 실행을 위해 필요한 Gas량이 정해져 있음
  • 이더리움 위에서 ETH(이더)를 이체하거나 SmartContract를 실행시키기 위해서는 Gas 요금을 지불해야 함

Gas는 토큰이 아니다.

  • 예를 들어 1000 Gas를 구매하거나 소유할 수 없음
  • Gas는 EVM 소스코드 안에 얼마나 많은 작업을 처리했는지 나타내는 카운터로 존재

왜 ETH를 바로 쓰지 않고 Gas를 도입했나?

  • ETH(화폐)의 가치는 시장에서 등락을 거듭하며 항상 변화함
  • 반면 어떤 작업을 위해 필요한 컴퓨팅 자원(CPU, 메모리, 스토리지)의 양은 정해져 있음 (변화하지 않음)
  • 그래서 이더리움 개발팀은 컴퓨팅 자원량의 단위(Gas)와 화폐의 단위(ETH)를 분리하는 것이 합리적이라고 생각했음


Posted by ingeeC
,

이더리움 FAQ

  • "A가 B에게 투자한 조건 아래서 B가 A에게 일정 기간마다 이자를 지급하는 Smart Contract"를 만들려고 한다. "일정 기간마다" 트랜잭션을 일으켜서 Smart Contract를 실행시키는 주체는 누구인가 (블록체인이 자동 처리할 수 있는가)?

    • Smart Contract는 트랜잭션에 의해서만 호출됨
    • 일정 시간마다 B가 트랜잭션을 일으켜야 함
    • "일정 기간마다 자동으로 트랜잭션을 일으키는 일"은 이더리움 블록체인만으로는 불가능. 블록체인 밖에 자동화 어플리케이션을 만들어야 함


  • 이더리움 지갑 어플리케이션은 현재 잔액을 블록체인이 아닌 별도의 장소에 따로 관리하나?
    • 계정의 잔고는 이더리움 블록체인에 저장/관리
    • 이더리움 블록체인은 계정별 잔고 데이터를 유지/관리함 (비트코인처럼 UTXO를 추적하지 않음)


  • Smart Contract에 ether를 송금할 수 있는가?
    • Smart Contract도 이더리움 계좌의 한 종류
    • Smart Contract로 ehter를 송금할 수 있다


  • Smart Contract 실행시 gas limit를 낮게 설정해도 Smart Contract가 실행되는가?
    • gas limit를 Smart Contract가 필요로 하는 최소 gas limit 보다 낮게 설정하면 실행/채굴되지 않음
    • 채굴자에 의해 선택/실행되더라도 중간에 중단되며 트랜잭션은 취소되고 gas 수수료는 차감됨


  • Smart Contract 실행시 gas price를 낮게 설정해도 Smart Contract가 실행되는가?
    • Smart Contract의 실행을 보장하지 못함 (채굴업자가 선택하지 않음)
    • 하지만, 채굴자에 의해 선택/실행된다면 낮은 가격을 지불함


  • Smart Contract 실행을 위해 ehter를 직접 쓰지 않고 gas 개념을 도입한 이유?
    • gas는 블록체인 네트워크의 자원 (연산, 스토리지) 사용에 대한 비용
    • 지불 가치 측면에서, ether의 가치는 시장에 의해 결정되며 항상 유동적
    • 자원 가치 측면에서, 블록체인 네트워크의 연산 능력은 항상 유동적 (노드가 추가되기도 하고, 삭제되기도 함). 이에 따라 연산 비용도 항상 유동적
    • Smart Contract 처리 시점의 적정 비용을 공정하게 산정하기 위해 gas 개념을 도입


  • 이더리움의 TPS가 비트코인보다 높은 이유 (이더리움의 트랜잭션 처리 속도가 비트코인보다 빠른 이유)?
    • 해시 알고리즘이 다름 (ETHash)
    • 해시 난이도가 다름


Posted by ingeeC
,

Hyperledger <프레임워크 프로젝트> 상태

출처: https://hyperledger.org/


Hyperledger Sawtooth

개요
  분산 장부를 구축/설치/운영하기 위한 모듈러 방식의 플랫폼
  PoET (Proof of Elapsed Time) 합의 알고리즘 사용
    많은 수의 검증 노드를 사용해도 자원 소모를 줄일 수 있다
  Python 언어 사용
프로젝트 상태
  Active
코드 상태
  https://github.com/hyperledger/sawtooth-core
  5,801 commits
  4.1 MB
  릴리즈
    total 25 release
    2017-05-10, v0.8.2 첫 릴리즈
    이후 1~2주마다 릴리즈
    2018-01-26 현재 v1.1.0 이 최신 (2018-01-12)
소개 동영상 요약
  "신용할 수 없는 세상에서 물리적 asset을 추적하는 기술"
  스마트 컨트랙트 지원
  IoT 센서 연동
  자산의 이동과 속성의 변화를 추적
  금융, IoT 등 다양한 분야에 활용 가능


Hyperledger IROHA

개요
  비즈니스용 블록체인 프레임워크
  분산 장부가 필요한 인프라 프로젝트를 위해 개발
  블록체인 플랫폼 구현체
  Sumeragi 합의 알고리즘 사용
  일본계 회사에서 시작 (Soramitsu, Hitachi, NTT Data, Colu)
  C++ 언어 사용
프로젝트 상태
  Active
코드 상태
  https://github.com/hyperledger/iroha
  4,890 commits
  8.3 MB
  릴리즈
    total 5 release
    2017-05-22 v0.75 첫 릴리즈
    이후 2~3달에 1번 릴리즈
    현재 v1.0 alpah 가 최신 (2017-12-28)


Hyperledger Fabric

개요
  블록체인 프레임워크 구현체
  모듈러 방식으로 플러그-앤-플레이를 지원하는 플랫폼
  합의 알고리즘, 멤버쉽 서비스 등을 컴포넌트 형태로 구현/교체할 수 있음
  스마트 컨트랙트 실행을 위해 컨테이너 기술 활용
    chaincode
  Go 언어 사용
프로젝트 상태
  Active
코드 상태
  https://github.com/hyperledger/fabric
  4,258 commits
  9.5 MB
  릴리즈
    total 14 release
    2016-09-17 v0.6.0 첫 릴리즈
    이후 1달에 1번 릴리즈
    현재 v1.0.5 가 최신 (2017-12-07)
소개 동영상 요약
  Moduler, Scalable, Secure 솔루션 지향
  private channel (데이터 비공개 채널) 제공


Hyperledger Burrow

개요
  프라이빗 블록체인 솔루션
  이더리움 스마트 컨트랙트 코드 실행
  PoS Tendermint 합의 엔진 사용
    transaction finality 제공
    high transaction throughput 제공
  Go 언어 사용
프로젝트 상태
  Incubation
코드 상태
  https://github.com/hyperledger/burrow
  1,112 commits
  389 KB
  릴리즈
    total 12 release
    2015-08-27 첫 릴리즈
    프로젝트 초반 활동 미미, 2016년 10월 이후 2달에 한번 릴리즈
    현재 v0.17.0 이 최신 (2017-09-05)

(이상)


Posted by ingeeC
,

블록체인 비교

Dev 2018. 2. 7. 22:34

블록체인 비교


비트코인 블록체인
Bitcoin Blockchain
이더리움 블록체인
Ethereum Blockchain
하이퍼레져 블록체인
Hyperledger Blockchain
운영형태
(참여자격)
퍼블릭 블록체인
* 누구나 참여가능
* 참여동기: 코인획득
퍼블릭 블록체인
* 누구나 참여가능
* 참여동기: 코인획득
프라이빗 블록체인
* 지정된 서버만 참여
* 참여동기: 업무수행
데이터 모델
블록체인 블록체인 블록체인 + State DB
통신 모델 pure p2p
* 모든 node가 동등
pure p2p
* 모든 node가 동등
hybrid p2p
* index 서버 사용
* node별 역할이 다름
합의 알고리즘
PoW PoW
(PoS 전환 예고)
PBFT
Smart Contract
No
Yes Yes
Scalability * 높은 node 확장성
* 낮은 성능 확장성
* 높은 node 확장성
* 낮은 성능 확장성
* 낮은 node 확장성
* 높은 성능 확장성
Posted by ingeeC
,

블록체인 요약

Dev 2018. 1. 3. 16:52

블록체인 요약

기초개념
    블록체인은
        모두에게 공유/공개된, 변조 불가능한 거래장부/DB
    비트코인 블록체인 현황
        10분에 1블록 생성
        1초에 최대 7건 거래
            하루 최대 60만건
            한국 중견 은행 1곳의 처리 능력과 비슷
            https://blockchain.info
        2009년 1월 최초 블록 생성이후 장애 없이 운영중

usecase
    국제송금서비스
        송금절차 간소화
        낮은 수수료
        투명한 처리과정
    클라우드펀딩
        스마트계약 이용
        중개인 개입 없이 개인과 개인을 직접 연결
    저작권, 소유권 증명
        중앙기관의 개입 없이
        언제 누가 만들었는지, 누구 소유인지 관리

블록체인 핵심기술
    본인인증
    부인방지
    이력공유
        모든 참여자가 거래이력(블록체인)을 공유
        제삼자 기관이 담당하던 일을 모든 참여자가 담당

블록체인 비교
    비트코인 코어
        Bitcoin Foundation 개발
        데이터 모델
            블록체인
        P2P 통신
            pure p2p
                별도의 index 서버 없음
            비구조적 오버레이
                모든 node의 역할이 동등
        합의 알고리즘
            PoW
                작업증명을 통해 합의
                    가장 빠르게 생성된 작업결과를 승인
                    가장 긴 블록체인을 채택
                수천개의 노드 수용 가능


    이더리움
        Ehtereum Foundation 개발
        데이터 모델
            블록체인
        P2P 통신
            pure p2p
            비구조적 오버레이
        합의 알고리즘
            PoS
                PoW와 비슷, 지분이 많은 노드의 작업증명 난이도를 낮춤
                    신속성
                    전체 노드의 계산 부하 감소
                수천개의 노드 수용 가능


    Hyperledger Fabric
        Linux Foundation 개발
        데이터 모델
            블록체인
            월드 스테이트
                글로벌하게 공유되는 key-value 저장소
        P2P 통신
            네트워크 형태
                hybrid p2p
                    별도의 index 서버 이용
                구조적 오버레이
                    노드별로 역할이 다름
                    슈퍼노드 존재
            기반 기술
                노드간 통신에 gRPC 이용
                데이터 직렬화에 Protocol Buffer 이용
        합의 알고리즘
            PBFT
                Practical Byzantine Fault Tolerance
                마스터 노드 과반이 인정해야 합의
                     => 나중에 무효화되는 블록이 없음 (장점)
                모든 노드들 사이의 통신이 필수
                    대규모 노드들의 네트워크에 부적합
                    수십개의 노드가 한계 (단점)

(이상)

Posted by ingeeC
,

TFRecord

개요

  1. TFRecord 파일은 텐서플로의 표준 데이터 파일 포맷 (본질적으로 Protocol Buffer 파일)

  2. TFRecord 파일은 데이터를 시퀀셜하게 저장

    • 랜덤 억세스에 적합하지 않음
    • 대용량 데이터를 스트리밍 하는 데 적합
  3. 파일 하나에 모든 dataset과 label을 묶어 놓으면 파일 처리 시간이 단축됨 (권장!)

 

TFRecord 파일 구조

  1. TFRecord 파일은 record 들의 반복

  2. TFRecords > examples > features 형태로 구성

 

TF Input Pipeline

개요

  1. TF Computation-graph에 데이터를 공급하는 방법들 중 하나

    • TF 프로그램에 데이터를 공급하는 방법 3가지

      • feeding
        . 매 스텝을 실행할 때 마다 python 코드가 데이터를 공급

          with tf.Session():
            input = tf.placeholder(tf.float32)
            classifier = ...
            classifier.eval(feed_dict={input: my_python_fn()}))
        

        . 연산 과정에서 TF 그래프와 Python 사이의 context switch 필요 ==> 성능저하

      • input pipeline
        . TF 그래프 첫머리의 input pipeline이 데이터를 가져옴 ==> 추천!

      • preloaded data
        . TF 그래프의 variable이나 constant에 데이터를 미리 적재
        ==> dataset 이 작을 때만 가능

  2. TF Input Pipeline은 모든 포맷의 파일을 사용 가능하나, TFRecord 포맷의 파일 사용을 추천

  3. TF Input Pipeline이 하는 일

    • 파일 목록 가져오기
    • 파일 목록 섞기 (옵션)
    • 파일 큐 생성하기
    • 데이터 읽기, 데이터 디코딩 하기
  4. 이후 소개하는 "Queue based Input Pipeline"은 "Dataset API based Input Pipeline"으로 깔끔하게 대체 가능

    • 하지만, Dataset API는 TF 1.4+에서만 사용 가능
    • TF 1.4는 2017-11-03 출시 (약 1달전), 아직 샘플 코드가 부족함

 

TF Input Pipeline의 전형적인 구성
(TFRecord 파일 읽기 프로세스)


Queue based Input Pipeline 동작양식

  1. Filename Queue 생성

    • Filename 목록으로 Queue 생성 (파일이 1개라도 OK)
    • tf.train.string_input_producer() 함수 이용
      . filename 목록 shuffle 옵션 제공
      . filename queue 반복횟수(epoch) 설정 옵션 제공
    • string_input_producer() 함수는 TF 그래프에 QueueRunner 객체를 추가함
    • string_input_producer() 함수가 추가하는 QueueRunner는 filename queue를 구동하는 역할을 하며 Computation-graph 연산을 구동하는 QueueRunner와 별도의 스레드에서 실행되어 서로 블록되지 않는다
  2. Reader, Decoder 정의 (또는 선택)

    • 파일 포맷 별로 적절한 Reder를 선택하고 적절한 Decoder를 정의/선택해야 함
    • 파일 포맷 별로 다양한 Reader 와 Decoder 제공

      • CSV 파일
        . Reader: tf.TextLineReader
        . Decoder: tf.decode_csv()
      • Fixed Length Record 파일
        . Reader: tf.FixedLengthRecordReader
        . Decoder: tf.decode_raw()
        . 각 record 가 고정된 길이인 파일을 읽을 때
      • TF 표준 파일 (즉, TFRecord 파일) ==> TF 권장 포맷
        . Reader: tf.TFRecordReader
        . Decoder: tf.parse_single_example()
        . 어떤 데이터이든 TFRecord 파일로 변환해서 사용할 것을 권장
  3. Preprocessing (optional, 뭐라도 처리할 일이 있으면 실행)

  4. Example Queue 생성/구동

    • pipeline 마지막 단계에서 학습/평가/추론에 batch 데이터를 공급하는 별도의 큐를 생성/운영
    • tf.train.shuffle_batch() 함수를 이용
      . example들의 순서 난수화 가능
      . batch size 설정 옵션 제공
    • suffle_batch() 함수는 TF Computation-graph에 QueueRunner 객체를 추가함 이 때문에 학습/추론 등을 시작할 때 tf.train.start_queue_runners()를 호출해서 input pipeline을 구동하는 스래드를 생성/실행시켜야 함.
      또, 학습/추론 등이 끝날 때에는 tf.train.Coordinator 를 이용해서 관련 스래드를 모두 종료시켜야 함.

 

TFRecord 파일 저장 프로세스

  1. TFRecord 파일 오픈

    • tf.python_io.TFRecordWriter
  2. 데이터를 적절한 타입으로 변환

    • TFRecord 파일에 저장 가능한 feature 타입의 종류

      • tf.train.Int64List
      • tf.train.BytesList
      • tf.train.FloatList
  3. feature 생성

    • tf.train.Feature
  4. example 생성

    • tf.train.Example
  5. example을 시리얼라이즈

    • example.SerializeToString()
  6. 시리얼라이즈한 example을 TFRecord 파일에 기록

    • writer.write

 

Ref.


Posted by ingeeC
,

구글 프로토콜 버퍼 (Protocol Buffer)

 

개요

  1. <프토토콜 버퍼>는 랭귀지 중립적, 플랫폼 중립적인 데이터 시리얼라이즈 포맷

    • 서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 (구글의 저질 작명 센스를 고려할 때, 의외로) 적절
      --> 프로토콜(통신)을 위한 버퍼(데이터)
  2. <프로토콜 버퍼>는 이제 구글의 데이터 공용어 (gRPC의 디폴트 데이터 포맷)

    • What is gRPC?
      . 구글이 정의한 RPC
      . 구글의 최신 API는 이제 REST API 뿐 아니라 gRPC API도 함께 제공함
      . gRPC는 <프로토콜 버퍼>를 기본 데이터 시리얼라이즈 포맷으로 사용
        (but, JSON 등 다른 포맷도 사용 가능)
      . 다양한 랭귀지 지원: C++, Java, Python, Go, Ruby, C#, Node.js, PHP, ...
  3. JSON을 <프로토콜 버퍼>로 <프로토콜 버퍼>를 JSON으로 변환 가능

  4. XML보다 작고, 빠르고, 간단

 

XML 대비 <프로토콜 버퍼>의 장단점

  1. XML 대비 장점

    • 더 간단함
    • 더 작음: 3배~10배
    • 더 빠름: 20~100배
    • 더 명료함
    • 컴파일러 등 도구를 제공함
  2. XML 대비 단점

    • 본질적으로 바이너리 포맷
      . HTML과의 호환성이 약함
      . human readable 특성이 약함
    • 데이터 포맷을 완전히 파악하려면 .proto 파일이 필요
      . XML은 어느 정도는 자기 완결성을 가짐

 

proto 파일

  1. <프로토콜 버퍼>의 데이터 포맷을 정의하는 소스파일

  2. proto 파일 고유의 문법 존재

  3. proto 파일 안에서 다른 proto 파일 참조 가능

  4. proto 파일을 컴파일하면 각 랭귀지별 라이브러리가 생성됨

    • 지원 랭귀지
      . proto2: C++, Java, Python, Go
      . proto3: C++, Java, Python, Go, Ruby, Objective-C, C#, JavaScript

 

Ref.


Posted by ingeeC
,

에일리언웨어(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 ingeeC
,