High-level Synthesis

아키텍처 레벨에서(SystemC 같은 프로그래밍 언어 사용), 바로 RTL 레벨 로직을 만들어내는(합성해내는) 기법입니다. ...그냥 위키백과 찾아보세요.

Verilog/VHDL 같은 하드웨어 프로그래밍 언어를 직접 사용해서 행동 레벨, RTL 레벨 디자인을 하려면 관련 지식이 좀 많이 필요하죠. 그 대신 C/C++/SystemC 같은 보다 상위 레벨 언어로 하드웨어 동작을 지시할 수 있다면, 꼭 하드웨어 엔지니어가 아니라 소프트웨어 개발자도 구현하려는 연산을 해당 연산에 최적화된 하드웨어로 만들어낼 수 있겠습니다. 물론 약간의 지식이 필요하죠. 🤔

경쟁 상대

  • Xilinx Vivado HLS
    • Xilinx사 FPGA 전용입니다...
  • Mentor Catapult
    • 나름 제일 잘 나가는 듯. 하→지↗만→♬, (저에게) 없↘죠→↗♬.
  • Synopsys Synplify
    • 알못이지만 아무튼 못 들어봤습니다.

왜 써봤냐면

Cadence에서 학교에 Stratus 등 몇 가지 툴 라이선스를 무상 제공한다더군요. 홍보 목적인가봐요. 그래서...

설치

  • 공식 지원 환경은 레드햇 계열 RHEL, SuSE이지만, Ubuntu 18.04에 설치했습니다.

    • 툴 돌아가는 동안 계속 미지원 환경이라고는 하지만, 동작은 합니다.
  • 필요한 필수 패키지들 미리 깔아두시고 (build-essential, csh, ksh, ...)

  • Cadence 자체 설치 도구(InstallScape) 및 온라인 계정이 있으면 그냥 거기서 받아다 설치하면 되나,

  • 계정 발급이 아직 안 되었기 때문에 다른 경로로 설치 프로그램을 다운받았습니다.

  • tar 압축파일이니, 압축 해제해주고: $ tar xf <filename>
  • InstallScape GUI 띄워서 설치해도 되고, 다음 배치 명령어를 써도 됩니다: $ sudo <path_installscape>/bin/iscape.sh -batch majorAction=InstallFromArchive archiveDirectory=<path_installer> install_directory=<path_destination>

  • 다음으로 환경변수 설정이 필요합니다

    • LM_LICENSE_FILE 변수에 라이선스 서버 주소를 덧붙입니다.
    • PATH에 툴이 설치된 위치를 덧붙입니다: <path_destination>/tools.lnx86/bin
    • 그리고, HOST 변수를 만들고 호스트명을 값으로 설정했습니다: export HOST=$(hostname)
      • 레드햇을 잘 모르겠지만, 툴 돌아갈 때 HOST 변수 값이 없다면서 오류를 일으키더군요. 그래서...
  • RTL 시뮬레이션을 위해 Cadence Xcelium 또는 Synopsys VCS 등이 설치되어 있어야 합니다. 그건 잘 하시리라 믿습니다.

실행

  • 명령줄 툴도 있는 것 같지만, stratus_ide 하면 실행됩니다.
    • Qt4로 만들어서 보기가 좋네요.
    • 도움말이 충실해 보이지만, 읽지는 않았습니다.
    • 툴 내에 튜토리얼이 충실히 갖춰져 있으나, 코드에 대소문자 오류 있는 예제가 하나 있었고 만든 뒤로 관리를 그리 열심히 하지는 않은 것 같은 느낌적인 느낌이 듭니다. 뒤로 갈수록 점점 만들기 귀찮음이 눈에 보이는 듯 했습니다.

의견

  • Xilinx 툴은 Xilinx사 FPGA 전용이고, Mentor 툴은 수중에 없으니... 쓸 수 있는 건 요것 뿐인데
  • 일단 당장 어디다 쓸 지 모르겠네요. 이 글 보는 분 없으시겠지만, 쓸 데가 있길 빌어주십시오. 감사합니다.
반응형

(깔아만 놨던..) 텐서플로우 2 알파에 이어 며칠 전에 베타가 나왔다길래 드디어 한 번 써 봅니다.

뭐 의미있는 건 아니지만... 제 맘대로 썼으니 틀린 것 많을 겁니다. 어차피 보실 분 없으니 틀리면 추후 고치는 걸로.

눈에 띄는 달라진 점

(공식 문서 경로가 영구링크가 아니네...)

"이펙티브 텐서플로 2.0" --- (어디서 많이 본 제목...)
1.0에서 2.0으로 이사하기
2.0으로 변환 스크립트

