Dockerの使い方(Ubuntu)| GPUSOROBAN

この記事では、GPUSOROBANでDockerを使う方法を紹介しています。


目次[非表示]

  1. 1.Dockerとは
  2. 2.GPUSOROBANとは
  3. 3.実行環境
  4. 4.事前確認
  5. 5.Dockerイメージの取得(docker pull)
  6. 6.コンテナを実行する(docker run)
  7. 7.コンテナ内の動作確認
  8. 8.コンテナを停止する(docker stop)
  9. 9.コンテナを再起動する(docker start)
  10. 10.コンテナ内でコマンドを実行(docker exec)
  11. 11.コンテナを削除する(docker rm)
  12. 12.Docker-composeを使う
  13. 13.コンテナからイメージを作成する(docker commit)
  14. 14.Dockerfileからイメージ作成する(docker build)
  15. 15.作成したDockerイメージをDockerHubへアップロード(docker push)
  16. 16.まとめ


Dockerとは

Dockerとは、コンテナ仮想化を用いたアプリケーションの実行環境です。

Dockerを使うことですぐに環境構築ができたり、環境の持ち運びが簡単になります。


GPUSOROBANとは

GPUSOROBANは1時間50円から使える業界最安級のGPUクラウドサービスです。

AWSやGCP、AzureのGPUクラウドと比較して50%~70%安い料金で、ハイスペックなNVIDIA GPUが使えます。

GPUSOROBANの詳細については、以下の公式サイトをご覧ください。


  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN


実行環境

GPUSOROBANでは、Dockerをプリインストールしているインスタンスを用意していますので、自身でDockerをインストールする必要がありません。


Dockerをプリインストールしているインスタンスを利用するには、インスタンス作成時に[ソフトウェアを選択]において、Dockerを選択してください。

docker


GPUSOROBANのインスタンス作成・接続方法については、以下の記事をご覧ください。


  会員登録~インスタンス作成手順 | GPUSOROBAN GPUSOROBANの会員登録からインスタンス作成・接続までの手順を詳しく解説する記事です。会員登録、電話番号認証、SSHキー作成、インスタンスの作成、キーの設置、ターミナルからのインスタンス接続までの流れを説明しています。 業界最安級GPUクラウド | GPUSOROBAN


※この記事ではJupyter Labを使用するため、ターミナルを使用している場合は、以下のコマンドでインスタンスに接続してください。

ssh -L 8888:localhost:8888 user@localhost -p 20122 -i .ssh\mykey.txt

インスタンスへ接続


※VScodeをお使いの場合は、Configファイルに[LocalForward 8888 localhost:8888]を追加してください。

VSCodeでインスタンスに接続


(VSCodeの使い方)

  VSCodeでインスタンスに接続 | 高速コンピューティング VSCodeを使用してGPUSOROBANインスタンスに接続する方法が紹介しています。記事では、VSCodeのインストール方法、VSCodeでインスタンスにSSH接続する手順、インスタンス内のファイル操作・ファイル転送方法などを説明しています。 業界最安級GPUクラウド | GPUSOROBAN


事前確認

この記事では、CUDA、cuDNN、PyTorchが入ったDockerコンテナを使用します。


CUDAは、NVIDIAドライバとの依存関係がありますので、インスタンスにプリインストールされているNVIDIAドライバのバージョンを確認します。


GPUSOROBANのインスタンスで、次のコマンドを実行し、NVIDIAドライバのバージョンを確認します。

nvidia-smi

nvdia-smi


NVIDIAドライバのバージョンが515であることが分かりました。


次の項でCUDA、cuDNN、PyTorchが入ったDockerイメージを選択していきますので、以下のページでNVIDIAドライバに合うCUDAのバージョンを確認しておきます。


  1. CUDA 12.2 Release Notes — cuda-toolkit-release-notes 12.2 documentation The Release Notes for the CUDA Toolkit. https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#:~:text=Table%202.%20CUDA%20Toolkit%20and%20Minimum%20Required%20Driver%20Version%20for%20CUDA%20Minor%20Version%20Compatibility


