深層学習のトレーニングには必須となるGPU
弊社ファーストアカウンティングでは、RobotaやRemotaという会計/経理業務を支援するサービス・コンポーネントをSaaSにて提供していますが、このプロダクトの心臓部には物体認識系や、文字認識系、自然言語処理系の様々な深層学習技術を利用しています。
先端技術研究開発部というAI専門チームがありまして、日々情報収集を行いながらモデルの研究と開発、大量の学習やチューニングを行いながら推論精度の向上、サービスの品質を高める努力を続けています。
ディープラーニングの技術をサービスに組み込むには、推論機と呼ばれる機能を作るために事前にアノテーションという準備作業と、正解と不正解を学習する必要があります。学習には膨大な計算の繰り返しを伴いますが、これを高速に実行することができるのがGPUを搭載したマシン(PC/サーバー)です。GPUについての詳しい説明は割愛しますが、GPUは性能的に米国NVIDIA社の独壇場であり、事実上ほぼ他の選択肢はなくてデファクトスタンダードとなっています。なので、金額が非常に高く、一般的に利用されているPCと比べると見た目や構造はそんなに変わりませんが、目が飛び出る程高額なマシンとなっています。
以前はAWSやGCPのGPUを利用していましたが、利用額がいつの間にかヤバいことに。。。
当社のインフラは、オフィスもサービスも基本的にハードウェアを持たずフルクラウドで構成されています。サービスをスタートしてからAWSやGCPを中心に利用しており、オンサイトにはクライアントPCしか配置されていないという構成でした。(サービス開始当時はシェアオフィスという事情もありましたし)
しかし、サービスを利用いただくユーザー様・処理数が急増し、それに伴い提供システム規模も少しづつ大きくなり、サービスの品質を向上させるために学習をブン回し、全力で走った結果、クラウドのGPU利用金額が毎月そこそこの高級車を買えるぐらいの金額に膨れ上がることになり、コレ以上はさすがに。。。という状態になってきました。
機械学習の進化に伴って複雑性を増しモデルが肥大化、トレーニングデータも肥大化、そして学習に時間がかかる。。。もっとサイクルを早くしたい。コストを抑える学習の工夫はいろいろありますが、長期スパンで見れば、いつかは購入したほうがクラウドより安くなるということはわかっていました。ただ、スタートアップ・ベンチャーにはそう簡単に手が出るものではなかったのです。
十分な資金調達ができたタイミングで、まずはAI開発者1人1台利用できるように手元に置けるトレーニング(学習)用GPUマシンを導入することになりました!
設置するにもファシリティのけっこうな準備が必要で
サーバーを設置することを想定していなかったオフィスに、初めてのサーバー型ワークステーションの設置ということで、実はファシリティ面ではいろいろ準備が大変でした。まずは設置場所を空ける必要があり、電源は200V3相が必要になるので工事手配が必要。ラックを利用して積み重ねてしまうと床の耐荷重もオーバーするので平置きで。サーバールームが無いので空調が。。。とか、いろいろ。
ファシリティの手配や準備が予想以上にかかりましたが、2ヶ月程度で何とか設置できる用意ができました。だいたい発注してから納品までに準備できました。
リモートで利用できるようにVPNなどの環境も準備したり
エンジニアの勤務はリモートが基本なので、利用するにはリモートでオフィスのネットワークに接続する必要もあり、VPNの構築などの環境も同時に整備を行いました。画像系のデータなど、かなり大容量のデータを送受信するので最初はTCPベースのHTTPSでしたが、実測ベースでIPSecの方がだいぶ転送速度が早いことがわかり、今ではクライアント側の環境が許容すればみんなIPSecをデフォルトで利用しています。
設置して利用し始めたら、予想を超える学習スピードに感動
AWSでGPUサーバーを利用していた際には、できるだけコスト効率をあげられるようにメモリもGPUも最も目一杯使う構成でマシンを選択し、学習が終わったらすぐ落としたり、交代で次のタスクを詰め詰めで入れたりといった運用をしていて、このスケジューリングも地味に大変でした。現在は手元にマシンがあるから課金されないという安心感、GPUメモリも以前の環境に比べて潤沢に搭載しているということもあり、複数の学習を並列で動かせたり、GPU自体の世代が購入時点で最新のものになり学習効率が数倍にあがり、AIバージョンアップのPDCAサイクルの短縮に繋がりました。
lossが思ったように下がらない時があっても、再学習のやり直しが早いしコストが気にならない!
機械学習のトレーニングでは思ったようにlossが下がらない(予測値と正解値のズレが収まらない→学習が進まない)ということがしばしばあるのですが、そういう場合にはモデル、トレーニングデータやハイパーパラメータなどをチューニングして再度学習をして様子を伺います。平たく言うとトレーニングのやり直しをするわけですが、もちろんこのスピードも早くなり、コストが上がるというストレスもなくなり、品質向上にも貢献できるので、エンジニアとしてはとてもやりやすくなったというわけです。
しかし、思わぬトラブルも発生したりして
導入しているのは1台でけっこうな高級車〜下手すると住宅が買えるよという超高額なマシンです。品質は絶対に問題ないだろうと思ってましたが、ところが最初はいろいろトラブルもありました。急に起動しなくなったり、トレーニング途中で固まったり、NICを認識しなくなったり、販売店のサポート悪くてメーカーも対応がいまいちだったり。。。結局、新品に物理交換したものが1台ありました。普通のPCを購入して初期不良で返品したことは、今までほぼ経験したことがなかったですが、少々驚きました。いいことばかりではなく、そういう想定外のこともあるんだと学びました。
そして、オフィスの端っこに設置してあるので、夏は熱くて、ヤバいほど暑いです。熱暴走を疑う挙動もあったりして、複数の扇風機で風を送ってますが周囲は近づきたくないぐらいに熱くなります。逆に冬は暖かいので、暖房代わりになるといえばそうなのですが温度調節が効かずいつも暑いので、その近くのフリーアドレスデスクは人気がありませんw
さらに買い増し、今ではなくてはならない存在に
ということで、学習用のGPUマシンを購入してエンジニアとしてはとてもよかったですし、サービスにも多大に貢献できていると思います。最近になって、必要になり数台増設をしていますが、今では当社のサービス運用や研究開発になくてはならない存在となりました。
ディープラーニングにおけるGPU技術の影響は非常に大きく、これからも進化していくハードウェアの恩恵を受けてサービスもどんどん進化できると思います。もっともっと安くなって、個人でも手の届くレベルになってくれると更にいろんな応用ができそうで、そうなってくれるといいなと思っています。