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 テーブル フィールドの時間設定のデフォルト値

推薦する

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

Dockerコンテナでルート権限を取得する方法

まず、コンテナが稼働している必要がありますコンテナのCONTAINER IDは、sudo docke...

HTML テーブルレイアウト例の説明

HTML ドキュメント内の要素は次々に配置され、ブロックレベル要素の前後に改行が追加されるだけで、合...

MySQL 8.0.12 の詳細なインストールおよびアンインストール チュートリアル

1. MySQL 8.0.12 バージョンのインストール手順。 1. ダウンロードhttps://d...

MySQL デッドロックのトラブルシューティングの全プロセス記録

【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...

mysql5.7 でユーザーの初期パスワードを変更する方法

ユーザーが初めて MySQL データベースをインストールするとき、初期のルート パスワードを変更する...

MySQL データベースのホットスタンバイにおける問題点の分析

以前、MySQL データベースのデュアルマシン ホット スタンバイの設定方法を紹介しました。ご興味の...

Nginx+Tomcat 負荷分散クラスタのインストールと構成のケースの詳細な説明

目次序文1. Nginx+Tomcat 2. Nginxサーバーを構成する3. Tomcatアプリケ...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

MySql インデックスを表示および最適化する方法

MySQL はハッシュ インデックスと Btree インデックスをサポートしています。 InnoDB...

MySQL に接続されている IP アドレスを表示する方法の例

具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...

LinuxシステムにISOファイルをインストールする方法

Linux システムで iso ファイルをインストールするにはどうすればいいですか?インストール手順...

HTML webpackプラグインの使用に関する簡単な分析

html-webpack-pluginプラグインを使用してページを開始すると、htmlページをメモリ...

Vue3 リストインターフェースデータ表示の詳細

目次1. リストインターフェースの表示例2. データを表示する2.1. コンポーネントがリストに表示...

Node.jsミドルウェアの仕組みの詳細な説明

目次Express ミドルウェアとは何ですか? Expressミドルウェアを作成するための要件Exp...