這里寫自定義目錄標題
- 問題一
- **解決方案**
- **方法 1:使用符號鏈接將系統庫鏈接到 Conda 環境**
- **補充說明**
- **驗證修復結果**
- 問題二:
- **問題根源**
- **解決方案**
- **1. 確認 TensorRT 安裝狀態**
- **2. 安裝 TensorRT 并配置環境變量**
- **3. 驗證 TensorRT 與 PaddlePaddle 版本兼容性**
- **4. 檢查 PaddlePaddle 編譯選項**
- 注意:
- **總結**
問題一
根據你的報錯信息,libstdc++.so.6: version 'GLIBCXX_3.4.30' not found
表示 當前 Conda 環境中的 libstdc++.so.6
版本過低,無法滿足 PaddlePaddle 的依賴需求。以下是完整的解決方法:
解決方案
方法 1:使用符號鏈接將系統庫鏈接到 Conda 環境
-
查找系統中已有的
libstdc++.so.6
文件:sudo find / -name libstdc++.so.6
通常路徑為:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
-
檢查系統庫是否包含所需版本:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
如果輸出中包含
GLIBCXX_3.4.30
,則說明系統庫已滿足需求。 -
刪除 Conda 環境中的舊庫文件:
rm /usr/local/miniconda/envs/ai_pyenv_3.12/lib/libstdc++.so.6 rm /usr/local/miniconda/envs/ai_pyenv_3.12/lib/libstdc++.so
-
創建符號鏈接到系統庫:
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/miniconda/envs/ai_pyenv_3.12/lib/libstdc++.so.6 ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/miniconda/envs/ai_pyenv_3.12/lib/libstdc++.so
-
驗證修復:
strings /usr/local/miniconda/envs/ai_pyenv_3.12/lib/libstdc++.so.6 | grep GLIBCXX
確保輸出中包含
GLIBCXX_3.4.30
。
補充說明
-
為什么會出現這個問題?
Conda 環境默認使用的libstdc++.so.6
是 Conda 自帶的版本,可能與系統版本不一致。當 PaddlePaddle 需要更高版本的 C++ 標準庫時,會報錯。 -
如何避免類似問題?
- 使用 Conda 安裝 PaddlePaddle 時,確保環境中的
libstdcxx-ng
和gcc
版本與官方要求一致。 - 或者直接使用系統 Python 環境,避免 Conda 的隔離問題。
- 使用 Conda 安裝 PaddlePaddle 時,確保環境中的
驗證修復結果
運行以下命令檢查是否修復成功:
python -c "import paddle; print(paddle.__version__)"
如果不再報錯,說明修復成功。
問題二:
Traceback (most recent call last):File "/usr/local/soft/py/seek_backend_fast/demo/main_paddle.py", line 80, in <module>ocr_engine_paddle = PaddleOCR(^^^^^^^^^^File "/usr/local/miniconda/envs/ai_pyenv_3.12/lib/python3.12/site-packages/paddleocr/paddleocr.py", line 693, in __init__super().__init__(params)File "/usr/local/miniconda/envs/ai_pyenv_3.12/lib/python3.12/site-packages/paddleocr/tools/infer/predict_system.py", line 53, in __init__self.text_detector = predict_det.TextDetector(args)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/miniconda/envs/ai_pyenv_3.12/lib/python3.12/site-packages/paddleocr/tools/infer/predict_det.py", line 139, in __init__) = utility.create_predictor(args, "det", logger)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/miniconda/envs/ai_pyenv_3.12/lib/python3.12/site-packages/paddleocr/tools/infer/utility.py", line 364, in create_predictorpredictor = inference.create_predictor(config)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: (NotFound) TensorRT is needed, but TensorRT dynamic library is not found.Suggestions:1. Check if the TensorRT is installed correctly and its version is matched with paddlepaddle you installed.2. Configure environment variables as follows:- Linux: set LD_LIBRARY_PATH by `export LD_LIBRARY_PATH=...`- Windows: set PATH by `set PATH=XXX;[Hint: dso_handle should not be null.] (at ../paddle/fluid/platform/dynload/tensorrt.cc:44)
針對您遇到的 TensorRT 動態庫未找到
錯誤,以下是詳細的解決方案:
問題根源
錯誤提示表明 PaddlePaddle-GPU 需要 TensorRT 加速支持,但系統未正確配置 TensorRT 庫。主要原因包括:
- TensorRT 未安裝:系統中缺少 TensorRT 運行時庫
- 版本不匹配:安裝的 TensorRT 版本與 PaddlePaddle 或 CUDA 不兼容
- 環境變量缺失:TensorRT 庫路徑未添加到
LD_LIBRARY_PATH
The third-party dynamic library (cudnn64_7.dll) that Paddle depends on is not configured correctly. (error code is 126)
Windows10下安裝PaddlePaddle,進行paddle.utils.run_check()測試時報錯,初以為是缺少 cudnn64_7.dll 所致,其實不然,而是 CUDA 版本、CUDNN 版本與 Paddlepaddle 版本不兼容導致,PaddlePaddle官網信息如下:
如果您的計算機沒有 NVIDIA? GPU,請安裝CPU 版的 PaddlePaddle
如果您的計算機有 NVIDIA? GPU,請確保滿足以下條件并且安裝 GPU 版 PaddlePaddle
CUDA 工具包 10.2 配合 cuDNN v7.6.5,如需使用 PaddleTensorRT 推理,需配合 TensorRT7.0.0.11
CUDA 工具包 11.2 配合 cuDNN v8.2.1,如需使用 PaddleTensorRT 推理,需配合 TensorRT8.2.4.2
CUDA 工具包 11.6 配合 cuDNN v8.4.0,如需使用 PaddleTensorRT 推理,需配合 TensorRT8.4.0.6
CUDA 工具包 11.7 配合 cuDNN v8.4.1,如需使用 PaddleTensorRT 推理,需配合 TensorRT8.4.2.4
CUDA 工具包 11.8 配合 cuDNN v8.6.0,如需使用 PaddleTensorRT 推理,需配合 TensorRT8.5.1.7
CUDA 工具包 12.0 配合 cuDNN v8.9.1, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.6.1.6
GPU 運算能力超過 3.5 的硬件設備
注:目前官方發布的 windows 安裝包僅包含 CUDA 10.2/11.2/11.6/11.7/11.8/12.0,如需使用其他 cuda 版本,請通過源碼自行編譯。您可參考 NVIDIA 官方文檔了解 CUDA、CUDNN 和 TensorRT 的安裝流程和配置方法,請見CUDA,cuDNN,TensorRT
解決方案
1. 確認 TensorRT 安裝狀態
運行以下命令檢查是否已安裝 TensorRT:
dpkg -l | grep TensorRT # Ubuntu/Debian
rpm -qa | grep TensorRT # CentOS/RHEL
若未安裝,需手動下載安裝包:
# 從 NVIDIA 官網下載對應版本(示例為 CUDA 12.0 的 TensorRT 8.6.1)
wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.6.1/tars/TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
2. 安裝 TensorRT 并配置環境變量
# 將解壓后的路徑加入環境變量(假設解壓到 /opt/TensorRT-8.6.1.6)
export LD_LIBRARY_PATH=/opt/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH# 永久生效(推薦)
echo 'export LD_LIBRARY_PATH=/opt/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
3. 驗證 TensorRT 與 PaddlePaddle 版本兼容性
PaddlePaddle 版本 | TensorRT 版本 | CUDA 版本 | cuDNN 版本 |
---|---|---|---|
2.6.0 (post120) | 8.6.1 | 12.0+ | 8.9+ |
2.5.2 (post118) | 8.5.3 | 11.8 | 8.6+ |
若版本不匹配,需重新安裝對應版本:
# 示例:為 CUDA 12.0 安裝 TensorRT 8.6.1
pip install tensorrt==8.6.1 --extra-index-url https://pypi.nvidia.com
4. 檢查 PaddlePaddle 編譯選項
確保安裝的 PaddlePaddle-GPU 包含 TensorRT 支持:
import paddle
print(paddle.inference.get_trt_compile_version()) # 應輸出 TensorRT 版本號
print(paddle.inference.get_trt_runtime_version()) # 應輸出運行時版本號
注意:
vim ~/.bashrc
# 加入以下三行,只加第一行無效
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/***/TensorRT-8.4.1.5/lib
export TENSORRT_INCLUDE_DIR=/home/***/TensorRT-8.4.1.5
export PATH=/home/***/TensorRT-8.4.1.5/bin:$PATH# 使改動生效
source ~/.bashrc
總結
通過正確安裝匹配的 TensorRT 版本并配置環境變量,即可解決該錯誤。建議使用官方 Docker 鏡像避免環境配置問題:
docker pull paddlepaddle/paddle:2.6.0-gpu-cuda12.0-cudnn8.9-trt8.6
docker run -it --gpus all -v $(pwd):/workspace paddlepaddle/paddle:2.6.0-gpu-cuda12.0-cudnn8.9-trt8.6