Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

Docker

Dockerは、コード、ライブラリ、モデルの重みをコンテナイメージにパッケージ化します。コンテナイメージは、ノートPC、GPUサーバー、CIランナー、エッジデバイスで同じように実行できます。

Dockerは、コンテナ内でアプリケーションを構築、共有、実行するためのオープンソースプラットフォームです。コンテナは、コード、ライブラリ、システムパッケージを含む独自のファイルシステムを持つ分離されたプロセスであり、ホストのオペレーティングシステムカーネルを共有します。後にDocker, Inc.へ社名変更するdotCloudが2013年3月にオープンソース化し、コマンドラインツール、レイヤー型イメージ形式、パブリックレジストリによって、Linuxコンテナは開発者にとって日常的なツールになりました。機械学習では、Dockerイメージに正確なPythonバージョン、CUDAライブラリ、PyTorchビルド、モデルの重みを固定できるため、モデルはノートPC、GPUサーバー、継続的インテグレーションランナー、エッジデバイスのいずれでも同じように動作します。

Dockerの仕組み#

Dockerfileには、イメージを構築する手順として、開始点となるベースイメージ、パッケージをインストールするコマンド、コピーするファイル、起動時に実行するコマンドを記述します。各RUN、COPY、ADD命令は読み取り専用レイヤーを追加します。命令または入力ファイルのいずれかが変更されるまで、次回のビルドではキャッシュ済みレイヤーが再利用されます。そのため、早い段階でインストールした依存関係はキャッシュに残り、アプリケーションコードは数秒で再ビルドできます。イメージは、レイヤーの積層とメタデータで構成されます。コンテナは、イメージの上に薄い書き込み可能レイヤーを追加した実行インスタンスです。このレイヤーは、データをマウント済みボリュームに保存しない限り、コンテナとともに削除されます。

dockerコマンドは、バックグラウンドデーモンであるDocker Engineと通信し、各コンテナをcontainerdと低レベルのruncランタイムに引き渡します。これらはLinuxの名前空間を使ってコンテナのプロセス、ネットワーク、ファイルシステムを分離し、cgroupsでCPUとメモリを制限します。イメージは、Docker Hub、GitHub Container Registry、NVIDIA NGC、各クラウドプロバイダー独自のレジストリなどを通じて共有されます。イメージはOpen Container Initiativeの形式に準拠しているため、Podman、containerd、Kubernetesで変更せずに実行できます。

Ultralyticsは、CUDA GPU、CPU、ARM64ボード、NVIDIA Jetsonデバイス、AMD GPUなど、ハードウェアターゲットごとに公式Dockerイメージを公開しています。各イメージには再現可能なビルドのため、Ultralyticsのリリース番号もタグ付けされています。以下で使用する軽量なlatest-pythonイメージには、Python、PyTorch、ultralyticsパッケージ、YOLO26 nanoの重みがすでに含まれているため、プロジェクトのDockerfileには独自のコードだけを追加します。

# Official Ultralytics CPU image with Python, PyTorch, ultralytics, and yolo26n.pt
FROM ultralytics/ultralytics:latest-python

# Install extra dependencies in their own layer, cached until requirements.txt changes
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy the application last, so code edits rebuild only this layer
COPY app.py .

# Command every container runs when it starts
CMD ["python", "app.py"]

docker build -t yolo-app .は、このファイルと同じ場所にあるファイルをイメージにまとめ、docker run --rm yolo-appはそのイメージからコンテナを起動します。イメージをレジストリにプッシュすれば、ほかのマシンでも同一の環境をプルして実行できます。たとえば、モデルサービング APIや夜間の推論ジョブとして利用できます。

機械学習におけるDocker#

コンテナからGPUへアクセスするには、NVIDIA Container Toolkitを使用します。NVIDIAドライバーはホスト上に置き、イメージにはCUDAのユーザー空間ライブラリのみを含めます。これらのライブラリはドライバーでサポートされている必要があります。LinuxではDocker 28.2以降でCDIがデフォルトで有効になっているため、--device nvidia.com/gpu=allでGPUをCDIデバイスとして要求できます。これにより、ホストでsystemdを再読み込みした際にGPUアクセスを失うことがある旧式の--gpus allフラグと異なり、長時間稼働するコンテナでもGPUアクセスを維持できます。

学習では、ほかに2つの設定が重要です。PyTorchのデータローダーワーカーは、共有メモリ/dev/shmを介してバッチを学習プロセスに渡します。Dockerではこのメモリがデフォルトで64 MBに制限されるため、学習コンテナでは--ipc=hostまたは、より大きな--shm-sizeを指定します。データセットと出力はマウント済みボリュームに保存してください。コンテナ内にチェックポイントを書き込む学習では、コンテナを削除するとチェックポイントも失われます。latestの代わりにリリースタグまたはイメージダイジェストを固定すると、分散学習ジョブやモデルデプロイで、すべてのマシンに同じイメージを使用できます。NVIDIA Triton Inference Serverなどの推論サーバーも、Vertex AIなどのマネージドサービスも、モデルをコンテナイメージとして実行します。

Docker、仮想マシン、Kubernetesの比較#

  • 仮想マシン: ハイパーバイザーがハードウェアをエミュレートし、各VMは独自のゲストカーネルを起動します。これによりワークロードをより強力に分離でき、任意のゲストOSを実行できますが、VMごとにOSイメージ全体が必要になり、起動も遅くなります。コンテナはホストのLinuxカーネルを共有するため、macOSおよびWindows上のDocker Desktopでは、軽量なLinux VM内でコンテナを実行します。
  • Docker Compose: 推論API、キャッシュ、メトリクスコレクターなど、1台のホスト上で連携して動作する複数のコンテナを定義します。
  • Kubernetes: クラスター全体にコンテナをスケジュールし、失敗したコンテナを再起動し、トラフィックに応じてレプリカ数を調整します。Kubernetes 1.24では、Docker Engine用の組み込みアダプターdockershimが削除されたため、クラスターはcontainerdまたはCRI-Oを通じてコンテナを実行します。Dockerでビルドしたイメージも標準のOCIイメージであるため、そのまま実行できます。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

AIの未来を一緒に築きましょう!

機械学習の未来に向けた歩みを始めましょう