記事
2024年5月17日

NVIDIA CUDA コンテナで「Repository does not exist」が出たら?NVIDIA にビルドを壊されないための対策

NVIDIA CUDA コンテナで「Repository does not exist」が出たら?NVIDIA にビルドを壊されないための対策

2022年10月に発表された NVIDIA の新しいコンテナイメージサポートポリシーは、CUDA コンテナイメージを日常の開発フローで利用している開発者にとって大きな課題となっています。イメージが EOL(サポート終了)を迎えると Docker Hub と NGC から削除され、それまで問題なく動いていたビルドがイメージレイヤーの欠落によって壊れてしまうためです。

エラーは次のような形で現れます。

Error response from daemon: manifest for nvidia/cuda:12.0.1 not found: manifest unknown: manifest unknown

古い NVIDIA コンテナイメージをプルしようとして「repository does not exist or may require 'docker login'」というエラーに遭遇し、頭を抱えた開発者は少なくありません。これは、イメージが EOL を迎えて削除されたために起こります。そのイメージに依存していたビルドは、そのまま動かなくなります。複雑なビルドパイプラインを持つプロジェクトや、古いバージョンの CUDA Toolkit に依存しているプロジェクトでは、特に深刻な影響が出ます。

さらに NVIDIA は、公開済みのタグを後から更新することもあります。これもビルドを壊す原因になります。

なぜこうなるのか

NVIDIA は2022年10月28日に、CUDA コンテナイメージの新しいサポートポリシーを発表しました。このポリシーは NVIDIA 側の運用を楽にする一方で、コンテナイメージに依存する開発者には影響を及ぼします。

NVIDIA のサポートポリシー

NVIDIA の新しいポリシーは、次のような課題への対応を目的としています。

  • セキュリティ: 古いイメージには未修正の脆弱性が含まれている可能性があり、セキュリティリスクとなります。
  • 持続可能性: ほとんど使われないイメージを大量に保持し続けることは、NVIDIA にとって負担が大きくなります。
  • 移行の停滞: 古いイメージが残っていると新しいバージョンへの移行が進まず、開発の妨げになります。

これらの主張には妥当な面もありますが、結果としてビルドは予期しないタイミングで壊れ、開発者が自分で制御できなくなってしまいます。

StableBuild でイメージをキャッシュし、ビルドを止めない

StableBuild は、Docker イメージを無期限にキャッシュするプラットフォームを提供することで、この問題を解決します。NVIDIA が公式リポジトリからイメージを削除・上書きしたあとでも、StableBuild を利用していればそのイメージにアクセスし、プルし続けられます。

仕組みは次のとおりです。

  • 不変の Docker ミラー: StableBuild は一度プルしたイメージを常に同じ内容で提供します。バージョンが変わるのは、利用者が自分で切り替えたときだけです。
  • マルチアーキテクチャ対応: 複数のアーキテクチャ向けに同じイメージを取得しておくため、後から別のアーキテクチャで実行しても問題なく動作します。

StableBuild を使えば、NVIDIA の EOL ポリシーによって公式リポジトリからイメージが削除されても、開発フローを止めずに済みます。

StableBuild に登録する

StableBuild には Community プランがあり、イメージのキャッシュ機能を無料で利用できます。NVIDIA のイメージ削除ポリシーによる混乱から開発フローを守るうえで、有力な選択肢になります。

今すぐ無料で StableBuild に登録して、コンテナイメージの提供状況が変わってもプロジェクトが影響を受けない状態にしましょう。