아래는 "이펙티브 텐서플로 2.0" 문서에 있는 것 중 눈에 띄는 것 적어본 것입니다.

  • 그래프 차리고 이것저것 차린 다음에 세션 열고 돌리는 방식에서

    • 적절히 만든 (=데코레이터 씌운) 파이썬 함수를 호출하면 알아서 지지고 볶아준다고 합니다.
      • 각 모델 구현을 파이썬 함수로 감싸고 텐서플로 함수라고 데코레이터 씌운 뒤 (`@tf.function`) 그냥 호출하면 알아서 돌려준답니다.
      • Eager(?) 기능이 메인이 되었네요.
      • 모든 함수를 텐서플로 함수로 감쌀 필요는 없고, 최상위 작업만 (inference, train 같은 거) 감싸주면 된다고 봤습니다.
    • v1 스타일대로 세션 열고 돌리려면 tf.compat.v1 네임스페이스로 이사간 'Session' 함수를 쓰라네요.
  • 전역 네임스페이스가 없어졌대요. 이제 정의한 변수를 잘 갖고 있어야 된답니다.

    • tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES) 같은 거 이제 안 되나봅니다. 어쩌지...
    • 대신 Keras에 model, layer 단위에서 정의했던 변수를 모아두는 기능이 있다네요. variables, trainable_variables 속성이 있대요.
  • 로그 수집 방법이 살짝 좋아진 것 같네요. tf.metrics를 쓰면 평균 같은 것 쉽게 수집할 수 있는 듯 합니다.

    • 예전에 저는 잘 몰라서 직접 파이썬 변수에 loss 값 같은 거 모은 뒤, batch 개수로 나눠서 평균 표시했었는데...
  • v2 기능이 정 싫다면 v1 모드로 돌릴수도 있지만, v2로 코드 변환 스크립트 및 v1 호환성 모듈을 준비했으니 어서어서 갈아타주시라네요. 과연 몇 년 걸릴지...

설치

기존 v1 설치된 환경에서 (Ubuntu 18.04, Nvidia 10x0 시리즈 GPU, 드라이버 410, CUDA 10, libcudnn v7) 그냥 아나콘다 새 환경 파고 pip 패키지 설치로 깔았습니다.

$ conda create -n tf_2 python=3.6
$ conda activate tf_2
$ conda install <필요 패키지>

$ pip install tensorflow-gpu==2.0.0-beta

그러나 돌려보니 libcudnn 오류 ㄷㄷㄷ

다른 블로그 글 찾아보고 GPU 드라이버 버전을 430으로 올려도 봤지만, 그냥 libcudnn 최신 버전으로 업그레이드하니 잘 동작하게 되었습니다.

일부 환경에서 per_process_gpu_memory_fraction 또는 allow_growth를 켜 줘야 GPU 연산이 정상 동작한다는 이야기가 있네요.

Session이 없어졌으니... GPU 설정은 어디서 하지?

  • GPU 2개 이상인 경우 원하는 GPU만 쓰도록 설정하거나
  • TF가 GPU 메모리를 모두 할당하지 않게 하기 위해
    • 여러 사용자가, 또는 여러 프로세스가 GPU 함께 쓰는 경우를 고려해야겠죠

v1에서는 tf.Session(config=<blahblah>)했었죠. v2에는 tf.Session이 없네요..

대신, 깃헙 이슈를 보니 tf.config.experimental에 있는 함수를 쓰라는군요.

참고: tf.config 코드

아래 예시는 모든 GPU에 대해 allow_mem_growth 설정을 먹인 뒤, 두 번째 GPU(와 CPU)만 쓰도록 하는 코드 조각입니다:

# set GPU devices not to allocate all memories
gpu_devs = tf.config.experimental.list_physical_devices('GPU')
[tf.config.experimental.set_memory_growth(i, enable=True) for i in gpu_devs]

# find CPU device
cpu_devs = tf.config.experimental.list_physical_devices('CPU')

# explicitly set devices to be used
tf.config.experimental.set_visible_devices([*cpu_devs, gpu_devs[1]])

가상 디바이스를 만들 수도 있나 보던데, 아직 _메모리 상한선을 명시_해야 작동해서 안 쓰기로 했습니다.

좋은 친구 MNIST, LeNet 돌려보기

2.0 시작하기

위 문서를 보면 MNIST 돌려보는 예시가 있습니다. 내 주피터 노트북에 위 문서의 코드 복붙하고 돌려보면 당연히 잘 돌아갑니다.

코드를 둘러보면,

  • 데이터 준비가 간편해보이네요
  • 모델 클래스... Keras 쓰기 싫으면 어떻게 할 지 모르겠네요
  • loss function, optimizer도 keras 걸 갖다 쓰네요.
  • tf.GradientTape이라는 게 새로 생긴 것 같습니다
  • placeholder 그만 쓰는 것 아주 좋은데, dimension 점검이 쉽지 않을 것 같아요

