2024-08-14|閱讀時間 ‧ 約 35 分鐘

【sherpa-onnx 問題解決思路】 libcublasLt.so.11: cannot open s

raw-image


我們在「【語音辨識引擎sherpa-onnx GPU下篇】讓您體驗更快的語音辨識功能」建置環境的過程中預到了這樣的錯誤訊息:

RuntimeError: /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:
1209 onnxruntime::Provider& onnxruntime::ProviderLibrary::
Get() [ONNXRuntimeError] : 1 : FAIL :
Failed to load library libonnxruntime_providers_cuda.so with error:
libcublasLt.so.11: cannot open shared object file: No such file or directory


原本以為架構在Docker之上進行安裝會非常的順利, 結果沒想到卻遇到了這樣的插曲…, 不過沒關係, 遇到問題我們就是解決問題, 過程中也不斷精進我們的問題解決能力, 希望透過我們的思路分享讓各位朋友也能有所啟發, 甚至您有更好的解決思路也都歡迎下方留言, 讓我們共同交流想法, 激盪出全新的解決方案。


這次的問題解決思路我們會加上AI的輔助, 我們也送給您幾個實用的工具進行使用, 讓我們排除障礙的效率更上一層樓。


前情提要

我們原先使用「nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04」這個Docker Image來進行建置的作業, 內容大致如下:


FROM nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04

SHELL ["/bin/bash", "-c"]

# 以下兩行很重要,否則會在 tzdata config 的時候卡住。
ENV TZ=Asia/Taipei

# 以下這一行,是為了 cmake 在運作時,能取得 cuda 相關的 share library,
ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:/usr/local/cuda-12.2/compat:/usr/local/cuda/lib64/stubs:$LD_LIBRARY_PATH

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# update to fast mirror site
RUN sed -i -E 's/archive\\.ubuntu\\.com/free\\.nchc\\.org\\.tw/g' /etc/apt/sources.list

# install normal source
RUN apt-get update && \\
apt-get install -y --no-install-recommends \\
automake \\
autoconf \\
gfortran \\
gcc \\
g++ \\
git \\
libtool \\
libssl-dev \\
zlib1g-dev \\
python3 \\
python3-dev \\
python3-pip \\
python-is-python3

WORKDIR /app

RUN pip install cmake

RUN git clone <https://github.com/k2-fsa/sherpa-onnx.git> && \\
export SHERPA_ONNX_CMAKE_ARGS="-DSHERPA_ONNX_ENABLE_GPU=ON" && \\
cd sherpa-onnx && \\
python3 setup.py install

RUN pip install numpy websockets



🔍 找尋可能原因

ChatGPT幫我們找方向

Q: 請問以下的錯誤訊息可能是什麼原因?
A: ....

Q: 幫我重點整理, 簡化一些
A:
當您看到這個錯誤訊息時,通常表示系統缺少 CUDA 相關的庫文件,特別是 libcublasLt.so.11
解決方法包括確保正確安裝 CUDA,設置好 LD_LIBRARY_PATH 環境變數,
以及檢查是否缺少其他必要的 CUDA 套件。

看起來可能是cuda版本問題, 接下來我們就精準一點搜尋一番。


Github上的Issue

第一步當然要找到最源頭, 而sherpa-onnx正好將程式碼開源在Github上, 當然也有許多討論都會在上面進行, 因此我們直觀的作法就是搜尋問題的關鍵字「libcublasLt.so.11」, 我們會發現有底下幾條Issue在討論:


Google

我們直接給它更多完整的錯誤訊息。

Failed to load library libonnxruntime_providers_cuda.so with error:
libcublasLt.so.11: cannot open shared object file: No such file or director

這邊一樣整理出幾個可能的原因:

以上這兩種方法都會耗費我們許多精神在閱讀文章跟理解, 難道就沒有更快的吸收知識技巧嗎? 不! 當然有, 只是我們還沒想到可以怎麼用而已, 相信ChatGPT在大家耳中已經非常熟悉了吧! 那我們底下就會實際使用底下的工具來進行知識的重點整理, 並且透過一些小技巧來互相比對結果, 畢竟我們不能總是相信AI, 除非它足夠準。


💪 借用外力 - NotebookLM

NotebookLMChatgpt/Gemini不同的是它可以參考外部資料來源, 可以讓回答的範圍更加限縮, 避免太過廣泛的知識導致回應錯誤。

