Docker コンテナに TensorRT をインストールする際の問題

Docker コンテナに TensorRT をインストールする際の問題

Ubuntu にインストールされているバージョンをアンインストールします。

   sudo apt-get purge "libnvinfer*"

スペースを解放するためにすべてのインストール ファイルを削除する場合は、次を実行します。

   dpkg -l | grep テンソルト

インストール パッケージ名を確認します。nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007 の場合は、次を実行します。

sudo dpkg -P nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007

これにより、/var/nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007_1-1 などのディレクトリ ファイルが削除されます。

https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-debian に従って、 Ubuntu ホストに TensorRT をインストールします。インストール リポジトリの deb ファイルをダウンロードし、次の手順を実行します。CUDA10.2 に適合した TensorRT7.2.1 バージョンをインストールする場合は、次を実行します。

sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.1.6-ga-20201006_1-1_amd64.deb

   sudo apt-key を /var/nv-tensorrt-repo-cuda10.2-trt7.2.1.6-ga-20201006/7fa2af80.pub に追加します

   sudo apt-getアップデート

   sudo apt-get で tensorrt をインストールします

Docker コンテナにインストールする場合は、上記の手順は使用できません。そうしないと、インストールの最後の手順で常に次のようなエラーが発生します。

次のパッケージには満たされていない依存関係があります:
tensorrt : 依存: libnvinfer-dev (= 7.2.1-6+cuda10.2) ただし、8.0.0-1+cuda11.3 をインストールする必要があります
依存: libnvinfer-plugin-dev (= 7.2.1-6+cuda10.2) ただし、8.0.0-1+cuda11.3 をインストールする必要があります
依存: libnvparsers-dev (= 7.2.1-6+cuda10.2) ただし、8.0.0-1+cuda11.3 をインストールする必要があります
依存: libnvonnxparsers-dev (= 7.2.1-6+cuda10.2) ただし、8.0.0-1+cuda11.3 をインストールする必要があります
依存: libnvinfer-samples (= 7.2.1-6+cuda10.2) ただしインストールされません
E: 問題を修正できないため、破損したパッケージが保留されています。

コンテナには明らかにCUDA10.2がインストールされており、TensorRTもバージョン7.2.1.6+cuda10.2ですが、常に同様のエラーが報告されます。他のバージョンに変更しても同じです。非常にイライラしています。後でNVIDIAのドキュメントを注意深く読んでみると、

Docker コンテナに TensorRT をインストールするには別の方法が必要なようです。ただし、Network Repo 方式を使用して、多数の libnvinfer* ライブラリ (必要に応じて 8 を 7 に変更) をインストールするのは面倒です。

そしてインストールした後、後でプログラムをコンパイルするときにまださまざまな問題があることがわかりました。バージョンを指定する方法でも同じ問題がありました。

しばらくしてもう一度試してみましたが、やはり間違っていました。最終的に、下を見て、最もシンプルで信頼性の高い方法を見つけました。

つまり、冒頭で報告された不可解なエラーは、実際には NVIDIA CUDA ネットワーク リポジトリが Docker コンテナー内に設定されていることが原因です。nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.1.6-ga-20201006_1-1_amd64.deb などの TensorRT ローカル リポジトリを手動でダウンロードしてインストールした後、sudo apt-get install tensorrt を使用してインストールすると、2 つのソースが原因でパッケージの競合が発生します。/etc/apt/preferences.d/ の下に次の内容のファイル local-repo を追加するだけで済みます。

パッケージ: *
ピン: origin ""
ピン優先度: 1001

次に実行する

 sudo apt-getアップデート
 sudo apt-get で tensorrt をインストールします

ローカル リポジトリに対応するバージョン cuda10.2-trt7.2.1.6 が正常にインストールされ、プログラムのコンパイル時にエラーは発生しませんでした。

NVIDIA のドキュメントは、いくつかの部分で非常に書き方が下手だと感じます。環境ごとにインストール手順を明確かつ完全に説明できないのでしょうか? 多くのものを混ぜ合わせて、ユーザーに 1 つずつ理解させなければなりません。

また、RTX30 シリーズの GPU を使用している場合は、CUDA バージョンが 11.1 以上である必要があります。そうでない場合、TensorRT はインストールできますが、実際の実行時に次のエラーが報告される可能性があります。

[W] [TRT] ネイティブ FP16 サポートのないハードウェアで Half2 サポートが要求されると、パフォーマンスに悪影響が出ます。
[E] [TRT] ../rtSafe/cuda/caskUtils.cpp (98) - trtSmToCask のアサーション エラー: 0 (サポートされていない SM)

11.1.0 は使用できますが、caffe や darknet などの特定のプログラムをコンパイルするときに次のエラーが発生する可能性があります。

nvcc 致命的: サポートされていない GPU アーキテクチャ 'compute_86'

したがって、RTX30シリーズのGPUの場合は、CUDAバージョン11.1.1以上をインストールするのが最適です。

以上が、docker コンテナに TensorRT をインストールする際の問題の詳細です。docker に TensorRT をインストールする方法の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • Pytorch は ONNX モデルとして保存することで TensorRT5 に変換されます
  • Linux システムに docker をインストールし、ssh 経由で docker コンテナにログインする方法
  • Centos7 で Docker アプリケーション コンテナ エンジンをインストールおよびアンインストールする方法
  • 一般的な Docker コマンドの概要: インストール、ミラーリング、基本的なコンテナ操作
  • Dockerコンテナにsshをインストールするための具体的な手順

<<:  Vue3 の参照と参照の詳細

>>:  MySQL テーブル フィールドの時間設定のデフォルト値

推薦する

純粋なCSSを使用してスイッチ効果を実現する

まずアイデアはこの効果を実現するには、 <input type="checkbox&...

ウェブデザイナーは適した人材

<br />この世に道はない。より多くの人が歩くようになると、それは道になります。最初は...

Ubuntu の MySQL のパラメータ ファイル my.cnf の詳細な分析

序文MySQL に関する私の理解に基づくと、パフォーマンスの最適化作業やマスター スレーブ レプリケ...

ログインボックスのドラッグ効果を実現するためのJavascript

この記事では、ログインボックスのドラッグ効果を実現するためのJavascriptの具体的なコードを参...

Selenium+testng を使用して Docker で Web 自動化を実現する方法

序文長い間さまざまな資料を読んで、ついに selenium+testng のパラメータ化の問題を解決...

Nginx に React プロジェクトをデプロイする方法の例

テストプロジェクト: react-demo react-demo プロジェクトをサーバーにクローンし...

Vue+echarts でプログレスバーのヒストグラムを実現

この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...

MySQL 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

Vue はシームレスなカルーセル効果を実現

この記事では、シームレスなカルーセル効果を実現するためのVueの具体的なコードを参考までに紹介します...

VMwareがモジュールディスクを早期に開けない場合の解決策の詳細な説明

VMWare (Virtual Machine ware) は、「仮想 PC」ソフトウェア会社です。...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

Nginx でファイル ホットリンク保護サービスを構築する方法を学ぶ例

序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...

ウェブデザイナーが持つべき資質と能力

Web デザインは、インターネットの出現後に誕生した新興の周辺産業です。 Web ページは店頭のよう...

CentOS6.8 は cmake を使用して MySQL5.7.18 をインストールします。

オンライン情報を参考に、cmakeを使用してCentOS6.8サーバーにMySQL5.7.18をイン...