【OpenVINO專欄】用DL Workbench輕鬆完成AI模型的分析與部署工作

作者:Louis Chuang

 

網路上目前可以找到關於OpenVINO的介紹與解說文章越來越多,基於自己的需求想要進一步了解,老實說還真的不知如何下手。這次應MakerPRO的邀請,在短短的時間中要了解如何去深入了解OpenVINO,並且寫出有內容的東西,還真的是一個很大的挑戰,截至著手準備這邊文章的時候,還在思考未來如何深入應用OpenVINO,此時當作老王賣瓜,提供點自己這幾週的經驗給大家參考。

OpenVINO強大之處在於整合了當前AI經常應用的情境,像是圖片或是影像的物件辨識、語音辨識、自然語言與數據推薦系統等等,而透過這個套件的Open Model Zoo可以導入現有多個常用框架的模型,像是Caffe、TensorFlow、MXNet、Kaldi與ONNX,無疑是個現成的參考資料庫。

OpenVINO支援現有多個常用框架的模型(Source: Intel)

Intel OpenVINO 工具套件包含的項目實在太多,要做到基礎入門我想非常快。但如果要真的上手到導入既有的商業專案中,我想還是需要花不少時間。學習Intel OpenVINO 工具集我想是非常值得去投資的,後續對於導入AI應用到升級與維護專案,會非常的容易。

以下的介紹將會以短篇的模式進行,我使用以下的環境去進行學習與測試:

1.硬體:

  • Rock X Intel(R) Atom(TM) x5-Z8350 1.4GHz CPU. 4Gb RAM 與 128Gb 的SD卡環境
  • EFI單板電腦,使用i7-1185G7E 2.8GHz 11代的Intel CPU, 16Gb RAM 與 128Gb SSD.
  • 2019年Mac book Pro 15吋 i7 2.6GHz CPU, 使用Parallels 設定兩個ubuntu VM. 分別設定 2Cores與4 Cores的環境

2. O/S:分別使用ubuntu server 20.04 與 ubuntu desktop 20.04 兩個版本進行測試。

3. OpenVINO工具包版本: 2021.4 (截至目前最新的版本)

個人接觸與學習使用OpenVINO,目地都在於如何將這個工具應用在未來公司的專案上,而選用Ubuntu Linux的作業系統,一方面是考量Open Source 降低入門需要的投資成本,再者也是因為公司內部整體的建置維護環境。如果有需要以Windows作業系統為建置環境,可以再多參考官方的文件。

我自己個人打算在OpenVINO完成三大目標:

  1. 應用DL Workbench可以選用現有或是自製的模型,透過GUI介面,輕鬆完成模型的分析與部署工作。
  2. 使用Nodejs的語言去使用OpenVINO提供的各種資源進行開發。
  3. 將V7RC上的道路辨識功能,透過OpenVINO的環境,使用Nodejs語言去重現功能。

首部曲 – 從DL Workbench開始談起

在2018年我開始接觸AI,是基於想在公司的產品V7RC中導入AI的元素,當時我希望可以透過遙控車上面的鏡頭傳回到手機上,透過手機上的運算資源進行演算,辨識影像中的物體。最早透過同事的協助找到Framework,使用Python進行模型訓練,最後產生出的結果去實際應用,效果很差,而且還不知道如何整合到iOS與Android的APP。

後來Google Cloud的AutoML 提供了一個模型訓練很好的環境,訓練好的模型可以直接使用Tensorflow Lite SDK整合到iOS與Android的APP中。這上面有個非常重要的關鍵在於一個好的GUI,讓使用者很容易地上手,去進行模型訓練,最後導出到自己的應用上。

後來像是Teachable Machine 也提供很好的GUI給使用者,對於入門的使用者來說,也的確夠用,但截至目前,我們的工程師還無法將訓練成果部署到APP上。

DL Workbench最棒的地方在於可以從多種不同常用的Framework選擇自己要匯入的模型,或是匯入自己的模型,進行訓練,並且可以選擇使用哪個裝置進行訓練與分析。Dataset的管理也非常容易,很容易讓人著迷,願意多花點時間去嘗試那些已經訓練好的模型進行比較。

