IDCF テックブログ

IDCF テックブログ

クラウド・データセンター・ビッグデータを提供するIDCフロンティアの公式テックブログ

マルチクラウド×DockerでDeepLerning環境の構築

こんにちは藤城(@tafujish)です。今回は事例紹介をしたいと思います。
GPU担当として関わらせてもらった案件で、とても興味深かったので是非紹介したいなとお客様へ相談したところ快諾いただきました。

何が面白いかと言うと、DeepLearningでの利用を目的としたケースで、マルチクラウド化を実現しているというところです。今回はマルチクラウドに焦点を当てたいため、IDCFクラウドの導入事例ではなくこちらのブログで取り上げて、なぜマルチクラウドなのか、どのような構成なのかをヒアリングさせてもらった内容を私の方から紹介していきたいと思います。

今回のかたちでの掲載の承諾と情報提供くださったリクルートテクノロジーズ様に感謝申し上げます。

f:id:ynagaoka:20180921110844p:plain

そもそもの課題

それまでの旧環境としては、海外のクラウドサービスを利用していたが、DeepLearningを活用したサービスが増えるなか、学習のために大量のGPUが必要になっていきます。すると、インフラコストの中でGPUのコストが大きくなっていくのは避けられませんでした。そこで、コストパフォーマンス良く使えるGPU環境の検討をはじめました。

また、この検討のなかで見えてきたのが、GPU環境のデプロイにクラウドサービス側で提供されるテンプレート機能を利用していたため、環境の移行がやりにくいという課題でした。

どんなサービスが動いているか

a3rt.recruit-tech.co.jp

A3RT(アート)というリクルートグループ内で使われているコグニティブなAPIを無償公開しています。リリース当初から話題になっていたのでご存知の方も多いと思います。このA3RTの中での学習にGPUを大量に利用しています。

またA3RTのほかにも、R&Dの開発環境の中でも、開発者の方がGPUを自由に利用することができ、ここでも学習用途での利用にGPUを利用しており、GPUの使用量は多くなる一方です。

新環境検討のプロセス

上述のとおり、コストパフォーマンス良く使える環境の検討では、各社サービスを試用し比較評価しました。

評価方法としては、既存の環境で利用してきた学習プログラムを実行し、その性能と料金からコストパフォーマンスを比較します。この中で、GPUの世代やモデルも変えて検証しました。

この中でわかったことは、GPUの性能は世代やモデルに依存し、各社サービス間では性能に差がないことがわかりました。この結果、コストパフォーマンスを最優先で比較して選定し、その後、クラウド環境含めたセキュリティ等の要件を確認しました。

結論としては、GPU環境はIDCFクラウド ベアメタルサーバーを利用し、ネットワークやフロントのサーバーはIDCFクラウド コンピューティングを利用する構成に決まりました。

環境移行のためのポータビリティ

コストパフォーマンスともう一つ課題だった環境移行は、Dockerを利用することでポータビリティを実現することにしました。

今回、コストパフォーマンスを重視した比較検討をしましたが、今後も常に最適なコストパフォーマンスを追求する必要がありますし、その時の用途に応じてGPUの最新世代や特定のモデルを指定して使いたいケースもでてきます。となると、複数の様々な環境を今後利用していくことすなわちマルチクラウド環境での利用を想定する必要があります。旧環境のように、クラウドサービスのテンプレート機能を利用すると、そのクラウドサービスの中で閉じられてしまいます。

そこで、どこの環境でも利用可能で環境移行もしやすく、開発環境としても適しているDockerを利用することに決めました。nvidia-dockerにより、Docker上からGPUを利用することもできます。

環境移行して良かった点と見えた課題

今回の環境移行の結果、当初の計画通りのメリットが見いだせました。

  • クラウド利用料金が多少下がったうえ、性能は5~6倍向上

当初は学習用途の利用を想定していました。学習には大量のGPUを要しますし、環境としても切り出しやすいので移行しやすいからです。しかし、推論(サービス)用途でも利用しはじめています。ベアメタルサーバーは定額での利用となるため、常時稼働し続ける推論(サービス)用途との相性が良かったのです。

  • Dockerを利用しポータビリティを実現、マルチクラウド化が可能に

