GPUFacebookTwitterLinePocketこんにちは藤城(@tafujish)です。今回は事例紹介をしたいと思います。GPU担当として関わらせてもらった案件で、とても興味深かったので是非紹介したいなとお客様へ相談したところ快諾いただきました。何が面白いかと言うと、DeepLearningでの利用を目的としたケースで、マルチクラウド化を実現しているというところです。今回はマルチクラウドに焦点を当てたいため、IDCFクラウドの導入事例ではなくこちらのブログで取り上げて、なぜマルチクラウドなのか、どのような構成なのかをヒアリングさせてもらった内容を私の方から紹介していきたいと思います。今回のかたちでの掲載の承諾と情報提供くださったリクルートテクノロジーズ様に感謝申し上げます。そもそもの課題どんなサービスが動いているか新環境検討のプロセス環境移行のためのポータビリティ環境移行して良かった点と見えた課題マルチクラウドを実現した構成イメージ管理Dockerホストストレージジョブ管理まとめそもそもの課題それまでの旧環境としては、海外のクラウドサービスを利用していたが、DeepLearningを活用したサービスが増えるなか、学習のために大量のGPUが必要になっていきます。すると、インフラコストの中でGPUのコストが大きくなっていくのは避けられませんでした。そこで、コストパフォーマンス良く使えるGPU環境の検討をはじめました。この検討のなかで見えてきたのが、GPU環境のデプロイにクラウドサービス側で提供されるテンプレート機能を利用していたため、環境の移行がやりにくいという課題でした。どんなサービスが動いているかa3rt.recruit-tech.co.jpA3RT(アート)というリクルートグループ内で使われているコグニティブなAPIを無償公開しています。リリース当初から話題になっていたのでご存知の方も多いと思います。このA3RTの中での学習にGPUを大量に利用しています。A3RTのほかにも、R&Dの開発環境の中でも、開発者の方がGPUを自由に利用することができ、ここでも学習用途での利用にGPUを利用しており、GPUの使用量は多くなる一方です。新環境検討のプロセス上述のとおり、コストパフォーマンス良く使える環境の検討では、各社サービスを試用し比較評価しました。評価方法としては、既存の環境で利用してきた学習プログラムを実行し、その性能と料金からコストパフォーマンスを比較します。この中で、GPUの世代やモデルも変えて検証しました。この中でわかったことは、GPUの性能は世代やモデルに依存し、各社サービス間では性能に差がないことがわかりました。この結果、コストパフォーマンスを最優先で比較して選定し、その後、クラウド環境含めたセキュリティ等の要件を確認しました。コンピューティングを利用する構成に決まりました。環境移行のためのポータビリティコストパフォーマンスともう一つ課題だった環境移行は、Dockerを利用することでポータビリティを実現することにしました。今回、コストパフォーマンスを重視した比較検討をしましたが、今後も常に最適なコストパフォーマンスを追求する必要がありますし、その時の用途に応じてGPUの最新世代や特定のモデルを指定して使いたいケースもでてきます。なると、複数の様々な環境を今後利用していくことすなわちマルチクラウド環境での利用を想定する必要があります。旧環境のように、クラウドサービスのテンプレート機能を利用すると、そのクラウドサービスの中で閉じられてしまいます。そこで、どこの環境でも利用可能で環境移行もしやすく、開発環境としても適しているDockerを利用することに決めました。nvidia-dockerにより、Docker上からGPUを利用することもできます。今回の環境移行の結果、当初の計画通りのメリットが見いだせました。当初は学習用途の利用を想定していました。学習には大量のGPUを要しますし、環境としても切り出しやすいので移行しやすいからです。推論(サービス)用途でも利用しはじめています。ベアメタルサーバーは定額での利用となるため、常時稼働し続ける推論(サービス)用途との相性が良かったのです。Dockerを利用しポータビリティを実現、マルチクラウド化が可能にDockerを利用したことで想定外に良かったことは、CUDA(GPUのドライバ等ツール群)のバージョンの取り扱いがやりやすくなったことです。開発者は自由にDeepLearningのフレームワークを利用できるため、必要なCUDAのバージョンもそれぞれ異なるケースがよくあります。このようなときも、開発者がフレームワークとCUDAのバージョンを自由に選択してDockerイメージを作成することができます。一方で課題もわかってきました。それまではテンプレートベースだったものをDockerへ変更するため、調整や実作業などは想定以上の大変さがありました。手順を作成したり社内ハンズオンを実施したりして対応しました。一つの課題が、学習用のデータを旧環境から新しいIDCF環境へ移すことでした。これはデータの転送に時間がかかり過ぎたため断念しました。この問題を解決した、マルチクラウド構成を次に紹介します。次の構成をもとに順に説明していきます。開発者がそれぞれ自身のマシン上でDockerイメージを作成しています。開発者それぞれで利用するフレームワークなどの環境が異なるので、各自の環境で構築した方が効率が良いそうです。Registryを採用しました。簡単に独自のDockerリポジトリを準備でき、GCP以外の環境からも利用できるのでマルチクラウド環境下の利用に適しています。ベアメタルサーバーです。P100を2枚搭載しており、マルチGPU利用や複数コンテナで共有など両方の用途での利用が可能です。Dockerによるコンテナ環境のため、サーバーをフル性能で活かすことができるベアメタルサーバーが適しています。ベアメタルサーバー上でコンテナを利用する場合、クラウド環境で利用したときの仮想化によるオーバーヘッドがないからです。ベアメタルサーバーは決まった台数を定額で利用するサービスのため、クラウドのように今すぐサーバーを増やすという使い方はできません。ベアメタルサーバーとIDCFクラウドの仮想マシンは同一のネットワークセグメントに接続されているため、クラウドのGPU搭載のマシンタイプを作成することで、急な計算需要に応じてスケールアウトすることができます。Dockerによるポータビリティを活用しているため、利用者から使い勝手は同じように使えます。6nvidia-docker先述のとおり、nvidia-dockerを入れることで、コンテナ上からGPUを扱うことができます。Gatewayを利用することで解決しました。S3上に蓄積されています。Gateway経由でアクセスすることにしました。Gatewayは、ファイルストレージとして利用しNFSでマウントし、各コンテナから利用できます。ファイルの利用のはじめはやはりS3から取ってくる分遅いですが、一度キャッシュされればその後は快適に利用できます。現在は、開発者がそれぞれDockerを起動して利用することが多く、GPUリソースの有効活用と更なるマルチクラウド活用のために、マルチクラウド対応を前提とした独自に開発したジョブ管理システムを導入しています。まとめ今回は、リクルートテクノロジーズ様のIDCFクラウド環境を基点としたマルチクラウド構成を紹介しました。GPUを利用する上でのコストパフォーマンスとポータビリティという課題を、Dockerを利用することでマルチクラウド化することで解決しました。今後のIDCFクラウドには「最新機種の導入などパワフルなサービス開発を期待している」とコメントをいただきました。GPUやDockerを活かすインフラを引き続き提供・開発して期待に応えていきたいです。読者になる関連記事2022-09-28CentOS後継としてRockyを選択した理由こんにちは、藤城(@tafujish)です。コンテナ」サービスで作るプライベートレジストリはじめまして、事業推進本部SE部の横田です。触ってみた初めまして、こんにちは。Inc.▲はてなブログをはじめよう!blog-idcfさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。