如果要了解如何安裝,可以參考許哲豪(Jack)的這篇文章〈不用寫程式也能玩轉深度學習模型 ─ OpenVINO™ DL Workbench圖形化介面工具簡介〉

而我想分享的是在實際安裝過程中遇到的問題排解與疑問,以下使用自問自答方式來進行:

1.DL Workbench是個Application,所以需要Desktop執行嗎?


答案是不需要。DL Workbench是一個Web Server,安裝好了之後可以透過其他的電腦以訪問網站的方式來操作,就跟AutoML或是Teachable Machine一樣。 多人操作應該也沒有問題。 我喜歡裝在Ubuntu Server上,減少像是Desktop版本還要跑個X Window浪費效能。

2.安裝DL Workbench需不需要在機器上面安裝OpenVINO套件?

答案是不需要。原本我的理解是一個步驟一個步驟去安裝OpenVINO所有的工具套件,Workbench放在最後面,當然就要先裝好套件後才可以安裝Workbench。但其實Workbench使用Docker Container安裝,是不需要先下載與安裝工具包。為了方便各位進行測試,我也提供我的安裝方式作為參考:

<

p style=”padding-left: 40px;”>Step 1. Docker執行環境安裝
:

確認與安裝docker環境:如果不確定Docker的版本,可以重新參考官方文件,以下是我安裝流程:

A.移除舊版的docker套件:


1
~$ sudo apt-get remove docker docker-engine docker.io containerd runc

B.安裝docker需要使用到的套件:


1
2
3
4
5
6
7
~$ sudo apt-get update
~$ sudo apt-get install \
                  apt-transport-https \
                  ca-certificates \
                  curl \
                  gnupg \
                  lsb-release

C.設定apt安裝所需要的套件庫與環境 (以x86環境為例):


1
2
~$ echo \
         "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/nul

D.實際進行安裝:


1
2
~$ sudo apt-get update
~$ sudo apt-get install docker-ce docker-ce-cli containerd.io

E.安裝後,需要將ubuntu的用戶加入docker的群組:


1
~$ sudo usermod -aG docker ${USER}

F.重新登出用戶,再次登入,才會將新加入的docker群組生效。或是重新開機也可以。

Step 2. 安裝GPU Driver:

建議可以再次安裝Intel GPU的Driver,使用DFI 的單板電腦曾經遇到過無法正確安裝GPU Driver,導致Workbench無法使用GPU,僅能使用CPU進行訓練。安裝方次可以參考以下的網址:

https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html#additional-GPU-steps

https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-focal.html

我也提供安裝流程作為參考:

A.安裝必要的套件,並增加apt套件庫的資訊:


1
2
3
4
~$ sudo apt-get install -y gpg-agent wget
                    
~$ wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | sudo apt-key add -
          
~$ sudo apt-add-repository \
'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main'

B.安裝:


1
2
3
4
5
~$ sudo apt-get update
~$ sudo apt-get install \
         intel-opencl-icd \
         intel-level-zero-gpu level-zero \
intel-media-va-driver-non-free libmfx1

C.選擇性安裝開發套件,如果要執行某些API,還是需要安裝才會正常運作:


1
2
3
4
5
6
~$ sudo apt-get install \
                  libigc-dev \
                  intel-igc-cm \
                  libigdfcl-dev \
                   libigfxcmrt-dev \
          level-zero-dev

D. 設定權限:

可以先檢查用戶是否在render的群組,使用以下命令來檢查,列出目前這個用戶所擁有的群組:


1
~$ groups ${USER}

如果這個用戶有沒有加入render與video的群組,使用以下方法加入:


1
2
3
4
~$ sudo gpasswd -a ${USER} render
                          
~$ sudo gpasswd -a ${USER} video
~$ newgrp render
~$ newgrp video

Step 3. 安裝DL Workbench Docker Container:

有實際用過Docker Container的朋友應該知道,如果沒有設定將資料儲存在外部空間,只要每次重新開啟Container,所有資料將會清空,還原成一開始的“乾淨” 狀態。因此除了安裝之外,還要確保相關設定與專案都有儲存到Server的儲存裝置上,而不是在Container裏面。

