作者:Louis Chuang
網路上目前可以找到關於OpenVINO的介紹與解說文章越來越多,基於自己的需求想要進一步了解,老實說還真的不知如何下手。這次應MakerPRO的邀請,在短短的時間中要了解如何去深入了解OpenVINO,並且寫出有內容的東西,還真的是一個很大的挑戰,截至著手準備這邊文章的時候,還在思考未來如何深入應用OpenVINO,此時當作老王賣瓜,提供點自己這幾週的經驗給大家參考。
OpenVINO強大之處在於整合了當前AI經常應用的情境,像是圖片或是影像的物件辨識、語音辨識、自然語言與數據推薦系統等等,而透過這個套件的Open Model Zoo可以導入現有多個常用框架的模型,像是Caffe、TensorFlow、MXNet、Kaldi與ONNX,無疑是個現成的參考資料庫。
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完成三大目標:
- 應用DL Workbench可以選用現有或是自製的模型,透過GUI介面,輕鬆完成模型的分析與部署工作。
- 使用Nodejs的語言去使用OpenVINO提供的各種資源進行開發。
- 將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安裝,是不需要先下載與安裝工具包。為了方便各位進行測試,我也提供我的安裝方式作為參考:
Step 1. Docker執行環境安裝:
確認與安裝docker環境:如果不確定Docker的版本,可以重新參考官方文件,以下是我安裝流程:
A.移除舊版的docker套件:
~$ sudo apt-get remove docker docker-engine docker.io containerd runc
B.安裝docker需要使用到的套件:
~$ sudo apt-get update
~$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
C.設定apt安裝所需要的套件庫與環境 (以x86環境為例):
~$ 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 > /dev/nul
D.實際進行安裝:
~$ sudo apt-get update
~$ sudo apt-get install docker-ce docker-ce-cli containerd.io
E.安裝後,需要將ubuntu的用戶加入docker的群組:
~$ sudo usermod -aG docker ${USER}
F.重新登出用戶,再次登入,才會將新加入的docker群組生效。或是重新開機也可以。
Step 2. 安裝GPU Driver:
建議可以再次安裝Intel GPU的Driver,使用DFI 的單板電腦曾經遇到過無法正確安裝GPU Driver,導致Workbench無法使用GPU,僅能使用CPU進行訓練。安裝方次可以參考以下的網址:
https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-focal.html
我也提供安裝流程作為參考:
A.安裝必要的套件,並增加apt套件庫的資訊:
~$ 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.安裝:
~$ 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,還是需要安裝才會正常運作:
~$ sudo apt-get install \
libigc-dev \
intel-igc-cm \
libigdfcl-dev \
libigfxcmrt-dev \
level-zero-dev
D. 設定權限:
可以先檢查用戶是否在render的群組,使用以下命令來檢查,列出目前這個用戶所擁有的群組:
~$ groups ${USER}
如果這個用戶有沒有加入render與video的群組,使用以下方法加入:
~$ 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,簡化後面的流程:
~$ python3 -m pip install -U openvino-workbench
B.建立一個可以放設定與專案的目錄,例如放在自己目錄下的openvino-workbench目錄:
~$ mkdir -m 777 ~/openvino-workbench
C.執行以下命令啟動Workbench:
~$ 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.安裝套件:
~$ 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的環境上嘗試安裝時,會遇到個套件出現問題,導致最後的安裝無法完成,避免麻煩在一開始就先完成更新套件。以下是更新方式 :
~$ 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:
~$ ssh-keygen
B.將剛剛產生的public key 複製到遠端的主機,可以使用ssh-copy-id 命令,使用方法是:
~$ ssh-copy-id louis@192.168.1.100
# 請將louis改成遠端可以登入帳號,192.68.1.100改成遠端的主機
過程中會需要填寫登入的密碼,請正確的進行填寫。
C.驗證是否正確,使用ssh登入遠端主機,將不再需要填寫密碼,可以直接登入。
~$ ssh louis@192.168.1.100
如果可以正常登入,就表示完成這個步驟
Step 3. 確認遠端主機的用戶擁有根權限(Sudo Privileges),不需要輸入密碼就可以執行sudo的命令。
A.首先簡單的確認是否有sudo的使用權限以及是否不需要輸入密碼就可以執行sudo,執行以下指令:
~$ sudo ls -la /
B.如果可以順利列出根目錄下所有的檔案與目錄,表示這個用戶已經擁有根權限,並且不需要密碼就可以執行。如果顯示沒有sudo權限,則表示這個用戶沒有sudo使用權,請使用以下命令,將這個用戶加入到sudo群組中:
~$ su
~$ usermod -a -G sudo USERNAME
~$ exit
C. 加入後,請登出再重新登入,並且再次使用sudo ls -la / 確認目前用戶使用已經擁有sudo權限。
D. 如果用戶已經擁有sudo權限,但需要填寫密碼,則使用visudo,將這個用戶加入到/etc/sudoers.tmp檔案中:
~$ sudo visudo
此時會開啟編輯畫面,並且顯示檔案內容,接著將游標移到檔案的最後,加入以下權限:
louis ALL=(ALL) NOPASSWD: ALL #請將louis改成這個帳戶的名稱
接著存擋離開,再重新測試這個用戶的sudo命令:
~$ sudo ls -la /
此時應該不需要密碼就可以執行了。
*特別注意:使用 visudo 編輯並存擋,務必確認正確填寫,否則有可能導致系統嚴重的問題發生。
Step 4:
進入 DL Workbench 設定目前準備進入到DL Workbench設定的步驟,在此之前,必須要先下載id_rsa的私鑰到本機來,方便等一下再介面上需要上傳這個檔案。再次使用ssh登入到安裝Workbench的主機上,可以使用vi或是其他編輯器,打開私鑰檔案,使用以下命令開啟:
~$ 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的目標。
(責任編輯:謝涵如)
- 當OpenCV遇上OpenVINO:如何使用IR model進行推論? - 2021/12/13
- 【OpenVINO專欄】用DL Workbench輕鬆完成AI模型的分析與部署工作 - 2021/07/31
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!