소감

  • 이제 세션 같은 거 만들 필요 없이, 함수 호출만 하면 알아서 돌아가니 좋긴 하네요
    • 코드를 보다 깔끔하게, 파이썬스럽게 쓸 수 있겠습니다
    • 저수준 제어가 어려워졌을까요. 그건 차차 알아보기로
  • 데이터 로더 좋아졌다고는 하는데... v1 때 개선되었다던 데이터 로더 전혀 이해 못했는데... v2 것도 제가 쓸 정도로 쉬울 것 같지는 않습니다
  • 기존의 컴파일(?)되면 고정되는 그래프에서, 파이토치 것 같은 다이나믹 그래프로 갈아탄 것 같은데요, 실험하기 좋을 것 같습니다
    • 진짜 그런지는... 그것도 차차 알아보기로
  • Keras 안 쓰는 경우의 예시를 한 번 찾아봐야겠습니다

굳이 지금 갈아타야할까 하면... v1으로 하던 실험이나 잘 하는 걸로 합시다 😢😢

반응형

TL; DR

일단 솔직히 원인을 잘 모릅니다. 다른 블로그 찾아보세요 :( ....

요기가 좋아 보이네요: https://www.tabida.pe.kr/58   
특히 검색 인덱싱 속도를 높이기 위해 "그룹 정책"에 들어가서 "PC를 사용 중이더라도 최고 속도 인덱싱" 옵션을 켜는 것이 인상적입니다. 저는 아직 못 써봤지만...

저의 경우는 PC 포맷 후 수많은 메일이 들어있는 메일 계정 로그인을 해 뒀을 때, 인덱싱이 매우 오래 걸릴 (이건 메일이 많으면 어쩔 수 없다네요.) 뿐더러 인덱싱 중인데 메일 검색을 시도했을 때 검색 결과로 최근 메일 일부만 뜨는 문제였습니다.

<Outlook 옵션 - 검색>에서 "가능한 경우 쿼리 입력시 결과 표시" 옵션꺼서, 인덱싱 결과를 쓰지 않고 검색하도록 하여(?) 문제를 우회했습니다.

아직 인덱싱 진행 중이라는 오류 메시지가 안 떴는데, 앞선 글처럼 비정상적인(?) 방법으로 계정 추가를 해서 그럴지 모르겠네요.

 

겪은 문제 증상

"인덱싱이 안 되었다"고 오류 메시지가 뜨지는 않으나, 결과 몇 개만 나오고 전체 결과는 안 나오는 상태였습니다. 인덱싱이 잘 안 되고 있는 상태였는데요.

  • 인덱싱 상태를 보면 수만 건 메일 항목이 인덱싱을 기다리고 있다고 나타났습니다. 어림짐작이지만 10초당 100건씩 줄어드는 것 같았어요.
* 인덱싱 상태 보기

아웃룩 프로그램에서 검색란을 클릭하면, 위의 리본 메뉴에 [검색] 탭이 생깁니다.
클릭한 뒤 [검색 도구] > [인덱싱 상태]를 차례로 누르면 현재 인덱싱 프로그램이 뭘 하고 있는지 나옵니다.

알아서 새로고침되지 않으니, 인덱싱이 되어서 갯수가 줄긴 하는지 보려면 조금 있다가 직접 인덱싱 상태 창을 다시 열어주어어 합니다...

[인덱싱 상태] 메뉴 위치
지금은 인덱싱이 끝났지만...

해결 아니고 우회 방법

파일 - 옵션 - 검색으로 들어가서 "가능한 경우 쿼리 입력시 결과 표시" 옵션껐습니다. 인덱싱 결과를 쓰지 않고 검색하도록 하는 것 같은데요, 요렇게 하니까 검색이 되기는 되더라구요.

다만 인덱싱 결과를 안 쓰니 검색 속도가 느려진다고는 하는데... 일단 검색 되는게 우선이죠.

 

실패한 도전

  • 메일함 파일 깨져서 색인이 안 되나 해서 MS오피스 프로그램 폴더에 있는 "ScanPST.exe" 프로그램을 돌려봤습니다. 항목 몇 개가 손상되었고 고쳤다고 했지만, 인덱싱 속도 개선에는 별 소용이 없더군요. 아니... 방금 로그인했는데 손상된 항목이 있다고요???

    "ScanPST.exe"는 "C:\Program Files\Microsoft Office\root\Office16\"에 있었습니다.
    64비트 OS, 32비트 오피스이면 "Program Files" 폴더 대신 "Program Files (x86)" 폴더에서 찾아주세요.
  • 아웃룩 검색 옵션에서 "표시되는 결과 수를 제한하여 검색 속도 높이기" 옵션을 먼저 꺼 봤지만 소용이 없었습니다.

 

 

 

가지 않은 길

  • 정 인덱싱이 안 되면 "인덱스 재생성", 또는 아예 윈도 인덱싱 서비스를 포기하라고도 하더군요. 아무리 그래도 그건...
  • 방금 찾아보니 PC 사용 중일 때 인덱싱 속도를 늦추지 않도록 하는 옵션이 있다고 하네요..

 

반응형

+ Recent posts