我參考官網的文件進行安裝:

A. 使用pip安裝openvino-workbench套件,這不是下載與安裝Workbench Container,可以當作是方便啟動的script,簡化後面的流程:


1
~$ python3 -m pip install -U openvino-workbench

B.建立一個可以放設定與專案的目錄,例如放在自己目錄下的openvino-workbench目錄:


1
~$ mkdir -m 777 ~/openvino-workbench

C.執行以下命令啟動Workbench:


1
~$ openvino-workbench --image openvino/workbench:2021.4 --assets-directory ~/openvino-workbench --enable-gpu --container-name openvino-workbench

這個命令,我們將Container名稱命名為 openvino-workbench,並且指定~/openvino-workbench作為專案與設定儲存的目錄,另外也啟動GPU。 如果發生錯誤,像是找不到/dev/rencer/*的目錄等等,就是系統沒有正確的設定GPU,可以嘗試先吧–enable-gpu拿掉試試看。

完成後,就可以在本機打開Browser連結上這個網站,例如Workbench主機的IP是10.211.55.17,那麼就在Browser上面鍵入:http:// 10.211.55.17:5665

3. DL Workbench最吸引我的地方在哪?



看到DL Workbench的介面上,Environment的右邊有個Add Remote Target按鈕。沒錯,可以將多台機器的資源統一在這個見面上管理,這樣可以將專案切換到不同機器上進行訓練與分析。

經過一番努力,測試成功了,真的可以將專案指派到其他機器上面去進行訓練,但可惜的是只能在本機進行驗證與測試,我想未來的版本應該會解決這個問題。

以下提供安裝方式,我也提供參考網址

Step 1. 在遠端主機進行設定,下載並且安裝必要套件:

A.安裝套件:


1
2
3
4
5
6
7
8
9
10
11
12
13
~$ sudo apt-get update
~$ sudo apt-get install -y --no-install-recommends \
                  openssh-server \
                  ssh \
                  python3 \
                  ython3-distutils \
                  python3-apt \
                  python3-dev \
                  python3-pip \
                  gcc \
                  libgtk-3-0 \
                  ffmpeg

          
~$ python3 -m pip install --upgrade pip

<

p style=”padding-left: 80px;”>B. 更新python3-virtualenvwrapper套件。就個人的經驗上我分別在Atom與VM的環境上嘗試安裝時,會遇到個套件出現問題,導致最後的安裝無法完成,避免麻煩在一開始就先完成更新套件。以下是更新方式
:


1
2
3
4
~$ sudo apt remove python3-virtualenvwrapper
~$ sudo apt autoremove
~$ sudo apt purge python3-virtualenv
~$ /usr/bin/python3 -m pip install --force-reinstall virtualenvwrapper

Step 2. 設定ssh遠端登入,並取得private key

回到安裝DL Workbench的機器上,我們需要可以使用ssh直接登入到遠端主機的相關權限。設定的過程中我們將會設定一個private key, 這個檔案將要使用在Workbench的設定上。以下是相關執行步驟(如果對於ssh非常熟悉的朋友,可以簡化這個流程,直接取得ssh登入的private key):

A. 使用ssh-keygen 產生ssh的Key:


1
~$ ssh-keygen

B.將剛剛產生的public key 複製到遠端的主機,可以使用ssh-copy-id 命令,使用方法是:


1
2
~$ ssh-copy-id louis@192.168.1.100  
# 請將louis改成遠端可以登入帳號,192.68.1.100改成遠端的主機

過程中會需要填寫登入的密碼,請正確的進行填寫。

C.驗證是否正確,使用ssh登入遠端主機,將不再需要填寫密碼,可以直接登入。


1
~$ ssh louis@192.168.1.100

如果可以正常登入,就表示完成這個步驟

Step 3. 確認遠端主機的用戶擁有根權限(Sudo Privileges),不需要輸入密碼就可以執行sudo的命令。

A.首先簡單的確認是否有sudo的使用權限以及是否不需要輸入密碼就可以執行sudo,執行以下指令:


1
~$ sudo ls -la /

B.如果可以順利列出根目錄下所有的檔案與目錄,表示這個用戶已經擁有根權限,並且不需要密碼就可以執行。如果顯示沒有sudo權限,則表示這個用戶沒有sudo使用權,請使用以下命令,將這個用戶加入到sudo群組中:


1
2
3
~$ su
~$ usermod -a -G sudo USERNAME
~$ exit

C. 加入後,請登出再重新登入,並且再次使用sudo ls -la / 確認目前用戶使用已經擁有sudo權限。

D. 如果用戶已經擁有sudo權限,但需要填寫密碼,則使用visudo,將這個用戶加入到/etc/sudoers.tmp檔案中:


1
~$ sudo visudo

此時會開啟編輯畫面,並且顯示檔案內容,接著將游標移到檔案的最後,加入以下權限:


1
louis ALL=(ALL) NOPASSWD: ALL  #請將louis改成這個帳戶的名稱

接著存擋離開,再重新測試這個用戶的sudo命令:


1
~$ sudo ls -la /

此時應該不需要密碼就可以執行了。

*特別注意:使用 visudo 編輯並存擋,務必確認正確填寫,否則有可能導致系統嚴重的問題發生。

Step 4:

進入 DL Workbench 設定目前準備進入到DL Workbench設定的步驟,在此之前,必須要先下載id_rsa的私鑰到本機來,方便等一下再介面上需要上傳這個檔案。再次使用ssh登入到安裝Workbench的主機上,可以使用vi或是其他編輯器,打開私鑰檔案,使用以下命令開啟:


1
~$ vi ~/.ssh/id_rsa

將會看到以上的編輯畫面,可以使用圈選複製,然後在本機新增加一個文字檔案,然後貼上剛剛複製的內容,儲存成一個文字檔案,例如:id_rsa_192.168.0.1.key。

接著,在本機打開Browser,進入Workbench的網站,然後按下Create的按鈕,產生一個新的專案:

在Create Project畫面上,可以看到Environment的功能,有個Add Remote Target的按鈕,按下後開始新增新的遠端主機:

這時可以看到Target Machine的列表,第一個顯示的就是Workbench內建預設的環境。按下『Add』按鈕後,進行新增機器的畫面:

在Add Remote Target表單中,請填入以下資訊:

  • Hostname (遠端主機IP)
  • Port (遠端主機ssh port, 除非有手動變更,預設都是22)
  • Target Name(自己為這個遠端命名)
  • User (登入遠端主機用的帳號)
  • Ssh key (就是一開始我們先存下來的私鑰文字檔案)

以上正確填寫後,下方的Save Target將會從灰色變成深紅色,按下後,就開始啟動安裝與設定程序了。

安裝進行中的畫面:

安裝中,每個階段都可以即時顯示狀態以及正在設定中的項目:

安裝完成後,在Target Machines的列表中會清楚出現該設備,如果安裝出現問題,也會出現錯誤資訊。

安裝中如果出現錯誤,也會出現在下方的資訊中:

回到Create Project畫面後,下方的Environment,就可以選擇遠端的主機來進行演算了。

實際簡單的測試一下,可以看到遠端主機上跑出來的結果,專案列表上可以看到第二列,使用我們剛剛新增的遠端主機資源進行演算的結果:

4.目前有沒有什麼可以進一步釐清的地方?

截至目前無法正確的設定遠端主機使用GPU或是VPU的資源,算是一種遺憾。我想後續應該是有機會可以解決,後續再做更新。

小結

如果各位希望打造一群工作的主機,可以進行選擇模型、設定資料集、建立基準到分析與部署,Workbench正好提供了分散式Environment的安裝方式,設定起來不難。後續在商業上思考可以如何客戶運用OpenVINO打造一個私有的AI運算環境應該不是問題,非常佩服Intel打造OpenVINO的目標。

(責任編輯:謝涵如)

Louis Chuang

Author: Louis Chuang

身為嵐亦科技創辦人,Louis除了透過雲端與App進行軟體研發之外,也常在各大校園推廣「無人賽車」運動以及比賽,對於智慧小車的AI應用與教育上不遺餘力而且相當有熱忱。

Share This Post On

發表

跳至工具列