またDockerコンテナで保存したデータは、/var/lib/dockerのディレクトリに保存されます。またインスタンス作成時に選択したストレージの容量(100GB、500GB、1TB)が、このディレクトリに割り当てられますのでご留意ください。

df -h

df -h


Dockerイメージの取得(docker pull)

Dockerイメージとは、Dockerコンテナを作成するためのテンプレートファイルです。

Dockerイメージを実行すると、Dockerコンテナが作成されます。


docker pullコマンドを使い、公開レジストリであるDocker Hubから、Dockerイメージをダウンロードすることができます。


Docker Hub公式サイトにアクセスし、アカウントを作成します


  Docker https://hub.docker.com/


画面の指示に従い必要な情報を入力し[Sign Up]をクリックします。
これでDocker Hub用のアカウント作成は完了です。

※Docker Hubにログインしなくても、docker pullは使用できますが、
Docker Hubにおけるダウンロード率制限にかかることがありますので、Docker Hubにログインして利用することを推奨しています。

docker アカウント作成


Docker Hubにアクセスし、CUDA、cuDNN、PyTorchがセットで入ったDockerコンテナを選びます。


  Docker https://hub.docker.com/r/andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab


この記事ではNVIDIAドライバのバージョンにあうCUDAバージョンのイメージを選択しています。

[Docker Pull Command]からDockerイメージ名をコピーしておきます。

docker pull andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab


DockerHubでイメージをコピー


GPUSOROBANのインスタンスで次のコマンドを実行し、CLIからDocker Hubにログインします。
[Login Succeeded]の表示がでたら、ログインが完了です。

docker login -u <ユーザー名> -p <パスワード>

docker login -u -p


先ほどコピーしたコマンドを実行し、Dockerイメージを取得(Pull)します。

docker pull andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab

Dockerイメージを取得


次のコマンドを実行し、Pullしたイメージを確認します。

docker images

docker imagesコマンド


コンテナを実行する(docker run)

次のコマンドにより、コンテナを実行します。

docker run -it --gpus all --name pytorch-container -p 8888:8888 andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab /bin/bash

Docker


下記は、実行したコマンドの説明になります。

docker run andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab
コンテナを新しく作成し、起動します。

※andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_labは、前述のPullしたDockerイメージです。

-it bin/bash
コンテナ内でシェルを操作します。

--gpus all
コンテナにGPUを割り当てます。

-p 8888:8888 
ホストのポート8888をコンテナのポート8888にマッピングします。
ポート8888はJupyter Labのポート転送時に使用します。(Jupyter Labの起動方法は、後の項で紹介しています)

--name pytorch-container
作成するコンテナにpytorch-containerと名前をつけました。


コンテナ内の動作確認

コンテナ内で動作確認をします。


次のコマンドでNVIDIAドライバが認識できているか確認します。

nvidia-smi

コンテナ上でnvidia-smiコマンド


次のコマンドでCUDAを確認します。

nvcc -V

Docker


次のコマンドでPythonを起動します。

python3


次のコマンドでTorchをインポートします。

import torch


次のコマンドでPyTorchからGPUが認識できるか確認します。
Trueが返るとGPUが認識されています。

torch.cuda.is_available()

Docker


pythonインタプリタを終了する場合は、exit()コマンドを実行します。

exit()

pythonインタプリタから抜ける


コンテナから出る場合は、exitコマンドを実行します。

exit

コンテナから抜ける


コンテナを停止する(docker stop)

次のコマンドを実行し、コンテナを停止します。(pytorch-containerがコンテナ名にあたります)

docker stop pytorch-container

コンテナの停止


次のコマンドを実行し、Dockerが停止したことを確認します。
対象のコンテナが一覧に表示されていなければ、コンテナは停止しています。

docker ps

docker ps


全てのコンテナを停止するコマンドは以下のとおりです。

