こんにちは、ガロガロニーです。本日は機械学習システムにDockerを採用するメリットを4つ紹介します。
Dockerとは
Dockerとは、Docker社が開発しているコンテナ型仮想化のためのプラットフォームです。Dockerを使うことで、アプリケーションの開発環境構築や実行、配布などを行うことができます。コンテナ型仮想化では、ホストOSのDocker Engine上でコンテナが作成され、アプリケーションを実行することができます。コンテナは仮想マシンと異なり、ゲストOSというものがありません。ゲストOSを動作させる必要がないため、コンテナの容量を軽量に抑えることができ、起動・停止の動作が早いというという特徴があります。また、各コンテナは独立したソフトウェアスタックとなっており、Docker Engineさえ入っていれば、どの環境でも同じように動作させることができます。
機械学習システムの運用とモデル改善
機械学習システムの運用を続けていくと、必ず予測のズレや精度の劣化が発生します。環境は日々変化しており、その変化に応じて発生するデータも変わり、過去にない特異的なデータが新たに発生したり、データの傾向が大きく変わったりするためです。そこで、業務環境やデータの変化に合わせ、モデルを改善していく作業が継続的に発生します。つまり、機械学習システムを運用していくためには、既存のシステム環境に影響を及ばさずに、モデルを効率的に改善しデプロイできる仕組みが必要ということになります。
Docker×機械学習システムの相性の良さ
機械学習システムを継続的に運用していくためには、Dockerとの相性が抜群に良いです。Dockerを機械学習システムに採用した場合のメリットを4つ紹介したいと思います。
メリット1 モデル実行の再現性
一般的な機械学習のシステムでは、開発環境、検証環境、本番環境といった環境ごとに、それぞれモデルの実行環境を構築するケースが多いと思います。もし仮想マシンを使った場合、環境構築の過程でインストールしたライブラリのバージョン等に差異が出ることにより、開発環境では動いていたモデルが、検証環境では動作しなくなる可能性があります。
Dockerの仮想型コンテナの場合、モデルの動作に必要なライブラリなどは、全てDockerイメージというコンテナ作成の元になるファイルシステムにまとまっており、基本的には同じDockerイメージからコンテナを起動する限り、環境が変わっても同じように動作を再現することができます。
メリット2 機能追加・改善のしやすさ
機械学習モデルを継続的に改善していく中で、機能追加の要件が発生することがあります。この場合もDockerを使えば、各コンテナが独立したソフトウェアスタックになるため、それぞれに対して機能要件を設定することができます。例えば、異なるフレームワークで作成された機械学習の追加機能を一つのアプリケーションで共有するなども、Dockerを使えば実現しやすくなります。
メリット3 条件の異なる環境でのモデル並行運用
機械学習案件が複数発生した場合、案件ごとに条件の異なる環境を整備しなければならないことがあります。システムを導入するたびに基盤(サーバ)を構築することは可能ですが、コスト面から困難なケースも多いと思います。そういった場合でもDockerを使えば、一つの基盤にコンテナを複数配置することができ、各案件のモデルを並行運用することができます。これも 各コンテナが独立したソフトウェアスタックになっているため、実現することができます。なお複数コンテナの管理はDocker ComposeやKubernetesなどを用いることで解決できます。
メリット4 本番環境へのデプロイが容易
DockerでビルドしたイメージをDockerHubなどのレジストリサービスで管理しておけば、どの環境に対しても、イメージとしてアプリと環境をすぐに用意しアップロードすることができます。プライベートなレジストリサービスについても、GCPが提供しているGoogle Container RegistryやAzureが提供しているAzure Container Registry等を使うことができます。このように作成した機械学習アプリケーションを簡単に本番環境へデプロイすることができます。
まとめ
本日は機械学習システムにDockerを採用するメリットを4つ紹介しました。 コンテナベースのシステム構築はまだ完全に浸透しきれていないため、導入に躊躇している組織も多いと思います。今回は機械学習システムに関する話を中心に行いましたが、一般的なシステムでも十分メリットが大きいと思います。Dockerをシステムに採用する際に、この記事が少しでも役に立つと嬉しいです。それではまた!
コメント