開発を爆速にするキスモの機械学習基盤

こんにちは!キスモインターン生の岡野です。
キスモではインフラエンジニアとして働いています。

今回はキスモで新たに構築した機械学習基盤をご紹介します。

結論から言うと以下のようになったのですが、
ここに至る経緯と結果的に享受できるメリットを書いていきます。

f:id:Juju_62q:20180515134711p:plain

クラウド or オンプレ

インフラを構築していく場合、
まずこのあたりから選択することになると思います。

2005年のAWSのローンチを皮切りにして、
MicrosoftのAzure、GoogleGCP等が非常によく利用されるようになりました。

このような背景から、
IT分野はとにかくクラウドに移行すればいいのではないかという疑問も生まれます。
しかしながらオンプレミスにするメリットもまだまだ多く残っています。

そこでまず、クラウドとオンプレを比較します。

f:id:Juju_62q:20180515104101p:plain

クラウドのメリット

クラウドのメリットは"とにかく柔軟であること"
これに尽きると思います。

クラウドを利用する場合、資源はクラウドの提供ベンダが持つため、
ユーザは必要なときに必要な分の資源を利用することができます。
また、使った分だけお金を払う従量課金制であることも大きな特徴です。

このような特徴から、

  • どこまで大きくなるかわからないシステム
  • 時間によってアクセス数が大幅に増減するWebサービス
  • たまにドカっと使うような機械学習の計算資源

等には非常に適しています。

オンプレミスのメリット

オンプレのメリットは "お金を気にせずに利用できる" という部分になると思います。
また、ハードウェアの選定が自由であるというのも大きな特徴になってきます。

結果として、

  • トラフィックがめちゃめちゃシビアなシステム
  • 安定してアクセスが期待できるシステム
  • 薄利多売のビジネスモデルを持つシステム

にはオンプレミスはまだまだ根強く使われています。

キスモでの選択

キスモでは、計算資源としてオンプレミスを利用することにしました。

理由としては

  • 性能の高い計算資源をすでに持っている
  • Kaggleと業務で断続的に学習が行われている
  • コンサル業務なのでクライアントに応じて多くのアプローチを試す必要がある
  • 計算資源として利用するために使用量の変化は人員の増加速度に依存し、むちゃくちゃ高速というわけではない

というものです。

なお、WebサービスAWSを利用しています。

キスモの開発基盤で満たしたいこと

次に、オンプレミスをどのように利用していくかというところを考えていきます。
キスモでのインフラに対する要求と対応方法を下表にまとめています。

要求 対応方法
「やってみたい」がすぐ試せる コンテナ技術の利用
インフラ基盤を気にしなくて良い Kubernetes, etcdを利用した資源のクラスタ
開発にかかる時間やストレスの軽減 Rancherを利用してGUIで利用
どこでも自由に開発ができる IP-VPNを利用した通信路の確保

アーキテクチャについて

再掲載となりますが、結果として以下のようなインフラとなりました。

f:id:Juju_62q:20180515134711p:plain

各技術の概要

クラスタ化について

クラスタリングetcdというKVSを利用してRancher経由で行われています。
これにより、複数の計算資源の構成が一元管理されるほか、通信路も確保されます。

複数の計算資源をまとめて扱うことができるため、
開発者はどの計算資源を使うかを悩む事なく学習を行うことができます。
また、クラスタ化されているからこそ、
必要に応じて容易に計算資源を追加できるようになっています。

Kubernetesについて

環境を簡単に作っては壊してというところを実現するために
コンテナ技術(Docker)を利用しています。

しかし、Dockerを動かすためにどこにメモリやGPUの余裕があるのかを
開発者にいちいち考えさせるのは得策ではないと考えています。

そこで資源管理をある程度作業から切り離すために、
コンテナオーケストレーションツールとしてKubernetesを利用しています。

また、Kubernetesに計算資源を追加する際にラベルをつけ、
開発者は使いたいGPUを指定して学習することができます。

Rancherについて

キスモではKubernetesWebサービスを運用しているわけではありません。
結果として、Kubernetesの中で使いたい機能は比較的少ないです。
それでも慣れるまでそこそこの時間的コストがかかります。

そこで、キスモではKubernetesの管理にRancherを利用しています。
Rancherを利用することで開発者はGUIKubernetesを操作できます。
また、資源の管理状態が一目で確認できるようになるので、
管理者としてもかなり扱いやすくなっています。

VPNについて

キスモでは役員2人が常時リモートで働いているほか、
必要に応じてリモートで働くことを認めています。

今回は計算資源をオンプレミスに配置しているため、
ここに対して外部からアクセスできるようにする必要がありました。

そこで、端末とオフィスのルータの間でIP-VPNを設定し、
何処からでもセキュアに計算資源へアクセスできるようにしています。

得られたメリット

これらの技術を組み合わせてインフラを構築したことで得られたメリットは、

  • コンテナ技術を利用するため得られる、ユーザおよびプロジェクトごとの独立性
  • コンテナならではのポータブルで軽快な実行環境
  • どの計算資源に空きがあるか考えなくても良い簡単さ
  • どのコンテナからでも共通の資源にアクセスできる利便性
  • インターネットさえあれば何処からでも作業ができる快適さ
  • Kubernetesの利用により得られるスケーラビリティ

です。

今後の拡張

MAASを利用した構成の自動管理を行い、
ほとんど何もせずともクラスタに資源を追加できるようにしたいと考えています。

そのほか、AWSに関してもInfrastracture as Codeをきちんと意識して
社内で利用している環境の透明化を目指します。

その後、AWSとオンプレミスの資源をうまく連携させ、
何処の資源も自由に使うことのできるインフラを目指します!

おわりに

今回は技術的な側面からキスモのインフラについて記述しました。

自分は今後もキスモの労働環境整備に努めます。
まとまったらまた技術に関する情報を発信しますので
今後ともよろしくお願いします!

 

もっとキスモのことを知りたい方は
こちらをご覧ください!

www.kysmo.tech