# GO-Onnxruntime-example 環境架設(Ubuntu) ###### tags: `ubuntu`, `go` ## 環境系統 系統 : ubuntu 20.04 cuda : 12.2 cmake : 3.26 > 以下指令僅供參考,依各自安裝版本修改版本號 ## 安裝顯卡驅動 * step1 : 輸入指令 ubuntu-drivers devices 查看可用版本 ``` ubuntu-drivers devices ``` * step2 : 依據需求選擇驅動版本,輸入指令 ``` sudo apt install nvidia-driver-535 ``` * step3 : 重新啟動電腦,輸入指令 ```sudo reboot``` * step4 : 重啟後輸入 ```nvidia-smi```,確認是否安裝成功。 ## 安裝 cuda * step1 : 到 Nvidia CUDA 網站下載 CUDA 程式,強烈建議使用 runfile * step2 : 輸入指令 sudo sh cuda_12.2.0_535.54.03_linux.run 進行手動安裝 * step3 : 取消勾選安裝顯卡driver,以免發生驅動衝突,然後開始 install ## 安裝 cudnn * step1 : 到 Nvidia CUDA 網站下載 cudnn,檔案應該會叫做 *.tar.xz * step2 : 輸入指令解壓縮 ``` sudo tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tgz ``` * step3 : 輸入指令,複製Library到CUDA的安裝資料夾 ``` sudo cp cuda/include/cudnn*.h /usr/local/cuda-12.2/include sudo cp cuda/lib/libcudnn* /usr/local/cuda-12.2/lib64 sudo chmod a+r /usr/local/cuda-12.2/include/cudnn*.h /usr/local/cuda-12.2/lib64/libcudnn* ``` ## 設置環境變數 * step1 : 打開 .bashrc 在後面加上環境變數 * step2 : 設置cuda位置,最後加上 ``` export PATH=/usr/local/cuda/bin:$PATH ``` * step3 : 設置cudnn位置 最後加上 ``` exportLD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` * step4 : 重新開啟terminal後,輸入```nvcc -V```確認 cuda&cudnn 是否正確安裝 ## 多個 cuda 版本切換 * step1 : 輸入指令,刪除軟連結 ``` sudo rm -rf /usr/local/cuda ``` * step2 : 輸入指令,重新建立軟連結 ``` sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda ``` * step3 : 重新開啟terminal後,輸入```nvcc -V```確認 cuda&cudnn 是否成功切換 ## 安裝 golang 請參考 [https://go.dev/doc/install](https://),環境變數記得設定 ``` export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go ``` ## 安裝 GoCv * step1 : 安裝GoCv package ``` go get -u -d gocv.io/x/gocv ``` * step2 : 切換至 package 底下 ``` cd $GOPATH/pkg/mod/gocv.io/x/gocv@v0.36.1 ``` * step3 : 輸入指令開始安裝 openCV 4.9.0 ``` make install ``` * step4 : 輸入指令`go run ./cmd/version/main.go`,正確安裝會顯示如下 ``` gocv version: 0.36.1 opencv lib version: 4.9.0 ``` ## 安裝 Onnxruntime cpp libary * step1 : 更新cmake,至少要3.26,不要用 apt-install 版本會太舊,參考 [https://zhuanlan.zhihu.com/p/519732843](https://) * step2 : 如果版本沒有更新成功,請去 .bashrc 新增環境變數 ``` export CMAKE_ROOT=/usr/share/cmake-3.29.2 ``` * step3 : 加大swap容量,實測16GB記憶體 + swap 32GB 才能正常編譯 參考 [https://www.astralweb.com.tw/how-to-manually-add-swap-to-ubuntu/](https://) * step4 : git clone https://github.com/microsoft/onnxruntime.git ,或去下載zip檔解壓縮 * step5 : 將解壓縮後資料夾移動至 /usr/local/,並將資料夾命名為onnxruntime * step6 : ```cd /usr/local/onnxruntime``` * step7 : 如果有跳git相關錯誤,輸入指令 git init * step8 : 輸入指令(cuda11.8會遇到nvcc的警告,cuda12以上就不會) ``` sudo ./build.sh --skip_tests --use_cuda --config Release --build_shared_lib --parallel --cuda_home /usr/local/cuda-12.2/ --cudnn_home /usr/local/cuda --allow_running_as_root ``` * step9 : ```cd /usr/local/bin/onnxruntime/build/Linux/Release``` * step10 : 安裝 onnxruntime,輸入指令 ```sudo make install``` ## 使用 sample code * step1 : `git clone https://github.com/yam8511/go-onnxruntime-example.git` ,或去下載zip檔解壓縮 * step2 : 依照 README.md 提示輸入 ``` go get github.com/yam8511/go-onnxruntime@v1.3.0 ``` * step3 : 輸入 `go build -v -o run_od.exe ./yolov8_od `編譯執行檔 * step4 : 執行 `./run_od.exe` ## cgo 路徑相關問題 ### pkg-config pkg-config可以查看安裝套件提供的資訊 ``` pkg-config --cflags opencv4 //列出套件提供的headerfile dir pkg-config --libs opencv4 //列出套建提供的lib ``` ### 找不到headerfile、lib 進入 inference.go ,右鍵點選 ort 相關的函式,點選go to definition, 在vscode上幫會出現他的路徑,切換至相關的檔案內。  ``` // #cgo windows CFLAGS: -O2 -g -I ${SRCDIR}/include-1.14.1 // #cgo !windows CFLAGS: -O2 -g -I /usr/local/onnxruntime/include // #cgo !windows LDFLAGS: -O2 -g -L /usr/local/onnxruntime/lib -lonnxruntime ``` 程式內有定義相關的路徑,問題救出現在這。 ### (方法一)更改 .bashrc 的環境變數 請根據你 headerfile、lib 實際位置更改 ``` export CPATH=/usr/local/include/onnxruntime:$CPATH export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` ### (方法二)將 include、lib 移動至指定位置 通常只能用指令移動,如果遇到權限問題就加sudo ``` mv /要移動的檔案 /新的檔案位置 ``` ### (方法三)將 CFLAGS 更改路徑 通常只能用指令移動,如果遇到權限問題就加sudo ``` // #cgo windows CFLAGS: -O2 -g -I /你要的路徑 ``` ## 問題 ### cuda安裝失敗 使用runfile安裝,並且手動選擇不要安裝driver,安裝失敗原因通常就是driver版本衝突 ### onnxruntime cmake 警告 cuda12以下會出現,nvcc的相關報錯,用cuda12就不會有問題,可以安裝多個版本cuda,依照需求將軟連結重新設定即可 ### onnxruntime cmake 當機 建議以後可以開著資源管理器,監測使用資源,這次是記憶體空間不夠,加大swap虛擬記憶體即可解決 ### Nvidia-smi 重開機後會掉驅動 在應用程式 NVIDIA X Server Setting 中設定,設定 PRIME Profiles 到效能模式。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up