Dockerの使い方(Ubuntu)| GPUSOROBAN
この記事では、GPUSOROBANでDockerを使う方法を紹介しています。
目次[非表示]
- 1.Dockerとは
- 2.GPUSOROBANとは
- 3.実行環境
- 4.事前確認
- 5.Dockerイメージの取得(docker pull)
- 6.コンテナを実行する(docker run)
- 7.コンテナ内の動作確認
- 8.コンテナを停止する(docker stop)
- 9.コンテナを再起動する(docker start)
- 10.コンテナ内でコマンドを実行(docker exec)
- 11.コンテナを削除する(docker rm)
- 12.Docker-composeを使う
- 13.コンテナからイメージを作成する(docker commit)
- 14.Dockerfileからイメージ作成する(docker build)
- 15.作成したDockerイメージをDockerHubへアップロード(docker push)
- 16.まとめ
Dockerとは
Dockerとは、コンテナ仮想化を用いたアプリケーションの実行環境です。
Dockerを使うことですぐに環境構築ができたり、環境の持ち運びが簡単になります。
GPUSOROBANとは
GPUSOROBANは1時間50円から使える業界最安級のGPUクラウドサービスです。
AWSやGCP、AzureのGPUクラウドと比較して50%~70%安い料金で、ハイスペックなNVIDIA GPUが使えます。
GPUSOROBANの詳細については、以下の公式サイトをご覧ください。
実行環境
GPUSOROBANでは、Dockerをプリインストールしているインスタンスを用意していますので、自身でDockerをインストールする必要がありません。
Dockerをプリインストールしているインスタンスを利用するには、インスタンス作成時に[ソフトウェアを選択]において、Dockerを選択してください。
GPUSOROBANのインスタンス作成・接続方法については、以下の記事をご覧ください。
※この記事ではJupyter Labを使用するため、ターミナルを使用している場合は、以下のコマンドでインスタンスに接続してください。
※VScodeをお使いの場合は、Configファイルに[LocalForward 8888 localhost:8888]を追加してください。
(VSCodeの使い方)
事前確認
この記事では、CUDA、cuDNN、PyTorchが入ったDockerコンテナを使用します。
CUDAは、NVIDIAドライバとの依存関係がありますので、インスタンスにプリインストールされているNVIDIAドライバのバージョンを確認します。
GPUSOROBANのインスタンスで、次のコマンドを実行し、NVIDIAドライバのバージョンを確認します。
NVIDIAドライバのバージョンが515であることが分かりました。
次の項でCUDA、cuDNN、PyTorchが入ったDockerイメージを選択していきますので、以下のページでNVIDIAドライバに合うCUDAのバージョンを確認しておきます。
またDockerコンテナで保存したデータは、/var/lib/dockerのディレクトリに保存されます。またインスタンス作成時に選択したストレージの容量(100GB、500GB、1TB)が、このディレクトリに割り当てられますのでご留意ください。
Dockerイメージの取得(docker pull)
Dockerイメージとは、Dockerコンテナを作成するためのテンプレートファイルです。
Dockerイメージを実行すると、Dockerコンテナが作成されます。
docker pullコマンドを使い、公開レジストリであるDocker Hubから、Dockerイメージをダウンロードすることができます。
Docker Hub公式サイトにアクセスし、アカウントを作成します
画面の指示に従い必要な情報を入力し[Sign Up]をクリックします。
これでDocker Hub用のアカウント作成は完了です。
※Docker Hubにログインしなくても、docker pullは使用できますが、
Docker Hubにおけるダウンロード率制限にかかることがありますので、Docker Hubにログインして利用することを推奨しています。
Docker Hubにアクセスし、CUDA、cuDNN、PyTorchがセットで入ったDockerコンテナを選びます。
この記事ではNVIDIAドライバのバージョンにあうCUDAバージョンのイメージを選択しています。
[Docker Pull Command]からDockerイメージ名をコピーしておきます。
GPUSOROBANのインスタンスで次のコマンドを実行し、CLIからDocker Hubにログインします。
[Login Succeeded]の表示がでたら、ログインが完了です。
先ほどコピーしたコマンドを実行し、Dockerイメージを取得(Pull)します。
次のコマンドを実行し、Pullしたイメージを確認します。
コンテナを実行する(docker run)
次のコマンドにより、コンテナを実行します。
下記は、実行したコマンドの説明になります。
コンテナ内の動作確認
コンテナ内で動作確認をします。
次のコマンドでNVIDIAドライバが認識できているか確認します。
次のコマンドでCUDAを確認します。
次のコマンドでPythonを起動します。
次のコマンドでTorchをインポートします。
次のコマンドでPyTorchからGPUが認識できるか確認します。
Trueが返るとGPUが認識されています。
pythonインタプリタを終了する場合は、exit()コマンドを実行します。
コンテナから出る場合は、exitコマンドを実行します。
コンテナを停止する(docker stop)
次のコマンドを実行し、コンテナを停止します。(pytorch-containerがコンテナ名にあたります)
次のコマンドを実行し、Dockerが停止したことを確認します。
対象のコンテナが一覧に表示されていなければ、コンテナは停止しています。
全てのコンテナを停止するコマンドは以下のとおりです。
コンテナを再起動する(docker start)
docker run を実行してしまうと新しくコンテナを作成してしまいますので、停止している既存のコンテナを起動するには docker start を使います。
次のコマンドを実行し、コンテナを再起動します。(pytorch-containerがコンテナ名にあたります)
次のコマンドを実行し、コンテナが起動したことを確認します。
[STATUS]に[UP]が表示されていれば、コンテナが起動しています。
コンテナ内でコマンドを実行(docker exec)
docker execコマンドでは、コンテナ内でコマンドを実行することができます。
コンテナを起動した状態で、次のコマンドを実行すると、コンテナ内でシェルの操作が可能になります。
(pytorch-containerがコンテナ名にあたります)
また次のコマンドのようにコンテナ内でJupyter Labを実行することもできます。
[Jupyter Server 2.7.3 is running at:http://localhost:8888/lab]の表示がされたら、Jupyter Labの起動が完了です。
ブラウザの[アドレスバー]に”http://localhost:8888”を入力すると、Jupyter Labの画面が表示されます。
コンテナを削除する(docker rm)
コンテナを停止した状態で次のコマンドを実行し、コンテナを削除します。
全てのコンテナを表示して、削除したコンテナ名が表示されていないことを確認します。
全てのコンテナを削除する方法は以下のとおりです。
Docker-composeを使う
Docker Composeとは、コンテナを効率的に操作するための機能です。
docker-compose.yamlファイルに、コンテナの複雑な設定をあらかじめ定義しておくことで、コンテナの起動時は[docker-compose up]の簡単なコマンドで実行できます。
docker-composeで使用するyamlファイルを開きます。
docker-composeファイル内に以下を貼り付けます。
貼り付けが完了したら、[Ctrl]+[S]キーで変更を保存し、[Ctrl]+[X]キーでファイルを閉じます。
下記はdocoker-compose.ymlの書式の説明になります。
次のコマンドを実行し、コンテナを起動します。
コンテナ内でJupyter Labが自動で起動するように記述にしていますので、
ブラウザの[アドレスバー]に”http://localhost:8888/”を入力し、Jupyter Labを表示します。
コンテナを再起動する場合は、次のコマンドを実行します。
コンテナを削除する場合は、次のコマンドを実行します。
コンテナからイメージを作成する(docker commit)
Dockerでは、コンテナからイメージを作成できます。
別環境にイメージを持ち込んでコンテナを展開できるので、環境の移植が楽になります。
次のコマンドを実行し、コンテナからイメージを作成します。
(コマンドの説明)docker commit <Docker Hubのユーザ名>/<イメージ名>:<タグ名>
※ここではDocker Hubのユーザー名は省略しています。
次のコマンドを実行し、作成したイメージを確認します。
Dockerfileからイメージ作成する(docker build)
Dockerfileは、Dockerイメージを作成するための設計図のようなテキストファイルです。
作成後のDockerイメージは変更することができませんが、Dockerfileであれば変更できます。
Dockerfileを使い、細かいカスタマイズができるようになります。
まずDockerfileを作成します。
ファイルを開いたら以下を貼り付け、 [Ctrl]+[S]キーを押して保存し、[Ctrl]+[X]キーでファイルを閉じます。
(書式の説明)
FROM <ベースとなるイメージの選択>
RUN <コンテナ内で実行するコマンド>
次のコマンドを実行し、DockerfileからDockerイメージをビルドします。
(コマンドの説明)
docker build -t <アカウント名>/ <イメージ名>:<タグ名> .
DockerイメージをDocker Hubにpushしない場合は、[<アカウント名>/]を省くことができます。
末尾の[.]は、Dockerfileのあるカレントディレクトリです。
イメージが作成できたら、下記のコマンドで確認できます。
次のコマンドでイメージからコンテナを起動してみます。
コンテナでPythonを起動します。
OpenCVをimportし、続けてバージョンを確認します。
Dockerfileに記述したOpenCVのインストールが既に完了していることがわかります。
作成したDockerイメージをDockerHubへアップロード(docker push)
docker pushコマンドを使って、作成したDockerイメージをDocker Hubへアップロードできます。
Docker Hubにログインします。
次のコマンドでイメージを pushをします。
(コマンドの説明)
docker push <Docker Hubのアカウント名>/<リポジトリ名>:<タグ名>
Docker HubのWEBサイトにアクセスすると、アップロードしたイメージが確認できます。
まとめ
この記事では、GPUSOROBANにおけるDockerの使い方を紹介しました。Dockerを使うことで環境構築や環境の移植が簡単になります。
本環境には、GPUSOROBANのインスタンスを使用しました。
GPUSOROBANは高性能なGPUインスタンスが低コストで使えるクラウドサービスです。
GPUSOROBANについて詳しく知りたい方は、以下の公式サイトをご覧ください。