はじめに
私は現在、大学院の修士2年生の学生です。4月になり新しく研究室に入ってくる人がいるタイミングで、研究室内でこれまでの古い研究環境から、Dockerを使った新しい環境にしようという動きが出てきました。今まさに色々調べている段階なのですが、どういう構成で環境を構築することになったのか、また研究室でDockerを使用するとどのようないいことがあるのか、ということをお話ししていこうと思います。
研究環境の全体像
この全体像は新入生向けに作ったもので、Windowsを使っていたり、Jupyterを使っていたりするのですが、参考になるかもしれないので一応載せておきます。
研究室でDockerを使用する主なメリット
-
環境構築が楽
今までは環境構築が大変でした(Python入れて、Tensorflow入れて、さらにGPUを使うのであればさらに色々しないと動かないみたいな🤮)
それをDockerを使えば,コマンド一つでこれら全ての設定を良い感じに行なってくれます。 -
実行環境を簡単に共有できる
例えば、先輩のソースコードをGitHubなどからとってきて実行したいみたいな場面は研究室ではそこそこあると思います。これまでは、Pythonやライブラリのバージョンまではすぐに再現することができませんでした。そのため、バージョンなどに起因するエラーが発生して詰まるといった問題が発生したりしていました。これもDockerを使えば,環境を文書化して共有することができ,簡単に全く同じ環境を再現することができます。 -
GPUを搭載したパソコンを複数人で使う場合に、CUDAのバージョンなどを合わせなくて良い
私の研究室では、GPUを搭載しているパソコンは複数人で使うことが多いのですが、その際に誰かが1年前に入れたCUDAのバージョンに皆が合わせないといけないみたいな状態が生まれていました。このような問題もDockerを使えば、ドライバをダウンロードすればそれぞれの人が、好きなバージョンのCUDAを使用することができ、平和になるのではないかと考えています。
技術のざっくりとした説明
-
WSL2(Windows Subsystem for Linux)
Windows上で、Linuxを利用することができるものです。純粋なLinuxカーネルを仮想マシン上で動作させています。DockerをWindowsで使う場合、WSL2を使用しなくても使うことはできますが、将来的にGPUを積んだ計算用のパソコンを使用する際には、Linuxを使うことになるので、どうせなら最初から同じ環境でやった方がいいということで使っています。 -
Docker
何番煎じかという感じですが、コンテナ型の仮想化サービスを提供しています。以下の図がDockerの構成を表している.それぞれの用語の説明をすると,
- Dockerホスト
Dockerが動作している仮想マシン(今回の場合はWSL2にあたる?) - Dockerサーバー
コンテナとDockerイメージを管理するサーバ - Dockerクライアント
利用者がDockerを使用するために操作するコマンドやツール群 - Dockerイメージ
コンテナを立ち上げるために必要なミドルウェアなどの設定やコマンドが、ひとまとめになったテンプレート(Ubuntu, Python, Tensorflow…) - コンテナ
Dockerイメージをもとに作られた仮想環境のこと.これが,Pythonなどを実行する環境になる. - Dockerレジストリ(DockerHub等)
Dockerのイメージが公開されているサイト.フリーのソフトウェアのイメージをはじめ、個人で作成したイメージも公開されている.Dockerコマンドなどから簡単にダウンロードすることができる.
- Dockerホスト
-
Jupyter
新入生向けの環境を考えているので今回はなるべく、環境構築の複雑さを省くためにブラウザから操作できるJupyterを使用してもらうことを考えています。