Dockerを利用したことで想定外に良かったことは、CUDA(GPUのドライバ等ツール群)のバージョンの取り扱いがやりやすくなったことです。開発者は自由にDeepLearningのフレームワークを利用できるため、必要なCUDAのバージョンもそれぞれ異なるケースがよくあります。このようなときも、開発者がフレームワークとCUDAのバージョンを自由に選択してDockerイメージを作成することができます。

一方で課題もわかってきました。
それまではテンプレートベースだったものをDockerへ変更するため、調整や実作業などは想定以上の大変さがありました。手順を作成したり社内ハンズオンを実施したりして対応しました。

もう一つの課題が、学習用のデータを旧環境から新しいIDCF環境へ移すことでした。しかしこれはデータの転送に時間がかかり過ぎたため断念しました。この問題を解決した、マルチクラウド構成を次に紹介します。

マルチクラウドを実現した構成

次の構成をもとに順に説明していきます。

f:id:ynagaoka:20180921125445p:plain

イメージ管理

①ローカルにてDockerイメージ作成

開発者がそれぞれ自身のマシン上でDockerイメージを作成しています。開発者それぞれで利用するフレームワークなどの環境が異なるので、各自の環境で構築した方が効率が良いそうです。

②Dockerイメージをアップロード(Push)
③Dockerイメージをデプロイ(Pull)

Dockerイメージを管理するリポジトリは、プライベート性と手軽さからGCPのContainer Registryを採用しました。簡単に独自のDockerリポジトリを準備でき、GCP以外の環境からも利用できるのでマルチクラウド環境下の利用に適しています。

Dockerホスト

④IDCFクラウド ベアメタルサーバー 2GPU

Dockerホストとなるのは、IDCFクラウド ベアメタルサーバーです。このベアメタルサーバーには、NVIDIA Tesla P100を2枚搭載しており、マルチGPU利用や複数コンテナで共有など両方の用途での利用が可能です。
また、Dockerによるコンテナ環境のため、サーバーをフル性能で活かすことができるベアメタルサーバーが適しています。なぜならベアメタルサーバー上でコンテナを利用する場合、クラウド環境で利用したときの仮想化によるオーバーヘッドがないからです。

⑤スケールアウト

IDCFクラウド ベアメタルサーバーは決まった台数を定額で利用するサービスのため、クラウドのように今すぐサーバーを増やすという使い方はできません。しかし、ベアメタルサーバーとIDCFクラウドの仮想マシンは同一のネットワークセグメントに接続されているため、クラウドのGPU搭載のマシンタイプを作成することで、急な計算需要に応じてスケールアウトすることができます。Dockerによるポータビリティを活用しているため、利用者から使い勝手は同じように使えます。

⑥nvidia-docker

先述のとおり、nvidia-dockerを入れることで、コンテナ上からGPUを扱うことができます。

ストレージ

⑦Storage GatewayからS3をマウント

移行してわかった課題であるデータ転送時間は、AWS Storage Gatewayを利用することで解決しました。学習用に使うサービス等のログデータは、AWS S3上に蓄積されています。そこで、データを事前にすべて転送することをやめ、Storage Gateway経由でアクセスすることにしました。

⑧学習データをNFSマウント

Storage Gatewayは、ファイルストレージとして利用しNFSでマウントし、各コンテナから利用できます。ファイルの利用のはじめはやはりS3から取ってくる分遅いですが、一度キャッシュされればその後は快適に利用できます。

ジョブ管理

現在は、開発者がそれぞれDockerを起動して利用することが多く、GPUリソースの有効活用と更なるマルチクラウド活用のために、マルチクラウド対応を前提とした独自に開発したジョブ管理システムを導入しています。

まとめ

今回は、リクルートテクノロジーズ様のIDCFクラウド環境を基点としたマルチクラウド構成を紹介しました。GPUを利用する上でのコストパフォーマンスとポータビリティという課題を、Dockerを利用することでマルチクラウド化することで解決しました。

今後のIDCFクラウドには「最新機種の導入などパワフルなサービス開発を期待している」とコメントをいただきました。GPUやDockerを活かすインフラを引き続き提供・開発して期待に応えていきたいです。

Copyright © IDC Frontier Inc.