NVIDIA DockerイメージのGPGキー更新に関する備忘録
R&D チームの徳田(@dakuton)です。
今年のGWあたりにCUDAのGPG更新アナウンス(NVIDIA Technical Blog: Updating the CUDA Linux GPG Repository Key)がありました。記載に従い利用環境の反映作業をしてみたところ、特にDockerイメージ向けの反映については記事に触れられていない範囲でのハマリポイントがいくつかあることがわかったため、対策についてまとめておきます。
GPGキー更新アナウンスが出た背景
GPGキー(GNU Privacy Guardにて作成、リポジトリ管理者で共用する秘密鍵にて署名したIndexファイルを、利用者に配布する公開鍵にて検証させることで、配布元の正当性を確認できるようにするためのキー)に関するアップデートの目的
- 以前はCUDA以外の機械学習パッケージ(NVIDIA Machine Learning Repository: cuDNN, NCCL, TensorRTなど)を別リポジトリで配布していたが、CUDAリポジトリにこれらのパッケージが集約されたため、複数のリポジトリ(メンテナンス停止リポジトリ含む)で使いまわしている公開鍵を破棄したい
- Solution: Remove the NVIDIA machine learning repository entry, as it is no longer updated. Newer versions of cuDNN, NCCL, and TensorRT are available in the CUDA repository. に関連
- 詳細は本記事にて後述します
- CUDAで用いるGPGキーの公開鍵をパッケージ経由( cuda-keyring )で取得できるように対応
- keyringの由来のとおり、複数の公開鍵が配布対象となる場合がありえます
注意したい点
- ベースイメージのビルドキャッシュ状況によって、ビルド成功可否が異なる
- ベースイメージの種類によって、新しいGPGキーへの移行状況が異なる
- ベースイメージに含まれるcuDNNバージョンによって、新しいGPGキーと古いGPGキーの併用が必要な場合がある
1. ベースイメージのビルドキャッシュ状況によって、ビルド成功可否が異なる
2. ベースイメージの種類によって、新しいGPGキーへの移行状況が異なる
NVIDIA Docker公式イメージ( nvidia/cuda のバージョンタグが付与されているもの)のなかでも、新しいGPGキーに更新されているものとそうでないものが混在しています。
おおまかな目安として、Docker Hubのnvidia/cuda/tagsにて最新push日が2022/04/27よりも過去のイメージは未移行と考えたほうがよいでしょう。
例えば、Ubuntu かつ CUDA 11 + cuDNN 8 系統のイメージ(name=11.0.3-cudnn8-devel-ubuntu)においては、OSバージョン間で下記のような差分があります。(2022/05/17時点)
- Ubuntu 20.04, 16.04: GPGキー変更後のイメージがpush済み(ベースイメージを再度pullすることで解決可能)
- Ubuntu 18.04: GPGキー未更新
また、GPG未更新イメージの場合、 cuda-keyring パッケージをwget経由で更新する手順だと、下記のように該当するイメージにはwgetがインストールされていません。
3. ベースイメージに含まれるcuDNNバージョンによって、新しいGPGキーと古いGPGキーの併用が必要な場合がある
今回、NVIDIA Technical Blogにて案内のあった方法は、CUDAやcuDNNが比較的新しいバージョンにおける対応方法となります。
cuDNNなどの利用バージョンによっては別リポジトリ(NVIDIA Machine Learning Repository)のGPG更新状況を考慮する必要があります。
現在のリポジトリ登録状況や動作確認結果をもとにcuDNNバージョンごとの取得元をまとめると、下記のようになります。(種類や初心者におすすめの指標、基本的な手法を紹介 cuDNN 8についてはパッチバージョンで若干差があるため、分けて記載しています)
cuDNNバージョン | cuDNN取得リポジトリ | 2022/04/27 GPG更新対象? |
---|---|---|
>=8.0.5 | /compute/cuda/repos (CUDAと共通) | yes |
>=8.0.0, | /compute/machine-learning/repos | no |
/compute/machine-learning/repos | no |
以前は /compute/cuda/repos , /compute/machine-learning/repos で同じGPGキーを利用していましたが、2022/04/27のアップデートにより前者のCUDA用GPGキーのみ更新されています。
cuDNN 7以前を利用するイメージでは、更新前のGPGキーが現在も利用されているため、NVIDIA Technical Blogの記載( Remove the outdated signing key )を参考にGPGキー登録を削除すると、下記のようにNVIDIA Machine 種類や初心者におすすめの指標、基本的な手法を紹介 Learning Repository側でGPGエラーとなります。
上記の回避方法としては、NVIDIA Developer Forums(Invalid public key for CUDA apt repository)などで示されているとおりです。
Dockerfile追記方法(Debian, Ubuntu)
1,2,3を踏まえ、ローカルキャッシュ削除で対処できない場合のDockerfile追記方法をまとめておきます。(方式1,種類や初心者におすすめの指標、基本的な手法を紹介 方式2についてはどちらでも可)
cuDNN 7までの環境のほうがDockerfile追記が必要なケースが多いです。CUDA 11+cuDNN 8の組み合わせのイメージについては、多くはローカルキャッシュ削除で対応可能(ベースイメージ最新版のpullでOK、Dockerfile追記不要)となるものの、一部イメージについては利用側でDockerfile追記が必要となるケースも残っています。
NVIDIA Machine Learning Repository なし版/あり版がどちらを使うとよいか?迷う場合は、リポジトリ登録情報を確認するとよいでしょう。
- cuda.list のみ: NVIDIA Machine Learning Repository なし版
- cuda.list , nvidia-ml.種類や初心者におすすめの指標、基本的な手法を紹介 list どちらも含まれる: NVIDIA Machine Learning Repository あり版
NVIDIA Machine Learning Repository なし版(おもにcuDNN 8向け)
こちらのケースにおいては、古いGPGキーを残す必要はないため、NVIDIA Technical Blogの記載( Remove the outdated signing key )に従い削除しています。
コメント