首先我們將上面蒐集到的討論連結都喂給NotebookLM


當我們給予可能的討論清單之後, 接下來就可以開始問問題了

🤔 開始問, 我們把自己的問題盡量問的精確一點,這樣才容易找出我們需要的答案 :

請問我遇到以下的錯誤訊息, 可能會是什麼原因? (請給我繁體中文的回答)

Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or director


🎯 回答:

根據提供的資訊, 發生錯誤「Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or director」的原因可能是因為 libcublasLt.so.11 檔案版本不符。
錯誤分析
從錯誤訊息「libcublasLt.so.11: cannot open shared object file: No such file or director」可以看出,系統找不到 libcublasLt.so.11 這個檔案。
可能原因
這個錯誤可能是因為系統上的 CUDA 版本與 onnxruntime-gpu 所需的版本不符所導致。 onnxruntime-gpu 1.16.1 版本僅支援到 CUDA 11.8,如果系統上的 CUDA 版本高於 11.8,就會發生這個錯誤。
解決方案
要解決這個問題,可以嘗試以下幾個方法:●
確認 CUDA 版本: 使用 nvcc -V 指令確認系統上的 CUDA 版本。 如果版本高於 11.8,則需要降級 CUDA 版本至 11.8 或更低。●
安裝正確版本的 libcublasLt.so.11 檔案: 確認系統上安裝的 CUDA 版本,並找到對應版本的 libcublasLt.so.11 檔案,並將其所在目錄加入環境變數。
其他資訊
根據提供的內容, 還可以了解到以下資訊:●
在安裝或使用 sherpa-onnx 時,可能會遇到與 libonnxruntime_providers_cuda.so 檔案的路徑或相依性有關的問題。●
如果使用的是 onnxruntime 1.17.1 版本,則需要使用 cudatoolkit 11.8。●
如果使用的是 onnxruntime 1.16 版本以上,則需要 glibc 版本高於 2.17
注意事項
以上資訊僅供參考,實際情況可能有所不同。建議您參考相關軟體的官方文件或搜尋相關資訊,以獲得更準確的解答。



以人為本: 決策與重點歸納

科技始終於人性, 畢竟這些討論串都是來自於我們人類的腦中吸收判斷後進行輸出, 因此最終還是要回到我們「人」身上, AI可以幫助我們快速的定位問題, 加速整體流程, 達到人機協作的最高效率, 但我們還是要對自己負責進行決策。


綜合上面的資訊, 我們可以歸納出這個問題的可能原因與方向:

  • onnxruntime與cuda版本不相容: 找版本對應表。
  • onnxruntime升版可能性。
  • cuda降版可能性。


上面幾個問題, 我們其實可以選擇繼續問NotebookLM或者自行搜尋都可以, 這沒有標準答案, 取決於我們的習慣, 相信您有一天也會玩出屬於自己的一套邏輯, 如果有更聰明的方法歡迎下方留言告訴我, 讓我們一起學習成長。


這裡我們就附上版本對應表的連結, 歡迎自行取用: https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html


我們試著搜尋一下so檔:

find / -name libcublasLt.so*


發現到找出來的都是 libcublasLt.so.12而不是11版, 因此更加確定了我們先前所推測出的答案了。

/usr/local/cuda-12.2/targets/x86_64-linux/lib/stubs/libcublasLt.so
/usr/local/cuda-12.2/targets/x86_64-linux/lib/libcublasLt.so
/usr/local/cuda-12.2/targets/x86_64-linux/lib/libcublasLt.so.12
/usr/local/cuda-12.2/targets/x86_64-linux/lib/libcublasLt.so.12.2.5.6



✅ 最終解決方法

由於我們在sherpa-onnx的專案在2024/06/27為止僅支援到cuda 11, 因此我們的Docker image勢必先降降版才能正常運作, 待onnxruntime升級之後我們再將cuda也跟著升級才是根本解決之道, 雖然我們可以強升onnxruntime, 但很難確保是否會發生更多問題, 所以最好還是配合人家所規範的版本。


Dockerfile內容…

FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

...



結語

人機協作已然成為目前的趨勢, 我們要學會善用AI來提高我們的效率才不會被淘汰, 因此遇到問題我們不要害怕, 試著用新方法、新工具來試圖解決吧!


更多關於sherpa-onnx語音辨識引擎的教學歡迎至「🔒 阿Han的軟體心法實戰營 - 🎧語音辨識引擎」。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.