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

推薦する

Discuz! フォーラムに設定オプションを追加する方法

Discuz! フォーラムにはバックグラウンドで多くの設定オプションがあり、これらの設定オプションを...

nginx-naxsi ホワイトリストルールの詳細な説明

ホワイトリストルールの構文:基本ルール wl:ID [否定] [mz:[$URL:target_ur...

ビジネス HTML メール作成に関する提案

許可ベースの電子メール マーケティングにより、マーケティングとプロモーションのコストを大幅に削減でき...

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

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

MySQL でよく使用される SQL 文を表示する (詳細な説明)

#mysql -uroot -pパスワードを入力してくださいmysql> show full...

太字の <b> と <strong> の違いの分析

私たちウェブマスターは皆、ウェブサイトを最適化する際に記事内のキーワードを太字にすることが最適化に非...

ウェブレスポンシブレイアウトにおけるiframe適応の方法

問題<br />レスポンシブ レイアウトでは、iframe 要素に注意する必要があります...

Linux で Squid プロキシ サーバーを構築するための完全な手順

序文この記事では、Linux で Squid プロキシ サーバーを設定することに関する関連コンテンツ...

HTMLボタンを中央に配置する方法

HTML ボタン自体を中央に配置するにはどうすればよいでしょうか? このアイデアは簡単に見つかります...

Vue プロジェクトで垂直テーブルを 2 つの方法で実装するアイデアの分析

問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...

Centos8 の Django プロジェクトに nginx+uwsgi をデプロイするチュートリアル

1. 仮想環境virtualenvのインストール1. virtualenvをインストールするpip3...

アップロード画像コントロールを実現するネイティブ js

この記事の例では、アップロード画像コントロールを実装するためのjsの具体的なコードを参考までに共有し...

Centos7 で yum を使用して Ceph 分散ストレージをインストールするチュートリアル

目次序文yumソース、epelソースを設定するCephソースの設定Cephとそのコンポーネントをイン...

Squid を使用して http および https 用のプロキシ サーバーを構築する方法

nginx を導入した際に、フォワードプロキシの設定も nginx を使っていました。しかし、htt...

CentOS6 アップグレード glibc 操作手順

目次背景glibc 2.14をコンパイルするソフトリンクを変更するやっと背景テスト環境には Cent...