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

推薦する

ReactでのDOM操作の実装

目次前の単語使用シナリオ参照HTML要素クラスコンポーネント機能コンポーネント[DOMノードを親コン...

Vueコンポーネントは、写真やビデオをアップロードするためのサンプルコードをカプセル化します

まず依存関係をダウンロードします: cnpm i -S vue-uuid ali-oss画像フィール...

MySQL 8.0.17 解凍版のインストールと設定方法のグラフィックチュートリアル

インストール中に遭遇した問題を記録しておきますので、皆様のお役に立てれば幸いです。 1. ダウンロー...

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

MySQLは複数テーブル関連統計(サブクエリ統計)の例を実装します

この記事では、例を使用して、MySQL で複数テーブルの関連統計を実装する方法について説明します。ご...

ウェブカラーのコントラストと調和のテクニックの共有

色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...

Antdesign-vueとsortablejsを組み合わせて、2つのテーブルをドラッグして並べ替える機能を実現

目次成果を達成するsortablejs の紹介具体的な実装成果を達成する最初は、antdesign ...

MySQLで重複行を削除する方法

SQL文 /* MySQL で重複行を削除するいくつかの方法 ---Chu Minfei ---20...

MySQL の問題を解決する: MSVCR120.dll が見つからないため、コードの実行を続行できません

1. 問題MySQL の初期化時に発生する問題は、次のとおりです。 1. 「MSVCR120.dll...

CentOS7 で MySQL 5.7.24 をコンパイルしてインストールする詳細なチュートリアル

目次依存関係をインストールするブーストをインストールMySQLをコンパイルしてインストールする構成依...

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

JSでよく使われるデータ処理方法

目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...

間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

LinuxデバッガGDBの基本的な使い方の詳細な説明

目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...