docker stop $(docker ps -aq)

全てのコンテナを停止するコマンド


コンテナを再起動する(docker start)

docker run を実行してしまうと新しくコンテナを作成してしまいますので、停止している既存のコンテナを起動するには docker start を使います。


次のコマンドを実行し、コンテナを再起動します。(pytorch-containerがコンテナ名にあたります)

docker start pytorch-container

docker start


次のコマンドを実行し、コンテナが起動したことを確認します。
[STATUS]に[UP]が表示されていれば、コンテナが起動しています。

docker ps

docker ps


コンテナ内でコマンドを実行(docker exec)

docker execコマンドでは、コンテナ内でコマンドを実行することができます。


コンテナを起動した状態で、次のコマンドを実行すると、コンテナ内でシェルの操作が可能になります。
(pytorch-containerがコンテナ名にあたります)

docker exec -it  pytorch-container /bin/bash

コンテナ内でコマンドを実行


また次のコマンドのようにコンテナ内でJupyter Labを実行することもできます。

docker exec -it  pytorch-container  jupyter lab --ip='*' --port=8888 --NotebookApp.token='' --NotebookApp.password='' --no-browser --allow-root


[Jupyter Server 2.7.3 is running at:http://localhost:8888/lab]の表示がされたら、Jupyter Labの起動が完了です。

Jupyterlabの起動


ブラウザの[アドレスバー]に”http://localhost:8888”を入力すると、Jupyter Labの画面が表示されます。

Jupyterlab


コンテナを削除する(docker rm)

コンテナを停止した状態で次のコマンドを実行し、コンテナを削除します。

docker rm pytorch-container

dockerコンテナの削除


全てのコンテナを表示して、削除したコンテナ名が表示されていないことを確認します。

docker ps -a

docker ps -a


全てのコンテナを削除する方法は以下のとおりです。

docker rm $(docker ps -aq)

docker rm $(docker ps -a -q)


Docker-composeを使う

Docker Composeとは、コンテナを効率的に操作するための機能です。


docker-compose.yamlファイルに、コンテナの複雑な設定をあらかじめ定義しておくことで、コンテナの起動時は[docker-compose up]の簡単なコマンドで実行できます。


docker-composeで使用するyamlファイルを開きます。

nano docker-compose.yml

nano docker-compose.yml


docker-composeファイル内に以下を貼り付けます。

version: '3.8'
services:
  pytorch-container:
    image: andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab
    container_name: pytorch-container
    ports:
      - "8888:8888"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    command: >
       bash -c 'jupyter lab --ip='*' --port=8888 --NotebookApp.token='' --NotebookApp.password='' --no-browser --allow-root'

貼り付けが完了したら、[Ctrl]+[S]キーで変更を保存し、[Ctrl]+[X]キーでファイルを閉じます。


下記はdocoker-compose.ymlの書式の説明になります。

version: '<docker-compose.ymlのバージョン>'
services:
  pytorch-container<コンテナ名>:
    image: <Dockerイメージ名>
    container_name: <コンテナ名>
    ports:
      - '<ホスト側のポート>:<コンテナ側のポート>'
    volumes:
      - <ホスト側のマウントポイント>:<コンテナ側のマウントポイント>
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: <コンテナに割り当てるGPUの数>
              capabilities: [gpu]
    command:<コンテナで実行するコマンド>


次のコマンドを実行し、コンテナを起動します。

docker compose up

docker compose up Jupyterlabの起動


コンテナ内でJupyter Labが自動で起動するように記述にしていますので、
ブラウザの[アドレスバー]に”http://localhost:8888/”を入力し、Jupyter Labを表示します。

Docker


コンテナを再起動する場合は、次のコマンドを実行します。

docker compose restart

docker compose restart


コンテナを削除する場合は、次のコマンドを実行します。

docker compose down

docker compose down


コンテナからイメージを作成する(docker commit)

Dockerでは、コンテナからイメージを作成できます。
別環境にイメージを持ち込んでコンテナを展開できるので、環境の移植が楽になります。

次のコマンドを実行し、コンテナからイメージを作成します。

docker commit pytorch-container jupyter-image:v1

docker commit pytorch-container jupyter-image:v1


(コマンドの説明)docker commit <Docker Hubのユーザ名>/<イメージ名>:<タグ名>
※ここではDocker Hubのユーザー名は省略しています。


次のコマンドを実行し、作成したイメージを確認します。

docker images

docker images


Dockerfileからイメージ作成する(docker build)

Dockerfileは、Dockerイメージを作成するための設計図のようなテキストファイルです。

作成後のDockerイメージは変更することができませんが、Dockerfileであれば変更できます。

Dockerfileを使い、細かいカスタマイズができるようになります。


まずDockerfileを作成します。

nano Dockerfile

nano Dockerfile


ファイルを開いたら以下を貼り付け、 [Ctrl]+[S]キーを押して保存し、[Ctrl]+[X]キーでファイルを閉じます。

FROM andersen9419/cuda11.7.1_cudnn8_ubu22_torch2.0_jupyter_lab
RUN pip install opencv-python

nanoエディター

(書式の説明)
FROM <ベースとなるイメージの選択>
RUN <コンテナ内で実行するコマンド>


次のコマンドを実行し、DockerfileからDockerイメージをビルドします。

docker build -t [アカウント名]/pytorch-opencv-image:v1 .

docker build -t nmsa10111/pytorch-opencv-image:v1 .

(コマンドの説明)
docker build -t <アカウント名>/ <イメージ名>:<タグ名> .
DockerイメージをDocker Hubにpushしない場合は、[<アカウント名>/]を省くことができます。
末尾の[.]は、Dockerfileのあるカレントディレクトリです。


イメージが作成できたら、下記のコマンドで確認できます。

docker images

Docker


次のコマンドでイメージからコンテナを起動してみます。

docker run -it --gpus all --name pytorch-opencv-container -p 8888:8888 <アカウント名>/pytorch-opencv-image:v1 /bin/bash

Docker


コンテナでPythonを起動します。

python3


OpenCVをimportし、続けてバージョンを確認します。

import cv2


cv2.__version__


Dockerfileに記述したOpenCVのインストールが既に完了していることがわかります。

Docker


作成したDockerイメージをDockerHubへアップロード(docker push)

docker pushコマンドを使って、作成したDockerイメージをDocker Hubへアップロードできます。


Docker Hubにログインします。

docker login -u <ユーザー名> -p <パスワード>

docker Hubログイン


次のコマンドでイメージを pushをします。

docker push <アカウント名>/pytorch-opencv-image:v1

Docker

(コマンドの説明)
docker push <Docker Hubのアカウント名>/<リポジトリ名>:<タグ名>


Docker HubのWEBサイトにアクセスすると、アップロードしたイメージが確認できます。

Docker


まとめ


この記事では、GPUSOROBANにおけるDockerの使い方を紹介しました。Dockerを使うことで環境構築や環境の移植が簡単になります。


本環境には、GPUSOROBANのインスタンスを使用しました。
GPUSOROBANは高性能なGPUインスタンスが低コストで使えるクラウドサービスです。


GPUSOROBANについて詳しく知りたい方は、以下の公式サイトをご覧ください。


  生成AIに最適なGPUクラウド「高速コンピューティング」|GPUSOROBAN GPUSOROBANの高速コンピューティングは、NVIDIAの高速GPUが業界最安級で使えるクラウドサービスです。NVIDIA A100を始めする高速GPUにより、画像生成AI、大規模言語モデルLLM、機械学習、シミュレーションを高速化します。 業界最安級GPUクラウド | GPUSOROBAN






MORE INFORMATION

GPUでお困りの方はGPUSOROBANで解決!
お気軽にご相談ください

10日間無料トライアル
詳しい資料はこちら
質問・相談はこちら