블록체인 비교

Dev 2018.02.07 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 ingee

댓글을 달아 주세요

블록체인 요약

Dev 2018.01.03 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 ingee

댓글을 달아 주세요

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 ingee

댓글을 달아 주세요