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

更新於 發佈於 閱讀時間約 12 分鐘
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

raw-image
raw-image


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

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

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

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的軟體心法實戰營 - 🎧語音辨識引擎」。

avatar-img
118會員
267內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
情境描述 我們在「🔒 阿Han的軟體心法實戰營 - kafka」有關於kafka的教學文章, 那麼在開發過程中我們遇到了 👻 詭異事件, 那就是我們嘗試在做一個檔案串流時, 發現Producer明明傳送了大約16MB檔案大小的封包到kafka, 每一包約(1024 * 1024 ) bytes
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
我們在學習kafka的過程中最不習慣的就是不管什麼樣的資料, 在kafka的傳輸過程都會是binary的資料格式, 因此我們在撰寫程式的過程中並不是那麼的直觀, 必須將資料從float、int…資料型態轉型成binary才能順利傳送, 那麼基於這樣的前提之下, python這套程式語言可以怎麼做
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
情境描述 我們在「🔒 阿Han的軟體心法實戰營 - kafka」有關於kafka的教學文章, 那麼在開發過程中我們遇到了 👻 詭異事件, 那就是我們嘗試在做一個檔案串流時, 發現Producer明明傳送了大約16MB檔案大小的封包到kafka, 每一包約(1024 * 1024 ) bytes
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
gcc11.4卡住的機會很高(目前不大確定但更新12後可以安裝暫且認定市這個問題吧) 要開始底下步驟前先把gcc換到12 GCC ref: ​清除舊版本 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*" 下載​NVIDIA-
Thumbnail
import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.getenv('OPENAI_API_KEY')
sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 安裝版本查找: http
Thumbnail
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
gcc11.4卡住的機會很高(目前不大確定但更新12後可以安裝暫且認定市這個問題吧) 要開始底下步驟前先把gcc換到12 GCC ref: ​清除舊版本 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*" 下載​NVIDIA-
Thumbnail
import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) openai.api_key = os.getenv('OPENAI_API_KEY')
sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 安裝版本查找: http
Thumbnail
這篇文章將分享最近遇到 NVIDIA GPU driver 的問題,並提供瞭解決步驟,以及證實問題解決的測試方法。當您遇到類似問題時,可以參考這篇文章進行解決。文章中包含了定位庫文件目錄、備份和替換文件以及測試修改的步驟。