Today
-
Yesterday
-
Total
-
  • Jetson Nano Developer Kit - Mycroft Precise 설치기 (2)
    Soliloquy 2019. 11. 13. 00:12

     

    NVIDIA 로고

     

    Precise를 소스로 설치한 후, 잘 설치되었는지 알아보기 위해서 사용할 수 있는 방법 중 하나가 precise-listen이라는 명령어를 사용하는 것이었다. precise-listen을 음성 인식 모델 파일과 함께 사용하면 입력된 음성에 반응하여 precise 터미널 상에서 인식을 했다는 정보를 받을 수 있다.

     

    precise-listen을 실행하기 위해서는 mycroft-precise 폴더의 파이썬 가상 환경(. venv)에서 실행해야 했고, 깃허브에 있던 실행 방법은 아래와 같았다.

     

    source .venv/bin/activate  # Gain access to precise-* executables
    precise-listen my_model_file.pb

    precise-listen을 실행하기 위한 코드

    my_model_file.pb란에 시험을 하려는 모델 파일을 넣으면 된다.

     

    시험용 모델 파일은 아래의 사이트에서 받을 수 있었고, .pb 파일과 함께 .params 파일도 동일한 위치에 받아 두어야 했다. 나는 hey-mycroft.pb 파일과 .params 파일을 받아서 한 곳에 두고 precise-listen을 실행했다.

     

     

    MycroftAI/precise-data

    Binary data used for Mycroft Precise. Contribute to MycroftAI/precise-data development by creating an account on GitHub.

    github.com

     

    그런데 아니나 다를까 분명히 과거 텐서플로 1.13.1 버전을 설치했는데도 텐서플로가 설치되어 있지 않다는 말이 나타나면서 설치에 실패한다. 원인을 생각하던 도중 precise-listen을 실행할 때, 가상 환경에서 실행시키는 source .venv/bin/activate 구문이 눈에 띄었다.

     

    (.venv) @-desktop:~/mycroft-precise$ listeprecise-listen "hey-mycroft
    t.pb
    Traceback (most recent call last):
      File "/mycroft-precise/.venv/bin/precise-listen", line 11, in 
        load_entry_point('mycroft-precise', 'console_scripts', 'precise-listen')()
      File "mycroft-precise/precise/scripts/base_script.py", line 43, in run_main
        script = cls(args)
      File "/mycroft-precise/precise/scripts/listen.py", line 57, in __init__
        self.listener = Listener(args.model, args.chunk_size)
      File "/mycroft-precise/precise/network_runner.py", line 94, in __init__
        self.runner = runner_cls(model_name)
      File "/mycroft-precise/precise/network_runner.py", line 42, in __init__
        self.tf = import_module('tensorflow')
      File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "", line 994, in _gcd_import
      File "", line 971, in _find_and_load
      File "", line 953, in _find_and_load_unlocked
    ModuleNotFoundError: No module named 'tensorflow'

    텐서플로 모듈 불러오기에 실패함을 알려주는 로그

     

    가상 환경 구문에 대해서 조사를 해보니, 가상 환경 속에서는 원래 컴퓨터에 설치된 패키지들을 무시하고 거의 새로운 환경에서 시작한다는 사실을 알았다. 결국 텐서플로를 가상 환경 속에서 설치하면 된다는 말이었다.

     

    될 것이라는 확신에 찬 마음으로 NVIDIA의 텐서플로 설치 가이드를 보면서 차근차근 설치를 진행해 나갔다.

     

     

    TensorFlow For Jetson Platform :: Deep Learning Frameworks Documentation

    Installing TensorFlow for Jetson Platform provides you with the access to the latest version of the framework on a lightweight, mobile platform without being restricted to TensorFlow Lite.

    docs.nvidia.com

     

    6. 텐서플로 설치[각주:1]

    Precise를 사용하기 위해서 텐서플로는 가상 환경에서 설치해야 하며, 가상 환경에서 불필요한 sudo는 빼서 설치를 하기로 했다.

     

    1. 설치 전 필요한 패키지 설치

    apt를 통해 패키지를 설치한 후, pip3로 파이썬 패키지를 설치한다. 환경에 따라 pip3 구분은 여러 줄로 보일 수 있는데, 모두 한 줄로 작성되었다.

     

    sudo apt-get update
    sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev

     

    pip3 install -U numpy==1.16.1 future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.6 enum34 futures testresources setuptools protobuf

     

    2. 텐서플로 설치

     

    이번에는 텐서플로를 설치할 차례이다. Precise에 사용되는 1.13.1 텐서플로는 pip3를 이용해서 설치한다.

     

    pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3

     

    시험 실행

     

    그리고 이제 남은 것은 Precise 동작 시험 뿐이었다. 처음에 사용했던 코드를 이용해서 precise-listen을 실행하였다. 결과는? 다행히 잘 나왔다. hey mycroft라고 말을 하면 파형이 터미널에 그려졌다. hey jetson이 아닌 다른 말을 하면 파형이 터미널에 나오지 않았다.[각주:2]

     

    source .venv/bin/activate  # Gain access to precise-* executables
    precise-listen hey-mycroft.pb

    precise-listen을 실행하기 위한 코드

     

    Precise-listen 실행 결과

    더보기

    (.venv) @-desktop:~/mycroft-precise$ precise-listen hey-mycroft.pb
    2019-11-12 23:50:12.423853: W tensorflow/core/platform/profile_utils/cpu_utils.cc:98] Failed to find bogomips in /proc/cpuinfo; cannot determine CPU frequency
    2019-11-12 23:50:12.424810: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x10b87ba0 executing computations on platform Host. Devices:
    2019-11-12 23:50:12.424871: I tensorflow/compiler/xla/service/service.cc:168] StreamExecutor device (0): ,
    2019-11-12 23:50:12.521233: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:965] ARM64 does not support NUMA - returning NUMA node zero
    2019-11-12 23:50:12.521562: I tensorflow/compiler/xla/service/service.cc:161] XLA service 0x1121ce80 executing computations on platform CUDA. Devices:
    2019-11-12 23:50:12.521624: I tensorflow/compiler/xla/service/service.cc:168] StreamExecutor device (0): NVIDIA Tegra X1, Compute Capability 5.3
    2019-11-12 23:50:12.522130: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties:
    name: NVIDIA Tegra X1 major: 5 minor: 3 memoryClockRate(GHz): 0.9216
    pciBusID: 0000:00:00.0
    totalMemory: 3.87GiB freeMemory: 1.14GiB
    2019-11-12 23:50:12.522192: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
    2019-11-12 23:50:13.612717: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
    2019-11-12 23:50:13.612797: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0
    2019-11-12 23:50:13.612834: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0: N
    2019-11-12 23:50:13.613003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 700 MB memory) -> physical GPU (device: 0, name: NVIDIA Tegra X1, pci bus id: 0000:00:00.0, compute capability: 5.3)
    ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=2,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=2,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
    2019-11-12 23:50:15.379698: I tensorflow/stream_executor/dso_loader.cc:153] successfully opened CUDA library libcublas.so.10.0 locally
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------

    X-----------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    X-----------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    XXXXXXXX----------------------------------------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXX-----------------------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxx---------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxx------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxx------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxx--------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxxxxx------------------------------
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx----------------------------------
    XXXXXXXXXXXXXXXXXXXXX---------------------------------------------------
    XXXXXXXXXXXXXX----------------------------------------------------------
    XXXXXXXX----------------------------------------------------------------
    XX----------------------------------------------------------------------
    X-----------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------

     

    CPU/GPU 사용량 알아보기

     

    실행에 성공한 것은 좋은데, 프로그램을 실행하는 데 있어서 CPU와 GPU 사용량은 어떻게 될지 궁금했다. GPU 사용량을 보려면 tegrastats 커맨드를 이용하면 되긴 하는데, 가독성이 너무 떨어진다.

     

    ~/mycroft-precise$ tegrastats
    RAM 1627/3964MB (lfb 201x4MB) SWAP 34/1982MB (cached 2MB) CPU [2%@102,0%@102,0%@102,1%@102] EMC_FREQ 0% GR3D_FREQ 0% PLL@21.5C CPU@25C PMIC@100C GPU@24C AO@29.5C thermal@24.25C POM_5V_IN 905/905 POM_5V_GPU 0/0 POM_5V_CPU 123/123

    tegrastats를 사용한 모습

     

    어떻게 좀 쉽게 볼 수 없을까 하다가 jetson stats에 있는 jtop이라는 프로그램을 이용하면 한눈에 보기 쉽게 나온다는 사실을 알게 되었다. [각주:3]

     

    Jetson stats설치는 pip3를 이용해서 이뤄졌고, Jetson stats를 설치한 뒤에는 터미널 창에서 jtop을 입력하면 TUI 환경에서 CPU와 GPU를 한눈에 알아볼 수 있었다. 나의 경우에는 precise-listen을 실행하면 CPU 코어를 각각 30 ~ 40% 정도 사용하고, GPU는 30% 정도 사용이 됐다.

     

    sudo -H pip install jetson-stats
    jtop

     

    jtop을 사용한 사진

     

    그런데 CPU가 각각 30%나 사용한다는 게 GPU 가속이 된 건지 안된 건지 잘 모르겠다. 가속이 돼서 30% 정도면 라즈베리파이에 돌리는 건 거의 불가능할 것 같은데, Precise가 라즈베리파이에서도 쓰이는 걸 보면 흠... 내가 따로 설정을 해줘야 하는게 있나?

     

    Precise-convert 오류 해결

     

    File "/home/d428/Desktop/test1/mycroft-precise/.venv/lib/python3.6/site-packages/keras/utils/generic_utils.py", line 147, in deserialize_keras_object
    return cls.from_config(config['config'])
    File "/home/d428/Desktop/test1/mycroft-precise/.venv/lib/python3.6/site-packages/keras/optimizers.py", line 154, in from_config
    return cls(**config)
    File "/home/d428/Desktop/test1/mycroft-precise/.venv/lib/python3.6/site-packages/keras/optimizers.py", line 243, in __init__
    super(RMSprop, self).__init__(**kwargs)
    File "/home/d428/Desktop/test1/mycroft-precise/.venv/lib/python3.6/site-packages/keras/optimizers.py", line 79, in __init__
    'passed to optimizer: ' + str(k))
    TypeError: Unexpected keyword argument passed to optimizer: learning_rate

    만들어진 .net 파일을 precise-convert를 이용하여 .pb파일로 변경시 나타나는 오류

     

    precise-train으로 만든 .net 파일을 .pb 파일로 변환을 하려고 하니 learning_rate라는 키워드를 찾을 수 없다는 에러가 나왔다. 인터넷에서 검색을 해도 해당 에러가 나오는 원인을 찾기가 힘들었는데, Precise 깃허브의 issue에서 해결법을 찾을 수 있었다. (https://github.com/MycroftAI/mycroft-precise/issues/85)

     

    이 에러의 원인은 텐서플로를 설치할 때 Keras라는 파이썬 패키지가 최신 버전으로 설치되는데, Precise가 Keras 최신버전의 변경사항을 반영하지 못했기 때문이었다. 해결 방법은 Keras를 이전 버전인 2.2.4 버전으로 설치하는 방법이 있었다.

     

    pip3 install keras==2.2.4

     

    여담

     

    특이하게, 텐서플로를 설치할 때, numpy는 구버전을 사용했는데, numpy는 최신 버전이 더 좋지 않을까? 라는 생각에 numpy를 제외하고 설치를 해봤었는데, 특이하게도 자료형과 관련해서 아래와 같은 경고 메시지가 출력됐다. 구버전을 사용하는 이유가 여기에 있었구나...

     

    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:526: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      _np_qint8 = np.dtype([("qint8", np.int8, 1)])
    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:527: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      _np_quint8 = np.dtype([("quint8", np.uint8, 1)])
    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:528: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      _np_qint16 = np.dtype([("qint16", np.int16, 1)])
    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:529: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      _np_quint16 = np.dtype([("quint16", np.uint16, 1)])
    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:530: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      _np_qint32 = np.dtype([("qint32", np.int32, 1)])
    .venv/lib/python3.6/site-packages/tensorflow/python/framework/dtypes.py:535: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.
      np_resource = np.dtype([("resource", np.ubyte, 1)])

     

    precise-listen을 사용할 때, ALSA lib에서 PCM관련 에러를 많이 내보낸다. 처음에는 이것 때문에 실행이 안되려나 걱정을 했었는데, 에러가 있어도 다행히 사용하는데 문제는 없었다. OS를 새로 설치해도 동일한 에러가 나온 것을 보면 정말 무시해도 상관없지 않을까 생각한다.

     

    ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=2,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=2,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
    ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave

     

    티스토리의 맞춤법 검사 기능이 메세지를 메시지라고 고쳤다. 내 주위에서는 보통 메세지라고 더 많이 쓰는 것 같은데, 착각인가?

     

    [본문 SVG 파일]

     

    Nvidia_image_logo.svg
    0.00MB

     

     

     

     

    1. 이전 글에 이어서 번호를 붙였다 [본문으로]
    2. 혹시나 USB 마이크 인식이 안된다면, 인터넷에서 라즈베리파이 USB 마이크 인식을 찾아서 동일한 방법으로 USB 마이크를 잡으면 된다.단 라즈베리가 카드번호가 1로 설정되는 것과는 다르게 Jetson nano는 카드 번호를 기본이 2부터 사용해 줘야한다. [본문으로]
    3. 깃허브 주소: https://github.com/rbonghi/jetson_stats [본문으로]

    댓글

어제는 이곳에 명이 다녀갔습니다.

Powered & Designed by Tistory